#pragma once #include "Matrix4.h" #include "Vector3.h" #include "Vector4.h" #include "Mesh.h" #include class SceneNode { public: SceneNode(Mesh* m = NULL, Vector4 colour = Vector4(1, 1, 1, 1)); ~SceneNode(void); void SetTransform(const Matrix4& matrix) { transform = matrix; } const Matrix4& GetTransform() const { return transform; } Matrix4 GetWorldTransform() const { return worldTransform; } Vector4 GetColour() const { return colour; } void SetColour(Vector4 c) { colour = c; } Vector3 GetModelScale() const { return modelScale; } void SetModelScale(Vector3 s) { modelScale = s; } Mesh* GetMesh() const { return mesh; } void SetMesh(Mesh* m) { mesh = m; } float GetBounudingRadius() const { return boundingRadius; } void SetBoundingRadius(float f) { boundingRadius = f; } GLuint GetTexture() const { return texture; } void SetTexture(GLuint tex) { texture = tex; } GLuint GetBumpMap() const { return mesh->GetBumpMap(); } void SetBumpMap(GLuint tex) { mesh->SetBumpMap(tex); } float GetCameraDistance() const { return distanceFromCamera; } void SetCameraDistance(float f) { distanceFromCamera = f; } static bool CompareByCameraDistance(SceneNode* a, SceneNode* b) { return (a->distanceFromCamera < b->distanceFromCamera) ? true : false; } Shader* GetShader() const { return shader; } void SetShader(Shader* s) { shader = s; } void AddChild(SceneNode* s); void RemoveChild(SceneNode* s); virtual void Update(float dt); virtual void Draw(const OGLRenderer& r); std::vector::const_iterator GetChildIteratorStart() { return children.begin(); } std::vector::const_iterator GetChildIteratorEnd() { return children.end(); } protected: SceneNode* parent; Mesh* mesh; Matrix4 worldTransform; Matrix4 transform; Vector3 modelScale; Vector4 colour; std::vector children; float distanceFromCamera; float boundingRadius; GLuint texture; Shader* shader = NULL; };