diff --git a/Android_Salmon_Engine.mk b/Android_Salmon_Engine.mk
index e4b15d3..a9345f6 100644
--- a/Android_Salmon_Engine.mk
+++ b/Android_Salmon_Engine.mk
@@ -324,6 +324,7 @@ LOCAL_SRC_FILES += src/SmartValueManager/SmartValueManager.cpp
LOCAL_SRC_FILES += src/ModelManager/ModelManager.cpp
LOCAL_SRC_FILES += src/ModelManager/NewModelManager.cpp
LOCAL_SRC_FILES += src/SimpleLand/SimpleLand.cpp
+LOCAL_SRC_FILES += src/PhysicsManager/PhysicsManager.cpp
LOCAL_SRC_FILES += src/Render/RenderMisc.cpp
diff --git a/Halibut Engine/Halibut Engine.vcxproj b/Halibut Engine/Halibut Engine.vcxproj
index 37620a9..a855184 100644
--- a/Halibut Engine/Halibut Engine.vcxproj
+++ b/Halibut Engine/Halibut Engine.vcxproj
@@ -66,6 +66,7 @@
Disabled
TARGET_HALIBUT;TARGET_WIN32;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0501;DEBUG
$(SalmonEnginePath);$(LibsPath)\boost_1_52_0;$(LibsPath)\openal\OpenAL11_windows_sdk;$(LibsPath)\libogg-1.3.0\include;$(LibsPath)\libvorbis-1.3.2\include;$(LibsPath)\sqplus\sqplus;$(LibsPath)\sqplus\include;$(LibsPath)\DirectXsdk\Include;$(LibsPath)\lpng1510
+ 4503
true
@@ -77,6 +78,7 @@
Disabled
TARGET_HALIBUT;TARGET_WIN32;NOSOUND;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0501;DEBUG
$(SalmonEnginePath);$(LibsPath)\boost_1_52_0;$(LibsPath)\openal\OpenAL11_windows_sdk;$(LibsPath)\libogg-1.3.0\include;$(LibsPath)\libvorbis-1.3.2\include;$(LibsPath)\sqplus\sqplus;$(LibsPath)\sqplus\include;$(LibsPath)\lpng1510
+ 4503
true
@@ -90,6 +92,7 @@
true
TARGET_HALIBUT;TARGET_WIN32;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0501;NDEBUG
$(SalmonEnginePath);$(LibsPath)\boost_1_52_0;$(LibsPath)\openal\OpenAL11_windows_sdk;$(LibsPath)\libogg-1.3.0\include;$(LibsPath)\libvorbis-1.3.2\include;$(LibsPath)\sqplus\sqplus;$(LibsPath)\sqplus\include;$(LibsPath)\DirectXsdk\Include;$(LibsPath)\lpng1510
+ 4503
true
diff --git a/Salmon Engine/Salmon Engine.vcxproj b/Salmon Engine/Salmon Engine.vcxproj
index 11fe607..33c8103 100644
--- a/Salmon Engine/Salmon Engine.vcxproj
+++ b/Salmon Engine/Salmon Engine.vcxproj
@@ -20,14 +20,21 @@
+
+
+
+
+
+
+
@@ -57,14 +64,20 @@
+
+
+
+
+
+
@@ -161,10 +174,10 @@
MaxSpeed
true
true
- MultiThreaded
+ MultiThreadedDLL
TARGET_SALMON;TARGET_WIN32;WIN32_LEAN_AND_MEAN;_WIN32_WINNT=0x0501;NDEBUG
$(SalmonEnginePath);$(LibsPath)\boost_1_52_0;$(LibsPath)\openal\OpenAL11_windows_sdk;$(LibsPath)\libogg-1.3.0\include;$(LibsPath)\libvorbis-1.3.2\include;$(LibsPath)\sqplus\sqplus;$(LibsPath)\sqplus\include;$(LibsPath)\DirectXsdk\Include;$(LibsPath)\lpng1510
- /wd 4503
+ 4503
true
diff --git a/include/PhysicsManager/PhysicsManager.h b/include/PhysicsManager/PhysicsManager.h
new file mode 100644
index 0000000..eddf538
--- /dev/null
+++ b/include/PhysicsManager/PhysicsManager.h
@@ -0,0 +1,50 @@
+#ifndef PHYSICS_MANAGER_H_INCLUDED
+#define PHYSICS_MANAGER_H_INCLUDED
+
+
+#include "include/Utils/Utils.h"
+#include "include/ModelManager/NewModelManager.h"
+
+namespace SE
+{
+
+class TVolumeBody
+{
+protected:
+
+ std::stack> SmpTriangleArrStack;
+
+ std::vector SmpTriangleArr;
+
+ vec3 DimensionalMinPos;
+ vec3 DimensionalMaxPos;
+
+public:
+
+ void PushData();
+ void PopData();
+
+ void Move(const vec3& v);
+ void Rotate(const mat3& r);
+ void Scale(float s);
+ void Scale(const vec3& s);
+
+ void AssignFromFlexModel(TFlexModel& flexModel);
+
+ bool CheckCollision(const vec3& a, const vec3& b);
+};
+
+
+class TPhysicsManager
+{
+protected:
+public:
+};
+
+
+
+} //namespace SE
+
+#endif
+
+
diff --git a/include/Render/SalmonRender/Cameras.h b/include/Render/SalmonRender/Cameras.h
new file mode 100644
index 0000000..a250f93
--- /dev/null
+++ b/include/Render/SalmonRender/Cameras.h
@@ -0,0 +1,123 @@
+#ifndef CAMERAS_H_INCLUDED
+#define CAMERAS_H_INCLUDED
+
+#include "include/Utils/Utils.h"
+
+namespace SE
+{
+
+
+struct TCameraInterface
+{
+ vec3 CamVec;
+
+ vec3 CamShift;
+
+ TCameraInterface();
+
+ virtual ~TCameraInterface()
+ {
+ }
+
+};
+
+struct TPanoramicCamera : public TCameraInterface
+{
+
+ float CamAlpha;
+ float CamPhi;
+ float CamDist;
+
+ TPanoramicCamera();
+
+ void MoveAlpha(float dAlpha);
+ void MovePhi(float dPhi);
+ void MoveDist(float dDist);
+ void SetAlpha(float alpha);
+
+ void MoveForward();
+ void MoveBackward();
+ void MoveLeft();
+ void MoveRight();
+
+ void CalcCamVec();
+
+ void SetCamView();
+};
+
+struct TPitCamera : public TCameraInterface
+{
+ vec4 CameraQuat;
+
+ void SetCamView();
+
+ void CalcCamVec();
+
+ void RotateByQuat(vec4 quat);
+};
+
+
+typedef boost::variant TCamera;
+
+
+struct TSetCameraViewVisitor : public boost::static_visitor
+{
+ void operator()(TPanoramicCamera& panoramicCamera)
+ {
+ panoramicCamera.SetCamView();
+ }
+
+ void operator()(TPitCamera& pitCamera)
+ {
+ pitCamera.SetCamView();
+ }
+};
+
+
+struct TCalcCamVecVisitor : public boost::static_visitor
+{
+ void operator()(TPanoramicCamera& panoramicCamera)
+ {
+ panoramicCamera.CalcCamVec();
+ }
+
+ void operator()(TPitCamera& pitCamera)
+ {
+ pitCamera.CalcCamVec();
+ }
+};
+
+
+struct TGetCamVecVisitor : public boost::static_visitor
+{
+ vec3& operator()(TPanoramicCamera& panoramicCamera) const
+ {
+ return panoramicCamera.CamVec;
+ }
+
+ vec3& operator()(TPitCamera& pitCamera) const
+ {
+ return pitCamera.CamVec;
+ }
+};
+
+struct TGetCamShiftVisitor : public boost::static_visitor
+{
+ vec3& operator()(TPanoramicCamera& panoramicCamera) const
+ {
+ return panoramicCamera.CamShift;
+ }
+
+ vec3& operator()(TPitCamera& pitCamera) const
+ {
+ return pitCamera.CamShift;
+ }
+};
+
+
+
+
+
+} //namespace SE
+
+#endif
\ No newline at end of file
diff --git a/include/Render/SalmonRender/SalmonRenderInterface.h b/include/Render/SalmonRender/SalmonRenderInterface.h
index f2d06e6..7aabbd5 100644
--- a/include/Render/SalmonRender/SalmonRenderInterface.h
+++ b/include/Render/SalmonRender/SalmonRenderInterface.h
@@ -11,127 +11,17 @@
#include "include/Render/RenderInterface.h"
+#include "include/Render/SalmonRender/Cameras.h"
+
namespace SE
{
-struct TCameraInterface
-{
- vec3 CamVec;
-
- vec3 CamShift;
-
- TCameraInterface();
-
- virtual ~TCameraInterface()
- {
- }
-
-};
-
-struct TPanoramicCamera : public TCameraInterface
-{
-
- float CamAlpha;
- float CamPhi;
- float CamDist;
-
- TPanoramicCamera();
-
- void MoveAlpha(float dAlpha);
- void MovePhi(float dPhi);
- void MoveDist(float dDist);
- void SetAlpha(float alpha);
-
- void MoveForward();
- void MoveBackward();
- void MoveLeft();
- void MoveRight();
-
- void CalcCamVec();
-
- void SetCamView();
-};
-
-struct TPitCamera : public TCameraInterface
-{
- vec4 CameraQuat;
-
- void SetCamView();
-
- void CalcCamVec();
-
- void RotateByQuat(vec4 quat);
-};
-
-
-typedef boost::variant TCamera;
-
-
-struct TSetCameraViewVisitor : public boost::static_visitor
-{
- void operator()(TPanoramicCamera& panoramicCamera)
- {
- panoramicCamera.SetCamView();
- }
-
- void operator()(TPitCamera& pitCamera)
- {
- pitCamera.SetCamView();
- }
-};
-
-
-struct TCalcCamVecVisitor : public boost::static_visitor
-{
- void operator()(TPanoramicCamera& panoramicCamera)
- {
- panoramicCamera.CalcCamVec();
- }
-
- void operator()(TPitCamera& pitCamera)
- {
- pitCamera.CalcCamVec();
- }
-};
-
-
-struct TGetCamVecVisitor : public boost::static_visitor
-{
- vec3& operator()(TPanoramicCamera& panoramicCamera) const
- {
- return panoramicCamera.CamVec;
- }
-
- vec3& operator()(TPitCamera& pitCamera) const
- {
- return pitCamera.CamVec;
- }
-};
-
-struct TGetCamShiftVisitor : public boost::static_visitor
-{
- vec3& operator()(TPanoramicCamera& panoramicCamera) const
- {
- return panoramicCamera.CamShift;
- }
-
- vec3& operator()(TPitCamera& pitCamera) const
- {
- return pitCamera.CamShift;
- }
-};
class TSalmonRendererInterface : public TRendererInterface
{
protected:
- /*
- float CamAlpha;
- float CamPhi;
- float CamDist;
- vec3 CamShift;*/
-
mat4 CamModelViewMatrix;
mat4 CamInversedModelViewMatrix;
@@ -167,6 +57,9 @@ public:
void SetPerspectiveFullScreenViewport();
void SetOrthoFullScreenViewport();
+ void SetPerspectiveProjection(float angle = pi/6.f, float zNear = 1.f, float zFar = 100.f);
+ void SetOrthoProjection();
+
mat4 GetModelviewMatrix();
void SetPerspectiveProjectionMatrix(float angle, float aspect, float zNear, float zFar);
diff --git a/include/SalmonEngineInterface.h b/include/SalmonEngineInterface.h
index b22315f..b4373b7 100644
--- a/include/SalmonEngineInterface.h
+++ b/include/SalmonEngineInterface.h
@@ -43,7 +43,9 @@ This code combines all headers for Salmon engine into one header file
#include "include/SmartValueManager/SmartValueManager.h"
#include "include/ModelManager/NewModelManager.h"
-
+#include "include/PhysicsManager/PhysicsManager.h"
+#include "include/GUIManager/GUIManager.h"
+#include "include/HalibutAnimation/HalibutAnimation.h"
namespace SE
{
@@ -64,6 +66,8 @@ public:
TScriptManager ScriptManager;
TFontManager FontManager;
TSmartValueManager SmartValueManager;
+ TGUIManager GUIManager;
+ THalibutAnimationManager HalibutAnimationManager;
#ifdef TARGET_ANDROID
TSoundManagerAndroid SoundManager;
@@ -115,11 +119,15 @@ public:
virtual void OuterOnTapUp(vec2 p);
+ virtual void OuterOnTapUpAfterShift(vec2 p);
+
virtual void OuterOnMove(vec2 shift);
virtual void InnerOnTapDown(vec2 p) { }
virtual void InnerOnTapUp(vec2 p) { }
+
+ virtual void InnerOnTapUpAfterShift(vec2 p) { }
virtual void InnerOnMove(vec2 shift) { }
diff --git a/include/SalmonEngineWindows.h b/include/SalmonEngineWindows.h
index 5ac6523..fb8a295 100644
--- a/include/SalmonEngineWindows.h
+++ b/include/SalmonEngineWindows.h
@@ -60,4 +60,9 @@ public:
int MainLoop(TApplication& application);
-} //namespace SE
\ No newline at end of file
+} //namespace SE
+
+//This file includes templates that call any of three singletones: Console, ResourceManager or Renderer
+
+#include "include/GUIManager/WidgetTemplatesImpl.h"
+
diff --git a/include/Utils/DataTypes/DataTypes.h b/include/Utils/DataTypes/DataTypes.h
index 294d697..f9ea8e5 100644
--- a/include/Utils/DataTypes/DataTypes.h
+++ b/include/Utils/DataTypes/DataTypes.h
@@ -74,7 +74,7 @@ mat4 MultMatrixMatrix(const mat4& m1, const mat4& m2);
bool IsFloatEqual(float a, float b);
-bool LineCouldCrossTriangle(const vec3& a, const vec3& b, const TSmpTriangle& tr); //overall test
+bool LineCouldCrossTriangle(const vec3& a, const vec3& b, const TSmpTriangle& tr); //overall (dimensional) test
int LineCrossTriangle(const vec3& a, const vec3& b, const TSmpTriangle& tr);
diff --git a/src/ApplicationInterface.cpp b/src/ApplicationInterface.cpp
index 99d1a32..925b27b 100644
--- a/src/ApplicationInterface.cpp
+++ b/src/ApplicationInterface.cpp
@@ -12,13 +12,10 @@ TApplicationInterface::TApplicationInterface()
void TApplicationInterface::OuterInit(int screenWidth, int screenHeight, float matrixWidth, float matrixHeight)
{
ResourceManager->ScriptManager.BindBasicFunctions();
+
+ Renderer->InitOpenGL(screenWidth, screenHeight, matrixWidth, matrixHeight);
+
InnerInit();
-#ifdef TARGET_HALIBUT
- Renderer->InitOpenGL(screenWidth, screenHeight, matrixWidth, matrixHeight);
-#endif
-#ifdef TARGET_SALMON
- Renderer->InitOpenGL(screenWidth, screenHeight, matrixWidth, matrixHeight);
-#endif
CheckGlError();
diff --git a/src/FrameManager/FrameManager.cpp b/src/FrameManager/FrameManager.cpp
index af029e2..ace8f44 100644
--- a/src/FrameManager/FrameManager.cpp
+++ b/src/FrameManager/FrameManager.cpp
@@ -87,6 +87,8 @@ cardinal TFrameManager::AddFrameRenderBuffer(const std::string& frameName,cardin
FrameMap[frameName].Width = width;
FrameMap[frameName].Height = height;
FrameMap[frameName].TexName = texName;
+
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
return FrameMap[frameName].FrameBuffer;
@@ -180,7 +182,8 @@ cardinal TFrameManager::AddCubemapBuffer(const std::string& frameName,cardinal w
FrameMap[frameName].Height = height;
FrameMap[frameName].TexName = texName;
- //return FrameMap[frameName].TexID; //That is easier
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+
return FrameMap[frameName].FrameBuffer;
break;
@@ -262,6 +265,8 @@ cardinal TFrameManager::AddDepthBuffer(const std::string& frameName, cardinal wi
FrameMap[frameName].Height = height;
FrameMap[frameName].TexName = texName;
+ glBindFramebuffer(GL_FRAMEBUFFER, 0);
+
return FrameMap[frameName].FrameBuffer;
break;
default:
diff --git a/src/PhysicsManager/PhysicsManager.cpp b/src/PhysicsManager/PhysicsManager.cpp
new file mode 100644
index 0000000..c9f2233
--- /dev/null
+++ b/src/PhysicsManager/PhysicsManager.cpp
@@ -0,0 +1,138 @@
+#include "include/PhysicsManager/PhysicsManager.h"
+#include "include/ModelManager/NewModelManager.h"
+#include "include/ShaderManager/ShaderManager.h"
+
+namespace SE
+{
+
+ const int CONST_MAX_VOLUME_STACK = 64;
+
+void TVolumeBody::AssignFromFlexModel(TFlexModel& flexModel)
+{
+ SmpTriangleArr.clear();
+
+ TDataTriangleList& dataTriangleList = flexModel.GetDataTriangleList();
+
+ if (dataTriangleList.Vec3CoordArr.count(CONST_STRING_POSITION_ATTRIB) == 0)
+ {
+ throw ErrorToLog("Error in AssignFromFlexModel - empty flexModel!");
+ }
+
+ if (dataTriangleList.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].size() == 0)
+ {
+ throw ErrorToLog("Error in AssignFromFlexModel - empty flexModel! size == 0!");
+ }
+
+ DimensionalMinPos = dataTriangleList.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][0];
+ DimensionalMaxPos = dataTriangleList.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][0];
+
+
+ for (size_t j = 0; j < dataTriangleList.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB].size(); j+=3)
+ {
+ TSmpTriangle smpTriangle;
+
+ smpTriangle.p[0] = dataTriangleList.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][j];
+ smpTriangle.p[1] = dataTriangleList.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][j + 1];
+ smpTriangle.p[2] = dataTriangleList.Vec3CoordArr[CONST_STRING_POSITION_ATTRIB][j + 2];
+
+ smpTriangle.v = smpTriangle.p[1] - smpTriangle.p[0];
+ smpTriangle.w = smpTriangle.p[2] - smpTriangle.p[1];
+
+ smpTriangle.n = CrossProduct(smpTriangle.v, smpTriangle.w);
+
+ SmpTriangleArr.push_back(smpTriangle);
+
+ DimensionalMinPos.v[0] = min(min(min(DimensionalMinPos.v[0], smpTriangle.p[0].v[0]), smpTriangle.p[1].v[0]), smpTriangle.p[2].v[0]);
+ DimensionalMinPos.v[1] = min(min(min(DimensionalMinPos.v[1], smpTriangle.p[0].v[1]), smpTriangle.p[1].v[1]), smpTriangle.p[2].v[1]);
+ DimensionalMinPos.v[2] = min(min(min(DimensionalMinPos.v[2], smpTriangle.p[0].v[2]), smpTriangle.p[1].v[2]), smpTriangle.p[2].v[2]);
+
+ DimensionalMaxPos.v[0] = max(max(max(DimensionalMaxPos.v[0], smpTriangle.p[0].v[0]), smpTriangle.p[1].v[0]), smpTriangle.p[2].v[0]);
+ DimensionalMaxPos.v[1] = max(max(max(DimensionalMaxPos.v[1], smpTriangle.p[0].v[1]), smpTriangle.p[1].v[1]), smpTriangle.p[2].v[1]);
+ DimensionalMaxPos.v[2] = max(max(max(DimensionalMaxPos.v[2], smpTriangle.p[0].v[2]), smpTriangle.p[1].v[2]), smpTriangle.p[2].v[2]);
+ }
+
+}
+
+void TVolumeBody::PushData()
+{
+ if (SmpTriangleArrStack.size() >= CONST_MAX_VOLUME_STACK)
+ {
+ throw ErrorToLog("TVolumeBody::PushData - stack overflow");
+ }
+
+ SmpTriangleArrStack.push(SmpTriangleArr);
+}
+
+void TVolumeBody::PopData()
+{
+ if (SmpTriangleArrStack.size() <= 0)
+ {
+ throw ErrorToLog("TVolumeBody::PushData - stack underflow");
+ }
+
+ SmpTriangleArr = SmpTriangleArrStack.top();
+
+ SmpTriangleArrStack.pop();
+}
+
+
+void TVolumeBody::Move(const vec3& v)
+{
+ BOOST_FOREACH(TSmpTriangle& smpTriangle, SmpTriangleArr)
+ {
+ smpTriangle.p[0] -= v;
+ smpTriangle.p[1] -= v;
+ smpTriangle.p[2] -= v;
+ }
+}
+
+void TVolumeBody::Rotate(const mat3& r)
+{
+ throw ErrorToLog("TVolumeBody::Rotate not implemented yet!");
+}
+
+void TVolumeBody::Scale(float s)
+{
+ throw ErrorToLog("TVolumeBody::Scale not implemented yet!");
+}
+
+void TVolumeBody::Scale(const vec3& s)
+{
+ throw ErrorToLog("TVolumeBody::Scale not implemented yet!");
+}
+
+
+
+bool TVolumeBody::CheckCollision(const vec3& a, const vec3& b)
+{
+
+ for (int i=0; i<3; i++)
+ {
+ if (max(a.v[i], b.v[i]) < DimensionalMinPos.v[i])
+ {
+ return false;
+ }
+
+ if (min(a.v[i], b.v[i]) > DimensionalMaxPos.v[i])
+ {
+ return false;
+ }
+ }
+
+ BOOST_FOREACH(TSmpTriangle& smpTriangle, SmpTriangleArr)
+ {
+ if (LineCouldCrossTriangle(a, b, smpTriangle))
+ {
+ if (LineCrossTriangle(a, b, smpTriangle) == 1)
+ {
+ return true;
+ }
+ }
+ }
+
+ return false;
+}
+
+
+
+} //namespace SE
\ No newline at end of file
diff --git a/src/Render/SalmonRender/Cameras.cpp b/src/Render/SalmonRender/Cameras.cpp
new file mode 100644
index 0000000..76e3718
--- /dev/null
+++ b/src/Render/SalmonRender/Cameras.cpp
@@ -0,0 +1,222 @@
+#include "include/Render/SalmonRender/Cameras.h"
+#include "include/Engine.h"
+
+namespace SE
+{
+
+TCameraInterface::TCameraInterface()
+ : CamShift(ZeroVec3)
+{
+ CamVec = vec3(0,0,-1);
+}
+
+TPanoramicCamera::TPanoramicCamera()
+ : CamAlpha(0.0f)
+ , CamPhi(0.0f)
+ , CamDist(0.0f)
+{
+}
+
+
+void TPanoramicCamera::MoveAlpha(float dAlpha)
+{
+ if (dAlpha == 0.0f)
+ return;
+
+ CamAlpha += dAlpha;
+
+ while (CamAlpha >= 2*pi)
+ {
+ CamAlpha -= 2*pi;
+ }
+
+ while (CamAlpha<0.0f)
+ {
+ CamAlpha += 2*pi;
+ }
+
+ //Possibly refactor???
+ Renderer->CalcCamPosVec();
+
+}
+
+void TPanoramicCamera::MovePhi(float dPhi)
+{
+ if (dPhi == 0.0f)
+ return;
+
+ //float oldCamPhi = CamPhi;
+ CamPhi += dPhi;
+
+ if (CamPhi > CONST_MAX_CAM_PHI)
+ {
+ CamPhi = CONST_MAX_CAM_PHI;
+ }
+
+ if (CamPhi < CONST_MIN_CAM_PHI)
+ {
+ CamPhi = CONST_MIN_CAM_PHI;
+ }
+
+ //Possibly refactor???
+ Renderer->CalcCamPosVec();
+
+}
+
+void TPanoramicCamera::MoveDist(float dDist)
+{
+ CamDist += dDist;
+
+ if (CamDistCalcCamPosVec();
+
+}
+
+void TPanoramicCamera::SetAlpha(float alpha)
+{
+ if (alpha == CamAlpha)
+ return;
+
+ CamAlpha = alpha;
+
+ while (CamAlpha >= 2*pi)
+ {
+ CamAlpha -= 2*pi;
+ }
+
+ while (CamAlpha<0.0f)
+ {
+ CamAlpha += 2*pi;
+ }
+
+ //Possibly refactor???
+ Renderer->CalcCamPosVec();
+}
+
+void TPanoramicCamera::MoveForward()
+{
+ vec3 mov;
+
+ float sina = sinf(CamAlpha);
+ float cosa = cosf(CamAlpha);
+
+ mov.v[0] = sina;
+ mov.v[1] = 0;
+ mov.v[2] = - cosa;
+
+ CamShift = CamShift + mov;
+
+ //Possibly refactor???
+ Renderer->CalcCamPosVec();
+}
+
+void TPanoramicCamera::MoveBackward()
+{
+ vec3 mov;
+
+ float sina = sinf(CamAlpha);
+ float cosa = cosf(CamAlpha);
+
+ mov.v[0] = - sina;
+ mov.v[1] = 0;
+ mov.v[2] = cosa;
+
+ CamShift = CamShift + mov;
+ //Possibly refactor???
+ Renderer->CalcCamPosVec();
+
+}
+
+void TPanoramicCamera::MoveLeft()
+{
+ vec3 mov;
+
+ float sina = sinf(CamAlpha);
+ float cosa = cosf(CamAlpha);
+
+ mov.v[0] = - cosa;
+ mov.v[1] = 0;
+ mov.v[2] = - sina;
+
+ CamShift = CamShift + mov;
+
+ //Possibly refactor???
+ Renderer->CalcCamPosVec();
+
+}
+
+void TPanoramicCamera::MoveRight()
+{
+ vec3 mov;
+
+ float sina = sinf(CamAlpha);
+ float cosa = cosf(CamAlpha);
+
+ mov.v[0] = cosa;
+ mov.v[1] = 0;
+ mov.v[2] = sina;
+
+ CamShift = CamShift + mov;
+
+ //Possibly refactor???
+ Renderer->CalcCamPosVec();
+
+}
+
+
+void TPanoramicCamera::CalcCamVec()
+{
+ vec3 camPos;
+ vec3 camVec;
+
+ float sina = sinf(CamAlpha);
+ float cosa = cosf(CamAlpha);
+ float sinp = sinf(CamPhi);
+ float cosp = cosf(CamPhi);
+
+ CamVec.v[0] = CamDist * cosp * sina;
+ CamVec.v[1] = - CamDist * sinp;
+ CamVec.v[2] = - CamDist * cosp * cosa;
+
+}
+
+void TPanoramicCamera::SetCamView()
+{
+
+ Renderer->LoadIdentity();
+ Renderer->TranslateMatrix(vec3(0.0f, 0.0f, -CamDist));
+ Renderer->RotateMatrix(vec4(1.f * sin(CamPhi/2.f), 0.f, 0.f, 1.f * cos(CamPhi/2.f)));
+ Renderer->RotateMatrix(vec4(0.f, 1.f * sin(CamAlpha/2.f), 0.f, 1.f * cos(CamAlpha/2.f)));
+ Renderer->TranslateMatrix(-CamShift);
+}
+
+
+void TPitCamera::SetCamView()
+{
+ Renderer->LoadIdentity();
+ Renderer->RotateMatrix(InverseQuat(CameraQuat));
+
+ Renderer->TranslateMatrix(-CamShift);
+}
+
+void TPitCamera::CalcCamVec()
+{
+ vec3 r = vec3(0,0,-1);
+
+ CamVec = Normalize(CameraQuat * vec4(r) * InverseQuat(CameraQuat));
+}
+
+void TPitCamera::RotateByQuat(vec4 quat)
+{
+ CameraQuat = quat * CameraQuat;
+ //float len = Length(CameraQuat);
+}
+
+
+} //namespace SE
\ No newline at end of file
diff --git a/src/Render/SalmonRender/SalmonRenderInterface.cpp b/src/Render/SalmonRender/SalmonRenderInterface.cpp
index 4a3b81e..2014447 100644
--- a/src/Render/SalmonRender/SalmonRenderInterface.cpp
+++ b/src/Render/SalmonRender/SalmonRenderInterface.cpp
@@ -6,220 +6,6 @@
namespace SE
{
-TCameraInterface::TCameraInterface()
- : CamShift(ZeroVec3)
- , CamVec(ZeroVec3)
-{
-}
-
-TPanoramicCamera::TPanoramicCamera()
- : CamAlpha(0.0f)
- , CamPhi(0.0f)
- , CamDist(0.0f)
-{
-}
-
-
-void TPanoramicCamera::MoveAlpha(float dAlpha)
-{
- if (dAlpha == 0.0f)
- return;
-
- CamAlpha += dAlpha;
-
- while (CamAlpha >= 2*pi)
- {
- CamAlpha -= 2*pi;
- }
-
- while (CamAlpha<0.0f)
- {
- CamAlpha += 2*pi;
- }
-
- //Possibly refactor???
- Renderer->CalcCamPosVec();
-
-}
-
-void TPanoramicCamera::MovePhi(float dPhi)
-{
- if (dPhi == 0.0f)
- return;
-
- //float oldCamPhi = CamPhi;
- CamPhi += dPhi;
-
- if (CamPhi > CONST_MAX_CAM_PHI)
- {
- CamPhi = CONST_MAX_CAM_PHI;
- }
-
- if (CamPhi < CONST_MIN_CAM_PHI)
- {
- CamPhi = CONST_MIN_CAM_PHI;
- }
-
- //Possibly refactor???
- Renderer->CalcCamPosVec();
-
-}
-
-void TPanoramicCamera::MoveDist(float dDist)
-{
- CamDist += dDist;
-
- if (CamDistCalcCamPosVec();
-
-}
-
-void TPanoramicCamera::SetAlpha(float alpha)
-{
- if (alpha == CamAlpha)
- return;
-
- CamAlpha = alpha;
-
- while (CamAlpha >= 2*pi)
- {
- CamAlpha -= 2*pi;
- }
-
- while (CamAlpha<0.0f)
- {
- CamAlpha += 2*pi;
- }
-
- //Possibly refactor???
- Renderer->CalcCamPosVec();
-}
-
-void TPanoramicCamera::MoveForward()
-{
- vec3 mov;
-
- float sina = sinf(CamAlpha);
- float cosa = cosf(CamAlpha);
-
- mov.v[0] = sina;
- mov.v[1] = 0;
- mov.v[2] = - cosa;
-
- CamShift = CamShift + mov;
-
- //Possibly refactor???
- Renderer->CalcCamPosVec();
-}
-
-void TPanoramicCamera::MoveBackward()
-{
- vec3 mov;
-
- float sina = sinf(CamAlpha);
- float cosa = cosf(CamAlpha);
-
- mov.v[0] = - sina;
- mov.v[1] = 0;
- mov.v[2] = cosa;
-
- CamShift = CamShift + mov;
- //Possibly refactor???
- Renderer->CalcCamPosVec();
-
-}
-
-void TPanoramicCamera::MoveLeft()
-{
- vec3 mov;
-
- float sina = sinf(CamAlpha);
- float cosa = cosf(CamAlpha);
-
- mov.v[0] = - cosa;
- mov.v[1] = 0;
- mov.v[2] = - sina;
-
- CamShift = CamShift + mov;
-
- //Possibly refactor???
- Renderer->CalcCamPosVec();
-
-}
-
-void TPanoramicCamera::MoveRight()
-{
- vec3 mov;
-
- float sina = sinf(CamAlpha);
- float cosa = cosf(CamAlpha);
-
- mov.v[0] = cosa;
- mov.v[1] = 0;
- mov.v[2] = sina;
-
- CamShift = CamShift + mov;
-
- //Possibly refactor???
- Renderer->CalcCamPosVec();
-
-}
-
-
-void TPanoramicCamera::CalcCamVec()
-{
- vec3 camPos;
- vec3 camVec;
-
- float sina = sinf(CamAlpha);
- float cosa = cosf(CamAlpha);
- float sinp = sinf(CamPhi);
- float cosp = cosf(CamPhi);
-
- CamVec.v[0] = CamDist * cosp * sina;
- CamVec.v[1] = - CamDist * sinp;
- CamVec.v[2] = - CamDist * cosp * cosa;
-
-}
-
-void TPanoramicCamera::SetCamView()
-{
-
- Renderer->LoadIdentity();
- Renderer->TranslateMatrix(vec3(0.0f, 0.0f, -CamDist));
- Renderer->RotateMatrix(vec4(1.f * sin(CamPhi/2.f), 0.f, 0.f, 1.f * cos(CamPhi/2.f)));
- Renderer->RotateMatrix(vec4(0.f, 1.f * sin(CamAlpha/2.f), 0.f, 1.f * cos(CamAlpha/2.f)));
- Renderer->TranslateMatrix(-CamShift);
-}
-
-
-void TPitCamera::SetCamView()
-{
- Renderer->LoadIdentity();
- Renderer->RotateMatrix(InverseQuat(CameraQuat));
-
- Renderer->TranslateMatrix(-CamShift);
-}
-
-void TPitCamera::CalcCamVec()
-{
- vec3 r = vec3(0,0,-1);
-
- CamVec = Normalize(CameraQuat * vec4(r) * InverseQuat(CameraQuat));
-}
-
-void TPitCamera::RotateByQuat(vec4 quat)
-{
- CameraQuat = quat * CameraQuat;
- //float len = Length(CameraQuat);
-}
-
//============================================
//============================================
//============================================
@@ -273,6 +59,11 @@ void TSalmonRendererInterface::SetUniforms()
RenderUniform3fv(CONST_STRING_CAMPOS_UNIFORM, GetCamPos().v);
+ RenderUniform1f(CONST_STRING_TRANSPARENCY_UNIFORM, 1.f);
+
+ RenderUniform4fv(CONST_STRING_MATERIAL_COLOR_UNIFORM, WhiteColor);
+
+
ResourceManager->LightManager.SetLightUniforms();
}
@@ -289,10 +80,6 @@ void TSalmonRendererInterface::InitOpenGL(int screenWidth, int screenHeight, flo
MatrixWidth = matrixWidth;
MatrixHeight = matrixHeight;
- SetPerspectiveProjectionMatrix(pi / 6.f, 1.0, 1.0f, 100.0f); //Baad =(
-
- SetPerspectiveFullScreenViewport();
-
glEnable(GL_DEPTH_TEST);
#ifdef TARGET_WIN32
glEnable(GL_LIGHTING);
@@ -331,14 +118,24 @@ void TSalmonRendererInterface::SetPerspectiveFullScreenViewport()
SetPerspectiveProjectionMatrix(pi / 6.f, float(MatrixWidth) / float(MatrixHeight), 1.0f, 100.0f);
}
+void TSalmonRendererInterface::SetPerspectiveProjection(float angle, float zNear, float zFar)
+{
+ SetPerspectiveProjectionMatrix(angle, float(MatrixWidth) / float(MatrixHeight), zNear, zFar);
+}
+
+
void TSalmonRendererInterface::SetOrthoFullScreenViewport()
{
-
glViewport(0, 0, ScreenWidth, ScreenHeight);
SetProjectionMatrix(static_cast(MatrixWidth), static_cast(MatrixHeight));
}
+void TSalmonRendererInterface::SetOrthoProjection()
+{
+ SetProjectionMatrix(static_cast(MatrixWidth), static_cast(MatrixHeight));
+}
+
mat4 TSalmonRendererInterface::GetModelviewMatrix()
{
@@ -394,15 +191,7 @@ void TSalmonRendererInterface::SetGLCamView()
void TSalmonRendererInterface::SetGlIdentityView()
{
- /*
- glLoadIdentity();
-
- glGetFloatv(GL_MODELVIEW_MATRIX,CamModelViewMatrix.m);
-
- CamInversedModelViewMatrix = InverseModelViewMatrix(CamModelViewMatrix);
-
- RenderUniform3fv(CONST_STRING_CAMPOS_UNIFORM, (float*)ZeroVec3.v);*/
-
+
LoadIdentity();
CamModelViewMatrix = ModelviewMatrixStack.top();
@@ -413,16 +202,6 @@ void TSalmonRendererInterface::SetGlIdentityView()
void TSalmonRendererInterface::SetGlPosXView()
{
- /*
- glLoadIdentity();
- glRotatef ( 90.0, 0.0, 1.0, 0.0 );
- glRotatef ( 180.0, 1.0, 0.0, 0.0 );
- glTranslatef(-CamPos.v[0], -CamPos.v[1], -CamPos.v[2]);
-
- glGetFloatv(GL_MODELVIEW_MATRIX,CamModelViewMatrix.m);
-
- CamInversedModelViewMatrix = InverseModelViewMatrix(CamModelViewMatrix);*/
-
LoadIdentity();
RotateMatrix(vec4(0.f, 1.f * sin(pi / 4.f), 0.f, 1.f * cos(pi / 4.f)));
@@ -439,16 +218,7 @@ void TSalmonRendererInterface::SetGlPosXView()
void TSalmonRendererInterface::SetGlNegXView()
{
- /*
- glLoadIdentity();
- glRotatef ( -90.0, 0.0, 1.0, 0.0 );
- glRotatef ( 180.0, 1.0, 0.0, 0.0 );
- glTranslatef(-CamPos.v[0], -CamPos.v[1], -CamPos.v[2]);
-
- glGetFloatv(GL_MODELVIEW_MATRIX,CamModelViewMatrix.m);
-
- CamInversedModelViewMatrix = InverseModelViewMatrix(CamModelViewMatrix);*/
-
+
LoadIdentity();
RotateMatrix(vec4(0.f, -1.f * sin(pi / 4.f), 0.f, 1.f * cos(pi / 4.f)));
@@ -464,15 +234,7 @@ void TSalmonRendererInterface::SetGlNegXView()
void TSalmonRendererInterface::SetGlPosYView()
{
- /*
- glLoadIdentity();
- glRotatef ( -90.0, 1.0, 0.0, 0.0 );
- glTranslatef(-CamPos.v[0], -CamPos.v[1], -CamPos.v[2]);
-
- glGetFloatv(GL_MODELVIEW_MATRIX,CamModelViewMatrix.m);
-
- CamInversedModelViewMatrix = InverseModelViewMatrix(CamModelViewMatrix);*/
-
+
LoadIdentity();
RotateMatrix(vec4(-1.f * sin(pi / 4.f), 0.f, 0.f, 1.f * cos(pi / 4.f)));
@@ -487,15 +249,7 @@ void TSalmonRendererInterface::SetGlPosYView()
void TSalmonRendererInterface::SetGlNegYView()
{
- /*
- glLoadIdentity();
- glRotatef ( 90.0, 1.0, 0.0, 0.0 );
- glTranslatef(-CamPos.v[0], -CamPos.v[1], -CamPos.v[2]);
-
- glGetFloatv(GL_MODELVIEW_MATRIX,CamModelViewMatrix.m);
-
- CamInversedModelViewMatrix = InverseModelViewMatrix(CamModelViewMatrix);*/
-
+
LoadIdentity();
RotateMatrix(vec4(1.f * sin(pi / 4.f), 0.f, 0.f, 1.f * cos(pi / 4.f)));
@@ -509,17 +263,7 @@ void TSalmonRendererInterface::SetGlNegYView()
void TSalmonRendererInterface::SetGlPosZView()
{
- /*
- glLoadIdentity();
- glRotatef ( 180.0, 0.0, 1.0, 0.0 );
- glRotatef ( 180.0, 0.0, 0.0, 1.0 );
- glTranslatef(-CamPos.v[0], -CamPos.v[1], -CamPos.v[2]);
-
- glGetFloatv(GL_MODELVIEW_MATRIX,CamModelViewMatrix.m);
-
- CamInversedModelViewMatrix = InverseModelViewMatrix(CamModelViewMatrix);
- */
-
+
LoadIdentity();
RotateMatrix(vec4(0.f, 1.f * sin(pi / 2.f), 0.f, 1.f * cos(pi / 2.f)));
@@ -535,15 +279,7 @@ void TSalmonRendererInterface::SetGlPosZView()
void TSalmonRendererInterface::SetGlNegZView()
{
- /*
- glLoadIdentity();
- glRotatef ( 180.0, 0.0, 0.0, 1.0 );
- glTranslatef(-CamPos.v[0], -CamPos.v[1], -CamPos.v[2]);
-
- glGetFloatv(GL_MODELVIEW_MATRIX,CamModelViewMatrix.m);
-
- CamInversedModelViewMatrix = InverseModelViewMatrix(CamModelViewMatrix);*/
-
+
LoadIdentity();
RotateMatrix(vec4(0.f, 0.f, 1.f * sin(pi / 2.f), 1.f * cos(pi / 2.f)));
@@ -567,8 +303,6 @@ vec3 TSalmonRendererInterface::GetCamPos()
void TSalmonRendererInterface::SwitchToScreen()
{
glBindFramebuffer(GL_FRAMEBUFFER, 0);
- SetPerspectiveFullScreenViewport();
- SetGLCamView();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
@@ -583,7 +317,6 @@ void TSalmonRendererInterface::SwitchToFrameBuffer(const std::string& frameName)
SetFrameViewport(frameName);
- SetGLCamView();
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
}
}
@@ -598,15 +331,7 @@ void TSalmonRendererInterface::SwitchToCubemapBuffer(const std::string& frameNam
glBindFramebuffer(GL_FRAMEBUFFER, Frame.FrameBuffer);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_CUBE_MAP_POSITIVE_X + cubeSide, Frame.TexID, 0);
- /*
- glMatrixMode(GL_PROJECTION);
- glLoadIdentity();
- gluPerspective(90, 1, 1, 100);
- glViewport(0, 0, Frame.Width, Frame.Height);
- glMatrixMode(GL_MODELVIEW);*/
-
- SetPerspectiveProjectionMatrix(90, 1, 1, 100);
-
+
SetFrameViewport(frameName);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //IS A MUST!!!
diff --git a/src/SalmonEngineInterface.cpp b/src/SalmonEngineInterface.cpp
index 2b6ec6c..9d5cb8e 100644
--- a/src/SalmonEngineInterface.cpp
+++ b/src/SalmonEngineInterface.cpp
@@ -44,6 +44,12 @@ void TApplicationAncestor::OuterDraw()
InnerDraw();
glDisable(GL_DEPTH_TEST);
+
+ Renderer->SetOrthoProjection();
+ Renderer->LoadIdentity();
+
+ ResourceManager->GUIManager.Draw();
+
Renderer->PushShader("DefaultShader");
if (IsConsoleOut)
@@ -59,6 +65,8 @@ void TApplicationAncestor::OuterUpdate(cardinal timer)
{
ResourceManager->SoundManager.Update(timer);
+ ResourceManager->GUIManager.Update(timer);
+
InnerUpdate(timer);
CheckGlError();
@@ -67,19 +75,24 @@ void TApplicationAncestor::OuterUpdate(cardinal timer)
void TApplicationAncestor::OuterOnTapDown(vec2 p)
{
- //ResourceManager->GUIManager.OnMouseDown(p);
+ ResourceManager->GUIManager.OnMouseDown(p);
InnerOnTapDown(p);
}
void TApplicationAncestor::OuterOnTapUp(vec2 p)
{
- //ResourceManager->GUIManager.OnMouseUp(p);
+ ResourceManager->GUIManager.OnMouseUp(p);
InnerOnTapUp(p);
}
+void TApplicationAncestor::OuterOnTapUpAfterShift(vec2 p)
+{
+ InnerOnTapUpAfterShift(p);
+}
+
void TApplicationAncestor::OuterOnMove(vec2 shift)
{
- //ResourceManager->GUIManager.OnMove(shift);
+ ResourceManager->GUIManager.OnMove(shift);
InnerOnMove(shift);
}
diff --git a/src/SalmonEngineWindows.cpp b/src/SalmonEngineWindows.cpp
index abae2f1..c8e4343 100644
--- a/src/SalmonEngineWindows.cpp
+++ b/src/SalmonEngineWindows.cpp
@@ -132,13 +132,23 @@ void DrawScene()
void ProcessTickCount()
{
+ //Can't choose witch one is better
+ /*
App->UpdateQuick();
NewTickCount = GetTickCount();
if (NewTickCount - LastTickCount > CONST_TIMER_INTERVAL)
{
LastTickCount = NewTickCount;
App->OuterUpdate(CONST_TIMER_INTERVAL);
+ }*/
+
+
+ NewTickCount = GetTickCount();
+ if (NewTickCount - LastTickCount > CONST_TIMER_INTERVAL)
+ {
+ App->OuterUpdate(NewTickCount - LastTickCount);
+ LastTickCount = NewTickCount;
}
}
@@ -247,7 +257,11 @@ case WM_MOUSEMOVE:
mouseState.MiddleButtonPressed = (wParam & MK_MBUTTON);
mouseState.MiddleButtonPressed = (wParam & MK_RBUTTON);
- if (!MouseMoved)
+ if (MouseMoved)
+ {
+ App->OuterOnTapUpAfterShift(vec2(static_cast(mouseState.X), static_cast(App->Height - mouseState.Y)));
+ }
+ else
{
App->OuterOnTapUp(vec2(static_cast(mouseState.X), static_cast(App->Height - mouseState.Y)));
}