//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #ifndef _SIMPATH_H_ #define _SIMPATH_H_ #ifndef _SCENEOBJECT_H_ #include "sim/sceneObject.h" #endif //-------------------------------------------------------------------------- /// A path! class Path : public SimGroup { typedef SimGroup Parent; public: enum { NoPathIndex = 0xFFFFFFFF }; private: U32 mPathIndex; bool mIsLooping; protected: bool onAdd(); void onRemove(); public: Path(); ~Path(); void addObject(SimObject*); void removeObject(SimObject*); void sortMarkers(); void updatePath(); bool isLooping() { return mIsLooping; } U32 getPathIndex() const; DECLARE_CONOBJECT(Path); static void initPersistFields(); }; //-------------------------------------------------------------------------- class Marker : public SceneObject { typedef SceneObject Parent; friend class Path; public: enum { SmoothingTypeLinear, SmoothingTypeSpline, SmoothingTypeAccelerate, }; enum { KnotTypeNormal, KnotTypePositionOnly, KnotTypeKink, }; U32 mSeqNum; U32 mSmoothingType; U32 mKnotType; U32 mMSToNext; // Rendering protected: bool prepRenderImage(SceneState *state, const U32 stateKey, const U32 startZone, const bool modifyBaseZoneState); void renderObject(SceneState *state, SceneRenderImage *image); protected: bool onAdd(); void onRemove(); void onGroupAdd(); void onEditorEnable(); void onEditorDisable(); public: Marker(); ~Marker(); DECLARE_CONOBJECT(Marker); static void initPersistFields(); void inspectPostApply(); U32 packUpdate (NetConnection *conn, U32 mask, BitStream *stream); void unpackUpdate(NetConnection *conn, BitStream *stream); }; //-------------------------------------------------------------------------- //-------------------------------------------------------------------------- inline U32 Path::getPathIndex() const { return mPathIndex; } #endif // _H_PATH