//----------------------------------------------------------------------------- // Torque Game Engine // Copyright (C) GarageGames.com, Inc. //----------------------------------------------------------------------------- #ifndef _H_PHYSICALZONE #define _H_PHYSICALZONE #ifndef _SCENEOBJECT_H_ #include "sim/sceneObject.h" #endif #ifndef _EARLYOUTPOLYLIST_H_ #include "collision/earlyOutPolyList.h" #endif #ifndef _H_TRIGGER #include "game/trigger.h" #endif class Convex; // ------------------------------------------------------------------------- class PhysicalZone : public SceneObject { typedef SceneObject Parent; protected: bool onAdd(); void onRemove(); enum UpdateMasks { InitialUpdateMask = 1 << 0, ActiveMask = 1 << 1 }; public: void setTransform(const MatrixF &mat); protected: F32 mVelocityMod; F32 mGravityMod; Point3F mAppliedForce; // Basically ripped from trigger Polyhedron mPolyhedron; EarlyOutPolyList mClippedList; bool mActive; Convex* mConvexList; void buildConvex(const Box3F& box, Convex* convex); public: PhysicalZone(); ~PhysicalZone(); F32 getVelocityMod() const { return mVelocityMod; } F32 getGravityMod() const { return mGravityMod; } const Point3F& getForce() const { return mAppliedForce; } void setPolyhedron(const Polyhedron&); bool testObject(SceneObject*); void activate(); void deactivate(); bool isActive() const { return mActive; } DECLARE_CONOBJECT(PhysicalZone); static void initPersistFields(); U32 packUpdate (NetConnection *conn, U32 mask, BitStream *stream); void unpackUpdate(NetConnection *conn, BitStream *stream); }; #endif // _H_PHYSICALZONE