#pragma once #include #include #include #include ".\Vector.h" #include #include "NxPhysics.h" #include class Renderer; class Scene; class GameManager; class Quad; #define SPTR boost::shared_ptr #define WPTR boost::weak_ptr class Node { public: friend class Scene; Node(void); ~Node(void); void setBehaveAs(int _behaveAs); virtual void setRenderer(SPTR &_myRenderer); virtual void removeRenderer(); virtual SPTR getRenderer(); bool hasRenderer(); virtual void translate(float dx, float dy, float dz); virtual void translate(Vector &tv); virtual void rotate(float dalpha, float dbeta, float dgamma); virtual void setPosition(float x, float y, float z); virtual void setPosition(Vector &p); virtual void setRotation(float alpha, float beta, float gamma); virtual void setRotation(Vector &r); Vector getPosition(); float getRotationX(); float getRotationY(); float getRotationZ(); std::list >::iterator addChild(SPTR _child); virtual void removeChild(std::list >::iterator _it); virtual void removeChild(SPTR _child); virtual void removeAllChildren(); virtual void killMe(); virtual void update(float dt); virtual void calcWorldMatrix(D3DXMATRIX &pMatWorld); void setWorldMatrix(D3DXMATRIXA16 &worldMatrix); D3DXMATRIXA16* getWorldMatrix(); virtual void getAbsoluteVector(Vector &pOut, Vector &pin); virtual void getAbsoluteDirectionVector(Vector &dirOut, Vector &dirIn); Vector getAbsolutePosition(); Vector* getAbsMinBBox(); Vector* getAbsMaxBBox(); Vector getAbsBoxCenter(); virtual void updateBBox(); virtual void setDetail(Vector ObjectCenter); void setScene(Scene &scene); void setVisible(bool _visible); bool isVisible(); void setStandBy(bool _standBy); bool onStandBy(); Scene *myScene; Vector myPosition; Vector myRotation; Node* getFather(); std::list > * getChildren(); //Physic Stuff static const int NORMAL = 0; static const int STATIC = 1; static const int KINEMATIC = 2; static const int RIGIDBODY = 3; static const int PARTICLE = 4; NxActorDesc* getActorDescriptor(); NxBodyDesc* getBodyDescriptor(); NxActor* getActor(); void setPMaterial(int id); void setColDetGroup(int group); //Particle Stuff virtual void setParticleGroup(int _group); int getParticleGroup(); virtual Node* clone(); virtual void setTimeToLive(float _timeToLive); float getTimeToLive(); virtual void cloneChildren(Node *clonedNode); void orientAndMove(Vector direction, Vector upVec, Vector moveVec, bool moveRelative = true); Vector minAABBox; Vector maxAABBox; Vector absMinAABBox; Vector absMaxAABBox; Vector absBoxCenter; virtual void OnLostDevice( void* pUserContext ); virtual void OnDestroyDevice( void* pUserContext ); virtual HRESULT OnResetDevice( IDirect3DDevice9* pd3dDevice, const D3DSURFACE_DESC* pBackBufferSurfaceDesc, void* pUserContext ); bool testAgainstFrustum; bool isA(int _nodeType); void* userData; void clonePhysicStuff(Node* obj); bool doingSoftKill; float softKillAlpha; virtual void setSoftKill(bool _softKill, float _duration = 1.0f); bool getSoftKill(); float camDistance; friend class Quad; friend class ResourceManager; protected: int nodeType; //Jede Node die auf StandBy=true ist, wird überhaupt nicht beachtet. Aktivierung durch explizites setzen oder Trigger(siehe goodie) bool standBy; //Soll updateMethode aufgerufen werden? bool updateMe; //Soll Node gezeichnet werden? bool visible; //Ist die vorhandene Node ein clon? bool aClone; //Calc Boundingbox of this Node bool calcBoundingBox; bool softKill; float softKillDuration; Node *father; int behaveAs; std::list > children; bool rendererAdded; SPTR myRenderer; D3DXMATRIXA16 myWorldMatrix; bool bOverrideWorldMatrix; void calcStaticPhysicWorldMatrix(); void calcNormalWorldMatrix(D3DXMATRIX &pMatWorld); void calcKinematicWorldMatrix(D3DXMATRIX &pMatWorld); virtual void calcPhysicWorldMatrix(D3DXMATRIX &pMatWorld); //Phyisc Stuff NxActorDesc pActorDesc; NxBodyDesc pBodyDesc; NxActor* pActor; int pMaterialId; int pColDetGroup; //Particle Stuff int particleGroup; float timeToLive; float maxAge; Vector myAbsPos; Vector corner[8]; //Fuer BoundingBox };