razerHydraFrameStore.cpp
Engine/source/platform/input/razerHydra/razerHydraFrameStore.cpp
Public Variables
Detailed Description
Public Variables
MODULE_END
MODULE_INIT
MODULE_SHUTDOWN
1 2// 3// Permission is hereby granted, free of charge, to any person obtaining a copy 4// of this software and associated documentation files (the "Software"), to 5// deal in the Software without restriction, including without limitation the 6// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 7// sell copies of the Software, and to permit persons to whom the Software is 8// furnished to do so, subject to the following conditions: 9// 10// The above copyright notice and this permission notice shall be included in 11// all copies or substantial portions of the Software. 12// 13// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 18// FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 19// IN THE SOFTWARE. 20//----------------------------------------------------------------------------- 21 22#include "platform/input/razerHydra/razerHydraFrameStore.h" 23#include "platform/input/razerHydra/razerHydraFrame.h" 24#include "core/module.h" 25#include "console/simSet.h" 26#include "console/consoleTypes.h" 27 28MODULE_BEGIN( RazerHydraFrameStore ) 29 30 MODULE_INIT_AFTER( RazerHydraDevice ) 31 MODULE_INIT_AFTER( Sim ) 32 MODULE_SHUTDOWN_BEFORE( Sim ) 33 MODULE_SHUTDOWN_BEFORE( RazerHydraDevice ) 34 35 MODULE_INIT 36 { 37 RazerHydraFrameStore::staticInit(); 38 ManagedSingleton< RazerHydraFrameStore >::createSingleton(); 39 } 40 41 MODULE_SHUTDOWN 42 { 43 ManagedSingleton< RazerHydraFrameStore >::deleteSingleton(); 44 } 45 46MODULE_END; 47 48S32 RazerHydraFrameStore::smMaximumFramesStored = 30; 49 50SimGroup* RazerHydraFrameStore::smFrameGroup = NULL; 51 52RazerHydraFrameStore::RazerHydraFrameStore() 53{ 54 // Set up the SimGroup to store our frames 55 smFrameGroup = new SimGroup(); 56 smFrameGroup->registerObject("RazerHydraFrameGroup"); 57 smFrameGroup->setNameChangeAllowed(false); 58 Sim::getRootGroup()->addObject(smFrameGroup); 59} 60 61RazerHydraFrameStore::~RazerHydraFrameStore() 62{ 63 if(smFrameGroup) 64 { 65 smFrameGroup->deleteObject(); 66 smFrameGroup = NULL; 67 } 68} 69 70void RazerHydraFrameStore::staticInit() 71{ 72 Con::addVariable("RazerHydra::MaximumFramesStored", TypeS32, &smMaximumFramesStored, 73 "@brief The maximum number of frames to keep when $RazerHydra::GenerateWholeFrameEvents is true.\n\n" 74 "@ingroup Game"); 75} 76 77S32 RazerHydraFrameStore::generateNewFrame(const sixenseAllControllerData& frame, const F32& maxAxisRadius) 78{ 79 // Make sure our group has been created 80 if(!smFrameGroup) 81 return 0; 82 83 // Either create a new frame object or pull one off the end 84 S32 frameID = 0; 85 if(smFrameGroup->size() >= smMaximumFramesStored) 86 { 87 // Make the last frame the first and update 88 RazerHydraFrame* frameObj = static_cast<RazerHydraFrame*>(smFrameGroup->last()); 89 smFrameGroup->bringObjectToFront(frameObj); 90 frameObj->copyFromFrame(frame, maxAxisRadius); 91 frameID = frameObj->getId(); 92 } 93 else 94 { 95 // Create a new frame and add it to the front of the list 96 RazerHydraFrame* frameObj = new RazerHydraFrame(); 97 frameObj->registerObject(); 98 smFrameGroup->addObject(frameObj); 99 smFrameGroup->bringObjectToFront(frameObj); 100 frameObj->copyFromFrame(frame, maxAxisRadius); 101 frameID = frameObj->getId(); 102 } 103 104 return frameID; 105} 106