One hell of a GUI interface (minus graphical)
"how does this even work lol"
This commit is contained in:
+6
-7
@@ -1,10 +1,9 @@
|
|||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
#include "Camera.h"
|
#include "Camera.h"
|
||||||
|
|
||||||
Camera::Camera(float yFOV, float aspectRatio, float nearClip, float farClip)
|
Camera::Camera(float yFOV, float nearClip, float farClip)
|
||||||
{
|
{
|
||||||
m_FOV = yFOV;
|
m_FOV = yFOV;
|
||||||
m_AspectRatio = aspectRatio;
|
|
||||||
m_NearClip = nearClip;
|
m_NearClip = nearClip;
|
||||||
m_FarClip = farClip;
|
m_FarClip = farClip;
|
||||||
|
|
||||||
@@ -31,14 +30,14 @@ Camera::Camera(float yFOV, float aspectRatio, float nearClip, float farClip)
|
|||||||
// return orientation;
|
// return orientation;
|
||||||
//}
|
//}
|
||||||
|
|
||||||
void Camera::Position(glm::vec3 val)
|
void Camera::SetPosition(glm::vec3 val)
|
||||||
{
|
{
|
||||||
m_Position = val;
|
m_Position = val;
|
||||||
UpdateViewMatrix();
|
UpdateViewMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Camera::Orientation(glm::quat val)
|
void Camera::SetOrientation(glm::quat val)
|
||||||
{
|
{
|
||||||
m_Orientation = val;
|
m_Orientation = val;
|
||||||
UpdateViewMatrix();
|
UpdateViewMatrix();
|
||||||
@@ -61,17 +60,17 @@ void Camera::UpdateViewMatrix()
|
|||||||
m_ViewMatrix = glm::toMat4(glm::inverse(m_Orientation)) * glm::translate(-m_Position);
|
m_ViewMatrix = glm::toMat4(glm::inverse(m_Orientation)) * glm::translate(-m_Position);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::FOV(float val)
|
void Camera::SetFOV(float val)
|
||||||
{
|
{
|
||||||
m_FOV = val;
|
m_FOV = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::NearClip(float val)
|
void Camera::SetNearClip(float val)
|
||||||
{
|
{
|
||||||
m_NearClip = val;
|
m_NearClip = val;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Camera::FarClip(float val)
|
void Camera::SetFarClip(float val)
|
||||||
{
|
{
|
||||||
m_FarClip = val;
|
m_FarClip = val;
|
||||||
}
|
}
|
||||||
|
|||||||
+10
-10
@@ -7,26 +7,26 @@
|
|||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
#include "InputManager.h"
|
#include "InputManager.h"
|
||||||
#include "GUI/Frame.h"
|
#include "GUI/Frame.h"
|
||||||
#include "GameWorld.h"
|
#include "GUI/GameFrame.h"
|
||||||
|
|
||||||
class Engine
|
class Engine
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Engine(int argc, char* argv[])
|
Engine(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
m_ResourceManager = std::make_shared<ResourceManager>();
|
|
||||||
|
|
||||||
m_EventBroker = std::make_shared<EventBroker>();
|
m_EventBroker = std::make_shared<EventBroker>();
|
||||||
|
m_ResourceManager = std::make_shared<ResourceManager>();
|
||||||
|
|
||||||
m_Renderer = std::make_shared<Renderer>();
|
m_Renderer = std::make_shared<Renderer>();
|
||||||
m_Renderer->Initialize();
|
m_Renderer->Initialize();
|
||||||
|
|
||||||
m_InputManager = std::make_shared<InputManager>(m_Renderer->GetWindow(), m_EventBroker);
|
m_InputManager = std::make_shared<InputManager>(m_Renderer->GetWindow(), m_EventBroker);
|
||||||
|
|
||||||
m_FrameStack = std::make_shared<GUI::Frame>(m_EventBroker, m_Renderer);
|
m_FrameStack = new GUI::Frame(m_EventBroker, m_ResourceManager);
|
||||||
|
new GUI::GameFrame(m_FrameStack, "GameFrame");
|
||||||
|
|
||||||
m_World = std::make_shared<GameWorld>(m_EventBroker, m_Renderer);
|
//m_World = std::make_shared<GameWorld>(m_EventBroker, m_ResourceManager);
|
||||||
m_World->Initialize();
|
//m_World->Initialize();
|
||||||
|
|
||||||
m_LastTime = glfwGetTime();
|
m_LastTime = glfwGetTime();
|
||||||
}
|
}
|
||||||
@@ -40,8 +40,8 @@ public:
|
|||||||
m_LastTime = currentTime;
|
m_LastTime = currentTime;
|
||||||
|
|
||||||
m_InputManager->Update(dt);
|
m_InputManager->Update(dt);
|
||||||
m_World->Update(dt);
|
m_FrameStack->DrawLayered(m_Renderer);
|
||||||
m_Renderer->Draw(dt);
|
|
||||||
m_EventBroker->Clear();
|
m_EventBroker->Clear();
|
||||||
|
|
||||||
glfwPollEvents();
|
glfwPollEvents();
|
||||||
@@ -52,9 +52,9 @@ private:
|
|||||||
std::shared_ptr<EventBroker> m_EventBroker;
|
std::shared_ptr<EventBroker> m_EventBroker;
|
||||||
std::shared_ptr<Renderer> m_Renderer;
|
std::shared_ptr<Renderer> m_Renderer;
|
||||||
std::shared_ptr<InputManager> m_InputManager;
|
std::shared_ptr<InputManager> m_InputManager;
|
||||||
std::shared_ptr<GUI::Frame> m_FrameStack;
|
GUI::Frame* m_FrameStack;
|
||||||
// TODO: This should ultimately live in GameFrame
|
// TODO: This should ultimately live in GameFrame
|
||||||
std::shared_ptr<GameWorld> m_World;
|
//std::shared_ptr<GameWorld> m_World;
|
||||||
|
|
||||||
double m_LastTime;
|
double m_LastTime;
|
||||||
};
|
};
|
||||||
+74
-27
@@ -31,17 +31,29 @@ public:
|
|||||||
, ResourceManager(resourceManager)
|
, ResourceManager(resourceManager)
|
||||||
, Rectangle()
|
, Rectangle()
|
||||||
, m_Name("UIParent")
|
, m_Name("UIParent")
|
||||||
{ Initialize(); }
|
, m_Layer(0)
|
||||||
|
{ }
|
||||||
|
|
||||||
// Create a frame as a child
|
// Create a frame as a child
|
||||||
Frame(std::shared_ptr<Frame> parent, std::string name)
|
Frame(Frame* parent, std::string name)
|
||||||
: Rectangle(static_cast<Rectangle>(*parent)) // Clone parent rectangle using copy constructor
|
: Rectangle(static_cast<Rectangle>(*parent)) // Clone parent rectangle using copy constructor
|
||||||
, m_Name(name)
|
, m_Name(name)
|
||||||
{ SetParent(parent); Initialize(); }
|
, m_Layer(0)
|
||||||
|
{ SetParent(std::shared_ptr<Frame>(parent)); }
|
||||||
|
|
||||||
|
|
||||||
|
::RenderQueue RenderQueue;
|
||||||
|
|
||||||
virtual void Initialize() { }
|
|
||||||
std::shared_ptr<Frame> Parent() const { return m_Parent; }
|
std::shared_ptr<Frame> Parent() const { return m_Parent; }
|
||||||
void SetParent(std::shared_ptr<Frame> parent)
|
void SetParent(std::shared_ptr<Frame> parent)
|
||||||
{
|
{
|
||||||
|
if (parent == nullptr)
|
||||||
|
{
|
||||||
|
LOG_ERROR("Failed to create frame \"%s\": Invalid parent", m_Name.c_str());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
m_Layer = parent->Layer() + 1;
|
||||||
parent->AddChild(std::shared_ptr<Frame>(this));
|
parent->AddChild(std::shared_ptr<Frame>(this));
|
||||||
m_Parent = parent;
|
m_Parent = parent;
|
||||||
EventBroker = parent->EventBroker;
|
EventBroker = parent->EventBroker;
|
||||||
@@ -50,25 +62,56 @@ public:
|
|||||||
|
|
||||||
void AddChild(std::shared_ptr<Frame> child)
|
void AddChild(std::shared_ptr<Frame> child)
|
||||||
{
|
{
|
||||||
m_Children.push_back(std::make_pair(child->Name(), child));
|
m_Children[child->m_Layer].insert(std::make_pair(child->Name(), child));
|
||||||
|
if (m_Parent)
|
||||||
|
{
|
||||||
|
m_Parent->AddChild(child);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
typedef std::map<std::string, std::shared_ptr<Frame>>::const_iterator FrameChildrenIterator;
|
typedef std::map<std::string, std::shared_ptr<Frame>>::const_iterator FrameChildrenIterator;
|
||||||
FrameChildrenIterator begin()
|
|
||||||
{
|
|
||||||
return m_Children.begin();
|
|
||||||
}
|
|
||||||
FrameChildrenIterator end()
|
|
||||||
{
|
|
||||||
return m_Children.end();
|
|
||||||
}
|
|
||||||
|
|
||||||
std::string Name() const { return m_Name; }
|
std::string Name() const { return m_Name; }
|
||||||
void SetName(std::string val) { m_Name = val; }
|
void SetName(std::string val) { m_Name = val; }
|
||||||
|
int Layer() const { return m_Layer; }
|
||||||
|
|
||||||
|
int Left() const override
|
||||||
|
{
|
||||||
|
if (m_Parent)
|
||||||
|
return m_Parent->Left() + X;
|
||||||
|
else
|
||||||
|
return X;
|
||||||
|
}
|
||||||
|
int Right() const override
|
||||||
|
{
|
||||||
|
if (m_Parent)
|
||||||
|
return m_Parent->Right() + X + Width;
|
||||||
|
else
|
||||||
|
return X + Width;
|
||||||
|
}
|
||||||
|
int Top() const override
|
||||||
|
{
|
||||||
|
if (m_Parent)
|
||||||
|
return m_Parent->Top() + Y;
|
||||||
|
else
|
||||||
|
return Y;
|
||||||
|
}
|
||||||
|
int Bottom() const override
|
||||||
|
{
|
||||||
|
if (m_Parent)
|
||||||
|
return m_Parent->Bottom() + Y + Height;
|
||||||
|
else
|
||||||
|
return Y + Height;
|
||||||
|
}
|
||||||
|
|
||||||
|
Rectangle AbsoluteRectangle()
|
||||||
|
{
|
||||||
|
return Rectangle(Left(), Right(), Width, Height);
|
||||||
|
}
|
||||||
|
|
||||||
virtual void Update(double dt)
|
virtual void Update(double dt)
|
||||||
{
|
{
|
||||||
for (auto &pair : m_Children)
|
for (auto &pair : m_Children[m_Layer + 1])
|
||||||
{
|
{
|
||||||
pair.second->Update(dt);
|
pair.second->Update(dt);
|
||||||
}
|
}
|
||||||
@@ -76,31 +119,35 @@ public:
|
|||||||
|
|
||||||
void DrawLayered(std::shared_ptr<Renderer> renderer)
|
void DrawLayered(std::shared_ptr<Renderer> renderer)
|
||||||
{
|
{
|
||||||
renderer->SetViewport(GetLeft(), GetTop(), GetRight(), GetBottom());
|
// Draw ourselves
|
||||||
|
renderer->SetViewport(AbsoluteRectangle());
|
||||||
this->Draw(renderer);
|
this->Draw(renderer);
|
||||||
renderer->Draw();
|
|
||||||
|
|
||||||
for (auto &pair : m_Children)
|
// Draw children
|
||||||
|
for (auto &pairLayer : m_Children)
|
||||||
{
|
{
|
||||||
pair.second->Draw(renderer);
|
auto children = pairLayer.second;
|
||||||
|
for (auto &pairChild : children)
|
||||||
|
{
|
||||||
|
auto child = pairChild.second;
|
||||||
|
renderer->SetViewport(child->AbsoluteRectangle());
|
||||||
|
child->Draw(renderer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void Draw(std::shared_ptr<Renderer> renderer)
|
virtual void Draw(std::shared_ptr<Renderer> renderer) { }
|
||||||
{
|
|
||||||
renderer->SetViewport(GetLeft(), GetTop(), GetRight(), GetBottom());
|
|
||||||
renderer->Draw();
|
|
||||||
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::shared_ptr<::EventBroker> EventBroker;
|
std::shared_ptr<::EventBroker> EventBroker;
|
||||||
std::shared_ptr<::ResourceManager> ResourceManager;
|
std::shared_ptr<::ResourceManager> ResourceManager;
|
||||||
|
|
||||||
std::string m_Name;
|
std::string m_Name;
|
||||||
|
int m_Layer;
|
||||||
|
|
||||||
std::shared_ptr<Frame> m_Parent;
|
std::shared_ptr<Frame> m_Parent;
|
||||||
std::multimap<std::string, std::shared_ptr<Frame>> m_Children; // name -> frame
|
typedef std::multimap<std::string, std::shared_ptr<Frame>> Children_t; // name -> frame
|
||||||
|
std::map<int, Children_t> m_Children; // layer -> Children_t
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -0,0 +1,45 @@
|
|||||||
|
#ifndef GUI_GameFrame_h__
|
||||||
|
#define GUI_GameFrame_h__
|
||||||
|
|
||||||
|
#include "GUI/Frame.h"
|
||||||
|
#include "GUI/WorldFrame.h"
|
||||||
|
#include "GUI/Viewport.h"
|
||||||
|
|
||||||
|
#include "GameWorld.h"
|
||||||
|
|
||||||
|
namespace GUI
|
||||||
|
{
|
||||||
|
|
||||||
|
class GameFrame : public Frame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
GameFrame(Frame* parent, std::string name)
|
||||||
|
: Frame(parent, name)
|
||||||
|
{
|
||||||
|
m_World = std::make_shared<GameWorld>(EventBroker, ResourceManager);
|
||||||
|
m_World->Initialize();
|
||||||
|
|
||||||
|
auto worldFrame = new WorldFrame(this, "GameWorldFrame", m_World);
|
||||||
|
{
|
||||||
|
new Viewport(worldFrame, "Viewport1", m_World);
|
||||||
|
new Viewport(worldFrame, "Viewport2", m_World);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void Update(double dt) override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void Draw(std::shared_ptr<Renderer> renderer) override
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::shared_ptr<GameWorld> m_World;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif // GUI_GameFrame_h__
|
||||||
+6
-15
@@ -13,28 +13,19 @@ public:
|
|||||||
TextureFrame(std::shared_ptr<Frame> parent, std::string name)
|
TextureFrame(std::shared_ptr<Frame> parent, std::string name)
|
||||||
: Frame(parent, name) { }
|
: Frame(parent, name) { }
|
||||||
|
|
||||||
void Update(double dt) override
|
|
||||||
{
|
|
||||||
Frame::Update(dt);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Draw(std::shared_ptr<Renderer> renderer) override
|
void Draw(std::shared_ptr<Renderer> renderer) override
|
||||||
{
|
{
|
||||||
if (m_Texture == nullptr)
|
if (m_Texture == nullptr)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
RenderQueue<SpriteJob> rq;
|
RenderQueue.Clear();
|
||||||
|
|
||||||
auto textureAsset = ResourceManager->Load<Texture>("Texture", m_Texture);
|
|
||||||
|
|
||||||
SpriteJob job;
|
SpriteJob job;
|
||||||
|
job.TextureID = m_Texture->ResourceID;
|
||||||
|
job.Texture = *m_Texture;
|
||||||
|
RenderQueue.Add(job);
|
||||||
|
|
||||||
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
renderer->SetCamera(nullptr);
|
||||||
glm::quat orientation2D = glm::angleAxis(glm::eulerAngles(absoluteTransform->Orientation).z, glm::vec3(0, 0, -1));
|
renderer->Draw(RenderQueue);
|
||||||
glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position);
|
|
||||||
*glm::toMat4(orientation2D)
|
|
||||||
* glm::scale(absoluteTransform.Scale);
|
|
||||||
EnqueueSprite(spriteQueue, textureAsset, modelMatrix);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::shared_ptr<::Texture> Texture() const { return m_Texture; }
|
std::shared_ptr<::Texture> Texture() const { return m_Texture; }
|
||||||
|
|||||||
+12
-9
@@ -5,6 +5,7 @@
|
|||||||
|
|
||||||
#include "GUI/Frame.h"
|
#include "GUI/Frame.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
#include "Systems/TransformSystem.h"
|
||||||
#include "Components/Transform.h"
|
#include "Components/Transform.h"
|
||||||
#include "Components/Camera.h"
|
#include "Components/Camera.h"
|
||||||
#include "RenderQueue.h"
|
#include "RenderQueue.h"
|
||||||
@@ -16,10 +17,12 @@ namespace GUI
|
|||||||
class Viewport : public Frame
|
class Viewport : public Frame
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Viewport(std::shared_ptr<Frame> parent, std::string name, std::shared_ptr<World> world)
|
Viewport(Frame* parent, std::string name, std::shared_ptr<World> world)
|
||||||
: Frame(parent, name)
|
: Frame(parent, name)
|
||||||
, m_World(world)
|
, m_World(world)
|
||||||
{ }
|
{
|
||||||
|
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
|
||||||
|
}
|
||||||
|
|
||||||
EntityID CameraEntity() const { return m_CameraEntity; }
|
EntityID CameraEntity() const { return m_CameraEntity; }
|
||||||
void SetCameraEntity(EntityID cameraEntity)
|
void SetCameraEntity(EntityID cameraEntity)
|
||||||
@@ -35,37 +38,37 @@ public:
|
|||||||
m_Camera = std::make_shared<Camera>(cameraComponent->FOV, cameraComponent->NearClip, cameraComponent->FarClip);
|
m_Camera = std::make_shared<Camera>(cameraComponent->FOV, cameraComponent->NearClip, cameraComponent->FarClip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Initialize() override
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void Update(double dt) override
|
void Update(double dt) override
|
||||||
{
|
{
|
||||||
auto transformComponent = m_World->GetComponent<Components::Transform>(m_CameraEntity);
|
auto transformComponent = m_World->GetComponent<Components::Transform>(m_CameraEntity);
|
||||||
if (!transformComponent)
|
if (!transformComponent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
auto cameraComponent = m_World->GetComponent<Components::Camera>(m_CameraEntity);
|
auto cameraComponent = m_World->GetComponent<Components::Camera>(m_CameraEntity);
|
||||||
if (!cameraComponent)
|
if (!cameraComponent)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(m_CameraEntity);
|
||||||
|
|
||||||
m_Camera->SetFOV(cameraComponent->FOV);
|
m_Camera->SetFOV(cameraComponent->FOV);
|
||||||
m_Camera->SetNearClip(cameraComponent->NearClip);
|
m_Camera->SetNearClip(cameraComponent->NearClip);
|
||||||
m_Camera->SetFarClip(cameraComponent->FarClip);
|
m_Camera->SetFarClip(cameraComponent->FarClip);
|
||||||
|
m_Camera->SetPosition(absoluteTransform.Position);
|
||||||
|
m_Camera->SetOrientation(absoluteTransform.Orientation);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Draw(std::shared_ptr<Renderer> renderer) override
|
void Draw(std::shared_ptr<Renderer> renderer) override
|
||||||
{
|
{
|
||||||
renderer->SetCamera(m_Camera);
|
renderer->SetCamera(m_Camera);
|
||||||
|
renderer->Draw(m_Parent->RenderQueue);
|
||||||
Frame::Draw(renderer);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<World> m_World;
|
std::shared_ptr<World> m_World;
|
||||||
|
std::shared_ptr<Systems::TransformSystem> m_TransformSystem;
|
||||||
std::shared_ptr<Camera> m_Camera;
|
std::shared_ptr<Camera> m_Camera;
|
||||||
EntityID m_CameraEntity;
|
EntityID m_CameraEntity;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
+95
-101
@@ -15,129 +15,123 @@
|
|||||||
namespace GUI
|
namespace GUI
|
||||||
{
|
{
|
||||||
|
|
||||||
class WorldFrame : public Frame
|
class WorldFrame : public Frame
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
WorldFrame(Frame* parent, std::string name, std::shared_ptr<World> world)
|
||||||
|
: Frame(parent, name)
|
||||||
|
, m_World(world)
|
||||||
{
|
{
|
||||||
public:
|
EVENT_SUBSCRIBE_MEMBER(m_ESetViewportCamera, &WorldFrame::OnSetViewportCamera);
|
||||||
WorldFrame(std::shared_ptr<Frame> parent, std::string name, std::shared_ptr<World> world)
|
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
|
||||||
: Frame(parent, name)
|
}
|
||||||
, m_World(world)
|
|
||||||
{ }
|
|
||||||
|
|
||||||
void Initialize() override
|
void Update(double dt) override
|
||||||
|
{
|
||||||
|
m_World->Update(dt);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Draw(std::shared_ptr<Renderer> renderer) override
|
||||||
|
{
|
||||||
|
RenderQueue.Clear();
|
||||||
|
|
||||||
|
for (auto &pair : *m_World->GetEntities())
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_ESetViewportCamera, &WorldFrame::OnSetViewportCamera);
|
EntityID entity = pair.first;
|
||||||
|
|
||||||
m_World->Initialize();
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
}
|
if (!transform)
|
||||||
|
continue;
|
||||||
|
|
||||||
void Update(double dt) override
|
auto modelComponent = m_World->GetComponent<Components::Model>(entity);
|
||||||
{
|
if (modelComponent)
|
||||||
m_World->Update(dt);
|
|
||||||
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
|
|
||||||
}
|
|
||||||
|
|
||||||
void Draw(std::shared_ptr<Renderer> renderer) override
|
|
||||||
{
|
|
||||||
renderer->Flush();
|
|
||||||
|
|
||||||
RenderQueue<ModelJob> modelQueue;
|
|
||||||
RenderQueue<SpriteJob> spriteQueue;
|
|
||||||
for (auto &pair : *m_World->GetEntities())
|
|
||||||
{
|
{
|
||||||
EntityID entity = pair.first;
|
auto modelAsset = ResourceManager->Load<Model>("Model", modelComponent->ModelFile);
|
||||||
|
if (modelAsset)
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
|
||||||
if (!transform)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
auto modelComponent = m_World->GetComponent<Components::Model>(entity);
|
|
||||||
if (modelComponent)
|
|
||||||
{
|
{
|
||||||
auto modelAsset = ResourceManager->Load<Model>("Model", modelComponent->ModelFile);
|
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
||||||
if (modelAsset)
|
glm::mat4 modelMatrix = glm::translate(glm::mat4(), absoluteTransform.Position)
|
||||||
{
|
* glm::toMat4(absoluteTransform.Orientation)
|
||||||
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
* glm::scale(absoluteTransform.Scale);
|
||||||
glm::mat4 modelMatrix = glm::translate(glm::mat4(), absoluteTransform.Position)
|
EnqueueModel(modelAsset, modelMatrix);
|
||||||
* glm::toMat4(absoluteTransform.Orientation)
|
|
||||||
* glm::scale(absoluteTransform.Scale);
|
|
||||||
EnqueueModel(modelQueue, modelAsset, modelMatrix);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity);
|
|
||||||
if (spriteComponent)
|
|
||||||
{
|
|
||||||
auto textureAsset = ResourceManager->Load<Texture>("Texture", spriteComponent->SpriteFile);
|
|
||||||
if (textureAsset)
|
|
||||||
{
|
|
||||||
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
|
||||||
glm::quat orientation2D = glm::angleAxis(glm::eulerAngles(absoluteTransform->Orientation).z, glm::vec3(0, 0, -1));
|
|
||||||
glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position);
|
|
||||||
* glm::toMat4(orientation2D)
|
|
||||||
* glm::scale(absoluteTransform.Scale);
|
|
||||||
EnqueueSprite(spriteQueue, textureAsset, modelMatrix);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
auto pointLightComponent = m_World->GetComponent<Components::PointLight>(entity);
|
|
||||||
if (pointLightComponent)
|
|
||||||
{
|
|
||||||
// TODO: Push lights to renderer
|
|
||||||
// renderer->PushLight(...);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
renderer->PushQueue(rq);
|
auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity);
|
||||||
|
if (spriteComponent)
|
||||||
Frame::Draw(renderer);
|
|
||||||
}
|
|
||||||
|
|
||||||
protected:
|
|
||||||
std::shared_ptr<World> m_World;
|
|
||||||
|
|
||||||
private:
|
|
||||||
EventRelay<Frame, Events::SetViewportCamera> m_ESetViewportCamera;
|
|
||||||
bool OnSetViewportCamera(const Events::SetViewportCamera &event)
|
|
||||||
{
|
|
||||||
auto itpair = m_Children.equal_range(event.ViewportFrame);
|
|
||||||
for (auto it = itpair.first; it != itpair.second; ++it)
|
|
||||||
{
|
{
|
||||||
auto viewportFrame = std::dynamic_pointer_cast<GUI::Viewport>(it->second);
|
auto textureAsset = ResourceManager->Load<Texture>("Texture", spriteComponent->SpriteFile);
|
||||||
if (!viewportFrame)
|
if (textureAsset)
|
||||||
continue;
|
{
|
||||||
|
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
||||||
|
glm::quat orientation2D = glm::angleAxis(glm::eulerAngles(absoluteTransform.Orientation).z, glm::vec3(0, 0, -1));
|
||||||
|
glm::mat4 modelMatrix = glm::translate(absoluteTransform.Position)
|
||||||
|
* glm::toMat4(orientation2D)
|
||||||
|
* glm::scale(absoluteTransform.Scale);
|
||||||
|
EnqueueSprite(textureAsset, modelMatrix);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
viewportFrame->SetCamera(event.CameraEntity);
|
auto pointLightComponent = m_World->GetComponent<Components::PointLight>(entity);
|
||||||
|
if (pointLightComponent)
|
||||||
|
{
|
||||||
|
// TODO: Push lights to renderer
|
||||||
|
// renderer->PushLight(...);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
std::shared_ptr<Systems::TransformSystem> m_TransformSystem;
|
protected:
|
||||||
|
std::shared_ptr<World> m_World;
|
||||||
|
|
||||||
void EnqueueModel(RenderQueue<ModelJob> &renderQueue, Model* model, glm::mat4 modelMatrix)
|
private:
|
||||||
|
EventRelay<Frame, Events::SetViewportCamera> m_ESetViewportCamera;
|
||||||
|
bool OnSetViewportCamera(const Events::SetViewportCamera &event)
|
||||||
|
{
|
||||||
|
// Search next layer for viewports and update cameras
|
||||||
|
auto itpair = m_Children[m_Layer + 1].equal_range(event.ViewportFrame);
|
||||||
|
for (auto it = itpair.first; it != itpair.second; ++it)
|
||||||
{
|
{
|
||||||
for (auto texGroup : model->TextureGroups)
|
auto viewportFrame = std::dynamic_pointer_cast<GUI::Viewport>(it->second);
|
||||||
{
|
if (!viewportFrame)
|
||||||
ModelJob job;
|
continue;
|
||||||
job.TextureID = texGroup.Texture->ResourceID;
|
|
||||||
job.DiffuseTexture = *texGroup.Texture;
|
viewportFrame->SetCameraEntity(event.CameraEntity);
|
||||||
job.NormalTexture = *texGroup.NormalMap;
|
|
||||||
job.SpecularTexture = *texGroup.SpecularMap;
|
|
||||||
job.VAO = model->VAO;
|
|
||||||
job.StartIndex = texGroup.StartIndex;
|
|
||||||
job.EndIndex = texGroup.EndIndex;
|
|
||||||
job.ModelMatrix = modelMatrix;
|
|
||||||
|
|
||||||
renderQueue.Add(job);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EnqueueSprite(RenderQueue<SpriteJob> &renderQueue, Texture* texture, glm::mat4 modelMatrix)
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::shared_ptr<Systems::TransformSystem> m_TransformSystem;
|
||||||
|
|
||||||
|
void EnqueueModel(Model* model, glm::mat4 modelMatrix)
|
||||||
|
{
|
||||||
|
for (auto texGroup : model->TextureGroups)
|
||||||
{
|
{
|
||||||
SpriteJob job;
|
ModelJob job;
|
||||||
job.TextureID = texture->ResourceID;
|
job.TextureID = texGroup.Texture->ResourceID;
|
||||||
job.Texture = *texture;
|
job.DiffuseTexture = *texGroup.Texture;
|
||||||
|
job.NormalTexture = (texGroup.NormalMap) ? *texGroup.NormalMap : 0;
|
||||||
|
job.SpecularTexture = (texGroup.SpecularMap) ? *texGroup.SpecularMap : 0;
|
||||||
|
job.VAO = model->VAO;
|
||||||
|
job.StartIndex = texGroup.StartIndex;
|
||||||
|
job.EndIndex = texGroup.EndIndex;
|
||||||
job.ModelMatrix = modelMatrix;
|
job.ModelMatrix = modelMatrix;
|
||||||
|
|
||||||
|
RenderQueue.Add(job);
|
||||||
}
|
}
|
||||||
};
|
}
|
||||||
|
|
||||||
|
void EnqueueSprite(Texture* texture, glm::mat4 modelMatrix)
|
||||||
|
{
|
||||||
|
SpriteJob job;
|
||||||
|
job.TextureID = texture->ResourceID;
|
||||||
|
job.Texture = *texture;
|
||||||
|
job.ModelMatrix = modelMatrix;
|
||||||
|
|
||||||
|
RenderQueue.Add(job);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+15
-15
@@ -5,8 +5,8 @@ void GameWorld::Initialize()
|
|||||||
{
|
{
|
||||||
World::Initialize();
|
World::Initialize();
|
||||||
|
|
||||||
m_ResourceManager.Preload("Model", "Models/Placeholders/PhysicsTest/Plane.obj");
|
ResourceManager->Preload("Model", "Models/Placeholders/PhysicsTest/Plane.obj");
|
||||||
m_ResourceManager.Preload("Model", "Models/Placeholders/PhysicsTest/ArrowCube.obj");
|
ResourceManager->Preload("Model", "Models/Placeholders/PhysicsTest/ArrowCube.obj");
|
||||||
|
|
||||||
BindKey(GLFW_KEY_W, "vertical", 1.f);
|
BindKey(GLFW_KEY_W, "vertical", 1.f);
|
||||||
BindKey(GLFW_KEY_S, "vertical", -1.f);
|
BindKey(GLFW_KEY_S, "vertical", -1.f);
|
||||||
@@ -1183,18 +1183,18 @@ void GameWorld::RegisterComponents()
|
|||||||
|
|
||||||
void GameWorld::RegisterSystems()
|
void GameWorld::RegisterSystems()
|
||||||
{
|
{
|
||||||
m_SystemFactory.Register<Systems::TransformSystem>([this]() { return new Systems::TransformSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::TransformSystem>([this]() { return new Systems::TransformSystem(this, EventBroker, ResourceManager); });
|
||||||
//m_SystemFactory.Register<Systems::LevelGenerationSystem>([this]() { return new Systems::LevelGenerationSystem(this); });
|
//m_SystemFactory.Register<Systems::LevelGenerationSystem>([this]() { return new Systems::LevelGenerationSystem(this); });
|
||||||
m_SystemFactory.Register<Systems::InputSystem>([this]() { return new Systems::InputSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::InputSystem>([this]() { return new Systems::InputSystem(this, EventBroker, ResourceManager); });
|
||||||
m_SystemFactory.Register<Systems::DebugSystem>([this]() { return new Systems::DebugSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::DebugSystem>([this]() { return new Systems::DebugSystem(this, EventBroker, ResourceManager); });
|
||||||
//m_SystemFactory.Register<Systems::CollisionSystem>([this]() { return new Systems::CollisionSystem(this); });
|
//m_SystemFactory.Register<Systems::CollisionSystem>([this]() { return new Systems::CollisionSystem(this); });
|
||||||
m_SystemFactory.Register<Systems::ParticleSystem>([this]() { return new Systems::ParticleSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::ParticleSystem>([this]() { return new Systems::ParticleSystem(this, EventBroker, ResourceManager); });
|
||||||
//m_SystemFactory.Register<Systems::PlayerSystem>([this]() { return new Systems::PlayerSystem(this); });
|
//m_SystemFactory.Register<Systems::PlayerSystem>([this]() { return new Systems::PlayerSystem(this); });
|
||||||
m_SystemFactory.Register<Systems::FreeSteeringSystem>([this]() { return new Systems::FreeSteeringSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::FreeSteeringSystem>([this]() { return new Systems::FreeSteeringSystem(this, EventBroker, ResourceManager); });
|
||||||
m_SystemFactory.Register<Systems::TankSteeringSystem>([this]() { return new Systems::TankSteeringSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::TankSteeringSystem>([this]() { return new Systems::TankSteeringSystem(this, EventBroker, ResourceManager); });
|
||||||
m_SystemFactory.Register<Systems::SoundSystem>([this]() { return new Systems::SoundSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::SoundSystem>([this]() { return new Systems::SoundSystem(this, EventBroker, ResourceManager); });
|
||||||
m_SystemFactory.Register<Systems::PhysicsSystem>([this]() { return new Systems::PhysicsSystem(this, m_EventBroker); });
|
m_SystemFactory.Register<Systems::PhysicsSystem>([this]() { return new Systems::PhysicsSystem(this, EventBroker, ResourceManager); });
|
||||||
m_SystemFactory.Register<Systems::RenderSystem>([this]() { return new Systems::RenderSystem(this, m_EventBroker, m_Renderer); });
|
m_SystemFactory.Register<Systems::RenderSystem>([this]() { return new Systems::RenderSystem(this, EventBroker, ResourceManager); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameWorld::AddSystems()
|
void GameWorld::AddSystems()
|
||||||
@@ -1219,7 +1219,7 @@ void GameWorld::BindKey(int keyCode, std::string command, float value)
|
|||||||
e.KeyCode = keyCode;
|
e.KeyCode = keyCode;
|
||||||
e.Command = command;
|
e.Command = command;
|
||||||
e.Value = value;
|
e.Value = value;
|
||||||
m_EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameWorld::BindMouseButton(int button, std::string command, float value)
|
void GameWorld::BindMouseButton(int button, std::string command, float value)
|
||||||
@@ -1228,7 +1228,7 @@ void GameWorld::BindMouseButton(int button, std::string command, float value)
|
|||||||
e.Button = button;
|
e.Button = button;
|
||||||
e.Command = command;
|
e.Command = command;
|
||||||
e.Value = value;
|
e.Value = value;
|
||||||
m_EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameWorld::BindGamepadAxis(Gamepad::Axis axis, std::string command, float value)
|
void GameWorld::BindGamepadAxis(Gamepad::Axis axis, std::string command, float value)
|
||||||
@@ -1237,7 +1237,7 @@ void GameWorld::BindGamepadAxis(Gamepad::Axis axis, std::string command, float v
|
|||||||
e.Axis = axis;
|
e.Axis = axis;
|
||||||
e.Command = command;
|
e.Command = command;
|
||||||
e.Value = value;
|
e.Value = value;
|
||||||
m_EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
void GameWorld::BindGamepadButton(Gamepad::Button button, std::string command, float value)
|
void GameWorld::BindGamepadButton(Gamepad::Button button, std::string command, float value)
|
||||||
@@ -1246,5 +1246,5 @@ void GameWorld::BindGamepadButton(Gamepad::Button button, std::string command, f
|
|||||||
e.Button = button;
|
e.Button = button;
|
||||||
e.Command = command;
|
e.Command = command;
|
||||||
e.Value = value;
|
e.Value = value;
|
||||||
m_EventBroker->Publish(e);
|
EventBroker->Publish(e);
|
||||||
}
|
}
|
||||||
|
|||||||
+3
-4
@@ -45,8 +45,9 @@
|
|||||||
class GameWorld : public World
|
class GameWorld : public World
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
GameWorld(std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<Renderer> renderer)
|
GameWorld(std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: World(eventBroker), m_Renderer(renderer) { }
|
: World(eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void Initialize();
|
void Initialize();
|
||||||
|
|
||||||
@@ -57,8 +58,6 @@ public:
|
|||||||
void Update(double dt);
|
void Update(double dt);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<Renderer> m_Renderer;
|
|
||||||
|
|
||||||
void BindKey(int keyCode, std::string command, float value);
|
void BindKey(int keyCode, std::string command, float value);
|
||||||
void BindMouseButton(int button, std::string command, float value);
|
void BindMouseButton(int button, std::string command, float value);
|
||||||
void BindGamepadAxis(Gamepad::Axis axis, std::string command, float value);
|
void BindGamepadAxis(Gamepad::Axis axis, std::string command, float value);
|
||||||
|
|||||||
+1
-1
@@ -1,7 +1,7 @@
|
|||||||
#include "PrecompiledHeader.h"
|
#include "PrecompiledHeader.h"
|
||||||
#include "Model.h"
|
#include "Model.h"
|
||||||
|
|
||||||
Model::Model(ResourceManager* rm, OBJ &obj)
|
Model::Model(std::shared_ptr<ResourceManager> rm, OBJ &obj)
|
||||||
{
|
{
|
||||||
OBJ::MaterialInfo* currentMaterial = nullptr;
|
OBJ::MaterialInfo* currentMaterial = nullptr;
|
||||||
TextureGroup* currentTexGroup = nullptr;
|
TextureGroup* currentTexGroup = nullptr;
|
||||||
|
|||||||
+1
-1
@@ -17,7 +17,7 @@
|
|||||||
class Model : public Resource
|
class Model : public Resource
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
Model(ResourceManager* rm, OBJ &obj);
|
Model(std::shared_ptr<ResourceManager> resourceManager, OBJ &obj);
|
||||||
|
|
||||||
struct TextureGroup
|
struct TextureGroup
|
||||||
{
|
{
|
||||||
|
|||||||
+5
-10
@@ -12,17 +12,12 @@ class RenderQueue;
|
|||||||
|
|
||||||
struct RenderJob
|
struct RenderJob
|
||||||
{
|
{
|
||||||
template <typename JobType>
|
friend class RenderQueue;
|
||||||
friend class RenderQueue<JobType>;
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint64_t Hash;
|
uint64_t Hash;
|
||||||
|
|
||||||
virtual void CalculateHash() = 0;
|
virtual void CalculateHash() = 0;
|
||||||
{
|
|
||||||
Hash = ViewportID << 58 // 6 bits
|
|
||||||
| TextureID << 42; // 16 bits
|
|
||||||
}
|
|
||||||
|
|
||||||
bool operator<(const RenderJob& rhs)
|
bool operator<(const RenderJob& rhs)
|
||||||
{
|
{
|
||||||
@@ -59,14 +54,14 @@ struct SpriteJob : RenderJob
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename JobType>
|
|
||||||
class RenderQueue
|
class RenderQueue
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
void Add(JobType &job)
|
template <typename T>
|
||||||
|
void Add(T &job)
|
||||||
{
|
{
|
||||||
job.CalculateHash();
|
job.CalculateHash();
|
||||||
m_Jobs.push_front(job);
|
m_Jobs.push_front(std::shared_ptr<T>(new T(job)));
|
||||||
m_Jobs.sort();
|
m_Jobs.sort();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,7 +71,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::forward_list<JobType> m_Jobs;
|
std::forward_list<std::shared_ptr<RenderJob>> m_Jobs;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // RenderQueue_h__
|
#endif // RenderQueue_h__
|
||||||
|
|||||||
+23
-18
@@ -66,8 +66,8 @@ void Renderer::Initialize()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Create Camera
|
// Create Camera
|
||||||
m_Camera = std::make_shared<Camera>(45.f, (float)m_Width / m_Height, 0.01f, 1000.f);
|
m_Camera = std::make_shared<Camera>(45.f, 0.01f, 1000.f);
|
||||||
m_Camera->Position(glm::vec3(0.0f, 0.0f, 2.f));
|
m_Camera->SetPosition(glm::vec3(0.0f, 0.0f, 2.f));
|
||||||
|
|
||||||
glfwSwapInterval(m_VSync);
|
glfwSwapInterval(m_VSync);
|
||||||
glEnable(GL_CULL_FACE);
|
glEnable(GL_CULL_FACE);
|
||||||
@@ -211,6 +211,11 @@ void Renderer::Draw(double dt)
|
|||||||
glfwSwapBuffers(m_Window);
|
glfwSwapBuffers(m_Window);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Renderer::Draw(RenderQueue &rq)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
#pragma region TempRegion
|
#pragma region TempRegion
|
||||||
|
|
||||||
void Renderer::DrawSkybox()
|
void Renderer::DrawSkybox()
|
||||||
@@ -220,7 +225,7 @@ void Renderer::DrawSkybox()
|
|||||||
|
|
||||||
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
|
||||||
m_ShaderProgramSkybox.Bind();
|
m_ShaderProgramSkybox.Bind();
|
||||||
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * glm::toMat4(glm::inverse(m_Camera->Orientation()));
|
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix((float)m_Width / m_Height) * glm::toMat4(glm::inverse(m_Camera->Orientation()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgramSkybox.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(cameraMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgramSkybox.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(cameraMatrix));
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
|
||||||
m_Skybox->Draw();
|
m_Skybox->Draw();
|
||||||
@@ -719,7 +724,7 @@ void Renderer::DrawFBOScene(Viewport &viewport)
|
|||||||
// glCullFace(GL_BACK); //Make it so that only the back faces are rendered
|
// glCullFace(GL_BACK); //Make it so that only the back faces are rendered
|
||||||
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //Draws filled polygons
|
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //Draws filled polygons
|
||||||
|
|
||||||
glm::mat4 cameraMatrix = viewport.Camera->ProjectionMatrix() * viewport.Camera->ViewMatrix();
|
glm::mat4 cameraMatrix = viewport.Camera->ProjectionMatrix((float)m_Width / m_Height) * viewport.Camera->ViewMatrix();
|
||||||
glm::mat4 MVP;
|
glm::mat4 MVP;
|
||||||
glm::mat4 biasMatrix(
|
glm::mat4 biasMatrix(
|
||||||
0.5, 0.0, 0.0, 0.0,
|
0.5, 0.0, 0.0, 0.0,
|
||||||
@@ -751,7 +756,7 @@ void Renderer::DrawFBOScene(Viewport &viewport)
|
|||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ViewMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ProjectionMatrix((float)m_Width / m_Height)));
|
||||||
glBindVertexArray(model->VAO);
|
glBindVertexArray(model->VAO);
|
||||||
for (auto texGroup : model->TextureGroups)
|
for (auto texGroup : model->TextureGroups)
|
||||||
{
|
{
|
||||||
@@ -781,7 +786,7 @@ void Renderer::DrawFBOScene(Viewport &viewport)
|
|||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ViewMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ProjectionMatrix((float)m_Width / m_Height)));
|
||||||
|
|
||||||
glActiveTexture(GL_TEXTURE0);
|
glActiveTexture(GL_TEXTURE0);
|
||||||
glBindTexture(GL_TEXTURE_2D, *texture);
|
glBindTexture(GL_TEXTURE_2D, *texture);
|
||||||
@@ -802,7 +807,7 @@ void Renderer::DrawLightScene(Viewport &viewport)
|
|||||||
glDepthMask (GL_FALSE);
|
glDepthMask (GL_FALSE);
|
||||||
glBindVertexArray(m_sphereModel->VAO);
|
glBindVertexArray(m_sphereModel->VAO);
|
||||||
|
|
||||||
glm::mat4 cameraMatrix = viewport.Camera->ProjectionMatrix() * viewport.Camera->ViewMatrix();
|
glm::mat4 cameraMatrix = viewport.Camera->ProjectionMatrix((float)m_Width / m_Height) * viewport.Camera->ViewMatrix();
|
||||||
glm::mat4 MVP;
|
glm::mat4 MVP;
|
||||||
|
|
||||||
for (auto &light : Lights)
|
for (auto &light : Lights)
|
||||||
@@ -812,7 +817,7 @@ void Renderer::DrawLightScene(Viewport &viewport)
|
|||||||
glUniform2fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ViewportSize"), 1,glm::value_ptr(glm::vec2(m_Width, m_Height)));
|
glUniform2fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ViewportSize"), 1,glm::value_ptr(glm::vec2(m_Width, m_Height)));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
|
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ViewMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "V"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ViewMatrix()));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ProjectionMatrix()));
|
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(viewport.Camera->ProjectionMatrix((float)m_Width / m_Height)));
|
||||||
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(light.SphereModelMatrix));
|
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "M"), 1, GL_FALSE, glm::value_ptr(light.SphereModelMatrix));
|
||||||
glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ls"), 1, glm::value_ptr(light.Specular));
|
glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ls"), 1, glm::value_ptr(light.Specular));
|
||||||
glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ld"), 1, glm::value_ptr(light.Diffuse));
|
glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ld"), 1, glm::value_ptr(light.Diffuse));
|
||||||
@@ -868,7 +873,7 @@ void Renderer::UpdateSunProjection()
|
|||||||
glm::vec3(1.f, 1.f, 1.f)
|
glm::vec3(1.f, 1.f, 1.f)
|
||||||
};
|
};
|
||||||
|
|
||||||
glm::mat4 inverseProjectionViewMatrix = glm::inverse(m_Camera->ViewMatrix()) * glm::inverse(m_Camera->ProjectionMatrix());
|
glm::mat4 inverseProjectionViewMatrix = glm::inverse(m_Camera->ViewMatrix()) * glm::inverse(m_Camera->ProjectionMatrix((float)m_Width / m_Height));
|
||||||
//Also * with world matrix for light
|
//Also * with world matrix for light
|
||||||
|
|
||||||
for(auto corner : NDCCube)
|
for(auto corner : NDCCube)
|
||||||
@@ -883,33 +888,33 @@ void Renderer::UpdateSunProjection()
|
|||||||
|
|
||||||
void Renderer::RegisterViewport(int identifier, float left, float top, float right, float bottom)
|
void Renderer::RegisterViewport(int identifier, float left, float top, float right, float bottom)
|
||||||
{
|
{
|
||||||
Viewport v;
|
/*Viewport v;
|
||||||
v.Left = left;
|
v.Left = left;
|
||||||
v.Top = top;
|
v.Top = top;
|
||||||
v.Right = right;
|
v.Right = right;
|
||||||
v.Bottom = bottom;
|
v.Bottom = bottom;
|
||||||
v.Camera = nullptr;
|
v.Camera = nullptr;
|
||||||
m_Viewports[identifier] = v;
|
m_Viewports[identifier] = v;*/
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::RegisterCamera(int identifier, float FOV, float nearClip, float farClip)
|
void Renderer::RegisterCamera(int identifier, float FOV, float nearClip, float farClip)
|
||||||
{
|
{
|
||||||
m_Cameras[identifier] = std::make_shared<Camera>(FOV, (float)m_Width / m_Height, nearClip, farClip);
|
m_Cameras[identifier] = std::make_shared<Camera>(FOV, nearClip, farClip);
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::UpdateViewport(int viewportIdentifier, int cameraIdentifier)
|
void Renderer::UpdateViewport(int viewportIdentifier, int cameraIdentifier)
|
||||||
{
|
{
|
||||||
auto &viewport = m_Viewports[viewportIdentifier];
|
//auto &viewport = m_Viewports[viewportIdentifier];
|
||||||
auto camera = m_Cameras[cameraIdentifier];
|
//auto camera = m_Cameras[cameraIdentifier];
|
||||||
camera->AspectRatio(((viewport.Right - viewport.Left) * m_Width) / ((viewport.Bottom - viewport.Top) * m_Height));
|
//camera->AspectRatio(((viewport.Right - viewport.Left) * m_Width) / ((viewport.Bottom - viewport.Top) * m_Height));
|
||||||
viewport.Camera = camera;
|
//viewport.Camera = camera;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Renderer::UpdateCamera(int cameraIdentifier, glm::vec3 position, glm::quat orientation, float FOV, float nearClip, float farClip)
|
void Renderer::UpdateCamera(int cameraIdentifier, glm::vec3 position, glm::quat orientation, float FOV, float nearClip, float farClip)
|
||||||
{
|
{
|
||||||
m_Cameras[cameraIdentifier]->Position(position);
|
/*m_Cameras[cameraIdentifier]->Position(position);
|
||||||
m_Cameras[cameraIdentifier]->Orientation(orientation);
|
m_Cameras[cameraIdentifier]->Orientation(orientation);
|
||||||
m_Cameras[cameraIdentifier]->FOV(FOV);
|
m_Cameras[cameraIdentifier]->FOV(FOV);
|
||||||
m_Cameras[cameraIdentifier]->NearClip(nearClip);
|
m_Cameras[cameraIdentifier]->NearClip(nearClip);
|
||||||
m_Cameras[cameraIdentifier]->FarClip(farClip);
|
m_Cameras[cameraIdentifier]->FarClip(farClip);*/
|
||||||
}
|
}
|
||||||
|
|||||||
+20
-2
@@ -13,6 +13,8 @@
|
|||||||
#include "Components/PointLight.h"
|
#include "Components/PointLight.h"
|
||||||
#include "Skybox.h"
|
#include "Skybox.h"
|
||||||
#include "ResourceManager.h"
|
#include "ResourceManager.h"
|
||||||
|
#include "Util/Rectangle.h"
|
||||||
|
#include "RenderQueue.h"
|
||||||
|
|
||||||
class Renderer
|
class Renderer
|
||||||
{
|
{
|
||||||
@@ -40,6 +42,21 @@ public:
|
|||||||
void UpdateViewport(int viewportIdentifier, int cameraIdentifier);
|
void UpdateViewport(int viewportIdentifier, int cameraIdentifier);
|
||||||
void UpdateCamera(int cameraIdentifier, glm::vec3 position, glm::quat orientation, float FOV, float nearClip, float farClip);
|
void UpdateCamera(int cameraIdentifier, glm::vec3 position, glm::quat orientation, float FOV, float nearClip, float farClip);
|
||||||
|
|
||||||
|
#pragma region NEWSTUFF
|
||||||
|
void SetViewport(const Rectangle &viewport)
|
||||||
|
{
|
||||||
|
m_Viewport = viewport;
|
||||||
|
}
|
||||||
|
|
||||||
|
void SetCamera(std::shared_ptr<Camera> camera)
|
||||||
|
{
|
||||||
|
m_Camera = camera;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Draw(RenderQueue &rq);
|
||||||
|
|
||||||
|
#pragma endregion
|
||||||
|
|
||||||
void AddModelToDraw(Model* model, glm::vec3 position, glm::quat orientation, glm::vec3 scale, bool visible, bool shadowCaster);
|
void AddModelToDraw(Model* model, glm::vec3 position, glm::quat orientation, glm::vec3 scale, bool visible, bool shadowCaster);
|
||||||
void AddTextureToDraw(Texture* texture, glm::vec3 position, glm::quat orientation, glm::vec3 scale);
|
void AddTextureToDraw(Texture* texture, glm::vec3 position, glm::quat orientation, glm::vec3 scale);
|
||||||
void AddTextToDraw();
|
void AddTextToDraw();
|
||||||
@@ -84,6 +101,9 @@ private:
|
|||||||
std::unordered_map<int, Viewport> m_Viewports;
|
std::unordered_map<int, Viewport> m_Viewports;
|
||||||
std::unordered_map<int, std::shared_ptr<Camera>> m_Cameras;
|
std::unordered_map<int, std::shared_ptr<Camera>> m_Cameras;
|
||||||
|
|
||||||
|
Rectangle m_Viewport;
|
||||||
|
std::shared_ptr<Camera> m_Camera;
|
||||||
|
|
||||||
struct Light
|
struct Light
|
||||||
{
|
{
|
||||||
glm::vec3 Position;
|
glm::vec3 Position;
|
||||||
@@ -135,8 +155,6 @@ private:
|
|||||||
|
|
||||||
bool m_QuadView;
|
bool m_QuadView;
|
||||||
|
|
||||||
std::shared_ptr<Camera> m_Camera;
|
|
||||||
|
|
||||||
ShaderProgram m_ShaderProgram;
|
ShaderProgram m_ShaderProgram;
|
||||||
ShaderProgram m_FirstPassProgram;
|
ShaderProgram m_FirstPassProgram;
|
||||||
ShaderProgram m_SecondPassProgram;
|
ShaderProgram m_SecondPassProgram;
|
||||||
|
|||||||
+6
-3
@@ -12,13 +12,15 @@ class World;
|
|||||||
class System
|
class System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
System(World* world, std::shared_ptr<EventBroker> eventBroker)
|
System(World* world, std::shared_ptr<EventBroker> eventBroker, std::shared_ptr<ResourceManager> resourceManager)
|
||||||
: m_World(world)
|
: m_World(world)
|
||||||
, EventBroker(eventBroker) { }
|
, EventBroker(eventBroker)
|
||||||
|
, ResourceManager(resourceManager)
|
||||||
|
{ }
|
||||||
virtual ~System() { }
|
virtual ~System() { }
|
||||||
|
|
||||||
virtual void RegisterComponents(ComponentFactory* cf) { }
|
virtual void RegisterComponents(ComponentFactory* cf) { }
|
||||||
virtual void RegisterResourceTypes(ResourceManager* rm) { }
|
virtual void RegisterResourceTypes(std::shared_ptr<::ResourceManager> rm) { }
|
||||||
|
|
||||||
virtual void Initialize() { }
|
virtual void Initialize() { }
|
||||||
|
|
||||||
@@ -37,6 +39,7 @@ public:
|
|||||||
protected:
|
protected:
|
||||||
World* m_World;
|
World* m_World;
|
||||||
std::shared_ptr<EventBroker> EventBroker;
|
std::shared_ptr<EventBroker> EventBroker;
|
||||||
|
std::shared_ptr<ResourceManager> ResourceManager;
|
||||||
};
|
};
|
||||||
|
|
||||||
class SystemFactory : public Factory<System*> { };
|
class SystemFactory : public Factory<System*> { };
|
||||||
|
|||||||
@@ -12,8 +12,9 @@ namespace Systems
|
|||||||
class DebugSystem : public System
|
class DebugSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
DebugSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
DebugSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
||||||
|
|||||||
@@ -12,8 +12,9 @@ namespace Systems
|
|||||||
class FreeSteeringSystem : public System
|
class FreeSteeringSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
FreeSteeringSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
FreeSteeringSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|||||||
@@ -11,8 +11,9 @@ namespace Systems
|
|||||||
class HelicopterSteeringSystem : public System
|
class HelicopterSteeringSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HelicopterSteeringSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
HelicopterSteeringSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|||||||
@@ -25,8 +25,9 @@ namespace Systems
|
|||||||
class InputSystem : public System
|
class InputSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
InputSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
InputSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|||||||
@@ -26,8 +26,9 @@ namespace Systems
|
|||||||
class ParticleSystem : public System
|
class ParticleSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
ParticleSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
ParticleSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void Update(double dt) override;
|
void Update(double dt) override;
|
||||||
|
|||||||
@@ -437,7 +437,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
|
|||||||
{
|
{
|
||||||
std::vector<hkReal>* vertices = new std::vector<hkReal>;
|
std::vector<hkReal>* vertices = new std::vector<hkReal>;
|
||||||
std::vector<hkUint16>* vertexIndices = new std::vector<hkUint16>;
|
std::vector<hkUint16>* vertexIndices = new std::vector<hkUint16>;
|
||||||
auto meshShape = m_World->GetResourceManager()->Load<OBJ>("OBJ", meshShapeComponent->ResourceName);
|
auto meshShape = ResourceManager->Load<OBJ>("OBJ", meshShapeComponent->ResourceName);
|
||||||
|
|
||||||
for (auto &vertex : meshShape->Vertices)
|
for (auto &vertex : meshShape->Vertices)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -96,8 +96,9 @@ namespace Systems
|
|||||||
class PhysicsSystem : public System
|
class PhysicsSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
PhysicsSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
PhysicsSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|||||||
@@ -2,7 +2,7 @@
|
|||||||
#include "RenderSystem.h"
|
#include "RenderSystem.h"
|
||||||
#include "World.h"
|
#include "World.h"
|
||||||
|
|
||||||
void Systems::RenderSystem::RegisterResourceTypes(ResourceManager* rm)
|
void Systems::RenderSystem::RegisterResourceTypes(std::shared_ptr<::ResourceManager> rm)
|
||||||
{
|
{
|
||||||
rm->RegisterType("Model", [rm](std::string resourceName) { return new Model(rm, *rm->Load<OBJ>("OBJ", resourceName)); });
|
rm->RegisterType("Model", [rm](std::string resourceName) { return new Model(rm, *rm->Load<OBJ>("OBJ", resourceName)); });
|
||||||
rm->RegisterType("OBJ", [](std::string resourceName) { return new OBJ(resourceName); });
|
rm->RegisterType("OBJ", [](std::string resourceName) { return new OBJ(resourceName); });
|
||||||
@@ -21,100 +21,99 @@ void Systems::RenderSystem::RegisterComponents(ComponentFactory* cf)
|
|||||||
|
|
||||||
void Systems::RenderSystem::OnEntityCommit(EntityID entity)
|
void Systems::RenderSystem::OnEntityCommit(EntityID entity)
|
||||||
{
|
{
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
//auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
|
|
||||||
auto camera = m_World->GetComponent<Components::Camera>(entity);
|
//auto camera = m_World->GetComponent<Components::Camera>(entity);
|
||||||
if (transform && camera)
|
//if (transform && camera)
|
||||||
{
|
//{
|
||||||
m_Renderer->RegisterCamera(entity, camera->FOV, camera->NearClip, camera->FarClip);
|
// m_Renderer->RegisterCamera(entity, camera->FOV, camera->NearClip, camera->FarClip);
|
||||||
m_Renderer->UpdateCamera(entity, m_TransformSystem->AbsolutePosition(entity), m_TransformSystem->AbsoluteOrientation(entity), camera->FOV, camera->NearClip, camera->FarClip);
|
// m_Renderer->UpdateCamera(entity, m_TransformSystem->AbsolutePosition(entity), m_TransformSystem->AbsoluteOrientation(entity), camera->FOV, camera->NearClip, camera->FarClip);
|
||||||
}
|
//}
|
||||||
|
|
||||||
auto viewport = m_World->GetComponent<Components::Viewport>(entity);
|
//auto viewport = m_World->GetComponent<Components::Viewport>(entity);
|
||||||
if (viewport)
|
//if (viewport)
|
||||||
{
|
//{
|
||||||
m_Renderer->RegisterViewport(entity, viewport->Left, viewport->Top, viewport->Right, viewport->Bottom);
|
// m_Renderer->RegisterViewport(entity, viewport->Left, viewport->Top, viewport->Right, viewport->Bottom);
|
||||||
if (viewport->Camera != 0)
|
// if (viewport->Camera != 0)
|
||||||
{
|
// {
|
||||||
m_Renderer->UpdateViewport(entity, viewport->Camera);
|
// m_Renderer->UpdateViewport(entity, viewport->Camera);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
||||||
{
|
{
|
||||||
auto templateComponent = m_World->GetComponent<Components::Template>(entity);
|
//auto templateComponent = m_World->GetComponent<Components::Template>(entity);
|
||||||
if (templateComponent)
|
//if (templateComponent)
|
||||||
return;
|
// return;
|
||||||
|
|
||||||
auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
|
//auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
|
||||||
|
|
||||||
// Draw models
|
//// Draw models
|
||||||
auto modelComponent = m_World->GetComponent<Components::Model>(entity);
|
//auto modelComponent = m_World->GetComponent<Components::Model>(entity);
|
||||||
if (transformComponent && modelComponent)
|
//if (transformComponent && modelComponent)
|
||||||
{
|
//{
|
||||||
auto model = m_World->GetResourceManager()->Load<Model>("Model", modelComponent->ModelFile);
|
// auto model = m_World->ResourceManager->Load<Model>("Model", modelComponent->ModelFile);
|
||||||
if (model)
|
// if (model)
|
||||||
{
|
// {
|
||||||
/*glm::vec3 position = m_TransformSystem->AbsolutePosition(entity);
|
// /*glm::vec3 position = m_TransformSystem->AbsolutePosition(entity);
|
||||||
glm::quat orientation = m_TransformSystem->AbsoluteOrientation(entity);
|
// glm::quat orientation = m_TransformSystem->AbsoluteOrientation(entity);
|
||||||
glm::vec3 scale = m_TransformSystem->AbsoluteScale(entity);*/
|
// glm::vec3 scale = m_TransformSystem->AbsoluteScale(entity);*/
|
||||||
Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
// Components::Transform absoluteTransform = m_TransformSystem->AbsoluteTransform(entity);
|
||||||
m_Renderer->AddModelToDraw(model, absoluteTransform.Position, absoluteTransform.Orientation, absoluteTransform.Scale, modelComponent->Visible, modelComponent->ShadowCaster);
|
// m_Renderer->AddModelToDraw(model, absoluteTransform.Position, absoluteTransform.Orientation, absoluteTransform.Scale, modelComponent->Visible, modelComponent->ShadowCaster);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
auto pointLightComponent = m_World->GetComponent<Components::PointLight>(entity);
|
//auto pointLightComponent = m_World->GetComponent<Components::PointLight>(entity);
|
||||||
if (transformComponent && pointLightComponent)
|
//if (transformComponent && pointLightComponent)
|
||||||
{
|
//{
|
||||||
glm::vec3 position = m_TransformSystem->AbsolutePosition(entity);
|
// glm::vec3 position = m_TransformSystem->AbsolutePosition(entity);
|
||||||
m_Renderer->AddPointLightToDraw(
|
// m_Renderer->AddPointLightToDraw(
|
||||||
position,
|
// position,
|
||||||
pointLightComponent->Specular,
|
// pointLightComponent->Specular,
|
||||||
pointLightComponent->Diffuse,
|
// pointLightComponent->Diffuse,
|
||||||
pointLightComponent->specularExponent,
|
// pointLightComponent->specularExponent,
|
||||||
pointLightComponent->ConstantAttenuation,
|
// pointLightComponent->ConstantAttenuation,
|
||||||
pointLightComponent->LinearAttenuation,
|
// pointLightComponent->LinearAttenuation,
|
||||||
pointLightComponent->QuadraticAttenuation
|
// pointLightComponent->QuadraticAttenuation
|
||||||
);
|
// );
|
||||||
}
|
//}
|
||||||
|
|
||||||
auto cameraComponent = m_World->GetComponent<Components::Camera>(entity);
|
//auto cameraComponent = m_World->GetComponent<Components::Camera>(entity);
|
||||||
if (transformComponent && cameraComponent)
|
//if (transformComponent && cameraComponent)
|
||||||
{
|
//{
|
||||||
m_Renderer->UpdateCamera(entity
|
// m_Renderer->UpdateCamera(entity
|
||||||
, m_TransformSystem->AbsolutePosition(entity)
|
// , m_TransformSystem->AbsolutePosition(entity)
|
||||||
, m_TransformSystem->AbsoluteOrientation(entity)
|
// , m_TransformSystem->AbsoluteOrientation(entity)
|
||||||
, cameraComponent->FOV
|
// , cameraComponent->FOV
|
||||||
, cameraComponent->NearClip
|
// , cameraComponent->NearClip
|
||||||
, cameraComponent->FarClip);
|
// , cameraComponent->FarClip);
|
||||||
}
|
//}
|
||||||
|
|
||||||
auto viewportComponent = m_World->GetComponent<Components::Viewport>(entity);
|
//auto viewportComponent = m_World->GetComponent<Components::Viewport>(entity);
|
||||||
if (viewportComponent)
|
//if (viewportComponent)
|
||||||
{
|
//{
|
||||||
if (viewportComponent->Camera != 0)
|
// if (viewportComponent->Camera != 0)
|
||||||
{
|
// {
|
||||||
m_Renderer->UpdateViewport(entity, viewportComponent->Camera);
|
// m_Renderer->UpdateViewport(entity, viewportComponent->Camera);
|
||||||
}
|
// }
|
||||||
}
|
//}
|
||||||
|
|
||||||
auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity);
|
//auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity);
|
||||||
if (transformComponent && spriteComponent)
|
//if (transformComponent && spriteComponent)
|
||||||
{
|
//{
|
||||||
//TEMP
|
// //TEMP
|
||||||
Texture* texture = m_World->GetResourceManager()->Load<Texture>("Texture", spriteComponent->SpriteFile);
|
// Texture* texture = m_World->ResourceManager->Load<Texture>("Texture", spriteComponent->SpriteFile);
|
||||||
//glBindTexture(GL_TEXTURE_2D, texture);
|
// //glBindTexture(GL_TEXTURE_2D, texture);
|
||||||
auto transform = m_World->GetComponent<Components::Transform>(spriteComponent->Entity);
|
// auto transform = m_World->GetComponent<Components::Transform>(spriteComponent->Entity);
|
||||||
glm::quat orientation2D = glm::angleAxis(glm::eulerAngles(transform->Orientation).z, glm::vec3(0, 0, -1));
|
// glm::quat orientation2D = glm::angleAxis(glm::eulerAngles(transform->Orientation).z, glm::vec3(0, 0, -1));
|
||||||
m_Renderer->AddTextureToDraw(texture, transform->Position, orientation2D, transform->Scale);
|
// m_Renderer->AddTextureToDraw(texture, transform->Position, orientation2D, transform->Scale);
|
||||||
}
|
//}
|
||||||
}
|
}
|
||||||
|
|
||||||
void Systems::RenderSystem::Initialize()
|
void Systems::RenderSystem::Initialize()
|
||||||
{
|
{
|
||||||
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
|
//m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
|
||||||
|
|
||||||
m_Renderer->SetSphereModel(m_World->GetResourceManager()->Load<Model>("Model", "Models/Placeholders/PhysicsTest/Sphere.obj"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
//m_Renderer->SetSphereModel(m_World->ResourceManager->Load<Model>("Model", "Models/Placeholders/PhysicsTest/Sphere.obj"));
|
||||||
|
}
|
||||||
@@ -18,6 +18,7 @@
|
|||||||
#include "Components/Template.h"
|
#include "Components/Template.h"
|
||||||
#include "Components/Transform.h"
|
#include "Components/Transform.h"
|
||||||
#include "Renderer.h"
|
#include "Renderer.h"
|
||||||
|
#include "RenderQueue.h"
|
||||||
|
|
||||||
namespace Systems
|
namespace Systems
|
||||||
{
|
{
|
||||||
@@ -25,12 +26,12 @@ namespace Systems
|
|||||||
class RenderSystem : public System
|
class RenderSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
RenderSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<Renderer> renderer)
|
RenderSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker)
|
: System(world, eventBroker, resourceManager)
|
||||||
, m_Renderer(renderer) { }
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void RegisterResourceTypes(ResourceManager* rm) override;
|
void RegisterResourceTypes(std::shared_ptr<::ResourceManager> rm) override;
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
||||||
std::unordered_map<std::string, std::shared_ptr<Model>> m_CachedModels;
|
std::unordered_map<std::string, std::shared_ptr<Model>> m_CachedModels;
|
||||||
@@ -38,12 +39,12 @@ public:
|
|||||||
void OnEntityCommit(EntityID entity) override;
|
void OnEntityCommit(EntityID entity) override;
|
||||||
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::shared_ptr<Renderer> m_Renderer;
|
|
||||||
std::shared_ptr<Systems::TransformSystem> m_TransformSystem;
|
std::shared_ptr<Systems::TransformSystem> m_TransformSystem;
|
||||||
|
|
||||||
|
void EnqueueModel(Model* model, glm::mat4 modelMatrix);
|
||||||
|
void EnqueueSprite(Texture* texture, glm::mat4 modelMatrix);
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ void Systems::SoundSystem::RegisterComponents(ComponentFactory* cf)
|
|||||||
cf->Register<Components::SoundEmitter>([]() { return new Components::SoundEmitter(); });
|
cf->Register<Components::SoundEmitter>([]() { return new Components::SoundEmitter(); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void Systems::SoundSystem::RegisterResourceTypes(ResourceManager* rm)
|
void Systems::SoundSystem::RegisterResourceTypes(std::shared_ptr<::ResourceManager> rm)
|
||||||
{
|
{
|
||||||
rm->RegisterType("Sound", [](std::string resourceName) { return new Sound(resourceName); });
|
rm->RegisterType("Sound", [](std::string resourceName) { return new Sound(resourceName); });
|
||||||
}
|
}
|
||||||
@@ -94,7 +94,7 @@ void Systems::SoundSystem::PlaySound(Components::SoundEmitter* emitter, std::str
|
|||||||
if (m_Sources.find(emitter) == m_Sources.end())
|
if (m_Sources.find(emitter) == m_Sources.end())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
ALuint buffer = *m_World->GetResourceManager()->Load<Sound>("Sound", fileName);
|
ALuint buffer = *ResourceManager->Load<Sound>("Sound", fileName);
|
||||||
if (buffer == 0)
|
if (buffer == 0)
|
||||||
return;
|
return;
|
||||||
ALuint source = m_Sources[emitter];
|
ALuint source = m_Sources[emitter];
|
||||||
@@ -104,7 +104,7 @@ void Systems::SoundSystem::PlaySound(Components::SoundEmitter* emitter, std::str
|
|||||||
|
|
||||||
void Systems::SoundSystem::PlaySound(std::shared_ptr<Components::SoundEmitter> emitter)
|
void Systems::SoundSystem::PlaySound(std::shared_ptr<Components::SoundEmitter> emitter)
|
||||||
{
|
{
|
||||||
ALuint buffer = *m_World->GetResourceManager()->Load<Sound>("Sound", emitter->Path);
|
ALuint buffer = *ResourceManager->Load<Sound>("Sound", emitter->Path);
|
||||||
ALuint source = m_Sources[emitter.get()];
|
ALuint source = m_Sources[emitter.get()];
|
||||||
alSourcei(source, AL_BUFFER, buffer);
|
alSourcei(source, AL_BUFFER, buffer);
|
||||||
alSourcePlay(m_Sources[emitter.get()]);
|
alSourcePlay(m_Sources[emitter.get()]);
|
||||||
@@ -151,7 +151,7 @@ bool Systems::SoundSystem::OnPlaySound(const Events::PlaySound &event)
|
|||||||
{
|
{
|
||||||
LOG_DEBUG("Events::PlaySound.Resource = %s", event.Resource.c_str());
|
LOG_DEBUG("Events::PlaySound.Resource = %s", event.Resource.c_str());
|
||||||
|
|
||||||
ALuint buffer = *m_World->GetResourceManager()->Load<Sound>("Sound", event.Resource);
|
ALuint buffer = *ResourceManager->Load<Sound>("Sound", event.Resource);
|
||||||
ALuint source = m_Sources.begin()->second;
|
ALuint source = m_Sources.begin()->second;
|
||||||
alSourcei(source, AL_BUFFER, buffer);
|
alSourcei(source, AL_BUFFER, buffer);
|
||||||
alSourcePlay(source);
|
alSourcePlay(source);
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ namespace Systems
|
|||||||
class SoundSystem : public System
|
class SoundSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
SoundSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
SoundSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void RegisterResourceTypes(ResourceManager* rm) override;
|
void RegisterResourceTypes(std::shared_ptr<::ResourceManager> rm) override;
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|
||||||
void Update(double dt) override;
|
void Update(double dt) override;
|
||||||
|
|||||||
@@ -21,8 +21,9 @@ namespace Systems
|
|||||||
class TankSteeringSystem : public System
|
class TankSteeringSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TankSteeringSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
TankSteeringSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
|
|
||||||
void RegisterComponents(ComponentFactory* cf) override;
|
void RegisterComponents(ComponentFactory* cf) override;
|
||||||
void Initialize() override;
|
void Initialize() override;
|
||||||
|
|||||||
@@ -10,8 +10,9 @@ namespace Systems
|
|||||||
class TransformSystem : public System
|
class TransformSystem : public System
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
TransformSystem(World* world, std::shared_ptr<::EventBroker> eventBroker)
|
TransformSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: System(world, eventBroker) { }
|
: System(world, eventBroker, resourceManager)
|
||||||
|
{ }
|
||||||
//void Update(double dt) override;
|
//void Update(double dt) override;
|
||||||
//void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
//void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
||||||
|
|
||||||
|
|||||||
@@ -19,24 +19,24 @@ struct Rectangle
|
|||||||
int Width;
|
int Width;
|
||||||
int Height;
|
int Height;
|
||||||
|
|
||||||
const int& GetLeft() const { return X; }
|
virtual int Left() const { return X; }
|
||||||
void SetLeft(int left)
|
void SetLeft(int left)
|
||||||
{
|
{
|
||||||
Width += X - left;
|
Width += X - left;
|
||||||
X = left;
|
X = left;
|
||||||
}
|
}
|
||||||
int GetRight() const { return X + Width; }
|
virtual int Right() const { return X + Width; }
|
||||||
void SetRight(int right)
|
void SetRight(int right)
|
||||||
{
|
{
|
||||||
Width = right - X;
|
Width = right - X;
|
||||||
}
|
}
|
||||||
const int& GetTop() const { return Y; }
|
virtual int Top() const { return Y; }
|
||||||
void SetTop(int top)
|
void SetTop(int top)
|
||||||
{
|
{
|
||||||
Height += Y - top;
|
Height += Y - top;
|
||||||
Y = top;
|
Y = top;
|
||||||
}
|
}
|
||||||
int GetBottom() const { return Y + Height; }
|
virtual int Bottom() const { return Y + Height; }
|
||||||
int SetBottom(int bottom)
|
int SetBottom(int bottom)
|
||||||
{
|
{
|
||||||
Height = bottom - Y;
|
Height = bottom - Y;
|
||||||
@@ -44,15 +44,15 @@ struct Rectangle
|
|||||||
|
|
||||||
Rectangle& operator+=(const Rectangle &rhs)
|
Rectangle& operator+=(const Rectangle &rhs)
|
||||||
{
|
{
|
||||||
SetLeft(std::min(GetLeft(), rhs.GetLeft()));
|
SetLeft(std::min(Left(), rhs.Left()));
|
||||||
SetRight(std::max(GetRight(), rhs.GetRight()));
|
SetRight(std::max(Right(), rhs.Right()));
|
||||||
SetTop(std::min(GetTop(), rhs.GetTop()));
|
SetTop(std::min(Top(), rhs.Top()));
|
||||||
SetBottom(std::max(GetBottom(), rhs.GetBottom()));
|
SetBottom(std::max(Bottom(), rhs.Bottom()));
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool Intersects(const Rectangle &r1, const Rectangle &r2)
|
static bool Intersects(const Rectangle &r1, const Rectangle &r2)
|
||||||
{
|
{
|
||||||
return !(r2.GetLeft() > r1.GetRight() || r2.GetRight() < r1.GetLeft() || r2.GetTop() > r1.GetBottom() || r2.GetBottom() < r1.GetTop());
|
return !(r2.Left() > r1.Right() || r2.Right() < r1.Left() || r2.Top() > r1.Bottom() || r2.Bottom() < r1.Top());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
+2
-2
@@ -38,7 +38,7 @@ void World::Update(double dt)
|
|||||||
{
|
{
|
||||||
const std::string &type = pair.first;
|
const std::string &type = pair.first;
|
||||||
auto system = pair.second;
|
auto system = pair.second;
|
||||||
m_EventBroker->Process(type);
|
EventBroker->Process(type);
|
||||||
system->Update(dt);
|
system->Update(dt);
|
||||||
RecursiveUpdate(system, dt, 0);
|
RecursiveUpdate(system, dt, 0);
|
||||||
}
|
}
|
||||||
@@ -129,7 +129,7 @@ void World::Initialize()
|
|||||||
{
|
{
|
||||||
auto system = pair.second;
|
auto system = pair.second;
|
||||||
system->RegisterComponents(&m_ComponentFactory);
|
system->RegisterComponents(&m_ComponentFactory);
|
||||||
system->RegisterResourceTypes(&m_ResourceManager);
|
system->RegisterResourceTypes(ResourceManager);
|
||||||
system->Initialize();
|
system->Initialize();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+6
-6
@@ -21,8 +21,9 @@
|
|||||||
class World
|
class World
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
World(std::shared_ptr<::EventBroker> eventBroker)
|
World(std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||||
: m_EventBroker(eventBroker)
|
: EventBroker(eventBroker)
|
||||||
|
, ResourceManager(resourceManager)
|
||||||
, m_LastEntityID(0) { }
|
, m_LastEntityID(0) { }
|
||||||
~World() { }
|
~World() { }
|
||||||
|
|
||||||
@@ -88,11 +89,10 @@ public:
|
|||||||
|
|
||||||
std::unordered_map<EntityID, EntityID>* GetEntities() { return &m_EntityParents; }
|
std::unordered_map<EntityID, EntityID>* GetEntities() { return &m_EntityParents; }
|
||||||
|
|
||||||
//ResourceManager* GetResourceManager() { return &m_ResourceManager; }
|
|
||||||
std::shared_ptr<::EventBroker> EventBroker() { return m_EventBroker; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
std::shared_ptr<::EventBroker> m_EventBroker;
|
std::shared_ptr<::EventBroker> EventBroker;
|
||||||
|
std::shared_ptr<::ResourceManager> ResourceManager;
|
||||||
|
|
||||||
SystemFactory m_SystemFactory;
|
SystemFactory m_SystemFactory;
|
||||||
ComponentFactory m_ComponentFactory;
|
ComponentFactory m_ComponentFactory;
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
int main(int argc, char* argv[])
|
int main(int argc, char* argv[])
|
||||||
{
|
{
|
||||||
Engine engine(argc, argv);
|
Engine engine(argc, argv);
|
||||||
|
LOG_INFO("------------ Engine initialized ------------");
|
||||||
while (engine.Running())
|
while (engine.Running())
|
||||||
engine.Tick();
|
engine.Tick();
|
||||||
|
|
||||||
|
|||||||
@@ -180,6 +180,7 @@
|
|||||||
<ClInclude Include="..\..\src\GameWorld.h" />
|
<ClInclude Include="..\..\src\GameWorld.h" />
|
||||||
<ClInclude Include="..\..\src\GUI\Frame.h" />
|
<ClInclude Include="..\..\src\GUI\Frame.h" />
|
||||||
<ClInclude Include="..\..\src\EventBroker.h" />
|
<ClInclude Include="..\..\src\EventBroker.h" />
|
||||||
|
<ClInclude Include="..\..\src\GUI\GameFrame.h" />
|
||||||
<ClInclude Include="..\..\src\GUI\WorldFrame.h" />
|
<ClInclude Include="..\..\src\GUI\WorldFrame.h" />
|
||||||
<ClInclude Include="..\..\src\GUI\TextureFrame.h" />
|
<ClInclude Include="..\..\src\GUI\TextureFrame.h" />
|
||||||
<ClInclude Include="..\..\src\GUI\Viewport.h" />
|
<ClInclude Include="..\..\src\GUI\Viewport.h" />
|
||||||
|
|||||||
@@ -409,6 +409,9 @@
|
|||||||
<ClInclude Include="..\..\src\Events\SetViewportCamera.h">
|
<ClInclude Include="..\..\src\Events\SetViewportCamera.h">
|
||||||
<Filter>Rendering\Events</Filter>
|
<Filter>Rendering\Events</Filter>
|
||||||
</ClInclude>
|
</ClInclude>
|
||||||
|
<ClInclude Include="..\..\src\GUI\GameFrame.h">
|
||||||
|
<Filter>GUI</Filter>
|
||||||
|
</ClInclude>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<None Include="..\..\src\Shaders\Fragment2.glsl">
|
<None Include="..\..\src\Shaders\Fragment2.glsl">
|
||||||
|
|||||||
Reference in New Issue
Block a user