]> git.leopard-lacewing.eu Git - cgue_weave.git/commitdiff
moved Scene to own directiory
authorPeter Schaefer <schaeferpm@gmail.com>
Mon, 27 Apr 2015 10:27:59 +0000 (12:27 +0200)
committerPeter Schaefer <schaeferpm@gmail.com>
Mon, 27 Apr 2015 10:27:59 +0000 (12:27 +0200)
Weave/Game.cpp
Weave/Graphix/Scene.cpp [deleted file]
Weave/Graphix/Scene.h [deleted file]
Weave/Graphix/SceneObject.cpp [deleted file]
Weave/Graphix/SceneObject.h [deleted file]
Weave/Scene/Scene.cpp [new file with mode: 0644]
Weave/Scene/Scene.h [new file with mode: 0644]
Weave/Scene/SceneObject.cpp [new file with mode: 0644]
Weave/Scene/SceneObject.h [new file with mode: 0644]
Weave/Weave.vcxproj
Weave/Weave.vcxproj.filters

index b416b24dadebf48596fd945965f3861417c84e19..5a07f67d4d22e84abe3531ac9843c68242ad966b 100644 (file)
@@ -10,8 +10,8 @@
 #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"
diff --git a/Weave/Graphix/Scene.cpp b/Weave/Graphix/Scene.cpp
deleted file mode 100644 (file)
index 18cefb4..0000000
+++ /dev/null
@@ -1,214 +0,0 @@
-#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
diff --git a/Weave/Graphix/Scene.h b/Weave/Graphix/Scene.h
deleted file mode 100644 (file)
index bf395f3..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-#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;
-};
diff --git a/Weave/Graphix/SceneObject.cpp b/Weave/Graphix/SceneObject.cpp
deleted file mode 100644 (file)
index 1e1948b..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-#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;
-}
diff --git a/Weave/Graphix/SceneObject.h b/Weave/Graphix/SceneObject.h
deleted file mode 100644 (file)
index 9d11ad7..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-#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;
-
-};
-
diff --git a/Weave/Scene/Scene.cpp b/Weave/Scene/Scene.cpp
new file mode 100644 (file)
index 0000000..19f8ce9
--- /dev/null
@@ -0,0 +1,214 @@
+#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
diff --git a/Weave/Scene/Scene.h b/Weave/Scene/Scene.h
new file mode 100644 (file)
index 0000000..4a2f746
--- /dev/null
@@ -0,0 +1,47 @@
+#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;
+};
diff --git a/Weave/Scene/SceneObject.cpp b/Weave/Scene/SceneObject.cpp
new file mode 100644 (file)
index 0000000..839205a
--- /dev/null
@@ -0,0 +1,231 @@
+#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;
+}
diff --git a/Weave/Scene/SceneObject.h b/Weave/Scene/SceneObject.h
new file mode 100644 (file)
index 0000000..acba06d
--- /dev/null
@@ -0,0 +1,83 @@
+#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;
+
+};
+
index 9e00615494c6ae8956fb6e274a5683bceecc2faf..11170a8634dfd849bb4aa3fd90d1b6f1d61f42e4 100644 (file)
     <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" />
index 1bca2f21ce61bb2b84a02736f00b168963a27a1f..5a064c7bef010407a2eb272d591a4a6a082230c2 100644 (file)
     <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