From: Peter Schaefer Date: Mon, 27 Apr 2015 10:27:59 +0000 (+0200) Subject: moved Scene to own directiory X-Git-Url: https://git.leopard-lacewing.eu/?a=commitdiff_plain;h=54adf3ec925001f98f439f0ff688e55dc3387d27;p=cgue_weave.git moved Scene to own directiory --- diff --git a/Weave/Game.cpp b/Weave/Game.cpp index b416b24..5a07f67 100644 --- a/Weave/Game.cpp +++ b/Weave/Game.cpp @@ -10,8 +10,8 @@ #include #include -#include "Graphix\Scene.h" -#include "Graphix\SceneObject.h" +#include "Scene\Scene.h" +#include "Scene\SceneObject.h" #include "Graphix\Shader.h" #include "Graphix\Graphix.h" #include "Fps.h" diff --git a/Weave/Graphix/Scene.cpp b/Weave/Graphix/Scene.cpp deleted file mode 100644 index 18cefb4..0000000 --- a/Weave/Graphix/Scene.cpp +++ /dev/null @@ -1,214 +0,0 @@ -#include "Scene.h" - -#include "GLM.h" -#include - -#include "../Message.h" -#include - -#include "../Events.h" - -#include "Shader.h" - -#define TIME_TILL_MAX_MOVE 2 -#define TIME_TILL_DIRECTION_ROTATE 1 - -#define SPEED_MOVE_NORMAL 1.5f -#define MOVE_FASTER 2.f - -/* -Scene::Scene() : - SceneObjects(new list), - ShaderSet(new set), - newObjects(true) -{ -}*/ - -Scene::Scene(unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* _lookat) : -viewPort(new ViewPort(x, y, width, height, fovy, zNear, zFar)), - SceneObjects(new list), - ShaderSet(new set), - newObjects(true), - lookat(_lookat), - move_delta(0) -{ - - -} - -Scene::Scene(Scene* _Scene, unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* _lookat) : -viewPort(new ViewPort(x, y, width, height, fovy, zNear, zFar)), - SceneObjects(_Scene->SceneObjects), - ShaderSet((_Scene->ShaderSet)), - newObjects(false), - lookat(_lookat), - move_delta(0) -{ -} - -Scene::Scene(Scene* _Scene) : - SceneObjects(_Scene->SceneObjects), - ShaderSet((_Scene->ShaderSet)), - newObjects(false), - move_delta(0) -{ -} - - -Scene::~Scene() -{ - if (newObjects){ - for (auto i = SceneObjects->begin(); i != SceneObjects->end(); ++i) - { - delete (*i); - } - delete SceneObjects; - delete ShaderSet; - } - - - if (viewPort != nullptr) - delete viewPort; -} - - - - -void Scene::update(float deltaT) -{ - vec3 pos; - //Focus auf Player - - if (lookat != NULL){ - pos = lookat->getPosition(); - } - - int move_x = Events::getMoveX(); - int move_y = Events::getMoveY(); - //int shoot = Events::getAction1(); - //int reset = Events::getAction2(); - - // XYAchse um den Player - viewPort->rotateView(0.002f*Events::getViewX(), 0.001f*Events::getViewY()); - - //Jump - if (Events::getJump() && lookat->floorBound()) - lookat->ySpeed += 5.5; - //else if (!Events::isKHeld(SDLK_SPACE) && lookat->ySpeed>0) - // lookat->ySpeed = 0; - - // MOVE Player - if (move_x) - lookat->move(SPEED_MOVE_NORMAL *move_x * deltaT * viewPort->rotateDirection(vec3(-1.f, 0.f, 0.f))); - - if (move_y){ - if (move_y > 0){ - if (move_delta < TIME_TILL_MAX_MOVE) - move_delta += deltaT; - if (move_delta > TIME_TILL_MAX_MOVE) - move_delta = TIME_TILL_MAX_MOVE; - lookat->move(SPEED_MOVE_NORMAL * (MOVE_FASTER * move_delta / TIME_TILL_MAX_MOVE + 1) *move_y * deltaT * viewPort->rotateDirection(vec3(0.f, 0.f, -1.f))); - } - else - lookat->move(SPEED_MOVE_NORMAL *move_y * deltaT * viewPort->rotateDirection(vec3(0.f, 0.f, -1.f))); - } - else - { - move_delta = 0; - } - - //Rotate Play in move direction - - if (move_x || move_y) - lookat->turnTo(viewPort->rotateDirection(vec3(0.f, 0.f, -1.f)),3*deltaT/TIME_TILL_DIRECTION_ROTATE); - - - //// Zoom auf Player - //if (Events::getViewZ()) - //{ - //// float dist = 0; - //// if (lookat!=NULL) - //// dist = VektorAbs(getViewerPos() - lookat->getPosition()); - //// if (true) - // view = translate( vec3(0.f,0.f,(float)(5*deltaT *sign(Events::getViewZ()))))*view; - // //view = view*scale(vec3((float)(1 + deltaT * sign(Events::getViewZ())))); - //} - - // Alle Objekte der Scene aktualisieren - if (newObjects) - { - for (auto i = SceneObjects->begin(); i != SceneObjects->end(); ++i) - { - (*i)->update(deltaT); - } - - - for (auto i = SceneObjects->begin(); i != SceneObjects->end(); ++i) - { - auto j = i; - for (j++; j != SceneObjects->end(); ++j) - { - (*i)->collisions(*j); - } - } - - - } - -} - -void Scene::draw() const -{ - viewPort->useViewPort(); - - for (auto i = ShaderSet->cbegin(); i != ShaderSet->cend(); ++i) - { - viewPort->bindView(*i,lookat->getPosition()+vec3(0.0f,1.0f,0.0f)); - - //don't know if this is really the right place to set the lighting - //add ambient light - //GLfloat ambientcolor[] = { 0.5f, 0.5f, 0.5f, 1.0f }; - //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientcolor); - - //add positioned light - //GLfloat lightcolor0[] = { 1.5f, 1.5f, 1.5f, 1.0f }; - //GLfloat lightposition0[] = { 1.0f, 1.0f, 1.0f, 1.0f }; - //glLightfv(GL_LIGHT0, GL_DIFFUSE, lightcolor0); - //glLightfv(GL_LIGHT0, GL_POSITION, lightposition0); - } - - - - - - - - for (auto i = SceneObjects->cbegin(); i != SceneObjects->cend(); ++i) - { - (*i)->draw(); - } -} - -void Scene::addObject(SceneObject* _add) -{ - SceneObjects->push_back(_add); - ShaderSet->insert(_add->getShader()); - _add->setMainScene(this); -} - -void Scene::deleteObject(SceneObject* _del) -{ - SceneObjects->remove(_del); -} - - -list* Scene::getSceneObjects() -{ - return SceneObjects; -} - - -void Scene::setLookAt(SceneObject* _lookat) -{ - lookat = _lookat; -} \ No newline at end of file diff --git a/Weave/Graphix/Scene.h b/Weave/Graphix/Scene.h deleted file mode 100644 index bf395f3..0000000 --- a/Weave/Graphix/Scene.h +++ /dev/null @@ -1,47 +0,0 @@ -#pragma once - -#include "ViewPort.h" -#include "SceneObject.h" -#include "GLM.h" - -#include -#include - -using std::list; -using std::set; - -typedef list SceneList; - -class Scene -{ -public: - //Scene(); - Scene(unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* lookat = NULL); - __declspec(deprecated) - Scene(Scene*); - __declspec(deprecated) - Scene(Scene* _Scene, unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* lookat = NULL); - virtual ~Scene(); - - virtual void update(float); - virtual void draw() const; - - void addObject(SceneObject*); - void deleteObject(SceneObject*); - - SceneList* getSceneObjects(); - - void setLookAt(SceneObject* _lookat); - -protected: - ViewPort* viewPort; - - SceneObject* lookat; - - - bool newObjects; - SceneList* SceneObjects; - set* ShaderSet; - - float move_delta; -}; diff --git a/Weave/Graphix/SceneObject.cpp b/Weave/Graphix/SceneObject.cpp deleted file mode 100644 index 1e1948b..0000000 --- a/Weave/Graphix/SceneObject.cpp +++ /dev/null @@ -1,231 +0,0 @@ -#include "SceneObject.h" - -#include -#include "GLM.h" - -#include "../Message.h" -#include - -#include - -#include "Shader.h" -#include "Scene.h" -#include "Texture.h" - -#include "Model.h" - -#include "Graphix.h" - -#include "../Events.h" - -using std::string; - -using std::cout; -using std::endl; - - -#define YFALL_SPEED 9.8f - -SceneObject::SceneObject(Shader* _shader, mat4& _modelMat, string _modelpath, string texturepath, unsigned int _model_index) : -model(new IMetaMesh(_modelpath)), -modelMat(_modelMat), -shader(_shader), -mainScene(NULL), -collision_ignore(false), -texture(nullptr), -ySpeed(0), -yStatic(true) -{ - //Message::info("Error from befor?"); - //Graphix::getGlError(); - // new IMetaMesh(_modelpath); - //Message::info("Creating modelMat"); - //Graphix::getGlError(); - //modelID = _shader->getUniformLocation("modelMat"); - if (texturepath != "") - texture = new Texture(texturepath); - //Message::info("Creating SkyBox Shader"); - //Graphix::getGlError(); - - model->bindShader(shader); - //Message::info("Binding Shader"); - //Graphix::getGlError(); - //Message::info("Done"); - -} - -SceneObject::SceneObject(Shader* _shader, mat4& _modelMat, Model* _model, string texturepath) : -model(_model), -modelMat(_modelMat), -shader(_shader), -mainScene(NULL), -collision_ignore(false), -texture(nullptr), -ySpeed(0), -yStatic(true) -{ - //Message::info("Error from befor?"); - //Graphix::getGlError(); - // new IMetaMesh(_modelpath); - //Message::info("Creating modelMat"); - //Graphix::getGlError(); - //modelID = _shader->getUniformLocation("modelMat"); - if (texturepath != "") - texture = new Texture(texturepath); - //Message::info("Creating SkyBox Shader"); - //Graphix::getGlError(); - - model->bindShader(shader); - //Message::info("Binding Shader"); - //Graphix::getGlError(); - //Message::info("Done"); - -} - -//SceneObject::SceneObject(Shader* _shader, mat4& _modelMat, IMesh* model_obj, string texturepath) : -//IMesh(*model_obj), -//modelMat(_modelMat), -//shader(_shader), -//mainScene(NULL), -//collision_ignore(false), -//texture(nullptr) -//{ -// modelID = _shader->getUniformLocation("modelMat"); -// if (texturepath != "") -// texture = new Texture(texturepath); -// -// bindShader(shader); -//} - - -SceneObject::~SceneObject() -{ - // delete texture; -} - -float SceneObject::getFloor() const -{ - return 0; -} - -void SceneObject::update(float deltaT) -{ - - if (!yStatic) - { - vec3 pos = getPosition(); - if (!floorBound() || ySpeed!=0) - { - if (pos.y + ySpeed*deltaT > getFloor()) - modelMat = translate(vec3(0.f, ySpeed*deltaT, 0.f))*modelMat; - else - { - modelMat = translate(vec3(0.f, getFloor() - pos.y, 0.f))*modelMat; - ySpeed = 0; - } - ySpeed -= deltaT*YFALL_SPEED; - } - - } - - - //modelMat = scale(modelMat, vec3(matter)); - //modelMat = (deltaT * spin) * modelMat; //TODO drehen scheint nicht zu funktionieren - -} - -void SceneObject::draw() const -{ - // useModel(shader); - - // useTexture(texture, shader); - - // useMMatrix(modelMat,shader); - - // glUniform1i(shader->getUniformLocation ("inv"), 1); - - // drawModel(); - - model->drawModel(shader, texture, modelMat); - if (Events::isKToggleActive(SDLK_F6)) - model->drawBBox(shader, modelMat); -} - -void SceneObject::collisions(SceneObject* _other) -{ - if (collision_ignore || _other->collision_ignore) - return; - -} - -bool SceneObject::floorBound() const -{ - vec3 pos = getPosition(); - return (pos.y <= getFloor()); -} - -vec3 SceneObject::getPosition() const -{ - return vec3(modelMat[3]); -} - - -void SceneObject::setModel(mat4& _modelMat){ - modelMat = _modelMat; -} - -void SceneObject::turn(float angle, vec3& axis){ - //vec3 pos = getPosition(); - //modelMat = rotate(degree, axis)*modelMat; - //modelMat = modelMat*translate(pos - getPosition()); - modelMat = modelMat * rotate(angle, axis); -} - -void SceneObject::turnTo(vec3& direction, float speed){ - vec3 pos = getPosition(); - float perc = 1; - modelMat = translate(-pos) * modelMat; - float rot_angle = orientedAngle(normalize((vec3)(modelMat * vec4(0.f, 0.f, 1.f, 1.f))), direction, vec3(0.f, 1.f, 0.f)); - - if (abs(rot_angle) / M_PI > speed) - perc = speed / abs(rot_angle) * (float)M_PI; - - modelMat = rotate(rot_angle *perc, vec3(0.f, 1.f, 0.f)) * modelMat; - modelMat = translate(pos) * modelMat; -} - -void SceneObject::move(vec3& dist){ - modelMat = translate(dist) * modelMat; -} - - - - -void SceneObject::setCollision(bool _col) -{ - collision_ignore = !_col; -} - - -//bool SceneObject::operator==(SceneObject _ref) -//{ -// return (this == &_ref); -//} - -//SceneObject* SceneObject::copy() -//{ -// return new SceneObject(shader, modelMat, modelpath, *texture); -//} -// - - -void SceneObject::setMainScene(Scene* _scene) -{ - mainScene = _scene; -} - - -Shader* SceneObject::getShader() -{ - return shader; -} diff --git a/Weave/Graphix/SceneObject.h b/Weave/Graphix/SceneObject.h deleted file mode 100644 index 9d11ad7..0000000 --- a/Weave/Graphix/SceneObject.h +++ /dev/null @@ -1,83 +0,0 @@ -#pragma once - -#include "GLM.h" - -#include - -using std::string; - -class Scene; -class Texture; -class Shader; -class Model; - -//class string; - -class SceneObject -{ -public: - - //SceneObject(Shader* _shader, mat4& model); - SceneObject(Shader* _shader, mat4& model, string modelpath, string texturepath, unsigned int model_index=0); - - SceneObject(Shader* _shader, mat4& modelMat, Model* model, string texturepath); - - //SceneObject(Shader* _shader, mat4& model, IMesh* model_obj, string texturepath); - virtual ~SceneObject(); - - virtual void update(float); - virtual void draw() const; - - virtual void collisions(SceneObject*); - - virtual vec3 getPosition() const; - - __declspec(deprecated) - virtual void setModel(mat4&); - __declspec(deprecated) - virtual void turn(float angle, vec3& axis); - virtual void turnTo(vec3& direction, float speed = 1); - virtual void move(vec3& dist); - - //virtual bool operator==(SceneObject); - - void setMainScene(Scene *); - - void setCollision(bool); - - Shader* getShader(); - - __declspec(deprecated) - void setEnemy(bool isenemy); - __declspec(deprecated) - bool isEnemy(); - - - bool floorBound() const; - float getFloor() const; - - bool yStatic; - float ySpeed; - -protected: - - void setMatter(float); - - mat4 modelMat; - - - //__declspec(deprecated) - //unsigned int modelID; - - Shader* shader; - - Scene* mainScene; - - bool collision_ignore; - - Texture* texture; - - Model* model; - -}; - diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp new file mode 100644 index 0000000..19f8ce9 --- /dev/null +++ b/Weave/Scene/Scene.cpp @@ -0,0 +1,214 @@ +#include "Scene.h" + +#include "../Graphix/GLM.h" +#include + +#include "../Message.h" +#include + +#include "../Events.h" + +#include "../Graphix/Shader.h" + +#define TIME_TILL_MAX_MOVE 2 +#define TIME_TILL_DIRECTION_ROTATE 1 + +#define SPEED_MOVE_NORMAL 1.5f +#define MOVE_FASTER 2.f + +/* +Scene::Scene() : + SceneObjects(new list), + ShaderSet(new set), + newObjects(true) +{ +}*/ + +Scene::Scene(unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* _lookat) : +viewPort(new ViewPort(x, y, width, height, fovy, zNear, zFar)), + SceneObjects(new list), + ShaderSet(new set), + newObjects(true), + lookat(_lookat), + move_delta(0) +{ + + +} + +Scene::Scene(Scene* _Scene, unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* _lookat) : +viewPort(new ViewPort(x, y, width, height, fovy, zNear, zFar)), + SceneObjects(_Scene->SceneObjects), + ShaderSet((_Scene->ShaderSet)), + newObjects(false), + lookat(_lookat), + move_delta(0) +{ +} + +Scene::Scene(Scene* _Scene) : + SceneObjects(_Scene->SceneObjects), + ShaderSet((_Scene->ShaderSet)), + newObjects(false), + move_delta(0) +{ +} + + +Scene::~Scene() +{ + if (newObjects){ + for (auto i = SceneObjects->begin(); i != SceneObjects->end(); ++i) + { + delete (*i); + } + delete SceneObjects; + delete ShaderSet; + } + + + if (viewPort != nullptr) + delete viewPort; +} + + + + +void Scene::update(float deltaT) +{ + vec3 pos; + //Focus auf Player + + if (lookat != NULL){ + pos = lookat->getPosition(); + } + + int move_x = Events::getMoveX(); + int move_y = Events::getMoveY(); + //int shoot = Events::getAction1(); + //int reset = Events::getAction2(); + + // XYAchse um den Player + viewPort->rotateView(0.002f*Events::getViewX(), 0.001f*Events::getViewY()); + + //Jump + if (Events::getJump() && lookat->floorBound()) + lookat->ySpeed += 5.5; + //else if (!Events::isKHeld(SDLK_SPACE) && lookat->ySpeed>0) + // lookat->ySpeed = 0; + + // MOVE Player + if (move_x) + lookat->move(SPEED_MOVE_NORMAL *move_x * deltaT * viewPort->rotateDirection(vec3(-1.f, 0.f, 0.f))); + + if (move_y){ + if (move_y > 0){ + if (move_delta < TIME_TILL_MAX_MOVE) + move_delta += deltaT; + if (move_delta > TIME_TILL_MAX_MOVE) + move_delta = TIME_TILL_MAX_MOVE; + lookat->move(SPEED_MOVE_NORMAL * (MOVE_FASTER * move_delta / TIME_TILL_MAX_MOVE + 1) *move_y * deltaT * viewPort->rotateDirection(vec3(0.f, 0.f, -1.f))); + } + else + lookat->move(SPEED_MOVE_NORMAL *move_y * deltaT * viewPort->rotateDirection(vec3(0.f, 0.f, -1.f))); + } + else + { + move_delta = 0; + } + + //Rotate Play in move direction + + if (move_x || move_y) + lookat->turnTo(viewPort->rotateDirection(vec3(0.f, 0.f, -1.f)),3*deltaT/TIME_TILL_DIRECTION_ROTATE); + + + //// Zoom auf Player + //if (Events::getViewZ()) + //{ + //// float dist = 0; + //// if (lookat!=NULL) + //// dist = VektorAbs(getViewerPos() - lookat->getPosition()); + //// if (true) + // view = translate( vec3(0.f,0.f,(float)(5*deltaT *sign(Events::getViewZ()))))*view; + // //view = view*scale(vec3((float)(1 + deltaT * sign(Events::getViewZ())))); + //} + + // Alle Objekte der Scene aktualisieren + if (newObjects) + { + for (auto i = SceneObjects->begin(); i != SceneObjects->end(); ++i) + { + (*i)->update(deltaT); + } + + + for (auto i = SceneObjects->begin(); i != SceneObjects->end(); ++i) + { + auto j = i; + for (j++; j != SceneObjects->end(); ++j) + { + (*i)->collisions(*j); + } + } + + + } + +} + +void Scene::draw() const +{ + viewPort->useViewPort(); + + for (auto i = ShaderSet->cbegin(); i != ShaderSet->cend(); ++i) + { + viewPort->bindView(*i,lookat->getPosition()+vec3(0.0f,1.0f,0.0f)); + + //don't know if this is really the right place to set the lighting + //add ambient light + //GLfloat ambientcolor[] = { 0.5f, 0.5f, 0.5f, 1.0f }; + //glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambientcolor); + + //add positioned light + //GLfloat lightcolor0[] = { 1.5f, 1.5f, 1.5f, 1.0f }; + //GLfloat lightposition0[] = { 1.0f, 1.0f, 1.0f, 1.0f }; + //glLightfv(GL_LIGHT0, GL_DIFFUSE, lightcolor0); + //glLightfv(GL_LIGHT0, GL_POSITION, lightposition0); + } + + + + + + + + for (auto i = SceneObjects->cbegin(); i != SceneObjects->cend(); ++i) + { + (*i)->draw(); + } +} + +void Scene::addObject(SceneObject* _add) +{ + SceneObjects->push_back(_add); + ShaderSet->insert(_add->getShader()); + _add->setMainScene(this); +} + +void Scene::deleteObject(SceneObject* _del) +{ + SceneObjects->remove(_del); +} + + +list* Scene::getSceneObjects() +{ + return SceneObjects; +} + + +void Scene::setLookAt(SceneObject* _lookat) +{ + lookat = _lookat; +} \ No newline at end of file diff --git a/Weave/Scene/Scene.h b/Weave/Scene/Scene.h new file mode 100644 index 0000000..4a2f746 --- /dev/null +++ b/Weave/Scene/Scene.h @@ -0,0 +1,47 @@ +#pragma once + +#include "../Graphix/ViewPort.h" +#include "SceneObject.h" +#include "../Graphix/GLM.h" + +#include +#include + +using std::list; +using std::set; + +typedef list SceneList; + +class Scene +{ +public: + //Scene(); + Scene(unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* lookat = NULL); + __declspec(deprecated) + Scene(Scene*); + __declspec(deprecated) + Scene(Scene* _Scene, unsigned int x, unsigned int y, unsigned int width, unsigned int height, float fovy, float zNear, float zFar, vec3 pos, SceneObject* lookat = NULL); + virtual ~Scene(); + + virtual void update(float); + virtual void draw() const; + + void addObject(SceneObject*); + void deleteObject(SceneObject*); + + SceneList* getSceneObjects(); + + void setLookAt(SceneObject* _lookat); + +protected: + ViewPort* viewPort; + + SceneObject* lookat; + + + bool newObjects; + SceneList* SceneObjects; + set* ShaderSet; + + float move_delta; +}; diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp new file mode 100644 index 0000000..839205a --- /dev/null +++ b/Weave/Scene/SceneObject.cpp @@ -0,0 +1,231 @@ +#include "SceneObject.h" + +#include +#include "../Graphix/GLM.h" + +#include "../Message.h" +#include + +#include + +#include "../Graphix/Shader.h" +#include "Scene.h" +#include "../Graphix/Texture.h" + +#include "../Graphix/Model.h" + +#include "../Graphix/Graphix.h" + +#include "../Events.h" + +using std::string; + +using std::cout; +using std::endl; + + +#define YFALL_SPEED 9.8f + +SceneObject::SceneObject(Shader* _shader, mat4& _modelMat, string _modelpath, string texturepath, unsigned int _model_index) : +model(new IMetaMesh(_modelpath)), +modelMat(_modelMat), +shader(_shader), +mainScene(NULL), +collision_ignore(false), +texture(nullptr), +ySpeed(0), +yStatic(true) +{ + //Message::info("Error from befor?"); + //Graphix::getGlError(); + // new IMetaMesh(_modelpath); + //Message::info("Creating modelMat"); + //Graphix::getGlError(); + //modelID = _shader->getUniformLocation("modelMat"); + if (texturepath != "") + texture = new Texture(texturepath); + //Message::info("Creating SkyBox Shader"); + //Graphix::getGlError(); + + model->bindShader(shader); + //Message::info("Binding Shader"); + //Graphix::getGlError(); + //Message::info("Done"); + +} + +SceneObject::SceneObject(Shader* _shader, mat4& _modelMat, Model* _model, string texturepath) : +model(_model), +modelMat(_modelMat), +shader(_shader), +mainScene(NULL), +collision_ignore(false), +texture(nullptr), +ySpeed(0), +yStatic(true) +{ + //Message::info("Error from befor?"); + //Graphix::getGlError(); + // new IMetaMesh(_modelpath); + //Message::info("Creating modelMat"); + //Graphix::getGlError(); + //modelID = _shader->getUniformLocation("modelMat"); + if (texturepath != "") + texture = new Texture(texturepath); + //Message::info("Creating SkyBox Shader"); + //Graphix::getGlError(); + + model->bindShader(shader); + //Message::info("Binding Shader"); + //Graphix::getGlError(); + //Message::info("Done"); + +} + +//SceneObject::SceneObject(Shader* _shader, mat4& _modelMat, IMesh* model_obj, string texturepath) : +//IMesh(*model_obj), +//modelMat(_modelMat), +//shader(_shader), +//mainScene(NULL), +//collision_ignore(false), +//texture(nullptr) +//{ +// modelID = _shader->getUniformLocation("modelMat"); +// if (texturepath != "") +// texture = new Texture(texturepath); +// +// bindShader(shader); +//} + + +SceneObject::~SceneObject() +{ + // delete texture; +} + +float SceneObject::getFloor() const +{ + return 0; +} + +void SceneObject::update(float deltaT) +{ + + if (!yStatic) + { + vec3 pos = getPosition(); + if (!floorBound() || ySpeed!=0) + { + if (pos.y + ySpeed*deltaT > getFloor()) + modelMat = translate(vec3(0.f, ySpeed*deltaT, 0.f))*modelMat; + else + { + modelMat = translate(vec3(0.f, getFloor() - pos.y, 0.f))*modelMat; + ySpeed = 0; + } + ySpeed -= deltaT*YFALL_SPEED; + } + + } + + + //modelMat = scale(modelMat, vec3(matter)); + //modelMat = (deltaT * spin) * modelMat; //TODO drehen scheint nicht zu funktionieren + +} + +void SceneObject::draw() const +{ + // useModel(shader); + + // useTexture(texture, shader); + + // useMMatrix(modelMat,shader); + + // glUniform1i(shader->getUniformLocation ("inv"), 1); + + // drawModel(); + + model->drawModel(shader, texture, modelMat); + if (Events::isKToggleActive(SDLK_F6)) + model->drawBBox(shader, modelMat); +} + +void SceneObject::collisions(SceneObject* _other) +{ + if (collision_ignore || _other->collision_ignore) + return; + +} + +bool SceneObject::floorBound() const +{ + vec3 pos = getPosition(); + return (pos.y <= getFloor()); +} + +vec3 SceneObject::getPosition() const +{ + return vec3(modelMat[3]); +} + + +void SceneObject::setModel(mat4& _modelMat){ + modelMat = _modelMat; +} + +void SceneObject::turn(float angle, vec3& axis){ + //vec3 pos = getPosition(); + //modelMat = rotate(degree, axis)*modelMat; + //modelMat = modelMat*translate(pos - getPosition()); + modelMat = modelMat * rotate(angle, axis); +} + +void SceneObject::turnTo(vec3& direction, float speed){ + vec3 pos = getPosition(); + float perc = 1; + modelMat = translate(-pos) * modelMat; + float rot_angle = orientedAngle(normalize((vec3)(modelMat * vec4(0.f, 0.f, 1.f, 1.f))), direction, vec3(0.f, 1.f, 0.f)); + + if (abs(rot_angle) / M_PI > speed) + perc = speed / abs(rot_angle) * (float)M_PI; + + modelMat = rotate(rot_angle *perc, vec3(0.f, 1.f, 0.f)) * modelMat; + modelMat = translate(pos) * modelMat; +} + +void SceneObject::move(vec3& dist){ + modelMat = translate(dist) * modelMat; +} + + + + +void SceneObject::setCollision(bool _col) +{ + collision_ignore = !_col; +} + + +//bool SceneObject::operator==(SceneObject _ref) +//{ +// return (this == &_ref); +//} + +//SceneObject* SceneObject::copy() +//{ +// return new SceneObject(shader, modelMat, modelpath, *texture); +//} +// + + +void SceneObject::setMainScene(Scene* _scene) +{ + mainScene = _scene; +} + + +Shader* SceneObject::getShader() +{ + return shader; +} diff --git a/Weave/Scene/SceneObject.h b/Weave/Scene/SceneObject.h new file mode 100644 index 0000000..acba06d --- /dev/null +++ b/Weave/Scene/SceneObject.h @@ -0,0 +1,83 @@ +#pragma once + +#include "../Graphix/GLM.h" + +#include + +using std::string; + +class Scene; +class Texture; +class Shader; +class Model; + +//class string; + +class SceneObject +{ +public: + + //SceneObject(Shader* _shader, mat4& model); + SceneObject(Shader* _shader, mat4& model, string modelpath, string texturepath, unsigned int model_index=0); + + SceneObject(Shader* _shader, mat4& modelMat, Model* model, string texturepath); + + //SceneObject(Shader* _shader, mat4& model, IMesh* model_obj, string texturepath); + virtual ~SceneObject(); + + virtual void update(float); + virtual void draw() const; + + virtual void collisions(SceneObject*); + + virtual vec3 getPosition() const; + + __declspec(deprecated) + virtual void setModel(mat4&); + __declspec(deprecated) + virtual void turn(float angle, vec3& axis); + virtual void turnTo(vec3& direction, float speed = 1); + virtual void move(vec3& dist); + + //virtual bool operator==(SceneObject); + + void setMainScene(Scene *); + + void setCollision(bool); + + Shader* getShader(); + + __declspec(deprecated) + void setEnemy(bool isenemy); + __declspec(deprecated) + bool isEnemy(); + + + bool floorBound() const; + float getFloor() const; + + bool yStatic; + float ySpeed; + +protected: + + void setMatter(float); + + mat4 modelMat; + + + //__declspec(deprecated) + //unsigned int modelID; + + Shader* shader; + + Scene* mainScene; + + bool collision_ignore; + + Texture* texture; + + Model* model; + +}; + diff --git a/Weave/Weave.vcxproj b/Weave/Weave.vcxproj index 9e00615..11170a8 100644 --- a/Weave/Weave.vcxproj +++ b/Weave/Weave.vcxproj @@ -100,8 +100,8 @@ - - + + @@ -121,8 +121,8 @@ - - + + diff --git a/Weave/Weave.vcxproj.filters b/Weave/Weave.vcxproj.filters index 1bca2f2..5a064c7 100644 --- a/Weave/Weave.vcxproj.filters +++ b/Weave/Weave.vcxproj.filters @@ -45,12 +45,6 @@ Source Files - - Source Files - - - Source Files - Source Files @@ -66,6 +60,12 @@ Source Files + + Source Files + + + Source Files + @@ -98,12 +98,6 @@ Header Files - - Header Files - - - Header Files - Header Files @@ -122,5 +116,11 @@ Header Files + + Header Files + + + Header Files + \ No newline at end of file