//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #ifndef _PATHCAMERA_H_ #define _PATHCAMERA_H_ #ifndef _SHAPEBASE_H_ #include "game/shapeBase.h" #endif #ifndef _CAMERASPLINE_H_ #include "game/cameraSpline.h" #endif //---------------------------------------------------------------------------- struct PathCameraData: public ShapeBaseData { typedef ShapeBaseData Parent; // DECLARE_CONOBJECT(PathCameraData); static void consoleInit(); static void initPersistFields(); virtual void packData(BitStream* stream); virtual void unpackData(BitStream* stream); }; //---------------------------------------------------------------------------- class PathCamera: public ShapeBase { public: enum State { Forward, Backward, Stop, StateBits = 3 }; private: typedef ShapeBase Parent; enum MaskBits { WindowMask = Parent::NextFreeMask, PositionMask = Parent::NextFreeMask + 1, TargetMask = Parent::NextFreeMask + 2, StateMask = Parent::NextFreeMask + 3, NextFreeMask = Parent::NextFreeMask << 1 }; struct StateDelta { F32 time; F32 timeVec; }; StateDelta delta; enum Constants { NodeWindow = 20 // Maximum number of active nodes }; // PathCameraData* mDataBlock; CameraSpline mSpline; S32 mNodeBase; S32 mNodeCount; F32 mPosition; int mState; F32 mTarget; bool mTargetSet; void interpolateMat(F32 pos,MatrixF* mat); void advancePosition(S32 ms); public: DECLARE_CONOBJECT(PathCamera); PathCamera(); ~PathCamera(); static void initPersistFields(); static void consoleInit(); void onEditorEnable(); void onEditorDisable(); bool onAdd(); void onRemove(); bool onNewDataBlock(GameBaseData* dptr); void onNode(S32 node); void processTick(const Move*); void interpolateTick(F32 dt); void getCameraTransform(F32* pos,MatrixF* mat); void renderImage(SceneState* state, SceneRenderImage*); U32 packUpdate(NetConnection *, U32 mask, BitStream *stream); void unpackUpdate(NetConnection *, BitStream *stream); void reset(F32 speed = 1); void pushFront(CameraSpline::Knot *knot); void pushBack(CameraSpline::Knot *knot); void popFront(); void setPosition(F32 pos); void setTarget(F32 pos); void setState(State s); }; #endif