#include <assimp/postprocess.h>
#include <GL\glew.h>
-#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"
+++ /dev/null
-#include "Scene.h"
-
-#include "GLM.h"
-#include <GL\glew.h>
-
-#include "../Message.h"
-#include <iostream>
-
-#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<SceneObject*>),
- ShaderSet(new set<Shader*>),
- 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<SceneObject*>),
- ShaderSet(new set<Shader*>),
- 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<SceneObject*>* Scene::getSceneObjects()
-{
- return SceneObjects;
-}
-
-
-void Scene::setLookAt(SceneObject* _lookat)
-{
- lookat = _lookat;
-}
\ No newline at end of file
+++ /dev/null
-#pragma once
-
-#include "ViewPort.h"
-#include "SceneObject.h"
-#include "GLM.h"
-
-#include <list>
-#include <set>
-
-using std::list;
-using std::set;
-
-typedef list<SceneObject*> 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<Shader*>* ShaderSet;
-
- float move_delta;
-};
+++ /dev/null
-#include "SceneObject.h"
-
-#include <gl/glew.h>
-#include "GLM.h"
-
-#include "../Message.h"
-#include <string>
-
-#include <iostream>
-
-#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;
-}
+++ /dev/null
-#pragma once
-
-#include "GLM.h"
-
-#include <string>
-
-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;
-
-};
-
--- /dev/null
+#include "Scene.h"
+
+#include "../Graphix/GLM.h"
+#include <GL\glew.h>
+
+#include "../Message.h"
+#include <iostream>
+
+#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<SceneObject*>),
+ ShaderSet(new set<Shader*>),
+ 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<SceneObject*>),
+ ShaderSet(new set<Shader*>),
+ 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<SceneObject*>* Scene::getSceneObjects()
+{
+ return SceneObjects;
+}
+
+
+void Scene::setLookAt(SceneObject* _lookat)
+{
+ lookat = _lookat;
+}
\ No newline at end of file
--- /dev/null
+#pragma once
+
+#include "../Graphix/ViewPort.h"
+#include "SceneObject.h"
+#include "../Graphix/GLM.h"
+
+#include <list>
+#include <set>
+
+using std::list;
+using std::set;
+
+typedef list<SceneObject*> 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<Shader*>* ShaderSet;
+
+ float move_delta;
+};
--- /dev/null
+#include "SceneObject.h"
+
+#include <gl/glew.h>
+#include "../Graphix/GLM.h"
+
+#include "../Message.h"
+#include <string>
+
+#include <iostream>
+
+#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;
+}
--- /dev/null
+#pragma once
+
+#include "../Graphix/GLM.h"
+
+#include <string>
+
+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;
+
+};
+
<ClCompile Include="Graphix\GLM.cpp" />
<ClCompile Include="Graphix\Graphix.cpp" />
<ClCompile Include="Graphix\Model\IMesh.cpp" />
- <ClCompile Include="Graphix\Scene.cpp" />
- <ClCompile Include="Graphix\SceneObject.cpp" />
+ <ClCompile Include="Scene\Scene.cpp" />
+ <ClCompile Include="Scene\SceneObject.cpp" />
<ClCompile Include="Graphix\Shader.cpp" />
<ClCompile Include="Graphix\Model\SkyBox.cpp" />
<ClCompile Include="Graphix\Texture.cpp" />
<ClInclude Include="Graphix\GLM.h" />
<ClInclude Include="Graphix\Graphix.h" />
<ClInclude Include="Graphix\Model\IMesh.h" />
- <ClInclude Include="Graphix\Scene.h" />
- <ClInclude Include="Graphix\SceneObject.h" />
+ <ClInclude Include="Scene\Scene.h" />
+ <ClInclude Include="Scene\SceneObject.h" />
<ClInclude Include="Graphix\Shader.h" />
<ClInclude Include="Graphix\Model\SkyBox.h" />
<ClInclude Include="Graphix\Texture.h" />
<ClCompile Include="Game.cpp">
<Filter>Source Files</Filter>
</ClCompile>
- <ClCompile Include="Graphix\Scene.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
- <ClCompile Include="Graphix\SceneObject.cpp">
- <Filter>Source Files</Filter>
- </ClCompile>
<ClCompile Include="Graphix\Model\IMesh.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Graphix\Model\SkyBox.cpp">
<Filter>Source Files</Filter>
</ClCompile>
+ <ClCompile Include="Scene\Scene.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="Scene\SceneObject.cpp">
+ <Filter>Source Files</Filter>
+ </ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="Fps.h">
<ClInclude Include="Game.h">
<Filter>Header Files</Filter>
</ClInclude>
- <ClInclude Include="Graphix\Scene.h">
- <Filter>Header Files</Filter>
- </ClInclude>
- <ClInclude Include="Graphix\SceneObject.h">
- <Filter>Header Files</Filter>
- </ClInclude>
<ClInclude Include="Graphix\Model\IMesh.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Graphix\Model.h">
<Filter>Header Files</Filter>
</ClInclude>
+ <ClInclude Include="Scene\SceneObject.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="Scene\Scene.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
</ItemGroup>
</Project>
\ No newline at end of file