Merge branch 'master' into havok

Conflicts:
	assets
	src/GameWorld.cpp
	vs11/Returngeance/Returngeance.vcxproj.filters
This commit is contained in:
2014-05-17 21:23:46 +02:00
40 changed files with 1394 additions and 883 deletions
+14 -5
View File
@@ -9,13 +9,22 @@ namespace Components
struct PointLight : Component struct PointLight : Component
{ {
float Intensity; PointLight()
float MaxRange; : Specular(1.0f, 1.0f, 1.0f)
, Diffuse(1.0f, 1.0f, 1.0f)
, specularExponent(50.0f)
, ConstantAttenuation(1.0f)
, LinearAttenuation(0.f)
, QuadraticAttenuation(3.f)
{ }
float ConstantAttenuation, LinearAttenuation, QuadraticAttenuation;
Color color;
glm::vec3 Specular; glm::vec3 Specular;
glm::vec3 Diffuse; glm::vec3 Diffuse;
float constantAttenuation, linearAttenuation, quadraticAttenuation; float specularExponent;
float spotExponent; float Scale;
Color color;
virtual PointLight* Clone() const override { return new PointLight(*this); } virtual PointLight* Clone() const override { return new PointLight(*this); }
}; };
+1
View File
@@ -10,6 +10,7 @@ struct BindMouseButton : Event
{ {
int Button; int Button;
std::string Command; std::string Command;
float Value;
}; };
} }
+14
View File
@@ -0,0 +1,14 @@
#ifndef Events_LockMouse_h__
#define Events_LockMouse_h__
#include "EventBroker.h"
namespace Events
{
struct LockMouse : Event { };
struct UnlockMouse : Event { };
}
#endif // Events_LockMouse_h__
+22 -2
View File
@@ -10,12 +10,18 @@ template <typename T>
class Factory class Factory
{ {
public: public:
void Register(std::string name, std::function<T(void)> factoryFunction) /*void Register(std::string name, std::function<T(void)> factoryFunction)
{ {
m_FactoryFunctions[name] = factoryFunction; m_FactoryFunctions[name] = factoryFunction;
}*/
template <typename T2>
void Register(std::function<T(void)> factoryFunction)
{
m_FactoryFunctions[typeid(T2).name()] = factoryFunction;
} }
T Create(std::string name) /*T Create(std::string name)
{ {
auto it = m_FactoryFunctions.find(name); auto it = m_FactoryFunctions.find(name);
if (it != m_FactoryFunctions.end()) if (it != m_FactoryFunctions.end())
@@ -26,6 +32,20 @@ public:
{ {
return nullptr; return nullptr;
} }
}*/
template <typename T2>
T Create()
{
auto it = m_FactoryFunctions.find(typeid(T2).name());
if (it != m_FactoryFunctions.end())
{
return it->second();
}
else
{
return nullptr;
}
} }
private: private:
+194 -214
View File
@@ -13,8 +13,7 @@ void GameWorld::Initialize()
BindKey(GLFW_KEY_A, "horizontal", -1.f); BindKey(GLFW_KEY_A, "horizontal", -1.f);
BindKey(GLFW_KEY_D, "horizontal", 1.f); BindKey(GLFW_KEY_D, "horizontal", 1.f);
BindGamepadAxis(Gamepad::Axis::LeftX, "horizontal", 1.f); BindGamepadAxis(Gamepad::Axis::LeftX, "horizontal", 1.f);
BindGamepadAxis(Gamepad::Axis::RightTrigger, "vertical", 1.f); BindGamepadAxis(Gamepad::Axis::LeftY, "vertical", 1.f);
BindGamepadAxis(Gamepad::Axis::LeftTrigger, "vertical", -1.f);
BindKey(GLFW_KEY_UP, "barrel_rotation", 1.f); BindKey(GLFW_KEY_UP, "barrel_rotation", 1.f);
BindKey(GLFW_KEY_DOWN, "barrel_rotation", -1.f); BindKey(GLFW_KEY_DOWN, "barrel_rotation", -1.f);
@@ -27,6 +26,7 @@ void GameWorld::Initialize()
BindGamepadButton(Gamepad::Button::A, "handbrake", 1.f); BindGamepadButton(Gamepad::Button::A, "handbrake", 1.f);
BindKey(GLFW_KEY_Z, "shoot", 1.f); BindKey(GLFW_KEY_Z, "shoot", 1.f);
BindGamepadAxis(Gamepad::Axis::RightTrigger, "shoot", 1.f);
//BindGamepadButton(Gamepad::Button::Up, "Gamepad::Button::Up", 1.f); //BindGamepadButton(Gamepad::Button::Up, "Gamepad::Button::Up", 1.f);
//BindGamepadButton(Gamepad::Button::Down, "Gamepad::Button::Down", 1.f); //BindGamepadButton(Gamepad::Button::Down, "Gamepad::Button::Down", 1.f);
@@ -42,62 +42,40 @@ void GameWorld::Initialize()
//BindGamepadButton(Gamepad::Button::B, "Gamepad::Button::B", 1.f); //BindGamepadButton(Gamepad::Button::B, "Gamepad::Button::B", 1.f);
//BindGamepadButton(Gamepad::Button::X, "Gamepad::Button::X", 1.f); //BindGamepadButton(Gamepad::Button::X, "Gamepad::Button::X", 1.f);
//BindGamepadButton(Gamepad::Button::Y, "Gamepad::Button::Y", 1.f); //BindGamepadButton(Gamepad::Button::Y, "Gamepad::Button::Y", 1.f);
//
// BindKey(GLFW_KEY_UP, "vertical", -1.f);
// BindKey(GLFW_KEY_DOWN, "vertical", 1.f);
// BindKey(GLFW_KEY_LEFT, "horizontal", -1.f);
// BindKey(GLFW_KEY_RIGHT, "horizontal", 1.f);
/*
BindKey(GLFW_KEY_Q, "+tower_right");
BindKey(GLFW_KEY_E, "+tower_left");
BindKey(GLFW_KEY_Q, "+up");
BindKey(GLFW_KEY_LEFT_CONTROL, "+down");
BindKey(GLFW_KEY_LEFT_ALT, "+slow");
BindKey(GLFW_KEY_LEFT_SHIFT, "+fast");
BindMouseButton(GLFW_MOUSE_BUTTON_1, "+attack");
BindMouseButton(GLFW_MOUSE_BUTTON_2, "+attack2");
BindMouseButton(GLFW_MOUSE_BUTTON_3, "+attack3");
BindKey(GLFW_KEY_UP, "+cam_forward");
BindKey(GLFW_KEY_DOWN, "+cam_backward");
BindKey(GLFW_KEY_LEFT, "+cam_left");
BindKey(GLFW_KEY_RIGHT, "+cam_right");*/
RegisterComponents(); RegisterComponents();
{ //{
auto camera = CreateEntity(); // auto camera = CreateEntity();
auto transform = AddComponent<Components::Transform>(camera, "Transform"); // auto transform = AddComponent<Components::Transform>(camera);
transform->Position.z = 20.f; // transform->Position.z = 20.f;
transform->Position.y = 20.f; // transform->Position.y = 20.f;
//transform->Orientation = glm::quat(glm::vec3(glm::pi<float>() / 8.f, 0.f, 0.f)); // //transform->Orientation = glm::quat(glm::vec3(glm::pi<float>() / 8.f, 0.f, 0.f));
auto cameraComp = AddComponent<Components::Camera>(camera, "Camera"); // auto cameraComp = AddComponent<Components::Camera>(camera);
cameraComp->FarClip = 2000.f; // cameraComp->FarClip = 2000.f;
auto freeSteering = AddComponent<Components::FreeSteering>(camera, "FreeSteering"); // auto freeSteering = AddComponent<Components::FreeSteering>(camera);
CommitEntity(camera); // CommitEntity(camera);
} //}
{ {
auto ground = CreateEntity(); auto ground = CreateEntity();
auto transform = AddComponent<Components::Transform>(ground, "Transform"); auto transform = AddComponent<Components::Transform>(ground);
transform->Position = glm::vec3(0, 0, 0); transform->Position = glm::vec3(0, 0, 0);
//transform->Scale = glm::vec3(400.0f, 10.0f, 400.0f); //transform->Scale = glm::vec3(400.0f, 10.0f, 400.0f);
transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f));
auto model = AddComponent<Components::Model>(ground, "Model"); auto model = AddComponent<Components::Model>(ground);
//model->ModelFile = "Models/TestScene/testScene.obj"; //model->ModelFile = "Models/TestScene/testScene.obj";
model->ModelFile = "Models/Placeholders/Terrain/Terrain2.obj"; model->ModelFile = "Models/Placeholders/Terrain/Terrain2.obj";
auto physics = AddComponent<Components::Physics>(ground, "Physics"); auto physics = AddComponent<Components::Physics>(ground);
physics->Mass = 10; physics->Mass = 10;
physics->Static = true; physics->Static = true;
auto groundshape = CreateEntity(ground); auto groundshape = CreateEntity(ground);
auto transformshape = AddComponent<Components::Transform>(groundshape, "Transform"); auto transformshape = AddComponent<Components::Transform>(groundshape);
auto meshShape = AddComponent<Components::MeshShape>(groundshape, "MeshShape"); auto meshShape = AddComponent<Components::MeshShape>(groundshape);
meshShape->ResourceName = "Models/Placeholders/Terrain/Terrain2.obj"; meshShape->ResourceName = "Models/Placeholders/Terrain/Terrain2.obj";
//meshShape->ResourceName = "Models/TestScene/testScene.obj"; //meshShape->ResourceName = "Models/TestScene/testScene.obj";
@@ -110,23 +88,23 @@ void GameWorld::Initialize()
/*{ /*{
auto jeep = CreateEntity(); auto jeep = CreateEntity();
auto transform = AddComponent<Components::Transform>(jeep, "Transform"); auto transform = AddComponent<Components::Transform>(jeep);
transform->Position = glm::vec3(0, 5, 0); transform->Position = glm::vec3(0, 5, 0);
transform->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(0, 1, 0)); transform->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(0, 1, 0));
auto physics = AddComponent<Components::Physics>(jeep, "Physics"); auto physics = AddComponent<Components::Physics>(jeep);
physics->Mass = 1800; physics->Mass = 1800;
physics->Static = false; physics->Static = false;
auto vehicle = AddComponent<Components::Vehicle>(jeep, "Vehicle"); auto vehicle = AddComponent<Components::Vehicle>(jeep);
AddComponent<Components::Input>(jeep, "Input"); AddComponent<Components::Input>(jeep);
{ {
auto shape = CreateEntity(jeep); auto shape = CreateEntity(jeep);
auto transform = AddComponent<Components::Transform>(shape, "Transform"); auto transform = AddComponent<Components::Transform>(shape);
auto meshShape = AddComponent<Components::MeshShape>(shape, "MeshShape"); auto meshShape = AddComponent<Components::MeshShape>(shape);
meshShape->ResourceName = "Models/Jeep/Chassi/ChassiCollision.obj"; meshShape->ResourceName = "Models/Jeep/Chassi/ChassiCollision.obj";
CommitEntity(shape); CommitEntity(shape);
// auto box = AddComponent<Components::Box>(jeep, "Box"); // auto box = AddComponent<Components::Box>(jeep);
// box->Width = 1.487f; // box->Width = 1.487f;
// box->Height = 0.727f; // box->Height = 0.727f;
// box->Depth = 2.594f; // box->Depth = 2.594f;
@@ -135,17 +113,17 @@ void GameWorld::Initialize()
{ {
auto chassis = CreateEntity(jeep); auto chassis = CreateEntity(jeep);
auto transform = AddComponent<Components::Transform>(chassis, "Transform"); auto transform = AddComponent<Components::Transform>(chassis);
transform->Position = glm::vec3(0, 0, 0); // 0.6577f transform->Position = glm::vec3(0, 0, 0); // 0.6577f
auto model = AddComponent<Components::Model>(chassis, "Model"); auto model = AddComponent<Components::Model>(chassis);
model->ModelFile = "Models/Jeep/Chassi/chassi.obj"; model->ModelFile = "Models/Jeep/Chassi/chassi.obj";
} }
{ {
auto lightentity = CreateEntity(jeep); auto lightentity = CreateEntity(jeep);
auto transform = AddComponent<Components::Transform>(lightentity, "Transform"); auto transform = AddComponent<Components::Transform>(lightentity);
transform->Position = glm::vec3(0, 15, 0); transform->Position = glm::vec3(0, 15, 0);
auto light = AddComponent<Components::PointLight>(lightentity, "PointLight"); auto light = AddComponent<Components::PointLight>(lightentity);
light->Diffuse = glm::vec3(128.f/255.f, 172.f/255.f, 242.f/255.f); light->Diffuse = glm::vec3(128.f/255.f, 172.f/255.f, 242.f/255.f);
light->Specular = glm::vec3(1.f); light->Specular = glm::vec3(1.f);
light->constantAttenuation = 0.3f; light->constantAttenuation = 0.3f;
@@ -160,12 +138,12 @@ void GameWorld::Initialize()
float suspensionStrength = 35.f; float suspensionStrength = 35.f;
{ {
auto wheel = CreateEntity(jeep); auto wheel = CreateEntity(jeep);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(1.9f, 0.5546f - wheelOffset, -0.9242f); transform->Position = glm::vec3(1.9f, 0.5546f - wheelOffset, -0.9242f);
transform->Scale = glm::vec3(1.0f); transform->Scale = glm::vec3(1.0f);
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Jeep/WheelFront/wheelFront.obj"; model->ModelFile = "Models/Jeep/WheelFront/wheelFront.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 0; Wheel->AxleID = 0;
Wheel->Mass = 50; Wheel->Mass = 50;
@@ -179,13 +157,13 @@ void GameWorld::Initialize()
{ {
auto wheel = CreateEntity(jeep); auto wheel = CreateEntity(jeep);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(-1.9f, 0.5546f - wheelOffset, -0.9242f); transform->Position = glm::vec3(-1.9f, 0.5546f - wheelOffset, -0.9242f);
transform->Scale = glm::vec3(1.0f); transform->Scale = glm::vec3(1.0f);
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 0, 1)); transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 0, 1));
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Jeep/WheelFront/wheelFront.obj"; model->ModelFile = "Models/Jeep/WheelFront/wheelFront.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 0; Wheel->AxleID = 0;
Wheel->Mass = 50; Wheel->Mass = 50;
@@ -199,11 +177,11 @@ void GameWorld::Initialize()
{ {
auto wheel = CreateEntity(jeep); auto wheel = CreateEntity(jeep);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(0.2726f, 0.2805f - wheelOffset, 1.9307f); transform->Position = glm::vec3(0.2726f, 0.2805f - wheelOffset, 1.9307f);
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Jeep/WheelBack/wheelBack.obj"; model->ModelFile = "Models/Jeep/WheelBack/wheelBack.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 1; Wheel->AxleID = 1;
Wheel->Mass = 50; Wheel->Mass = 50;
@@ -217,12 +195,12 @@ void GameWorld::Initialize()
{ {
auto wheel = CreateEntity(jeep); auto wheel = CreateEntity(jeep);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(-0.2726f, 0.2805f - wheelOffset, 1.9307f); transform->Position = glm::vec3(-0.2726f, 0.2805f - wheelOffset, 1.9307f);
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 0, 1)); transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 0, 1));
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Jeep/WheelBack/wheelBack.obj"; model->ModelFile = "Models/Jeep/WheelBack/wheelBack.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 1; Wheel->AxleID = 1;
Wheel->Mass = 50; Wheel->Mass = 50;
@@ -240,26 +218,26 @@ void GameWorld::Initialize()
{ {
auto tank = CreateEntity(); auto tank = CreateEntity();
auto transform = AddComponent<Components::Transform>(tank, "Transform"); auto transform = AddComponent<Components::Transform>(tank);
transform->Position = glm::vec3(0, 5, 0); transform->Position = glm::vec3(0, 5, 0);
//transform->Orientation = glm::angleAxis(0.f, glm::vec3(0, 1, 0)); //transform->Orientation = glm::angleAxis(0.f, glm::vec3(0, 1, 0));
auto physics = AddComponent<Components::Physics>(tank, "Physics"); auto physics = AddComponent<Components::Physics>(tank);
physics->Mass = 45000; physics->Mass = 45000;
physics->Static = false; physics->Static = false;
auto vehicle = AddComponent<Components::Vehicle>(tank, "Vehicle"); auto vehicle = AddComponent<Components::Vehicle>(tank);
vehicle->MaxTorque = 5200.f; vehicle->MaxTorque = 5200.f;
vehicle->MaxSteeringAngle = 90.f; vehicle->MaxSteeringAngle = 90.f;
AddComponent<Components::TankSteering>(tank, "TankSteering"); AddComponent<Components::TankSteering>(tank);
AddComponent<Components::Input>(tank, "Input"); AddComponent<Components::Input>(tank);
{ {
auto shape = CreateEntity(tank); auto shape = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(shape, "Transform"); auto transform = AddComponent<Components::Transform>(shape);
auto meshShape = AddComponent<Components::MeshShape>(shape, "MeshShape"); auto meshShape = AddComponent<Components::MeshShape>(shape);
meshShape->ResourceName = "Models/Tank/Fix/ChassiCollision.obj"; meshShape->ResourceName = "Models/Tank/Fix/ChassiCollision.obj";
CommitEntity(shape); CommitEntity(shape);
// auto box = AddComponent<Components::Box>(jeep, "Box"); // auto box = AddComponent<Components::Box>(jeep);
// box->Width = 1.487f; // box->Width = 1.487f;
// box->Height = 0.727f; // box->Height = 0.727f;
// box->Depth = 2.594f; // box->Depth = 2.594f;
@@ -268,48 +246,48 @@ void GameWorld::Initialize()
{ {
auto chassis = CreateEntity(tank); auto chassis = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(chassis, "Transform"); auto transform = AddComponent<Components::Transform>(chassis);
transform->Position = glm::vec3(0, 0, 0); transform->Position = glm::vec3(0, 0, 0);
auto model = AddComponent<Components::Model>(chassis, "Model"); auto model = AddComponent<Components::Model>(chassis);
model->ModelFile = "Models/Tank/Fix/Chassi.obj"; model->ModelFile = "Models/Tank/Fix/Chassi.obj";
} }
{ {
auto tower = CreateEntity(tank); auto tower = CreateEntity(tank);
SetProperty(tower, "Name", "tower"); SetProperty(tower, "Name", "tower");
auto transform = AddComponent<Components::Transform>(tower, "Transform"); auto transform = AddComponent<Components::Transform>(tower);
transform->Position = glm::vec3(0.f, 1.2f, 1.8f); transform->Position = glm::vec3(0.f, 1.2f, 1.8f);
auto model = AddComponent<Components::Model>(tower, "Model"); auto model = AddComponent<Components::Model>(tower);
model->ModelFile = "Models/Tank/Fix/Top.obj"; model->ModelFile = "Models/Tank/Fix/Top.obj";
auto towerSteering = AddComponent<Components::TowerSteering>(tower, "TowerSteering"); auto towerSteering = AddComponent<Components::TowerSteering>(tower);
towerSteering->Axis = glm::vec3(0.f, 1.f, 0.f); towerSteering->Axis = glm::vec3(0.f, 1.f, 0.f);
towerSteering->TurnSpeed = glm::pi<float>()/4.f; towerSteering->TurnSpeed = glm::pi<float>()/4.f;
{ {
auto barrel = CreateEntity(tower); auto barrel = CreateEntity(tower);
auto transform = AddComponent<Components::Transform>(barrel, "Transform"); auto transform = AddComponent<Components::Transform>(barrel);
transform->Position = glm::vec3(-0.018f, -0.2, -1.3f); transform->Position = glm::vec3(-0.018f, -0.2, -1.3f);
auto model = AddComponent<Components::Model>(barrel, "Model"); auto model = AddComponent<Components::Model>(barrel);
model->ModelFile = "Models/Tank/Fix/Barrel.obj"; model->ModelFile = "Models/Tank/Fix/Barrel.obj";
auto barrelSteering = AddComponent<Components::BarrelSteering>(barrel, "BarrelSteering"); auto barrelSteering = AddComponent<Components::BarrelSteering>(barrel);
barrelSteering->Axis = glm::vec3(1.f, 0.f, 0.f); barrelSteering->Axis = glm::vec3(1.f, 0.f, 0.f);
barrelSteering->TurnSpeed = glm::pi<float>()/4.f; barrelSteering->TurnSpeed = glm::pi<float>()/4.f;
barrelSteering->ShotSpeed = 70.f; barrelSteering->ShotSpeed = 70.f;
{ {
auto shot = CreateEntity(barrel); auto shot = CreateEntity(barrel);
auto transform = AddComponent<Components::Transform>(shot, "Transform"); auto transform = AddComponent<Components::Transform>(shot);
transform->Position = glm::vec3(0.35f, 0.f, -2.f); transform->Position = glm::vec3(0.35f, 0.f, -2.f);
transform->Orientation = glm::angleAxis(-glm::pi<float>()/2.f, glm::vec3(1, 0, 0)); transform->Orientation = glm::angleAxis(-glm::pi<float>()/2.f, glm::vec3(1, 0, 0));
transform->Scale = glm::vec3(3.f); transform->Scale = glm::vec3(3.f);
AddComponent(shot, "Template"); AddComponent<Components::Template>(shot);
auto physics = AddComponent<Components::Physics>(shot, "Physics"); auto physics = AddComponent<Components::Physics>(shot);
physics->Mass = 10.f; physics->Mass = 10.f;
physics->Static = false; physics->Static = false;
auto modelComponent = AddComponent<Components::Model>(shot, "Model"); auto modelComponent = AddComponent<Components::Model>(shot);
modelComponent->ModelFile = "Models/Placeholders/rocket/Rocket.obj"; modelComponent->ModelFile = "Models/Placeholders/rocket/Rocket.obj";
{ {
auto shape = CreateEntity(shot); auto shape = CreateEntity(shot);
auto transform = AddComponent<Components::Transform>(shape, "Transform"); auto transform = AddComponent<Components::Transform>(shape);
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.5f; boxShape->Width = 0.5f;
boxShape->Height = 0.5f; boxShape->Height = 0.5f;
boxShape->Depth = 0.5f; boxShape->Depth = 0.5f;
@@ -320,18 +298,32 @@ void GameWorld::Initialize()
} }
CommitEntity(barrel); CommitEntity(barrel);
} }
{
auto camera = CreateEntity(tower);
auto transform = AddComponent<Components::Transform>(camera);
transform->Position.z = 30.f;
transform->Position.y = 5.f;
//transform->Orientation = glm::quat(glm::vec3(-glm::pi<float>() / 8.f, 0.f, 0.f));
transform->Orientation = glm::angleAxis(glm::pi<float>() / 100, glm::vec3(1, 0, 0));
auto cameraComp = AddComponent<Components::Camera>(camera);
cameraComp->FarClip = 2000.f;
AddComponent<Components::Input>(camera);
//auto freeSteering = AddComponent<Components::FreeSteering>(camera);
CommitEntity(camera);
}
} }
{ {
auto lightentity = CreateEntity(tank); auto lightentity = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(lightentity, "Transform"); auto transform = AddComponent<Components::Transform>(lightentity);
transform->Position = glm::vec3(0, 15, 0); transform->Position = glm::vec3(0, 0, 0);
auto light = AddComponent<Components::PointLight>(lightentity, "PointLight"); auto light = AddComponent<Components::PointLight>(lightentity);
light->Diffuse = glm::vec3(128.f/255.f, 172.f/255.f, 242.f/255.f); //light->Diffuse = glm::vec3(128.f/255.f, 172.f/255.f, 242.f/255.f);
light->Specular = glm::vec3(1.f); //light->Specular = glm::vec3(1.f);
light->constantAttenuation = 0.3f; /*light->ConstantAttenuation = 0.3f;
light->linearAttenuation = 0.003f; light->LinearAttenuation = 0.003f;
light->quadraticAttenuation = 0.002f; light->QuadraticAttenuation = 0.002f;*/
} }
// auto wheelpair = CreateEntity(tank); // auto wheelpair = CreateEntity(tank);
@@ -345,12 +337,12 @@ void GameWorld::Initialize()
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, -2.6f); transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, -2.6f);
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0)); transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 0; Wheel->AxleID = 0;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -363,9 +355,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -375,12 +367,12 @@ void GameWorld::Initialize()
} }
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, -0.83f); transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, -0.83f);
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0)); transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 0; Wheel->AxleID = 0;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -393,9 +385,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -406,12 +398,12 @@ void GameWorld::Initialize()
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, -2.6f); transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, -2.6f);
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0)); transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 0; Wheel->AxleID = 0;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -424,9 +416,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -436,12 +428,12 @@ void GameWorld::Initialize()
} }
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, -0.83f); transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, -0.83f);
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0)); transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 0; Wheel->AxleID = 0;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -454,9 +446,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -469,11 +461,11 @@ void GameWorld::Initialize()
//Back //Back
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, 1.f); transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, 1.f);
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 1; Wheel->AxleID = 1;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -486,9 +478,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -498,11 +490,11 @@ void GameWorld::Initialize()
} }
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, 2.95f); transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, 2.95f);
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 1; Wheel->AxleID = 1;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -515,9 +507,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -525,12 +517,12 @@ void GameWorld::Initialize()
} }
CommitEntity(wheel); CommitEntity(wheel);
/*auto entity = CreateEntity(tank); auto entity = CreateEntity(tank);
auto transformComponent = AddComponent<Components::Transform>(entity, "Transform"); auto transformComponent = AddComponent<Components::Transform>(entity);
transformComponent->Position = glm::vec3(2,-1.7,2.0); transformComponent->Position = glm::vec3(2,-1.7,2.0);
transformComponent->Scale = glm::vec3(3,3,3); transformComponent->Scale = glm::vec3(3,3,3);
transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0)); transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0));
auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity, "ParticleEmitter"); auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity);
emitterComponent->SpawnCount = 2; emitterComponent->SpawnCount = 2;
emitterComponent->SpawnFrequency = 0.005; emitterComponent->SpawnFrequency = 0.005;
emitterComponent->SpreadAngle = glm::pi<float>(); emitterComponent->SpreadAngle = glm::pi<float>();
@@ -541,23 +533,23 @@ void GameWorld::Initialize()
CommitEntity(entity); CommitEntity(entity);
auto particleEntity = CreateEntity(entity); auto particleEntity = CreateEntity(entity);
auto TEMP = AddComponent<Components::Transform>(particleEntity, "Transform"); auto TEMP = AddComponent<Components::Transform>(particleEntity);
TEMP->Scale = glm::vec3(0); TEMP->Scale = glm::vec3(0);
auto spriteComponent = AddComponent<Components::Sprite>(particleEntity, "Sprite"); auto spriteComponent = AddComponent<Components::Sprite>(particleEntity);
spriteComponent->SpriteFile = "Models/Textures/Sprites/Dust.png"; spriteComponent->SpriteFile = "Models/Textures/Sprites/Dust.png";
emitterComponent->ParticleTemplate = particleEntity; emitterComponent->ParticleTemplate = particleEntity;
CommitEntity(particleEntity);*/ CommitEntity(particleEntity);
} }
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, 1.f); transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, 1.f);
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0)); transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 1; Wheel->AxleID = 1;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -570,9 +562,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -582,11 +574,11 @@ void GameWorld::Initialize()
} }
{ {
auto wheel = CreateEntity(tank); auto wheel = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(wheel, "Transform"); auto transform = AddComponent<Components::Transform>(wheel);
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, 2.95f); transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, 2.95f);
auto model = AddComponent<Components::Model>(wheel, "Model"); auto model = AddComponent<Components::Model>(wheel);
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj"; model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
auto Wheel = AddComponent<Components::Wheel>(wheel, "Wheel"); auto Wheel = AddComponent<Components::Wheel>(wheel);
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f); Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
Wheel->AxleID = 1; Wheel->AxleID = 1;
Wheel->Mass = 2000; Wheel->Mass = 2000;
@@ -599,9 +591,9 @@ void GameWorld::Initialize()
Wheel->Width = 0.6f; Wheel->Width = 0.6f;
{ {
auto shape = CreateEntity(wheel); auto shape = CreateEntity(wheel);
auto shapetransform = AddComponent<Components::Transform>(shape, "Transform"); auto shapetransform = AddComponent<Components::Transform>(shape);
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position; shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
auto boxShape = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto boxShape = AddComponent<Components::BoxShape>(shape);
boxShape->Width = 0.7f; boxShape->Width = 0.7f;
boxShape->Height = 0.34f; boxShape->Height = 0.34f;
boxShape->Depth = 0.7f; boxShape->Depth = 0.7f;
@@ -609,45 +601,32 @@ void GameWorld::Initialize()
} }
CommitEntity(wheel); CommitEntity(wheel);
//auto entity = CreateEntity(tank); auto entity = CreateEntity(tank);
//auto transformComponent = AddComponent<Components::Transform>(entity, "Transform"); auto transformComponent = AddComponent<Components::Transform>(entity);
//transformComponent->Position = glm::vec3(-2,-1.7,2.0); transformComponent->Position = glm::vec3(-2,-1.7,2.0);
//transformComponent->Scale = glm::vec3(3,3,3); transformComponent->Scale = glm::vec3(3,3,3);
//transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0)); transformComponent->Orientation = glm::angleAxis(glm::pi<float>()/2, glm::vec3(1,0,0));
//auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity, "ParticleEmitter"); auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity);
//emitterComponent->SpawnCount = 2; emitterComponent->SpawnCount = 2;
//emitterComponent->SpawnFrequency = 0.005; emitterComponent->SpawnFrequency = 0.005;
//emitterComponent->SpreadAngle = glm::pi<float>(); emitterComponent->SpreadAngle = glm::pi<float>();
//emitterComponent->UseGoalVelocity = false; emitterComponent->UseGoalVelocity = false;
//emitterComponent->LifeTime = 0.5; emitterComponent->LifeTime = 0.5;
////emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100); //emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100);
//emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05)); emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05));
//CommitEntity(entity); CommitEntity(entity);
//auto particleEntity = CreateEntity(entity); auto particleEntity = CreateEntity(entity);
//auto TEMP = AddComponent<Components::Transform>(particleEntity, "Transform"); auto TEMP = AddComponent<Components::Transform>(particleEntity);
//TEMP->Scale = glm::vec3(0); TEMP->Scale = glm::vec3(0);
//auto spriteComponent = AddComponent<Components::Sprite>(particleEntity, "Sprite"); auto spriteComponent = AddComponent<Components::Sprite>(particleEntity);
//spriteComponent->SpriteFile = "Models/Textures/Sprites/Dust.png"; spriteComponent->SpriteFile = "Models/Textures/Sprites/Dust.png";
//emitterComponent->ParticleTemplate = particleEntity; emitterComponent->ParticleTemplate = particleEntity;
//CommitEntity(particleEntity); CommitEntity(particleEntity);
} }
CommitEntity(tank); CommitEntity(tank);
{
auto camera = CreateEntity(tank);
auto transform = AddComponent<Components::Transform>(camera, "Transform");
transform->Position.z = 20.f;
transform->Position.y = 7.f;
//transform->Orientation = glm::quat(glm::vec3(-glm::pi<float>() / 8.f, 0.f, 0.f));
transform->Orientation = glm::angleAxis(glm::pi<float>() / 100, glm::vec3(1,0,0));
auto cameraComp = AddComponent<Components::Camera>(camera, "Camera");
cameraComp->FarClip = 2000.f;
AddComponent(camera, "Input");
auto freeSteering = AddComponent<Components::FreeSteering>(camera, "FreeSteering");
CommitEntity(camera);
}
} }
@@ -656,7 +635,7 @@ void GameWorld::Initialize()
for(int i = 0; i < 10; i++) for(int i = 0; i < 10; i++)
{ {
auto entity = CreateEntity(); auto entity = CreateEntity();
auto transform = AddComponent<Components::Transform>(entity, "Transform"); auto transform = AddComponent<Components::Transform>(entity);
transform->Position = glm::vec3(30 + i*0.1f, 0 + i*0.1f, 10 + i*0.1f); transform->Position = glm::vec3(30 + i*0.1f, 0 + i*0.1f, 10 + i*0.1f);
transform->Scale = glm::vec3(0); transform->Scale = glm::vec3(0);
transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f));
@@ -664,13 +643,13 @@ void GameWorld::Initialize()
std::stringstream ss; std::stringstream ss;
ss << "Models/Placeholders/ShatterTest/" << i+1 << ".obj"; ss << "Models/Placeholders/ShatterTest/" << i+1 << ".obj";
auto model = AddComponent<Components::Model>(entity, "Model"); auto model = AddComponent<Components::Model>(entity);
model->ModelFile = ss.str(); model->ModelFile = ss.str();
auto physics = AddComponent<Components::Physics>(entity, "Physics"); auto physics = AddComponent<Components::Physics>(entity);
physics->Mass = 100; physics->Mass = 100;
physics->Static = true; physics->Static = true;
auto meshShape = AddComponent<Components::MeshShape>(entity, "MeshShape"); auto meshShape = AddComponent<Components::MeshShape>(entity);
meshShape->ResourceName = ss.str(); meshShape->ResourceName = ss.str();
CommitEntity(entity); CommitEntity(entity);
@@ -683,22 +662,22 @@ void GameWorld::Initialize()
for (int x = -5; x < 5; x++) for (int x = -5; x < 5; x++)
{ {
auto brick = CreateEntity(); auto brick = CreateEntity();
auto transform = AddComponent<Components::Transform>(brick, "Transform"); auto transform = AddComponent<Components::Transform>(brick);
transform->Position = glm::vec3(x + 0.01f, y * 0.3f + 0.01f, -20); transform->Position = glm::vec3(x + 0.01f, y * 0.3f + 0.01f, -20);
transform->Position.x += (y % 2)*0.5f; transform->Position.x += (y % 2)*0.5f;
transform->Scale = glm::vec3(1, 0.3f, 0.4f); transform->Scale = glm::vec3(1, 0.3f, 0.4f);
transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f));
auto model = AddComponent<Components::Model>(brick, "Model"); auto model = AddComponent<Components::Model>(brick);
model->ModelFile = "Models/Placeholders/PhysicsTest/Cube2.obj"; model->ModelFile = "Models/Placeholders/PhysicsTest/Cube2.obj";
auto physics = AddComponent<Components::Physics>(brick, "Physics"); auto physics = AddComponent<Components::Physics>(brick);
physics->Mass = 3; physics->Mass = 3;
auto shape = CreateEntity(brick); auto shape = CreateEntity(brick);
auto transformshape = AddComponent<Components::Transform>(shape, "Transform"); auto transformshape = AddComponent<Components::Transform>(shape);
auto box = AddComponent<Components::BoxShape>(shape, "BoxShape"); auto box = AddComponent<Components::BoxShape>(shape);
box->Width = 0.5f; box->Width = 0.5f;
box->Height = 0.15f; box->Height = 0.15f;
box->Depth = 0.3f; box->Depth = 0.3f;
@@ -712,16 +691,16 @@ void GameWorld::Initialize()
for (int y = 0; y < 5; y++) for (int y = 0; y < 5; y++)
{ {
auto cube = CreateEntity(); auto cube = CreateEntity();
auto transform = AddComponent<Components::Transform>(cube, "Transform"); auto transform = AddComponent<Components::Transform>(cube);
transform->Position = glm::vec3(3 * x + 0.1f + -20.f, 3 * y + 0.1f + 1.f, 0); transform->Position = glm::vec3(3 * x + 0.1f + -20.f, 3 * y + 0.1f + 1.f, 0);
transform->Scale = glm::vec3(3); transform->Scale = glm::vec3(3);
transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f));
auto model = AddComponent<Components::Model>(cube, "Model"); auto model = AddComponent<Components::Model>(cube);
model->ModelFile = "Models/Placeholders/PhysicsTest/Cube2.obj"; model->ModelFile = "Models/Placeholders/PhysicsTest/Cube2.obj";
auto physics = AddComponent<Components::Physics>(cube, "Physics"); auto physics = AddComponent<Components::Physics>(cube);
physics->Mass = 100; physics->Mass = 100;
auto box = AddComponent<Components::BoxShape>(cube, "BoxShape"); auto box = AddComponent<Components::BoxShape>(cube);
box->Width = 1.5f; box->Width = 1.5f;
box->Height = 1.5f; box->Height = 1.5f;
box->Depth = 1.5f; box->Depth = 1.5f;
@@ -733,7 +712,7 @@ void GameWorld::Initialize()
/*{ /*{
auto entity = CreateEntity(); auto entity = CreateEntity();
AddComponent(entity, "Transform"); AddComponent(entity, "Transform");
auto emitter = AddComponent<Components::SoundEmitter>(entity, "SoundEmitter"); auto emitter = AddComponent<Components::SoundEmitter>(entity);
emitter->Path = "Sounds/korvring.wav"; emitter->Path = "Sounds/korvring.wav";
emitter->Loop = true; emitter->Loop = true;
GetSystem<Systems::SoundSystem>("SoundSystem")->PlaySound(emitter); GetSystem<Systems::SoundSystem>("SoundSystem")->PlaySound(emitter);
@@ -749,40 +728,40 @@ void GameWorld::Update(double dt)
void GameWorld::RegisterComponents() void GameWorld::RegisterComponents()
{ {
m_ComponentFactory.Register("Transform", []() { return new Components::Transform(); }); m_ComponentFactory.Register<Components::Transform>([]() { return new Components::Transform(); });
m_ComponentFactory.Register("Template", []() { return new Components::Template(); }); m_ComponentFactory.Register<Components::Template>([]() { return new Components::Template(); });
} }
void GameWorld::RegisterSystems() void GameWorld::RegisterSystems()
{ {
m_SystemFactory.Register("TransformSystem", [this]() { return new Systems::TransformSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::TransformSystem>([this]() { return new Systems::TransformSystem(this, m_EventBroker); });
//m_SystemFactory.Register("LevelGenerationSystem", [this]() { return new Systems::LevelGenerationSystem(this); }); //m_SystemFactory.Register<Systems::LevelGenerationSystem>([this]() { return new Systems::LevelGenerationSystem(this); });
m_SystemFactory.Register("InputSystem", [this]() { return new Systems::InputSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::InputSystem>([this]() { return new Systems::InputSystem(this, m_EventBroker); });
m_SystemFactory.Register("DebugSystem", [this]() { return new Systems::DebugSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::DebugSystem>([this]() { return new Systems::DebugSystem(this, m_EventBroker); });
//m_SystemFactory.Register("CollisionSystem", [this]() { return new Systems::CollisionSystem(this); }); //m_SystemFactory.Register<Systems::CollisionSystem>([this]() { return new Systems::CollisionSystem(this); });
m_SystemFactory.Register("ParticleSystem", [this]() { return new Systems::ParticleSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::ParticleSystem>([this]() { return new Systems::ParticleSystem(this, m_EventBroker); });
//m_SystemFactory.Register("PlayerSystem", [this]() { return new Systems::PlayerSystem(this); }); //m_SystemFactory.Register<Systems::PlayerSystem>([this]() { return new Systems::PlayerSystem(this); });
m_SystemFactory.Register("FreeSteeringSystem", [this]() { return new Systems::FreeSteeringSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::FreeSteeringSystem>([this]() { return new Systems::FreeSteeringSystem(this, m_EventBroker); });
m_SystemFactory.Register("TankSteeringSystem", [this]() { return new Systems::TankSteeringSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::TankSteeringSystem>([this]() { return new Systems::TankSteeringSystem(this, m_EventBroker); });
m_SystemFactory.Register("SoundSystem", [this]() { return new Systems::SoundSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::SoundSystem>([this]() { return new Systems::SoundSystem(this, m_EventBroker); });
m_SystemFactory.Register("PhysicsSystem", [this]() { return new Systems::PhysicsSystem(this, m_EventBroker); }); m_SystemFactory.Register<Systems::PhysicsSystem>([this]() { return new Systems::PhysicsSystem(this, m_EventBroker); });
m_SystemFactory.Register("RenderSystem", [this]() { return new Systems::RenderSystem(this, m_EventBroker, m_Renderer); }); m_SystemFactory.Register<Systems::RenderSystem>([this]() { return new Systems::RenderSystem(this, m_EventBroker, m_Renderer); });
} }
void GameWorld::AddSystems() void GameWorld::AddSystems()
{ {
AddSystem("TransformSystem"); AddSystem<Systems::TransformSystem>();
//AddSystem("LevelGenerationSystem"); //AddSystem<Systems::LevelGenerationSystem>();
AddSystem("InputSystem"); AddSystem<Systems::InputSystem>();
AddSystem("DebugSystem"); AddSystem<Systems::DebugSystem>();
//AddSystem("CollisionSystem"); //AddSystem<Systems::CollisionSystem>();
AddSystem("ParticleSystem"); AddSystem<Systems::ParticleSystem>();
//AddSystem("PlayerSystem"); //AddSystem<Systems::PlayerSystem>();
AddSystem("FreeSteeringSystem"); AddSystem<Systems::FreeSteeringSystem>();
AddSystem("TankSteeringSystem"); AddSystem<Systems::TankSteeringSystem>();
AddSystem("SoundSystem"); AddSystem<Systems::SoundSystem>();
AddSystem("PhysicsSystem"); AddSystem<Systems::PhysicsSystem>();
AddSystem("RenderSystem"); AddSystem<Systems::RenderSystem>();
} }
void GameWorld::BindKey(int keyCode, std::string command, float value) void GameWorld::BindKey(int keyCode, std::string command, float value)
@@ -794,11 +773,12 @@ void GameWorld::BindKey(int keyCode, std::string command, float value)
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} }
void GameWorld::BindMouseButton(int button, std::string command) void GameWorld::BindMouseButton(int button, std::string command, float value)
{ {
Events::BindMouseButton e; Events::BindMouseButton e;
e.Button = button; e.Button = button;
e.Command = command; e.Command = command;
e.Value = value;
m_EventBroker->Publish(e); m_EventBroker->Publish(e);
} }
+1 -1
View File
@@ -57,7 +57,7 @@ private:
std::shared_ptr<Renderer> m_Renderer; 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); 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);
void BindGamepadButton(Gamepad::Button button, std::string command, float value); void BindGamepadButton(Gamepad::Button button, std::string command, float value);
}; };
+27 -8
View File
@@ -5,6 +5,9 @@ void InputManager::Initialize()
{ {
m_LastGamepadAxisState = std::array<GamepadAxisState, XUSER_MAX_COUNT>(); m_LastGamepadAxisState = std::array<GamepadAxisState, XUSER_MAX_COUNT>();
m_LastGamepadButtonState = std::array<GamepadButtonState, XUSER_MAX_COUNT>(); m_LastGamepadButtonState = std::array<GamepadButtonState, XUSER_MAX_COUNT>();
EVENT_SUBSCRIBE_MEMBER(m_ELockMouse, &InputManager::OnLockMouse);
EVENT_SUBSCRIBE_MEMBER(m_EUnlockMouse, &InputManager::OnUnlockMouse);
} }
void InputManager::Update(double dt) void InputManager::Update(double dt)
@@ -20,13 +23,13 @@ void InputManager::Update(double dt)
{ {
Events::KeyDown e; Events::KeyDown e;
e.KeyCode = i; e.KeyCode = i;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
else else
{ {
Events::KeyUp e; Events::KeyUp e;
e.KeyCode = i; e.KeyCode = i;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
} }
} }
@@ -42,13 +45,13 @@ void InputManager::Update(double dt)
{ {
Events::MousePress e; Events::MousePress e;
e.Button = i; e.Button = i;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
else else
{ {
Events::MouseRelease e; Events::MouseRelease e;
e.Button = i; e.Button = i;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
} }
} }
@@ -65,7 +68,7 @@ void InputManager::Update(double dt)
e.Y = m_CurrentMouseY; e.Y = m_CurrentMouseY;
e.DeltaX = m_CurrentMouseDeltaX; e.DeltaX = m_CurrentMouseDeltaX;
e.DeltaY = m_CurrentMouseDeltaY; e.DeltaY = m_CurrentMouseDeltaY;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
// // Lock mouse while holding LMB // // Lock mouse while holding LMB
@@ -156,7 +159,7 @@ void InputManager::PublishGamepadAxisIfChanged(int gamepadID, Gamepad::Axis axis
e.GamepadID = gamepadID; e.GamepadID = gamepadID;
e.Axis = axis; e.Axis = axis;
e.Value = currentValue; e.Value = currentValue;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
} }
@@ -171,14 +174,30 @@ void InputManager::PublishGamepadButtonIfChanged(int gamepadID, Gamepad::Button
Events::GamepadButtonDown e; Events::GamepadButtonDown e;
e.GamepadID = gamepadID; e.GamepadID = gamepadID;
e.Button = button; e.Button = button;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
else else
{ {
Events::GamepadButtonUp e; Events::GamepadButtonUp e;
e.GamepadID = gamepadID; e.GamepadID = gamepadID;
e.Button = button; e.Button = button;
m_EventBroker->Publish(e); EventBroker->Publish(e);
} }
} }
} }
bool InputManager::OnLockMouse(const Events::LockMouse &event)
{
m_MouseLocked = true;
glfwSetInputMode(m_GLFWWindow, GLFW_CURSOR, GLFW_CURSOR_DISABLED);
return true;
}
bool InputManager::OnUnlockMouse(const Events::UnlockMouse &event)
{
m_MouseLocked = false;
glfwSetInputMode(m_GLFWWindow, GLFW_CURSOR, GLFW_CURSOR_NORMAL);
return true;
}
+11 -3
View File
@@ -11,15 +11,16 @@
#include "Events/MousePress.h" #include "Events/MousePress.h"
#include "Events/MouseRelease.h" #include "Events/MouseRelease.h"
#include "Events/MouseMove.h" #include "Events/MouseMove.h"
#include "Events/LockMouse.h"
#include "Events/GamepadAxis.h" #include "Events/GamepadAxis.h"
#include "Events/GamepadButton.h" #include "Events/GamepadButton.h"
class InputManager class InputManager
{ {
public: public:
InputManager(GLFWwindow* window, std::shared_ptr<EventBroker> eventBroker) InputManager(GLFWwindow* window, std::shared_ptr<::EventBroker> eventBroker)
: m_GLFWWindow(window) : m_GLFWWindow(window)
, m_EventBroker(eventBroker) , EventBroker(eventBroker)
, m_CurrentKeyState() , m_CurrentKeyState()
, m_LastKeyState() , m_LastKeyState()
, m_CurrentMouseState() , m_CurrentMouseState()
@@ -27,6 +28,7 @@ public:
, m_CurrentMouseX(0), m_CurrentMouseY(0) , m_CurrentMouseX(0), m_CurrentMouseY(0)
, m_LastMouseX(0), m_LastMouseY(0) , m_LastMouseX(0), m_LastMouseY(0)
, m_CurrentMouseDeltaX(0), m_CurrentMouseDeltaY(0) , m_CurrentMouseDeltaX(0), m_CurrentMouseDeltaY(0)
, m_MouseLocked(false)
{ Initialize(); } { Initialize(); }
void Initialize(); void Initialize();
@@ -35,7 +37,12 @@ public:
private: private:
GLFWwindow* m_GLFWWindow; GLFWwindow* m_GLFWWindow;
std::shared_ptr<EventBroker> m_EventBroker; std::shared_ptr<::EventBroker> EventBroker;
EventRelay<Events::LockMouse> m_ELockMouse;
bool OnLockMouse(const Events::LockMouse &event);
EventRelay<Events::UnlockMouse> m_EUnlockMouse;
bool OnUnlockMouse(const Events::UnlockMouse &event);
std::array<int, GLFW_KEY_LAST+1> m_CurrentKeyState; std::array<int, GLFW_KEY_LAST+1> m_CurrentKeyState;
std::array<int, GLFW_KEY_LAST+1> m_LastKeyState; std::array<int, GLFW_KEY_LAST+1> m_LastKeyState;
@@ -51,6 +58,7 @@ private:
double m_CurrentMouseX, m_CurrentMouseY; double m_CurrentMouseX, m_CurrentMouseY;
double m_LastMouseX, m_LastMouseY; double m_LastMouseX, m_LastMouseY;
double m_CurrentMouseDeltaX, m_CurrentMouseDeltaY; double m_CurrentMouseDeltaX, m_CurrentMouseDeltaY;
bool m_MouseLocked;
void PublishGamepadAxisIfChanged(int gamepadID, Gamepad::Axis axis); void PublishGamepadAxisIfChanged(int gamepadID, Gamepad::Axis axis);
void PublishGamepadButtonIfChanged(int gamepadID, Gamepad::Button button); void PublishGamepadButtonIfChanged(int gamepadID, Gamepad::Button button);
+3 -3
View File
@@ -7,13 +7,13 @@
void VehicleSetup::buildVehicle(World *world, const hkpWorld* physicsWorld, hkpVehicleInstance& vehicle, EntityID vehicleEntity, std::vector<EntityID> wheelEntities) void VehicleSetup::buildVehicle(World *world, const hkpWorld* physicsWorld, hkpVehicleInstance& vehicle, EntityID vehicleEntity, std::vector<EntityID> wheelEntities)
{ {
auto vehicleComponent = world->GetComponent<Components::Vehicle>(vehicleEntity, "Vehicle"); auto vehicleComponent = world->GetComponent<Components::Vehicle>(vehicleEntity);
WheelData wheelData; WheelData wheelData;
for (int i = 0; i < wheelEntities.size(); i++) for (int i = 0; i < wheelEntities.size(); i++)
{ {
wheelData.WheelComponent = world->GetComponent<Components::Wheel>(wheelEntities[i], "Wheel"); wheelData.WheelComponent = world->GetComponent<Components::Wheel>(wheelEntities[i]);
wheelData.TransformComponent = world->GetComponent<Components::Transform>(wheelEntities[i], "Transform"); wheelData.TransformComponent = world->GetComponent<Components::Transform>(wheelEntities[i]);
m_Wheels.push_back(wheelData); m_Wheels.push_back(wheelData);
} }
+444 -209
View File
@@ -13,12 +13,15 @@ Renderer::Renderer()
m_DrawWireframe = false; m_DrawWireframe = false;
m_DrawBounds = false; m_DrawBounds = false;
#endif #endif
Gamma = 2.2f;
m_ShadowMapRes = 2048; CAtt = 1.0f;
LAtt = 0.0f;
QAtt = 3.0f;
m_ShadowMapRes = 2048*8;
m_SunPosition = glm::vec3(0, 3.5f, 10); m_SunPosition = glm::vec3(0, 3.5f, 10);
m_SunTarget = glm::vec3(0, 0, 0); m_SunTarget = glm::vec3(0, 0, 0);
m_SunProjection = glm::ortho<float>(-100, 100, -100, 100, -100, 100); m_SunProjection = glm::ortho<float>(-200.f, 200.f, -200.f, 200.f, -100, 200);
Lights = 0; /* Lights = 0;*/
} }
void Renderer::Initialize() void Renderer::Initialize()
@@ -76,7 +79,7 @@ void Renderer::Initialize()
void Renderer::LoadContent() void Renderer::LoadContent()
{ {
auto standardVS = std::shared_ptr<Shader>(new VertexShader("Shaders/Vertex.glsl")); /*auto standardVS = std::shared_ptr<Shader>(new VertexShader("Shaders/Vertex.glsl"));
auto standardFS = std::shared_ptr<Shader>(new FragmentShader("Shaders/Fragment.glsl")); auto standardFS = std::shared_ptr<Shader>(new FragmentShader("Shaders/Fragment.glsl"));
m_ShaderProgram.AddShader(standardVS); m_ShaderProgram.AddShader(standardVS);
@@ -90,11 +93,6 @@ void Renderer::LoadContent()
m_ShaderProgramNormals.Compile(); m_ShaderProgramNormals.Compile();
m_ShaderProgramNormals.Link(); m_ShaderProgramNormals.Link();
m_ShaderProgramShadows.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/ShadowMap.vert.glsl")));
m_ShaderProgramShadows.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/ShadowMap.frag.glsl")));
m_ShaderProgramShadows.Compile();
m_ShaderProgramShadows.Link();
m_ShaderProgramShadowsDrawDepth.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/VisualizeDepth.vert.glsl"))); m_ShaderProgramShadowsDrawDepth.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/VisualizeDepth.vert.glsl")));
m_ShaderProgramShadowsDrawDepth.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/VisualizeDepth.frag.glsl"))); m_ShaderProgramShadowsDrawDepth.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/VisualizeDepth.frag.glsl")));
m_ShaderProgramShadowsDrawDepth.Compile(); m_ShaderProgramShadowsDrawDepth.Compile();
@@ -108,13 +106,124 @@ void Renderer::LoadContent()
m_ShaderProgramSkybox.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/Skybox.vert.glsl"))); m_ShaderProgramSkybox.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/Skybox.vert.glsl")));
m_ShaderProgramSkybox.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/Skybox.frag.glsl"))); m_ShaderProgramSkybox.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/Skybox.frag.glsl")));
m_ShaderProgramSkybox.Compile(); m_ShaderProgramSkybox.Compile();
m_ShaderProgramSkybox.Link(); m_ShaderProgramSkybox.Link();*/
m_Skybox = std::make_shared<Skybox>("Textures/Skybox/Sunset", "jpg"); m_ShaderProgramShadows.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/ShadowMap.vert.glsl")));
m_ShaderProgramShadows.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/ShadowMap.frag.glsl")));
m_ShaderProgramShadows.Compile();
m_ShaderProgramShadows.Link();
m_DebugAABB = CreateAABB(); m_FirstPassProgram.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/Vertex.glsl")));
m_FirstPassProgram.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/Fragment.glsl")));
m_FirstPassProgram.Compile();
glBindFragDataLocation(m_FirstPassProgram.GetHandle(), 0, "frag_Diffuse");
glBindFragDataLocation(m_FirstPassProgram.GetHandle(), 1, "frag_Position");
glBindFragDataLocation(m_FirstPassProgram.GetHandle(), 2, "frag_Normal");
m_FirstPassProgram.Link();
m_SecondPassProgram.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/Vertex2.glsl")));
m_SecondPassProgram.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/Fragment2.glsl")));
m_SecondPassProgram.Compile();
m_SecondPassProgram.Link();
m_SecondPassProgram_Debug.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/Vertex2.glsl")));
m_SecondPassProgram_Debug.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/Fragment2-Debug.glsl")));
m_SecondPassProgram_Debug.Compile();
m_SecondPassProgram_Debug.Link();
m_FinalPassProgram.AddShader(std::shared_ptr<Shader>(new VertexShader("Shaders/FinalPass.vert.glsl")));
m_FinalPassProgram.AddShader(std::shared_ptr<Shader>(new FragmentShader("Shaders/FinalPass.frag.glsl")));
m_FinalPassProgram.Compile();
m_FinalPassProgram.Link();
m_ScreenQuad = CreateQuad(); m_ScreenQuad = CreateQuad();
CreateShadowMap(m_ShadowMapRes); CreateShadowMap(m_ShadowMapRes);
FrameBufferTextures();
}
void Renderer::Draw(double dt)
{
if(glfwGetKey(m_Window, GLFW_KEY_F1))
{
m_QuadView = false;
}
if(glfwGetKey(m_Window, GLFW_KEY_F2))
{
m_QuadView = true;
}
if(glfwGetKey(m_Window, GLFW_KEY_KP_1))
{
Gamma -= 0.3f * dt;
LOG_INFO("Gamma_UP: %f", Gamma);
}
if(glfwGetKey(m_Window, GLFW_KEY_KP_4))
{
Gamma += 0.3f * dt;
LOG_INFO("Gamma_DOWN: %f", Gamma);
}
if(glfwGetKey(m_Window, GLFW_KEY_1))
{
if(glfwGetKey(m_Window, GLFW_KEY_KP_ADD))
{
CAtt += 0.5f * dt;
LOG_INFO("Const: %f", CAtt);
}
if(glfwGetKey(m_Window, GLFW_KEY_KP_SUBTRACT))
{
CAtt -= 0.5f * dt;
LOG_INFO("Const: %f", CAtt);
}
}
if(glfwGetKey(m_Window, GLFW_KEY_2))
{
if(glfwGetKey(m_Window, GLFW_KEY_KP_ADD))
{
LAtt += 0.5f * dt;
LOG_INFO("Linear: %f", LAtt);
}
if(glfwGetKey(m_Window, GLFW_KEY_KP_SUBTRACT))
{
LAtt -= 0.5f * dt;
LOG_INFO("Linear: %f", LAtt);
}
}
if(glfwGetKey(m_Window, GLFW_KEY_3))
{
if(glfwGetKey(m_Window, GLFW_KEY_KP_ADD))
{
QAtt += 0.5f * dt;
LOG_INFO("Quadratic: %f", QAtt);
}
if(glfwGetKey(m_Window, GLFW_KEY_KP_SUBTRACT))
{
QAtt -= 0.5f * dt;
LOG_INFO("Quadratic: %f", QAtt);
}
}
glDisable(GL_BLEND);
DrawFBO();
ClearStuff();
glfwSwapBuffers(m_Window);
}
#pragma region TempRegion
void Renderer::DrawSkybox()
{
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, m_Width, m_Height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_ShaderProgramSkybox.Bind();
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * glm::toMat4(glm::inverse(m_Camera->Orientation()));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgramSkybox.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(cameraMatrix));
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
m_Skybox->Draw();
} }
void Renderer::CreateShadowMap(int resolution) void Renderer::CreateShadowMap(int resolution)
@@ -137,194 +246,35 @@ void Renderer::CreateShadowMap(int resolution)
glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_ShadowDepthTexture, 0); glFramebufferTexture(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, m_ShadowDepthTexture, 0);
glDrawBuffer(GL_NONE); glDrawBuffer(GL_NONE);
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
{
LOG_ERROR("Framebuffer incomplete!"); LOG_ERROR("Framebuffer incomplete!");
return; return;
} }
} }
void Renderer::Draw(double dt)
{
glDisable(GL_BLEND);
DrawSkybox();
DrawShadowMap();
DrawScene();
#ifdef DEBUG
// Draw bounding boxes
if (m_DrawBounds)
{
glEnable(GL_BLEND);
glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO);
m_ShaderProgramDebugAABB.Bind();
for (auto tuple : AABBsToRender)
{
glm::mat4 modelMatrix;
bool colliding;
std::tie(modelMatrix, colliding) = tuple;
// Model matrix
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
glm::mat4 MVP = cameraMatrix * modelMatrix;
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgramDebugAABB.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
// Color
glm::vec4 color(1.f, 1.f, 1.f, 0.f);
if (colliding)
color = glm::vec4(1.f, 0.f, 0.f, 0.f);
glUniform4fv(glGetUniformLocation(m_ShaderProgramDebugAABB.GetHandle(), "Color"), 1, glm::value_ptr(color));
glBindVertexArray(m_DebugAABB);
glDrawArrays(GL_LINES, 0, 24);
}
}
DrawDebugShadowMap();
#endif
ClearStuff();
glfwSwapBuffers(m_Window);
}
void Renderer::DrawSkybox()
{
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, m_Width, m_Height);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_ShaderProgramSkybox.Bind();
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * glm::toMat4(glm::inverse(m_Camera->Orientation()));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgramSkybox.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(cameraMatrix));
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
m_Skybox->Draw();
}
void Renderer::DrawScene()
{
glBindFramebuffer(GL_FRAMEBUFFER, 0);
glViewport(0, 0, m_Width, m_Height);
glClear(GL_DEPTH_BUFFER_BIT);
//glClearColor(1.0f, 1.0f, 0.0f, 1.0f);
glEnable(GL_DEPTH_TEST);
glEnable(GL_CULL_FACE);
glCullFace(GL_BACK);
#ifdef DEBUG
glDisable(GL_CULL_FACE);
glPolygonMode(GL_BACK, GL_LINE);
#endif
// Draw models
glm::mat4 depthViewMatrix = glm::lookAt(m_SunPosition, m_SunTarget, glm::vec3(0, 1, 0)) * glm::translate(-m_Camera->Position() * glm::vec3(1, 0, 0));
glm::mat4 depthCamera = m_SunProjection * depthViewMatrix;
glm::mat4 biasMatrix(
0.5, 0.0, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0,
0.0, 0.0, 0.5, 0.0,
0.5, 0.5, 0.5, 1.0
);
m_ShaderProgram.Bind();
glUniform1i(glGetUniformLocation(m_ShaderProgram.GetHandle(), "numberOfLights"), Lights);
glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "position"), Lights, Light_position.data());
glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "specular"), Lights, Light_specular.data());
glUniform3fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "diffuse"), Lights, Light_diffuse.data());
glUniform1fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "constantAttenuation"), Lights, Light_constantAttenuation.data());
glUniform1fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "linearAttenuation"), Lights, Light_linearAttenuation.data());
glUniform1fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "quadraticAttenuation"), Lights, Light_quadraticAttenuation.data());
glUniform1fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "spotExponent"), Lights, Light_spotExponent.data());
if (m_DrawWireframe)
{
glPolygonMode(GL_FRONT_AND_BACK, GL_LINE);
}
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_ShadowDepthTexture);
//DrawModels(m_ShaderProgram);
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
glm::mat4 depthCameraMatrix = biasMatrix * depthCamera;
glm::mat4 MVP;
glm::mat4 depthMVP;
for (auto tuple : ModelsToRender)
{
Model* model;
glm::mat4 modelMatrix;
bool visible;
std::tie(model, modelMatrix, visible, std::ignore) = tuple;
if (!visible)
continue;
MVP = cameraMatrix * modelMatrix;
depthMVP = depthCameraMatrix * modelMatrix;
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "model"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "view"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix()));
glBindVertexArray(model->VAO);
for (auto texGroup : model->TextureGroups)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, *texGroup.Texture);
glDrawArrays(GL_TRIANGLES, texGroup.StartIndex, texGroup.EndIndex - texGroup.StartIndex + 1);
}
}
for (auto tuple : TexturesToRender)
{
Texture* texture;
glm::mat4 modelMatrix;
glm::mat4 billboardMatrix;
std::tie(texture, modelMatrix, billboardMatrix) = tuple;
//MVP = cameraMatrix * glm::inverse(glm::toMat4(m_Camera->Orientation()) * modelMatrix );
MVP = cameraMatrix * modelMatrix * billboardMatrix;
depthMVP = depthCameraMatrix * modelMatrix;
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "DepthMVP"), 1, GL_FALSE, glm::value_ptr(depthMVP));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "model"), 1, GL_FALSE, glm::value_ptr(modelMatrix));
glUniformMatrix4fv(glGetUniformLocation(m_ShaderProgram.GetHandle(), "view"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix()));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, *texture);
glBindVertexArray(m_ScreenQuad);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
#ifdef DEBUG
// Debug draw model normals
if (m_DrawNormals)
{
m_ShaderProgramNormals.Bind();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL);
DrawModels(m_ShaderProgramNormals);
}
#endif
}
void Renderer::DrawShadowMap() void Renderer::DrawShadowMap()
{ {
glEnable(GL_DEPTH_TEST); glEnable(GL_DEPTH_TEST);//Tests where objects are and display them correctly
glEnable(GL_CULL_FACE); glEnable(GL_CULL_FACE); //removes triangles on the wrong side of the object
glCullFace(GL_FRONT); glCullFace(GL_BACK); //Make it so that only the back faces are rendered
//Binds the FBO and sets the veiwport, witch in effect is how large the shadowmap is and what resolution it has.
glBindFramebuffer(GL_FRAMEBUFFER, m_ShadowFrameBuffer); glBindFramebuffer(GL_FRAMEBUFFER, m_ShadowFrameBuffer);
glViewport(0, 0, m_ShadowMapRes, m_ShadowMapRes); glViewport(0, 0, m_ShadowMapRes, m_ShadowMapRes);
glClear(GL_DEPTH_BUFFER_BIT); glClear(GL_DEPTH_BUFFER_BIT);
//glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
glm::mat4 depthViewMatrix = glm::lookAt(m_SunPosition, m_SunTarget, glm::vec3(0, 1, 0)) * glm::translate(-m_Camera->Position() * glm::vec3(1, 0, 0)); //Creates the "camera" for the shadowmap from the direction of the sun.
// glm::mat4 depthViewMatrix = glm::lookAt(m_SunPosition, m_SunTarget, glm::vec3(0, 1, 0)); glm::mat4 depthViewMatrix = glm::lookAt(m_SunPosition, m_SunTarget, glm::vec3(0, 1, 0));
glm::mat4 depthCamera = m_SunProjection * depthViewMatrix; glm::mat4 depthCamera = m_SunProjection * depthViewMatrix;
//glm::mat4 cameraMatrix = depthProjectionMatrix * m_Camera->ViewMatrix();
glm::mat4 MVP; glm::mat4 MVP;
m_ShaderProgramShadows.Bind(); m_ShaderProgramShadows.Bind();
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //Draws filled polygons
//For each model, render them to the shadowmap
for (auto tuple : ModelsToRender) for (auto tuple : ModelsToRender)
{ {
Model* model; Model* model;
@@ -425,26 +375,22 @@ void Renderer::AddPointLightToDraw(
glm::vec3 _position, glm::vec3 _position,
glm::vec3 _specular, glm::vec3 _specular,
glm::vec3 _diffuse, glm::vec3 _diffuse,
float _constantAttenuation, float _specularExponent,
float _linearAttenuation, float _ConstantAttenuation,
float _quadraticAttenuation, float _LinearAttenuation,
float _spotExponent float _QuadraticAttenuation
) )
{ {
Light_position.push_back(_position.x); Light light;
Light_position.push_back(_position.y); light.Position = _position;
Light_position.push_back(_position.z); light.Diffuse = _diffuse;
Light_specular.push_back(_specular.x); light.Specular = _specular;
Light_specular.push_back(_specular.y); light.SpecularExponent = _specularExponent;
Light_specular.push_back(_specular.z); light.ConstantAttenuation = _ConstantAttenuation;
Light_diffuse.push_back(_diffuse.x); light.LinearAttenuation = _LinearAttenuation;
Light_diffuse.push_back(_diffuse.y); light.QuadraticAttenuation = _QuadraticAttenuation;
Light_diffuse.push_back(_diffuse.z); light.SphereModelMatrix = CreateLightMatrix(light);
Light_constantAttenuation.push_back(_constantAttenuation); Lights.push_back(light);
Light_linearAttenuation.push_back(_linearAttenuation);
Light_quadraticAttenuation.push_back(_quadraticAttenuation);
Light_spotExponent.push_back(_spotExponent);
Lights = Light_constantAttenuation.size();
} }
void Renderer::AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector, bool colliding) void Renderer::AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector, bool colliding)
@@ -577,17 +523,306 @@ GLuint Renderer::CreateSkybox()
return vao; return vao;
} }
void Renderer::ClearStuff() void Renderer::ClearStuff()
{ {
AABBsToRender.clear(); AABBsToRender.clear();
ModelsToRender.clear(); ModelsToRender.clear();
TexturesToRender.clear(); TexturesToRender.clear();
Light_position.clear(); Lights.clear();
Light_specular.clear();
Light_diffuse.clear();
Light_constantAttenuation.clear();
Light_linearAttenuation.clear();
Light_quadraticAttenuation.clear();
Light_spotExponent.clear();
Lights = 0;
} }
#pragma endregion
void Renderer::FrameBufferTextures()
{
m_fbBasePass = 0;
m_fDepthBuffer = 0;
glGenFramebuffers(1, &m_fbBasePass);
glGenRenderbuffers(1, &m_fDepthBuffer);
glBindRenderbuffer(GL_RENDERBUFFER, m_fDepthBuffer);
glRenderbufferStorage(GL_RENDERBUFFER, GL_DEPTH_COMPONENT, m_Width, m_Height);
//Generate and bind diffuse texture
glGenTextures(1, &m_fDiffuseTexture);
glBindTexture(GL_TEXTURE_2D, m_fDiffuseTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//Generate and bind position texture
glGenTextures(1, &m_fPositionTexture);
glBindTexture(GL_TEXTURE_2D, m_fPositionTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
//Generate and bind normal texture
glGenTextures(1, &m_fNormalsTexture);
glBindTexture(GL_TEXTURE_2D, m_fNormalsTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
/*glGenTextures(1, &m_fShadowTexture);
glBindTexture(GL_TEXTURE_2D, m_fShadowTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB10_A2, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);*/
//Bind fb
glBindFramebuffer(GL_FRAMEBUFFER, m_fbBasePass);
glFramebufferRenderbuffer(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_RENDERBUFFER, m_fDepthBuffer);
//Attach textures to the FB
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_fDiffuseTexture, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT1, GL_TEXTURE_2D, m_fPositionTexture, 0);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT2, GL_TEXTURE_2D, m_fNormalsTexture, 0);
//glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT3, GL_TEXTURE_2D, m_fShadowTexture, 0);
GLenum fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(fbStatus != GL_FRAMEBUFFER_COMPLETE)
{
LOG_ERROR("DeferredLighting:Init: m_fbBasePass incomplete: 0x%x\n", fbStatus);
//exit(1);
}
m_fbLightingPass = 0;
glGenFramebuffers(1, &m_fbLightingPass);
glGenTextures(1, &m_fLightingTexture);
glBindTexture(GL_TEXTURE_2D, m_fLightingTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, m_Width, m_Height, 0, GL_RGBA, GL_UNSIGNED_BYTE, NULL);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glBindFramebuffer(GL_FRAMEBUFFER, m_fbLightingPass);
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D, m_fLightingTexture, 0);
fbStatus = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if(fbStatus != GL_FRAMEBUFFER_COMPLETE)
{
LOG_ERROR("DeferredLighting:Init: m_fbLightingPass incomplete: 0x%x\n", fbStatus);
//exit(1);
}
}
void Renderer::DrawFBO()
{
DrawShadowMap();
/*
Base pass
*/
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbBasePass);
// Clear G-buffer
GLenum windowBuffClear[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 };
glDrawBuffers(3, windowBuffClear);
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Execute the first render stage which will fill out the internal buffers with data(??)
m_FirstPassProgram.Bind();
GLenum windowBuffOpaque[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2 };
glDrawBuffers(3, windowBuffOpaque);
glCullFace(GL_BACK);
glViewport(0, 0, m_Width, m_Height);
DrawFBOScene();
/*
Lighting pass
*/
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbLightingPass);
GLenum lightingPassAttachments[] = { GL_COLOR_ATTACHMENT0 };
glDrawBuffers(1, lightingPassAttachments);
glClearColor(0.f, 0.f, 0.f, 0.f);
glClear(GL_COLOR_BUFFER_BIT);
m_SecondPassProgram.Bind();
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_fPositionTexture);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_fNormalsTexture);
glCullFace(GL_FRONT);
DrawLightScene();
/*
Final pass
*/
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
m_FinalPassProgram.Bind();
// Ambient light
glUniform3fv(glGetUniformLocation(m_FinalPassProgram.GetHandle(), "La"), 1, glm::value_ptr(glm::vec3(0.1f, 0.1f, 0.1f)));
glUniform1f(glGetUniformLocation(m_FinalPassProgram.GetHandle(), "Gamma"), Gamma);
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, m_fDiffuseTexture);
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_fLightingTexture);
glCullFace(GL_BACK);
glBindVertexArray(m_ScreenQuad);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
void Renderer::DrawFBOScene()
{
// glEnable(GL_DEPTH_TEST);//Tests where objects are and display them correctly
// glEnable(GL_CULL_FACE); //removes triangles on the wrong side of the object
// glCullFace(GL_BACK); //Make it so that only the back faces are rendered
glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); //Draws filled polygons
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
glm::mat4 MVP;
glm::mat4 biasMatrix(
0.5, 0.0, 0.0, 0.0,
0.0, 0.5, 0.0, 0.0,
0.0, 0.0, 0.5, 0.0,
0.5, 0.5, 0.5, 1.0
);
glm::mat4 depthViewMatrix = glm::lookAt(m_SunPosition, m_SunTarget, glm::vec3(0, 1, 0));
glm::mat4 depthCamera = m_SunProjection * depthViewMatrix;
glm::mat4 depthCameraMatrix = biasMatrix * depthCamera;
glm::mat4 depthMVP;
glActiveTexture(GL_TEXTURE1);
glBindTexture(GL_TEXTURE_2D, m_ShadowDepthTexture);
for (auto tuple : ModelsToRender)
{
Model* model;
glm::mat4 modelMatrix;
bool visible;
std::tie(model, modelMatrix, visible, std::ignore) = tuple;
if (!visible)
continue;
MVP = cameraMatrix * modelMatrix;
depthMVP = depthCameraMatrix * modelMatrix;
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
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(), "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix()));
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(m_Camera->ProjectionMatrix()));
glBindVertexArray(model->VAO);
for (auto texGroup : model->TextureGroups)
{
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, *texGroup.Texture);
glDrawArrays(GL_TRIANGLES, texGroup.StartIndex, texGroup.EndIndex - texGroup.StartIndex + 1);
}
}
for (auto tuple : TexturesToRender)
{
Texture* texture;
glm::mat4 modelMatrix;
glm::mat4 billboardMatrix;
std::tie(texture, modelMatrix, billboardMatrix) = tuple;
//MVP = cameraMatrix * glm::inverse(glm::toMat4(m_Camera->Orientation()) * modelMatrix );
MVP = cameraMatrix * modelMatrix * billboardMatrix;
depthMVP = depthCameraMatrix * modelMatrix;
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "MVP"), 1, GL_FALSE, glm::value_ptr(MVP));
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(), "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix()));
glUniformMatrix4fv(glGetUniformLocation(m_FirstPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(m_Camera->ProjectionMatrix()));
glActiveTexture(GL_TEXTURE0);
glBindTexture(GL_TEXTURE_2D, *texture);
glBindVertexArray(m_ScreenQuad);
glDrawArrays(GL_TRIANGLES, 0, 6);
}
}
void Renderer::DrawLightScene()
{
glEnable(GL_BLEND);
glBlendEquation (GL_FUNC_ADD);
glBlendFunc(GL_ONE,GL_ONE);
glDisable (GL_DEPTH_TEST);
glDepthMask (GL_FALSE);
glBindVertexArray(m_sphereModel->VAO);
glm::mat4 cameraMatrix = m_Camera->ProjectionMatrix() * m_Camera->ViewMatrix();
glm::mat4 MVP;
for (auto &light : Lights)
{
MVP = cameraMatrix * light.SphereModelMatrix;
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(), "V"), 1, GL_FALSE, glm::value_ptr(m_Camera->ViewMatrix()));
glUniformMatrix4fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "P"), 1, GL_FALSE, glm::value_ptr(m_Camera->ProjectionMatrix()));
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(), "ld"), 1, glm::value_ptr(light.Diffuse));
glUniform3fv(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "lp"), 1, glm::value_ptr(light.Position));
glUniform3f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "CameraPosition"), m_Camera->Position().x, m_Camera->Position().y, m_Camera->Position().z);
glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "specularExponent"), light.SpecularExponent);
// glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ConstantAttenuation"), light.ConstantAttenuation);
// glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "LinearAttenuation"), light.LinearAttenuation);
// glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "QuadraticAttenuation"), light.QuadraticAttenuation);
glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "ConstantAttenuation"), CAtt);
glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "LinearAttenuation"), LAtt);
glUniform1f(glGetUniformLocation(m_SecondPassProgram.GetHandle(), "QuadraticAttenuation"), QAtt);
glDrawArrays(GL_TRIANGLES, 0, m_sphereModel->Vertices.size());
};
glEnable (GL_DEPTH_TEST);
glDepthMask (GL_TRUE);
glDisable (GL_BLEND);
}
void Renderer::SetSphereModel( Model* _model )
{
m_sphereModel = _model;
}
glm::mat4 Renderer::CreateLightMatrix(Light &_light)
{
// float c = _light.ConstantAttenuation;
// float l = _light.LinearAttenuation;
// float q = _light.QuadraticAttenuation;
float c = CAtt;
float l = LAtt;
float q = QAtt;
float cutOffRadius = abs(sqrt((-4*c*q) + pow(l, 2) + (1024*q) - l) / (2*q));
glm::mat4 model;
model *= glm::translate(_light.Position);
model *= glm::scale(glm::vec3(cutOffRadius));
return model;
}
+53 -13
View File
@@ -12,6 +12,7 @@
#include "Model.h" #include "Model.h"
#include "Components/PointLight.h" #include "Components/PointLight.h"
#include "Skybox.h" #include "Skybox.h"
#include "ResourceManager.h"
class Renderer class Renderer
{ {
@@ -26,14 +27,6 @@ public:
std::list<std::tuple<Model*, glm::mat4, bool, bool>> ModelsToRender; std::list<std::tuple<Model*, glm::mat4, bool, bool>> ModelsToRender;
std::list<std::tuple<Texture*, glm::mat4, glm::mat4>> TexturesToRender; std::list<std::tuple<Texture*, glm::mat4, glm::mat4>> TexturesToRender;
int Lights;
std::vector<float> Light_position;
std::vector<float> Light_specular;
std::vector<float> Light_diffuse;
std::vector<float> Light_constantAttenuation;
std::vector<float> Light_linearAttenuation;
std::vector<float> Light_quadraticAttenuation;
std::vector<float> Light_spotExponent;
std::list<std::tuple<glm::mat4, bool>> AABBsToRender; std::list<std::tuple<glm::mat4, bool>> AABBsToRender;
Renderer(); Renderer();
@@ -49,10 +42,10 @@ public:
glm::vec3 _position, glm::vec3 _position,
glm::vec3 _specular, glm::vec3 _specular,
glm::vec3 _diffuse, glm::vec3 _diffuse,
float _constantAttenuation, float _specularExponent,
float _linearAttenuation, float _ConstantAttenuation,
float _quadraticAttenuation, float _LinearAttenuation,
float _spotExponent float _QuadraticAttenuation
); );
void AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector, bool colliding); void AddAABBToDraw(glm::vec3 origin, glm::vec3 volumeVector, bool colliding);
@@ -69,8 +62,25 @@ public:
void DrawBounds(bool val) { m_DrawBounds = val; } void DrawBounds(bool val) { m_DrawBounds = val; }
void DrawSkybox(); void DrawSkybox();
void SetSphereModel(Model* _model);
private: private:
int m_Width, m_Height; int m_Width, m_Height;
struct Light
{
glm::vec3 Position;
glm::vec3 Specular;
glm::vec3 Diffuse;
float SpecularExponent;
glm::mat4 SphereModelMatrix;
float ConstantAttenuation, LinearAttenuation, QuadraticAttenuation;
};
float Gamma;
std::list<Light> Lights;
GLFWwindow* m_Window; GLFWwindow* m_Window;
GLint m_glVersion[2]; GLint m_glVersion[2];
GLchar* m_glVendor; GLchar* m_glVendor;
@@ -78,6 +88,7 @@ private:
bool m_DrawNormals; bool m_DrawNormals;
bool m_DrawWireframe; bool m_DrawWireframe;
bool m_DrawBounds; bool m_DrawBounds;
float CAtt, LAtt, QAtt;
std::shared_ptr<Skybox> m_Skybox; std::shared_ptr<Skybox> m_Skybox;
@@ -87,24 +98,53 @@ private:
glm::mat4 m_SunProjection; glm::mat4 m_SunProjection;
GLuint m_DebugAABB; GLuint m_DebugAABB;
GLuint m_ScreenQuad;
GLuint m_ShadowFrameBuffer; GLuint m_ShadowFrameBuffer;
GLuint m_ShadowDepthTexture; GLuint m_ShadowDepthTexture;
GLuint m_fbBasePass;
GLuint m_fDiffuseTexture;
GLuint m_fPositionTexture;
GLuint m_fNormalsTexture;
GLuint m_fBlendTexture;
GLuint m_fbLightingPass;
GLuint m_fLightingTexture;
GLuint m_fShadowTexture;
GLuint m_fDepthBuffer;
GLenum draw_bufs[2];
GLuint m_ScreenQuad;
Model* m_sphereModel;
bool m_QuadView;
std::shared_ptr<Camera> m_Camera; std::shared_ptr<Camera> m_Camera;
ShaderProgram m_ShaderProgram; ShaderProgram m_ShaderProgram;
ShaderProgram m_FirstPassProgram;
ShaderProgram m_SecondPassProgram;
ShaderProgram m_SecondPassProgram_Debug;
ShaderProgram m_FinalPassProgram;
ShaderProgram m_ShaderProgramNormals; ShaderProgram m_ShaderProgramNormals;
ShaderProgram m_ShaderProgramShadows; ShaderProgram m_ShaderProgramShadows;
ShaderProgram m_ShaderProgramShadowsDrawDepth; ShaderProgram m_ShaderProgramShadowsDrawDepth;
ShaderProgram m_ShaderProgramDebugAABB; ShaderProgram m_ShaderProgramDebugAABB;
ShaderProgram m_ShaderProgramSkybox; ShaderProgram m_ShaderProgramSkybox;
void ClearStuff(); void ClearStuff();
void DrawScene(); void DrawScene();
void DrawModels(ShaderProgram &shader); void DrawModels(ShaderProgram &shader);
void DrawShadowMap(); void DrawShadowMap();
void CreateShadowMap(int resolution); void CreateShadowMap(int resolution);
void FrameBufferTextures();
void DrawFBO();
void DrawFBOScene();
void DrawLightScene();
void BindFragDataLocation();
glm::mat4 CreateLightMatrix(Light &_light);
GLuint CreateQuad(); GLuint CreateQuad();
void DrawDebugShadowMap(); void DrawDebugShadowMap();
GLuint CreateAABB(); GLuint CreateAABB();
+6 -1
View File
@@ -103,6 +103,11 @@ void ShaderProgram::AddShader(std::shared_ptr<Shader> shader)
void ShaderProgram::Compile() void ShaderProgram::Compile()
{ {
if (m_ShaderProgramHandle == 0)
{
m_ShaderProgramHandle = glCreateProgram();
}
for (auto &shader : m_Shaders) for (auto &shader : m_Shaders)
{ {
if (!shader->IsCompiled()) if (!shader->IsCompiled())
@@ -121,7 +126,7 @@ GLuint ShaderProgram::Link()
} }
LOG_INFO("Linking shader program"); LOG_INFO("Linking shader program");
m_ShaderProgramHandle = glCreateProgram();
for (auto &shader : m_Shaders) for (auto &shader : m_Shaders)
{ {
glAttachShader(m_ShaderProgramHandle, shader->GetHandle()); glAttachShader(m_ShaderProgramHandle, shader->GetHandle());
+29
View File
@@ -0,0 +1,29 @@
#version 430
uniform vec3 La;
uniform float Gamma;
layout (binding=0) uniform sampler2D DiffuseTexture;
layout (binding=1) uniform sampler2D LightingTexture;
layout (binding=2) uniform sampler2D ShadowTexture;
in VertexData
{
vec3 Position;
vec2 TextureCoord;
} Input;
out vec4 FragmentColor;
void main()
{
vec4 DiffuseTexel = texture(DiffuseTexture, Input.TextureCoord);
vec4 LightingTexel = texture(LightingTexture, Input.TextureCoord);
vec4 ShadowTexel = texture(ShadowTexture, Input.TextureCoord);
vec4 _FragmentColor = DiffuseTexel * vec4(La, 1.0) + LightingTexel;
FragmentColor = vec4(pow(_FragmentColor.rgb, vec3(1.0 / Gamma)), _FragmentColor.a);
//FragmentColor = ShadowTexel;
}
+16
View File
@@ -0,0 +1,16 @@
#version 430
layout(location = 0) in vec3 Position;
out VertexData
{
vec3 Position;
vec2 TextureCoord;
} Output;
void main()
{
gl_Position = vec4(Position, 1.0);
Output.Position = Position;
Output.TextureCoord = (vec2(Position) + 1) / 2;
}
+26 -96
View File
@@ -1,113 +1,43 @@
#version 430 #version 430
uniform mat4 model; layout (binding=0) uniform sampler2D DiffuseTexture;
uniform mat4 view; layout (binding=1) uniform sampler2D ShadowTexture;
layout(binding=0) uniform sampler2D texture0;
layout(binding=1) uniform sampler2D shadowMap;
const int maxNumberOfLights = 82;
uniform int numberOfLights;
uniform vec3 position[maxNumberOfLights];
uniform vec3 specular[maxNumberOfLights];
uniform vec3 diffuse[maxNumberOfLights];
uniform float constantAttenuation[maxNumberOfLights];
uniform float linearAttenuation[maxNumberOfLights];
uniform float quadraticAttenuation[maxNumberOfLights];
uniform float spotExponent[maxNumberOfLights];
in VertexData in VertexData
{ {
vec3 Position; vec3 Position;
vec3 Normal; vec3 Normal;
vec2 TextureCoord; vec2 TextureCoord;
vec3 ShadowCoord; vec4 ShadowCoord;
} Input; } Input;
vec3 scene_ambient = vec3(0.5, 0.5, 0.5); out vec4 frag_Diffuse;
out vec4 frag_Position;
out vec4 frag_Normal;
out vec4 fragmentColor; float Shadow(vec4 ShadowCoord)
{
//float cosTheta = clamp(dot(Input.Normal, 1.0), 0.0, 1.0);
float bias = 0.0005; // cosTheta is dot( n,l ), clamped between 0 and 1
bias = clamp(bias, 0.0, 0.01);
if( texture(ShadowTexture, Input.ShadowCoord.xy).z < ShadowCoord.z - bias)
{
return 0.3;
}
else
{
return 1.0;
}
}
void main() void main()
{ {
// Diffuse Texture
frag_Diffuse = texture(DiffuseTexture, Input.TextureCoord) * Shadow(Input.ShadowCoord);
// Texture // G-buffer Position
vec4 texel = texture2D(texture0, Input.TextureCoord); frag_Position = vec4(Input.Position.xyz, 1.0);
//vec4 texel = (blend.x * texel0) + (blend.y * texel1) + (blend.z * texel2);
// // G-buffer Normal
// Phong shading frag_Normal = vec4(Input.Normal, 0.0);
//
// Ambient light
vec3 La = scene_ambient; // Ambient light
vec3 Ks = vec3(0.3, 0.3, 0.3); // Specular reflectance
vec3 Kd = vec3(1.0, 1.0, 1.0); // Diffuse reflectance
vec3 Ka = vec3(1.0, 1.0, 1.0); // Ambient reflectance
vec3 Is;
vec3 Id;
// Shadows
//float cosTheta = clamp(dot(Input.Normal, vec3(0, 1, 0)), 0.0, 1.0);
//float bias = 0.001 * tan(acos(cosTheta)); // cosTheta is dot( n,l ), clamped between 0 and 1
//bias = clamp(bias, 0.0, 0.01);
float visibility = 1.0;
/*if (Input.ShadowCoord.x >= 0.0 && Input.ShadowCoord.x <= 1.0 && Input.ShadowCoord.y >= 0.0 && Input.ShadowCoord.y <= 1.0)
{
float bias = 0.00005;
vec4 shadowMapValue = texture(shadowMap, Input.ShadowCoord.xy);
if (shadowMapValue.z < clamp(Input.ShadowCoord.z - bias, 0, 1))
{
visibility = 0.3;
}
}*/
vec3 totalLighting = La * Ka * visibility;
float attenuation;
for(int i = 0; i < numberOfLights && i < maxNumberOfLights; i++)
{
// Light
//vec3 lightPosition = vec3(0, 0, 2);
vec3 Ls = specular[i]; // Specular light
vec3 Ld = diffuse[i]; // Diffuse light
vec3 lightPosView = vec3(view * vec4(position[i], 1.0));
vec3 surfacePosition = vec3(model * vec4(Input.Position, 1.0));
vec3 surfacePosView = vec3(view * vec4(surfacePosition, 1.0));
vec3 surfaceToLight = normalize(lightPosView - surfacePosView);
mat3 normalMatrix = transpose(inverse(mat3(view * model)));
vec3 surfaceNormal = normalize(normalMatrix * Input.Normal);
float dist = length(position[i] - surfacePosition);
attenuation = 1.0 / (constantAttenuation[i]
+ linearAttenuation[i] * dist
+ quadraticAttenuation[i] * pow(dist, 2.0));
//attenuation = attenuation * pow(clampedCosine, spotExponent[i]);
// Diffuse light
float dotProd = dot(surfaceToLight, surfaceNormal);
dotProd = max(dotProd, 0.0);
Id = Ld * Kd * abs(dotProd) * attenuation;
// Specular light
vec3 reflection = reflect(-surfaceToLight, surfaceNormal);
float dotSpecular = dot(reflection, normalize(-surfacePosView));
dotSpecular = max(dotSpecular, 0.0);
float specularFactor = pow(dotSpecular, 30.0); // Specular factor
Is = attenuation * Ls * Ks * specularFactor;
totalLighting = totalLighting + Id + Is;
}
fragmentColor = vec4(totalLighting, 1.0) * texel;
//fragmentColor = vec4(Id, 1.0) * texel;
//fragmentColor = texel;
} }
+38
View File
@@ -0,0 +1,38 @@
#version 430
layout (binding=0) uniform sampler2D DiffuseTexture;
layout (binding=1) uniform sampler2D PositionTexture;
layout (binding=2) uniform sampler2D NormalTexture;
in VertexData
{
vec3 Position;
vec3 Normal;
vec2 TextureCoord;
} Input;
out vec4 FragColor;
void DrawQuadrant(vec4 texel, vec2 quadrant)
{
if (-quadrant.x * Input.Position.x < 0 && -quadrant.y * Input.Position.y < 0)
{
FragColor = texel;
}
}
void main()
{
vec4 DiffuseTexel = texture2D(DiffuseTexture, Input.TextureCoord);
vec4 PositionTexel = texture2D(PositionTexture, Input.TextureCoord);
vec4 NormalTexel = texture2D(NormalTexture, Input.TextureCoord);
//FragColor = texture2D(DiffuseTexture, Input.TextureCoord * 2 + vec2(0, -1));
DrawQuadrant(texture2D(DiffuseTexture, Input.TextureCoord * 2), vec2(-1, 1));
DrawQuadrant(texture2D(PositionTexture, Input.TextureCoord * 2), vec2(1, 1));
DrawQuadrant(texture2D(NormalTexture, Input.TextureCoord * 2), vec2(-1, -1));
vec4 AllTexel = texture2D(DiffuseTexture, Input.TextureCoord*2)*texture2D(PositionTexture, Input.TextureCoord*2)*texture2D(NormalTexture, Input.TextureCoord*2);
DrawQuadrant(AllTexel, vec2(1, -1));
}
+84
View File
@@ -0,0 +1,84 @@
#version 430
layout (binding=0) uniform sampler2D PositionTexture;
layout (binding=1) uniform sampler2D NormalsTexture;
uniform vec2 ViewportSize;
uniform mat4 MVP;
uniform mat4 M;
uniform mat4 V;
uniform mat4 P;
uniform vec3 la;
uniform vec3 ls;
uniform vec3 ld;
uniform vec3 lp;
uniform float specularExponent;
uniform vec3 CameraPosition;
uniform float ConstantAttenuation;
uniform float LinearAttenuation;
uniform float QuadraticAttenuation;
const vec3 ks = vec3(1.0, 1.0, 1.0);
const vec3 kd = vec3(1.0, 1.0, 1.0);
const vec3 ka = vec3(1.0, 1.0, 1.0);
const float kshine = 1.0;
in VertexData
{
vec3 Position;
vec2 TextureCoord;
} Input;
out vec4 FragColor;
vec4 phong(vec3 position, vec3 normal)
{
// Diffuse
vec3 lightPos = vec3(V * vec4(lp, 1.0));
vec3 distanceToLight = lightPos - position;
vec3 directionToLight = normalize(distanceToLight);
float dotProd = dot(directionToLight, normal);
dotProd = max(dotProd, 0.0);
vec3 Id = kd * ld * dotProd;
// Specular
//vec3 reflection = reflect(-directionToLight, normal);
vec3 surfaceToViewer = normalize(-position);
vec3 halfWay = normalize(surfaceToViewer + directionToLight);
float dotSpecular = max(dot(halfWay, normal), 0.0);
float specularFactor = pow(dotSpecular, specularExponent * 2.0);
vec3 Is = ks * ls * specularFactor;
//Attenuation
float dist = distance(lightPos, position);
//float attenuation = -log(min(1.0, dist / LightRadius));
float attenuation = 1.0 / (ConstantAttenuation + (LinearAttenuation * dist) + (QuadraticAttenuation * dist * dist));
//float attenuation = 1.0 / (1.0 - 0.0001 * pow(dist, 2));
//float attenuation = clamp(0.0, 1.0, 1.0 / (0.001 + (0.001 * dist) + (0.001 * dist * dist)));
//float attenuation = 1.0 / dot(directionToLight, directionToLight);
//float att_s = 5;
//float attenuation = pow(dist, 2) / pow(5.0, 2);
//attenuation = 1.0 / (1.0 + attenuation * att_s);
//att_s = 1.0 / (1.0 + att_s);
//attenuation = attenuation / (1.0 - att_s);
//float radius = 5.0;
//float alpha = dist / radius;
//float dampingFactor = 1.0 - pow(alpha, 3);
return vec4((Id + Is) * attenuation, 1.0);
}
void main()
{
vec2 TextureCoord = gl_FragCoord.xy / ViewportSize;
vec4 PositionTexel = texture(PositionTexture, TextureCoord);
vec4 NormalTexel = texture(NormalsTexture, TextureCoord);
FragColor = phong(vec3(PositionTexel), vec3(NormalTexel));
}
+10 -7
View File
@@ -1,26 +1,29 @@
#version 430 #version 430
uniform mat4 MVP; uniform mat4 MVP;
uniform mat4 M;
uniform mat4 V;
uniform mat4 P;
uniform mat4 DepthMVP; uniform mat4 DepthMVP;
layout(location = 0) in vec3 Position; layout (location = 0) in vec3 Position;
layout(location = 1) in vec3 Normal; layout (location = 1) in vec3 Normal;
layout(location = 2) in vec2 TextureCoord; layout (location = 2) in vec2 TextureCoord;
out VertexData out VertexData
{ {
vec3 Position; vec3 Position;
vec3 Normal; vec3 Normal;
vec2 TextureCoord; vec2 TextureCoord;
vec3 ShadowCoord; vec4 ShadowCoord;
} Output; } Output;
void main() void main()
{ {
gl_Position = MVP * vec4(Position, 1.0); gl_Position = MVP * vec4(Position, 1.0);
Output.Position = Position; Output.Position = vec3(V * M * vec4(Position, 1.0));
Output.Normal = Normal; Output.Normal = normalize(vec3(inverse(transpose(V * M)) * vec4(Normal, 0.0)));
Output.TextureCoord = TextureCoord; Output.TextureCoord = TextureCoord;
Output.ShadowCoord = vec3(DepthMVP * vec4(Position, 1.0)); Output.ShadowCoord = DepthMVP * vec4(Position, 1.0);
} }
+22
View File
@@ -0,0 +1,22 @@
#version 430
uniform mat4 MVP;
layout (location = 0) in vec3 Position;
layout (location = 2) in vec2 TextureCoord;
uniform mat4 depthBiasMVP;
out VertexData
{
vec3 Position;
vec2 TextureCoord;
} Output;
void main()
{
gl_Position = MVP * vec4(Position, 1.0);
Output.Position = Position;
Output.TextureCoord = (vec2(Position) + 1.0) / 2.0;
}
-20
View File
@@ -1,20 +0,0 @@
#version 430
in vec2 TexCoord0;
in vec3 Normal0;
in vec3 WorldPos0;
layout (location = 0) out vec3 WorldPosOut;
layout (location = 1) out vec3 DiffuseOut;
layout (location = 2) out vec3 NormalOut;
layout (location = 3) out vec3 TexCoordOut;
uniform sampler2D gColorMap;
void main()
{
WorldPosOut = WorldPos0;
DiffuseOut = texture(gColorMap, TexCoord0).xyz;
NormalOut = normalize(Normal0);
TexCoordOut = vec3(TexCoord0, 0.0);
}
-20
View File
@@ -1,20 +0,0 @@
#version 430
layout (location = 0) in vec3 Position;
layout (location = 1) in vec2 TexCoord;
layout (location = 2) in vec3 Normal;
uniform mat4 gWVP;
uniform mat4 gWorld;
out vec2 TexCoord0;
out vec3 Normal0;
out vec3 WorldPos0;
void main()
{
gl_Position = gWVP * vec4(Position, 1.0);
TexCoord0 = TexCoord;
Normal0 = (gWorld * vec4(Normal, 0.0)).xyz;
WorldPos0 = (gWorld * vec4(Position, 1.0)).xyz;
}
+58 -72
View File
@@ -4,7 +4,7 @@
void Systems::FreeSteeringSystem::RegisterComponents(ComponentFactory* cf) void Systems::FreeSteeringSystem::RegisterComponents(ComponentFactory* cf)
{ {
cf->Register("FreeSteering", []() { return new Components::FreeSteering(); }); cf->Register<Components::FreeSteering>([]() { return new Components::FreeSteering(); });
} }
void Systems::FreeSteeringSystem::Initialize() void Systems::FreeSteeringSystem::Initialize()
@@ -19,100 +19,90 @@ void Systems::FreeSteeringSystem::Update(double dt)
void Systems::FreeSteeringSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) void Systems::FreeSteeringSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{ {
auto steering = m_World->GetComponent<Components::FreeSteering>(entity, "FreeSteering"); auto steering = m_World->GetComponent<Components::FreeSteering>(entity);
if (steering) if (steering)
{ {
auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transform = m_World->GetComponent<Components::Transform>(entity);
glm::vec3 cameraRight = glm::vec3(m_InputController->Orientation * glm::vec4(1, 0, 0, 0)); glm::vec3 cameraRight = glm::vec3(transform->Orientation * glm::vec4(1, 0, 0, 0));
glm::vec3 cameraForward = glm::vec3(m_InputController->Orientation * glm::vec4(0, 0, -1, 0)); glm::vec3 cameraForward = glm::vec3(transform->Orientation * glm::vec4(0, 0, -1, 0));
glm::vec3 movement; glm::vec3 movement;
movement += cameraRight * m_InputController->Movement.x; movement += cameraRight * m_InputController->Movement.x;
movement.y += m_InputController->Movement.y; movement.y += m_InputController->Movement.y;
movement += cameraForward * -m_InputController->Movement.z; movement += cameraForward * -m_InputController->Movement.z;
transform->Position += movement * steering->Speed * m_InputController->SpeedMultiplier * (float)dt; float speedMultiplier = 1.f;
transform->Orientation = m_InputController->Orientation; if (m_InputController->SpeedMultiplier > 0)
speedMultiplier *= 4;
else if (m_InputController->SpeedMultiplier < 0)
speedMultiplier /= 4;
transform->Position += movement * steering->Speed * speedMultiplier * (float)dt;
glm::quat mouseOrientationPitch = glm::quat(m_InputController->MouseOrientation * glm::vec3(1, 0, 0));
glm::quat mouseOrientationYaw = glm::quat(m_InputController->MouseOrientation * glm::vec3(0, 1, 0));
glm::vec3 controllerOrientationEuler = m_InputController->ControllerOrientation * (float)dt;
glm::quat controllerOrientationPitch = glm::quat(controllerOrientationEuler * glm::vec3(1, 0, 0));
glm::quat controllerOrientationYaw = glm::quat(controllerOrientationEuler * glm::vec3(0, 1, 0));
// TOUCHING THIS CODE MIGHT CAUSE THE UNIVERSE TO IMPLODE, ALSO DRAGONS
//---------------------------------------------------------------------
transform->Orientation = (mouseOrientationYaw * controllerOrientationYaw)
* transform->Orientation
* (mouseOrientationPitch * controllerOrientationPitch);
//---------------------------------------------------------------------
// TOUCHING THIS CODE MIGHT CAUSE THE UNIVERSE TO IMPLODE, ALSO DRAGONS
} }
m_InputController->MouseOrientation = glm::vec3(0);
} }
bool Systems::FreeSteeringSystem::FreeSteeringInputController::OnCommand(const Events::InputCommand &event) bool Systems::FreeSteeringSystem::FreeSteeringInputController::OnCommand(const Events::InputCommand &event)
{ {
// Movement // Movement
if (event.Command == "+cam_forward") if (event.Command == "vertical")
{ {
Movement.z += -1.f; Movement.z = -event.Value;
} }
else if (event.Command == "-cam_forward") else if (event.Command == "horizontal")
{ {
Movement.z -= -1.f; Movement.x = event.Value;
} }
else if (event.Command == "+cam_backward") else if (event.Command == "normal")
{ {
Movement.z += 1.f; Movement.y = event.Value;
}
else if (event.Command == "-cam_backward")
{
Movement.z -= 1.f;
}
else if (event.Command == "+cam_right")
{
Movement.x -= 1.f;
}
else if (event.Command == "-cam_right")
{
Movement.x += 1.f;
}
else if (event.Command == "+cam_left")
{
Movement.x -= -1.f;
}
else if (event.Command == "-cam_left")
{
Movement.x += -1.f;
}
else if (event.Command == "+up")
{
Movement.y += 1.f;
}
else if (event.Command == "-up")
{
Movement.y -= 1.f;
}
else if (event.Command == "+down")
{
Movement.y += -1.f;
}
else if (event.Command == "-down")
{
Movement.y -= -1.f;
} }
// Speed // Speed
else if (event.Command == "+fast") else if (event.Command == "speed")
{ {
SpeedMultiplier *= 4.f; SpeedMultiplier = event.Value;
}
else if (event.Command == "-fast")
{
SpeedMultiplier /= 4.f;
}
else if (event.Command == "+slow")
{
SpeedMultiplier /= 4.f;
}
else if (event.Command == "-slow")
{
SpeedMultiplier *= 4.f;
} }
// Mouse click // Mouse click
else if (event.Command == "+attack") else if (event.Command == "attack")
{ {
OrientationActive = true; OrientationActive = event.Value > 0;
if (OrientationActive)
{
Events::LockMouse e;
EventBroker->Publish(e);
} }
else if (event.Command == "-attack") else
{ {
OrientationActive = false; Events::UnlockMouse e;
EventBroker->Publish(e);
}
}
else if (event.Command == "vertical2")
{
ControllerOrientation.x = event.Value;
}
else if (event.Command == "horizontal2")
{
ControllerOrientation.y = -event.Value;
} }
return true; return true;
@@ -122,11 +112,7 @@ bool Systems::FreeSteeringSystem::FreeSteeringInputController::OnMouseMove(const
{ {
if (OrientationActive) if (OrientationActive)
{ {
// TOUCHING THIS CODE MIGHT CAUSE THE UNIVERSE TO IMPLODE, ALSO DRAGONS MouseOrientation = -glm::vec3(event.DeltaY / 300.f, event.DeltaX / 300.f, 0.f);
//---------------------------------------------------------------------
Orientation = glm::angleAxis<float>(event.DeltaX / 300.f, glm::vec3(0, -1, 0)) * Orientation * glm::angleAxis<float>(event.DeltaY / 300.f, glm::vec3(-1, 0, 0));
//---------------------------------------------------------------------
// TOUCHING THIS CODE MIGHT CAUSE THE UNIVERSE TO IMPLODE, ALSO DRAGONS
} }
return true; return true;
+4 -2
View File
@@ -4,6 +4,7 @@
#include "Components/Transform.h" #include "Components/Transform.h"
#include "Components/FreeSteering.h" #include "Components/FreeSteering.h"
#include "InputController.h" #include "InputController.h"
#include "Events/LockMouse.h"
namespace Systems namespace Systems
{ {
@@ -31,11 +32,12 @@ class FreeSteeringSystem::FreeSteeringInputController : InputController
public: public:
FreeSteeringInputController(std::shared_ptr<::EventBroker> eventBroker) FreeSteeringInputController(std::shared_ptr<::EventBroker> eventBroker)
: InputController(eventBroker) : InputController(eventBroker)
, SpeedMultiplier(1.f) , SpeedMultiplier(0.f)
, OrientationActive(false) { } , OrientationActive(false) { }
glm::vec3 Movement; glm::vec3 Movement;
glm::quat Orientation; glm::vec3 MouseOrientation;
glm::vec3 ControllerOrientation;
float SpeedMultiplier; float SpeedMultiplier;
bool OrientationActive; bool OrientationActive;
+65 -15
View File
@@ -4,7 +4,7 @@
void Systems::InputSystem::RegisterComponents(ComponentFactory* cf) void Systems::InputSystem::RegisterComponents(ComponentFactory* cf)
{ {
cf->Register("Input", []() { return new Components::Input(); }); cf->Register<Components::Input>([]() { return new Components::Input(); });
} }
void Systems::InputSystem::Initialize() void Systems::InputSystem::Initialize()
@@ -52,8 +52,8 @@ bool Systems::InputSystem::OnKeyDown(const Events::KeyDown &event)
std::string command; std::string command;
float value; float value;
std::tie(command, value) = bindingIt->second; std::tie(command, value) = bindingIt->second;
m_CommandValues[command] += value; m_CommandKeyboardValues[command][event.KeyCode] = value;
PublishCommand(0, command, std::max(-1.f, std::min(m_CommandValues[command], 1.f))); PublishCommand(0, command, GetCommandTotalValue(command));
} }
return true; return true;
@@ -67,8 +67,8 @@ bool Systems::InputSystem::OnKeyUp(const Events::KeyUp &event)
std::string command; std::string command;
float value; float value;
std::tie(command, value) = bindingIt->second; std::tie(command, value) = bindingIt->second;
m_CommandValues[command] -= value; m_CommandKeyboardValues[command][event.KeyCode] = 0;
PublishCommand(0, command, std::max(-1.f, std::min(m_CommandValues[command], 1.f))); PublishCommand(0, command, GetCommandTotalValue(command));;
} }
return true; return true;
@@ -79,7 +79,11 @@ bool Systems::InputSystem::OnMousePress(const Events::MousePress &event)
auto bindingIt = m_MouseButtonBindings.find(event.Button); auto bindingIt = m_MouseButtonBindings.find(event.Button);
if (bindingIt != m_MouseButtonBindings.end()) if (bindingIt != m_MouseButtonBindings.end())
{ {
PublishCommand(0, bindingIt->second, 1.f); std::string command;
float value;
std::tie(command, value) = bindingIt->second;
m_CommandMouseButtonValues[command][event.Button] = value;
PublishCommand(0, command, GetCommandTotalValue(command));
} }
return true; return true;
@@ -90,7 +94,11 @@ bool Systems::InputSystem::OnMouseRelease(const Events::MouseRelease &event)
auto bindingIt = m_MouseButtonBindings.find(event.Button); auto bindingIt = m_MouseButtonBindings.find(event.Button);
if (bindingIt != m_MouseButtonBindings.end()) if (bindingIt != m_MouseButtonBindings.end())
{ {
PublishCommand(0, bindingIt->second, 1.f); std::string command;
float value;
std::tie(command, value) = bindingIt->second;
m_CommandMouseButtonValues[command][event.Button] = 0;
PublishCommand(0, command, GetCommandTotalValue(command));
} }
return true; return true;
@@ -104,7 +112,8 @@ bool Systems::InputSystem::OnGamepadAxis(const Events::GamepadAxis &event)
std::string command; std::string command;
float value; float value;
std::tie(command, value) = bindingIt->second; std::tie(command, value) = bindingIt->second;
PublishCommand(event.GamepadID + 1, command, event.Value * value); m_CommandGamepadAxisValues[command][event.Axis] = event.Value * value;
PublishCommand(event.GamepadID + 1, command, GetCommandTotalValue(command));
} }
return true; return true;
@@ -118,8 +127,8 @@ bool Systems::InputSystem::OnGamepadButtonDown(const Events::GamepadButtonDown &
std::string command; std::string command;
float value; float value;
std::tie(command, value) = bindingIt->second; std::tie(command, value) = bindingIt->second;
m_CommandValues[command] += value; m_CommandGamepadButtonValues[command][event.Button] = value;
PublishCommand(event.GamepadID + 1, command, std::max(-1.f, std::min(m_CommandValues[command], 1.f))); PublishCommand(event.GamepadID + 1, command, GetCommandTotalValue(command));
} }
return true; return true;
@@ -133,8 +142,8 @@ bool Systems::InputSystem::OnGamepadButtonUp(const Events::GamepadButtonUp &even
std::string command; std::string command;
float value; float value;
std::tie(command, value) = bindingIt->second; std::tie(command, value) = bindingIt->second;
m_CommandValues[command] -= value; m_CommandGamepadButtonValues[command][event.Button] = 0;
PublishCommand(event.GamepadID + 1, command, std::max(-1.f, std::min(m_CommandValues[command], 1.f))); PublishCommand(event.GamepadID + 1, command, GetCommandTotalValue(command));
} }
return true; return true;
@@ -164,7 +173,7 @@ bool Systems::InputSystem::OnBindMouseButton(const Events::BindMouseButton &even
} }
else else
{ {
m_MouseButtonBindings[event.Button] = event.Command; m_MouseButtonBindings[event.Button] = std::make_tuple(event.Command, event.Value);
LOG_DEBUG("Input: Bound mouse button %i to %s", event.Button, event.Command.c_str()); LOG_DEBUG("Input: Bound mouse button %i to %s", event.Button, event.Command.c_str());
} }
@@ -201,6 +210,49 @@ bool Systems::InputSystem::OnBindGamepadButton(const Events::BindGamepadButton &
return true; return true;
} }
float Systems::InputSystem::GetCommandTotalValue(std::string command)
{
float value = 0.f;
auto keyboardIt = m_CommandKeyboardValues.find(command);
if (keyboardIt != m_CommandKeyboardValues.end())
{
for (auto &key : keyboardIt->second)
{
value += key.second;
}
}
auto mouseButtonIt = m_CommandMouseButtonValues.find(command);
if (mouseButtonIt != m_CommandMouseButtonValues.end())
{
for (auto &button : mouseButtonIt->second)
{
value += button.second;
}
}
auto gamepadAxisIt = m_CommandGamepadAxisValues.find(command);
if (gamepadAxisIt != m_CommandGamepadAxisValues.end())
{
for (auto &axis : gamepadAxisIt->second)
{
value += axis.second;
}
}
auto gamepadButtonIt = m_CommandGamepadButtonValues.find(command);
if (gamepadButtonIt != m_CommandGamepadButtonValues.end())
{
for (auto &button : gamepadButtonIt->second)
{
value += button.second;
}
}
return std::max(-1.f, std::min(value, 1.f));
}
void Systems::InputSystem::PublishCommand(int playerID, std::string command, float value) void Systems::InputSystem::PublishCommand(int playerID, std::string command, float value)
{ {
Events::InputCommand e; Events::InputCommand e;
@@ -211,5 +263,3 @@ void Systems::InputSystem::PublishCommand(int playerID, std::string command, flo
LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, playerID); LOG_DEBUG("Input: Published command %s=%f for player %i", e.Command.c_str(), e.Value, playerID);
} }
+6 -2
View File
@@ -34,10 +34,13 @@ public:
void Update(double dt) override; void Update(double dt) override;
private: private:
std::unordered_map<std::string, float> m_CommandValues; // command string -> command current value std::unordered_map<std::string, std::unordered_map<int, float>> m_CommandKeyboardValues; // command string -> keyboard key value for command
std::unordered_map<std::string, std::unordered_map<int, float>> m_CommandMouseButtonValues; // command string -> mouse button value for command
std::unordered_map<std::string, std::unordered_map<Gamepad::Axis, float>> m_CommandGamepadAxisValues; // command string -> gamepad axis value for command
std::unordered_map<std::string, std::unordered_map<Gamepad::Button, float>> m_CommandGamepadButtonValues; // command string -> gamepad button value for command
// Input binding tables // Input binding tables
std::unordered_map<int, std::tuple<std::string, float>> m_KeyBindings; // GLFW_KEY... -> command string & value std::unordered_map<int, std::tuple<std::string, float>> m_KeyBindings; // GLFW_KEY... -> command string & value
std::unordered_map<int, std::string> m_MouseButtonBindings; // GLFW_MOUSE_BUTTON... -> command string std::unordered_map<int, std::tuple<std::string, float>> m_MouseButtonBindings; // GLFW_MOUSE_BUTTON... -> command string
std::unordered_map<Gamepad::Axis, std::tuple<std::string, float>> m_GamepadAxisBindings; // Gamepad::Axis -> command string & value std::unordered_map<Gamepad::Axis, std::tuple<std::string, float>> m_GamepadAxisBindings; // Gamepad::Axis -> command string & value
std::unordered_map<Gamepad::Button, std::tuple<std::string, float>> m_GamepadButtonBindings; // Gamepad::Button -> command string std::unordered_map<Gamepad::Button, std::tuple<std::string, float>> m_GamepadButtonBindings; // Gamepad::Button -> command string
@@ -66,6 +69,7 @@ private:
EventRelay<Events::BindGamepadButton> m_EBindGamepadButton; EventRelay<Events::BindGamepadButton> m_EBindGamepadButton;
bool OnBindGamepadButton(const Events::BindGamepadButton &event); bool OnBindGamepadButton(const Events::BindGamepadButton &event);
float GetCommandTotalValue(std::string command);
void PublishCommand(int playerID, std::string command, float value); void PublishCommand(int playerID, std::string command, float value);
}; };
+12 -12
View File
@@ -6,7 +6,7 @@
void Systems::ParticleSystem::Initialize() void Systems::ParticleSystem::Initialize()
{ {
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>("TransformSystem"); m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
} }
void Systems::ParticleSystem::Update(double dt) void Systems::ParticleSystem::Update(double dt)
@@ -16,15 +16,15 @@ void Systems::ParticleSystem::Update(double dt)
void Systems::ParticleSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) void Systems::ParticleSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{ {
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
if(!transformComponent) if(!transformComponent)
return; return;
auto emitterComponent = m_World->GetComponent<Components::ParticleEmitter>(entity, "ParticleEmitter"); auto emitterComponent = m_World->GetComponent<Components::ParticleEmitter>(entity);
if(emitterComponent) if(emitterComponent)
{ {
emitterComponent->TimeSinceLastSpawn += dt; emitterComponent->TimeSinceLastSpawn += dt;
auto emitterTransformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto emitterTransformComponent = m_World->GetComponent<Components::Transform>(entity);
if(emitterComponent->TimeSinceLastSpawn > emitterComponent->SpawnFrequency) if(emitterComponent->TimeSinceLastSpawn > emitterComponent->SpawnFrequency)
{ {
SpawnParticles(entity); SpawnParticles(entity);
@@ -35,8 +35,8 @@ void Systems::ParticleSystem::UpdateEntity(double dt, EntityID entity, EntityID
for(it = m_ParticleEmitter[entity].begin(); it != m_ParticleEmitter[entity].end();) for(it = m_ParticleEmitter[entity].begin(); it != m_ParticleEmitter[entity].end();)
{ {
EntityID particleID = (it)->ParticleID; EntityID particleID = (it)->ParticleID;
auto transformComponent = m_World->GetComponent<Components::Transform>(particleID, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(particleID);
auto particleComponent = m_World->GetComponent<Components::Particle>(particleID, "Particle"); auto particleComponent = m_World->GetComponent<Components::Particle>(particleID);
double timeLived = glfwGetTime() - it->SpawnTime; double timeLived = glfwGetTime() - it->SpawnTime;
if(timeLived > particleComponent->LifeTime) if(timeLived > particleComponent->LifeTime)
@@ -94,15 +94,15 @@ void Systems::ParticleSystem::UpdateEntity(double dt, EntityID entity, EntityID
void Systems::ParticleSystem::RegisterComponents(ComponentFactory* cf) void Systems::ParticleSystem::RegisterComponents(ComponentFactory* cf)
{ {
cf->Register("ParticleEmitter", []() { return new Components::ParticleEmitter(); }); cf->Register<Components::ParticleEmitter>([]() { return new Components::ParticleEmitter(); });
cf->Register("Particle", []() { return new Components::Particle(); }); cf->Register<Components::Particle>([]() { return new Components::Particle(); });
} }
void Systems::ParticleSystem::SpawnParticles(EntityID emitterID) void Systems::ParticleSystem::SpawnParticles(EntityID emitterID)
{ {
auto emitterComponent = m_World->GetComponent<Components::ParticleEmitter>(emitterID, "ParticleEmitter"); auto emitterComponent = m_World->GetComponent<Components::ParticleEmitter>(emitterID);
auto emitterTransform = m_World->GetComponent<Components::Transform>(emitterID, "Transform"); auto emitterTransform = m_World->GetComponent<Components::Transform>(emitterID);
glm::vec3 emitterPos = m_TransformSystem->AbsolutePosition(emitterID); glm::vec3 emitterPos = m_TransformSystem->AbsolutePosition(emitterID);
glm::quat emitterOrientation = emitterTransform->Orientation; glm::quat emitterOrientation = emitterTransform->Orientation;
@@ -113,7 +113,7 @@ void Systems::ParticleSystem::SpawnParticles(EntityID emitterID)
{ {
auto ent = m_World->CloneEntity(emitterComponent->ParticleTemplate); auto ent = m_World->CloneEntity(emitterComponent->ParticleTemplate);
auto particleTransform = m_World->GetComponent<Components::Transform>(ent, "Transform"); auto particleTransform = m_World->GetComponent<Components::Transform>(ent);
particleTransform->Position = emitterPos; particleTransform->Position = emitterPos;
particleTransform->Orientation = emitterOrientation; particleTransform->Orientation = emitterOrientation;
@@ -124,7 +124,7 @@ void Systems::ParticleSystem::SpawnParticles(EntityID emitterID)
glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 1, 0))) * glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 1, 0))) *
glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 0, 1))); glm::normalize(glm::angleAxis(RandomizeAngle(spreadAngle), glm::vec3(0, 0, 1)));
auto particle = m_World->AddComponent<Components::Particle>(ent, "Particle"); auto particle = m_World->AddComponent<Components::Particle>(ent);
particle->LifeTime = emitterComponent->LifeTime; particle->LifeTime = emitterComponent->LifeTime;
particle->ScaleSpectrum = emitterComponent->ScaleSpectrum; particle->ScaleSpectrum = emitterComponent->ScaleSpectrum;
particle->VelocitySpectrum.push_back(particleTransform->Velocity); particle->VelocitySpectrum.push_back(particleTransform->Velocity);
+24 -24
View File
@@ -112,14 +112,14 @@ void Systems::PhysicsSystem::Initialize()
void Systems::PhysicsSystem::RegisterComponents(ComponentFactory* cf) void Systems::PhysicsSystem::RegisterComponents(ComponentFactory* cf)
{ {
cf->Register("Physics", []() { return new Components::Physics(); }); cf->Register<Components::Physics>([]() { return new Components::Physics(); });
cf->Register("BoxShape", []() { return new Components::BoxShape(); }); cf->Register<Components::BoxShape>([]() { return new Components::BoxShape(); });
cf->Register("SphereShape", []() { return new Components::SphereShape(); }); cf->Register<Components::SphereShape>([]() { return new Components::SphereShape(); });
cf->Register("Vehicle", []() { return new Components::Vehicle(); }); cf->Register<Components::Vehicle>([]() { return new Components::Vehicle(); });
cf->Register("Wheel", []() { return new Components::Wheel(); }); cf->Register<Components::Wheel>([]() { return new Components::Wheel(); });
cf->Register("MeshShape", []() { return new Components::MeshShape(); }); cf->Register<Components::MeshShape>([]() { return new Components::MeshShape(); });
cf->Register("HingeConstraint", []() { return new Components::HingeConstraint(); }); cf->Register<Components::HingeConstraint>([]() { return new Components::HingeConstraint(); });
cf->Register("WheelPair", []() { return new Components::WheelPair(); }); cf->Register<Components::WheelPair>([]() { return new Components::WheelPair(); });
} }
void Systems::PhysicsSystem::Update(double dt) void Systems::PhysicsSystem::Update(double dt)
@@ -132,7 +132,7 @@ void Systems::PhysicsSystem::Update(double dt)
if (m_RigidBodies.find(entity) == m_RigidBodies.end()) if (m_RigidBodies.find(entity) == m_RigidBodies.end())
continue; continue;
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
if (!transformComponent) if (!transformComponent)
continue; continue;
@@ -143,7 +143,7 @@ void Systems::PhysicsSystem::Update(double dt)
if (parent) if (parent)
{ {
auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>("TransformSystem")->AbsoluteTransform(entity); auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>()->AbsoluteTransform(entity);
position = ConvertPosition(absoluteTransform.Position); position = ConvertPosition(absoluteTransform.Position);
rotation = ConvertRotation(absoluteTransform.Orientation); rotation = ConvertRotation(absoluteTransform.Orientation);
} }
@@ -184,11 +184,11 @@ void Systems::PhysicsSystem::Update(double dt)
void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{ {
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
if (!transformComponent) if (!transformComponent)
return; return;
auto wheelComponent = m_World->GetComponent<Components::Wheel>(entity, "Wheel"); auto wheelComponent = m_World->GetComponent<Components::Wheel>(entity);
if (wheelComponent) if (wheelComponent)
{ {
EntityID car = m_World->GetEntityParent(entity); EntityID car = m_World->GetEntityParent(entity);
@@ -212,7 +212,7 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p
} }
else if(m_RigidBodies.find(entity) != m_RigidBodies.end()) else if(m_RigidBodies.find(entity) != m_RigidBodies.end())
{ {
auto transformComponentParent = m_World->GetComponent<Components::Transform>(parent, "Transform"); auto transformComponentParent = m_World->GetComponent<Components::Transform>(parent);
transformComponent->Position = ConvertPosition(m_RigidBodies[entity]->getPosition()); transformComponent->Position = ConvertPosition(m_RigidBodies[entity]->getPosition());
transformComponent->Orientation = ConvertRotation(m_RigidBodies[entity]->getRotation()); transformComponent->Orientation = ConvertRotation(m_RigidBodies[entity]->getRotation());
@@ -231,11 +231,11 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p
void Systems::PhysicsSystem::OnEntityCommit( EntityID entity ) void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
{ {
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
if (!transformComponent) if (!transformComponent)
return; return;
auto wheelComponent = m_World->GetComponent<Components::Wheel>(entity, "Wheel"); auto wheelComponent = m_World->GetComponent<Components::Wheel>(entity);
if (wheelComponent) if (wheelComponent)
{ {
wheelComponent->ID = m_Wheels.size(); wheelComponent->ID = m_Wheels.size();
@@ -245,9 +245,9 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
EntityID entityParent = m_World->GetEntityBaseParent(entity); EntityID entityParent = m_World->GetEntityBaseParent(entity);
auto sphereComponent = m_World->GetComponent<Components::SphereShape>(entity, "SphereShape"); auto sphereComponent = m_World->GetComponent<Components::SphereShape>(entity);
auto boxComponent = m_World->GetComponent<Components::BoxShape>(entity, "BoxShape"); auto boxComponent = m_World->GetComponent<Components::BoxShape>(entity);
auto meshShapeComponent = m_World->GetComponent<Components::MeshShape >(entity, "MeshShape"); auto meshShapeComponent = m_World->GetComponent<Components::MeshShape >(entity);
if(entityParent == entity && (sphereComponent || boxComponent || meshShapeComponent)) if(entityParent == entity && (sphereComponent || boxComponent || meshShapeComponent))
{ {
@@ -255,7 +255,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
return; return;
} }
auto physicsComponent = m_World->GetComponent<Components::Physics>(entity, "Physics"); auto physicsComponent = m_World->GetComponent<Components::Physics>(entity);
if (physicsComponent) if (physicsComponent)
{ {
hkpShape* shape; hkpShape* shape;
@@ -296,7 +296,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
{ {
rigidBodyInfo.m_shape = shape; rigidBodyInfo.m_shape = shape;
rigidBodyInfo.m_motionType = hkpMotion::MOTION_DYNAMIC; rigidBodyInfo.m_motionType = hkpMotion::MOTION_DYNAMIC;
auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>("TransformSystem")->AbsoluteTransform(entity); auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>()->AbsoluteTransform(entity);
hkVector4 position = ConvertPosition(absoluteTransform.Position); hkVector4 position = ConvertPosition(absoluteTransform.Position);
hkQuaternion rotation = ConvertRotation(absoluteTransform.Orientation); hkQuaternion rotation = ConvertRotation(absoluteTransform.Orientation);
rigidBodyInfo.m_position.set(position(0), position(1), position(2), position(3)); rigidBodyInfo.m_position.set(position(0), position(1), position(2), position(3));
@@ -309,7 +309,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
// Create RigidBody // Create RigidBody
hkpRigidBody* rigidBody = new hkpRigidBody(rigidBodyInfo); hkpRigidBody* rigidBody = new hkpRigidBody(rigidBodyInfo);
auto vehicleComponent = m_World->GetComponent<Components::Vehicle >(entity, "Vehicle"); auto vehicleComponent = m_World->GetComponent<Components::Vehicle >(entity);
if (vehicleComponent && m_Vehicles.find(entity) == m_Vehicles.end()) if (vehicleComponent && m_Vehicles.find(entity) == m_Vehicles.end())
{ {
for (int i = 0; i < m_Wheels.size(); i++) for (int i = 0; i < m_Wheels.size(); i++)
@@ -365,7 +365,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
for (auto &shapeData : m_Shapes[entity]) for (auto &shapeData : m_Shapes[entity])
{ {
auto childTransformComponent = m_World->GetComponent<Components::Transform>(shapeData.Entity, "Transform"); auto childTransformComponent = m_World->GetComponent<Components::Transform>(shapeData.Entity);
hkVector4 position = ConvertPosition(childTransformComponent->Position); hkVector4 position = ConvertPosition(childTransformComponent->Position);
hkQuaternion rotation = ConvertRotation(childTransformComponent->Orientation); hkQuaternion rotation = ConvertRotation(childTransformComponent->Orientation);
@@ -386,7 +386,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
{ {
rigidBodyInfo.m_shape = shape; rigidBodyInfo.m_shape = shape;
rigidBodyInfo.m_motionType = hkpMotion::MOTION_FIXED; rigidBodyInfo.m_motionType = hkpMotion::MOTION_FIXED;
auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>("TransformSystem")->AbsoluteTransform(entity); auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>()->AbsoluteTransform(entity);
hkVector4 position = ConvertPosition(absoluteTransform.Position); hkVector4 position = ConvertPosition(absoluteTransform.Position);
hkQuaternion rotation = ConvertRotation(absoluteTransform.Orientation); hkQuaternion rotation = ConvertRotation(absoluteTransform.Orientation);
rigidBodyInfo.m_position.set(position(0), position(1), position(2), position(3)); rigidBodyInfo.m_position.set(position(0), position(1), position(2), position(3));
@@ -576,7 +576,7 @@ const hkVector4& Systems::PhysicsSystem::ConvertScale(glm::vec3 glmScale)
bool Systems::PhysicsSystem::OnTankSteer(const Events::TankSteer &event) bool Systems::PhysicsSystem::OnTankSteer(const Events::TankSteer &event)
{ {
auto vehicleComponent = m_World->GetComponent<Components::Vehicle>(event.Entity, "Vehicle"); auto vehicleComponent = m_World->GetComponent<Components::Vehicle>(event.Entity);
if (vehicleComponent && m_Vehicles.find(event.Entity) != m_Vehicles.end() && m_RigidBodies.find(event.Entity) != m_RigidBodies.end()) if (vehicleComponent && m_Vehicles.find(event.Entity) != m_Vehicles.end() && m_RigidBodies.find(event.Entity) != m_RigidBodies.end())
{ {
m_PhysicsWorld->markForWrite(); m_PhysicsWorld->markForWrite();
+19 -16
View File
@@ -12,12 +12,12 @@ void Systems::RenderSystem::OnComponentCreated(std::string type, std::shared_ptr
void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{ {
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
if (transformComponent == nullptr) if (transformComponent == nullptr)
return; return;
// Draw models // Draw models
auto modelComponent = m_World->GetComponent<Components::Model>(entity, "Model"); auto modelComponent = m_World->GetComponent<Components::Model>(entity);
if (modelComponent != nullptr) if (modelComponent != nullptr)
{ {
auto model = m_World->GetResourceManager()->Load<Model>("Model", modelComponent->ModelFile); auto model = m_World->GetResourceManager()->Load<Model>("Model", modelComponent->ModelFile);
@@ -31,7 +31,7 @@ void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID pa
} }
} }
auto pointLightComponent = m_World->GetComponent<Components::PointLight>(entity, "PointLight"); auto pointLightComponent = m_World->GetComponent<Components::PointLight>(entity);
if (pointLightComponent != nullptr) if (pointLightComponent != nullptr)
{ {
glm::vec3 position = m_TransformSystem->AbsolutePosition(entity); glm::vec3 position = m_TransformSystem->AbsolutePosition(entity);
@@ -39,13 +39,14 @@ void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID pa
position, position,
pointLightComponent->Specular, pointLightComponent->Specular,
pointLightComponent->Diffuse, pointLightComponent->Diffuse,
pointLightComponent->constantAttenuation, pointLightComponent->specularExponent,
pointLightComponent->linearAttenuation, pointLightComponent->ConstantAttenuation,
pointLightComponent->quadraticAttenuation, pointLightComponent->LinearAttenuation,
pointLightComponent->spotExponent); pointLightComponent->QuadraticAttenuation
);
} }
auto cameraComponent = m_World->GetComponent<Components::Camera>(entity, "Camera"); auto cameraComponent = m_World->GetComponent<Components::Camera>(entity);
if (cameraComponent != nullptr) if (cameraComponent != nullptr)
{ {
m_Renderer->GetCamera()->Position(m_TransformSystem->AbsolutePosition(entity)); m_Renderer->GetCamera()->Position(m_TransformSystem->AbsolutePosition(entity));
@@ -56,13 +57,13 @@ void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID pa
m_Renderer->GetCamera()->FarClip(cameraComponent->FarClip); m_Renderer->GetCamera()->FarClip(cameraComponent->FarClip);
} }
auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity, "Sprite"); auto spriteComponent = m_World->GetComponent<Components::Sprite>(entity);
if(spriteComponent != nullptr) if(spriteComponent != nullptr)
{ {
//TEMP //TEMP
Texture* texture = m_World->GetResourceManager()->Load<Texture>("Texture", spriteComponent->SpriteFile); Texture* texture = m_World->GetResourceManager()->Load<Texture>("Texture", spriteComponent->SpriteFile);
//glBindTexture(GL_TEXTURE_2D, texture); //glBindTexture(GL_TEXTURE_2D, texture);
auto transform = m_World->GetComponent<Components::Transform>(spriteComponent->Entity, "Transform"); 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);
} }
@@ -70,16 +71,18 @@ void Systems::RenderSystem::UpdateEntity(double dt, EntityID entity, EntityID pa
void Systems::RenderSystem::Initialize() void Systems::RenderSystem::Initialize()
{ {
m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>("TransformSystem"); m_TransformSystem = m_World->GetSystem<Systems::TransformSystem>();
m_Renderer->SetSphereModel(m_World->GetResourceManager()->Load<Model>("Model", "Models/Placeholders/PhysicsTest/Sphere.obj"));
} }
void Systems::RenderSystem::RegisterComponents(ComponentFactory* cf) void Systems::RenderSystem::RegisterComponents(ComponentFactory* cf)
{ {
cf->Register("Camera", []() { return new Components::Camera(); }); cf->Register<Components::Camera>([]() { return new Components::Camera(); });
cf->Register("Model", []() { return new Components::Model(); }); cf->Register<Components::Model>([]() { return new Components::Model(); });
cf->Register("Sprite", []() { return new Components::Sprite(); }); cf->Register<Components::Sprite>([]() { return new Components::Sprite(); });
cf->Register("PointLight", []() { return new Components::PointLight(); }); cf->Register<Components::PointLight>([]() { return new Components::PointLight(); });
cf->Register("DirectionalLight", []() { return new Components::DirectionalLight(); }); cf->Register<Components::DirectionalLight>([]() { return new Components::DirectionalLight(); });
} }
void Systems::RenderSystem::RegisterResourceTypes(ResourceManager* rm) void Systems::RenderSystem::RegisterResourceTypes(ResourceManager* rm)
+3 -3
View File
@@ -29,7 +29,7 @@ void Systems::SoundSystem::Initialize()
void Systems::SoundSystem::RegisterComponents(ComponentFactory* cf) void Systems::SoundSystem::RegisterComponents(ComponentFactory* cf)
{ {
cf->Register("SoundEmitter", []() { return new Components::SoundEmitter(); }); cf->Register<Components::SoundEmitter>([]() { return new Components::SoundEmitter(); });
} }
void Systems::SoundSystem::RegisterResourceTypes(ResourceManager* rm) void Systems::SoundSystem::RegisterResourceTypes(ResourceManager* rm)
@@ -44,7 +44,7 @@ void Systems::SoundSystem::Update(double dt)
void Systems::SoundSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) void Systems::SoundSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{ {
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
if (transformComponent == nullptr) if (transformComponent == nullptr)
return; return;
@@ -68,7 +68,7 @@ void Systems::SoundSystem::UpdateEntity(double dt, EntityID entity, EntityID par
alListenerfv(AL_ORIENTATION, listenerOri); alListenerfv(AL_ORIENTATION, listenerOri);
} }
auto soundEmitter = m_World->GetComponent<Components::SoundEmitter>(entity, "SoundEmitter"); auto soundEmitter = m_World->GetComponent<Components::SoundEmitter>(entity);
if(soundEmitter != nullptr) if(soundEmitter != nullptr)
{ {
ALuint source = m_Sources[soundEmitter]; ALuint source = m_Sources[soundEmitter];
+11 -11
View File
@@ -4,9 +4,9 @@
void Systems::TankSteeringSystem::RegisterComponents( ComponentFactory* cf ) void Systems::TankSteeringSystem::RegisterComponents( ComponentFactory* cf )
{ {
cf->Register("TankSteering", []() { return new Components::TankSteering(); }); cf->Register<Components::TankSteering>([]() { return new Components::TankSteering(); });
cf->Register("TowerSteering", []() { return new Components::TowerSteering(); }); cf->Register<Components::TowerSteering>([]() { return new Components::TowerSteering(); });
cf->Register("BarrelSteering", []() { return new Components::BarrelSteering(); }); cf->Register<Components::BarrelSteering>([]() { return new Components::BarrelSteering(); });
} }
void Systems::TankSteeringSystem::Initialize() void Systems::TankSteeringSystem::Initialize()
@@ -23,7 +23,7 @@ void Systems::TankSteeringSystem::Update(double dt)
void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
{ {
auto tankSteeringComponent = m_World->GetComponent<Components::TankSteering>(entity, "TankSteering"); auto tankSteeringComponent = m_World->GetComponent<Components::TankSteering>(entity);
if(tankSteeringComponent) if(tankSteeringComponent)
{ {
Events::TankSteer e; Events::TankSteer e;
@@ -34,27 +34,27 @@ void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, Entit
EventBroker->Publish(e); EventBroker->Publish(e);
} }
auto towerSteeringComponent = m_World->GetComponent<Components::TowerSteering>(entity, "TowerSteering"); auto towerSteeringComponent = m_World->GetComponent<Components::TowerSteering>(entity);
if(towerSteeringComponent) if(towerSteeringComponent)
{ {
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
glm::quat orientation = glm::angleAxis(towerSteeringComponent->TurnSpeed * m_TowerInputController->TowerDirection * (float)dt, towerSteeringComponent->Axis); glm::quat orientation = glm::angleAxis(towerSteeringComponent->TurnSpeed * m_TowerInputController->TowerDirection * (float)dt, towerSteeringComponent->Axis);
transformComponent->Orientation *= orientation; transformComponent->Orientation *= orientation;
} }
auto barrelSteeringComponent = m_World->GetComponent<Components::BarrelSteering>(entity, "BarrelSteering"); auto barrelSteeringComponent = m_World->GetComponent<Components::BarrelSteering>(entity);
if(barrelSteeringComponent) if(barrelSteeringComponent)
{ {
auto transformComponent = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transformComponent = m_World->GetComponent<Components::Transform>(entity);
auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>("TransformSystem")->AbsoluteTransform(entity); auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>()->AbsoluteTransform(entity);
glm::quat orientation = glm::angleAxis(barrelSteeringComponent->TurnSpeed * m_TowerInputController->BarrelDirection * (float)dt, barrelSteeringComponent->Axis); glm::quat orientation = glm::angleAxis(barrelSteeringComponent->TurnSpeed * m_TowerInputController->BarrelDirection * (float)dt, barrelSteeringComponent->Axis);
transformComponent->Orientation *= orientation; transformComponent->Orientation *= orientation;
if(m_TowerInputController->Shoot && m_TimeSinceLastShot[entity] > 1.0) if(m_TowerInputController->Shoot && m_TimeSinceLastShot[entity] > 1.0)
{ {
EntityID clone = m_World->CloneEntity(barrelSteeringComponent->ShotTemplate); EntityID clone = m_World->CloneEntity(barrelSteeringComponent->ShotTemplate);
auto templateAbsoluteTransform = m_World->GetSystem<Systems::TransformSystem>("TransformSystem")->AbsoluteTransform(barrelSteeringComponent->ShotTemplate); auto templateAbsoluteTransform = m_World->GetSystem<Systems::TransformSystem>()->AbsoluteTransform(barrelSteeringComponent->ShotTemplate);
auto cloneTransform = m_World->GetComponent<Components::Transform>(clone, "Transform"); auto cloneTransform = m_World->GetComponent<Components::Transform>(clone);
cloneTransform->Position = templateAbsoluteTransform.Position; cloneTransform->Position = templateAbsoluteTransform.Position;
cloneTransform->Orientation = absoluteTransform.Orientation * cloneTransform->Orientation; cloneTransform->Orientation = absoluteTransform.Orientation * cloneTransform->Orientation;
Events::SetVelocity e; Events::SetVelocity e;
+8 -8
View File
@@ -7,8 +7,8 @@
// if (parent == 0) // if (parent == 0)
// return; // return;
// //
// auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform"); // auto transform = m_World->GetComponent<Components::Transform>(entity);
// auto parentTransform = m_World->GetComponent<Components::Transform>(parent, "Transform"); // auto parentTransform = m_World->GetComponent<Components::Transform>(parent);
// //
// transform->Position = parentTransform->Position + transform->RelativePosition; // transform->Position = parentTransform->Position + transform->RelativePosition;
//} //}
@@ -20,10 +20,10 @@ glm::vec3 Systems::TransformSystem::AbsolutePosition(EntityID entity)
do do
{ {
auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transform = m_World->GetComponent<Components::Transform>(entity);
//absPosition += transform->Position; //absPosition += transform->Position;
entity = m_World->GetEntityParent(entity); entity = m_World->GetEntityParent(entity);
auto transform2 = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transform2 = m_World->GetComponent<Components::Transform>(entity);
if (entity == 0) if (entity == 0)
absPosition += transform->Position; absPosition += transform->Position;
else else
@@ -39,7 +39,7 @@ glm::quat Systems::TransformSystem::AbsoluteOrientation(EntityID entity)
do do
{ {
auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transform = m_World->GetComponent<Components::Transform>(entity);
absOrientation = transform->Orientation * absOrientation; absOrientation = transform->Orientation * absOrientation;
entity = m_World->GetEntityParent(entity); entity = m_World->GetEntityParent(entity);
} while (entity != 0); } while (entity != 0);
@@ -53,7 +53,7 @@ glm::vec3 Systems::TransformSystem::AbsoluteScale(EntityID entity)
do do
{ {
auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transform = m_World->GetComponent<Components::Transform>(entity);
absScale *= transform->Scale; absScale *= transform->Scale;
entity = m_World->GetEntityParent(entity); entity = m_World->GetEntityParent(entity);
} while (entity != 0); } while (entity != 0);
@@ -69,9 +69,9 @@ Components::Transform Systems::TransformSystem::AbsoluteTransform(EntityID entit
do do
{ {
auto transform = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transform = m_World->GetComponent<Components::Transform>(entity);
entity = m_World->GetEntityParent(entity); entity = m_World->GetEntityParent(entity);
auto transform2 = m_World->GetComponent<Components::Transform>(entity, "Transform"); auto transform2 = m_World->GetComponent<Components::Transform>(entity);
// Position // Position
if (entity == 0) if (entity == 0)
+28
View File
@@ -0,0 +1,28 @@
#ifndef UTIL_H
#define UTIL_H
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define ZERO_MEM(a) memset(a, 0, sizeof(a))
#define ARRAY_SIZE_IN_ELEMENTS(a) (sizeof(a)/sizeof(a[0]))
#define INVALID_OGL_VALUE 0xFFFFFFFF
#define SAFE_DELETE(p) if (p) { delete p; p = NULL; }
#define GLExitIfError() \
{ \
GLenum Error = glGetError(); \
\
if (Error != GL_NO_ERROR) { \
printf("OpenGL error in %s:%d: 0x%x\n", __FILE__, __LINE__, Error); \
exit(0); \
} \
}
#define GLCheckError() (glGetError() == GL_NO_ERROR)
#endif /* UTIL_H */
+1 -11
View File
@@ -132,11 +132,6 @@ void World::Initialize()
} }
} }
std::shared_ptr<Component> World::AddComponent(EntityID entity, std::string componentType)
{
return AddComponent<Component>(entity, componentType);
}
void World::CommitEntity(EntityID entity) void World::CommitEntity(EntityID entity)
{ {
for (auto pair : m_Systems) for (auto pair : m_Systems)
@@ -158,11 +153,6 @@ void World::AddComponent(EntityID entity, std::string componentType, std::shared
} }
} }
void World::AddSystem(std::string systemType)
{
m_Systems[systemType] = std::shared_ptr<System>(m_SystemFactory.Create(systemType));
}
EntityID World::CloneEntity(EntityID entity, EntityID parent /* = 0 */) EntityID World::CloneEntity(EntityID entity, EntityID parent /* = 0 */)
{ {
int clone = CreateEntity(parent); int clone = CreateEntity(parent);
@@ -170,7 +160,7 @@ EntityID World::CloneEntity(EntityID entity, EntityID parent /* = 0 */)
for (auto pair : m_EntityComponents[entity]) for (auto pair : m_EntityComponents[entity])
{ {
auto type = pair.first; auto type = pair.first;
if (type == "Template") if (type == typeid(Components::Template).name())
continue; continue;
auto component = std::shared_ptr<Component>(pair.second->Clone()); auto component = std::shared_ptr<Component>(pair.second->Clone());
if (component != nullptr) if (component != nullptr)
+21 -19
View File
@@ -13,6 +13,7 @@
#include "Factory.h" #include "Factory.h"
#include "Entity.h" #include "Entity.h"
#include "Component.h" #include "Component.h"
#include "Components/Template.h"
#include "System.h" #include "System.h"
#include "EventBroker.h" #include "EventBroker.h"
#include "ResourceManager.h" #include "ResourceManager.h"
@@ -31,10 +32,14 @@ public:
virtual void AddSystems() = 0; virtual void AddSystems() = 0;
virtual void RegisterComponents() = 0; virtual void RegisterComponents() = 0;
template <typename T>
void AddSystem()
{
m_Systems[typeid(T).name()] = std::shared_ptr<System>(m_SystemFactory.Create<T>());
}
void AddSystem(std::string systemType); template <typename T>
template <class T> std::shared_ptr<T> GetSystem();
std::shared_ptr<T> GetSystem(std::string systemType);
EntityID CreateEntity(EntityID parent = 0); EntityID CreateEntity(EntityID parent = 0);
EntityID CloneEntity(EntityID entity, EntityID parent = 0); EntityID CloneEntity(EntityID entity, EntityID parent = 0);
@@ -69,10 +74,9 @@ public:
} }
template <class T> template <class T>
std::shared_ptr<T> AddComponent(EntityID entity, std::string componentType); std::shared_ptr<T> AddComponent(EntityID entity);
std::shared_ptr<Component> AddComponent(EntityID entity, std::string componentType);
template <class T> template <class T>
T* GetComponent(EntityID entity, std::string componentType); T* GetComponent(EntityID entity);
// Triggers commit events in systems // Triggers commit events in systems
void CommitEntity(EntityID entity); void CommitEntity(EntityID entity);
@@ -117,11 +121,13 @@ protected:
}; };
template <class T> template <class T>
std::shared_ptr<T> World::GetSystem(std::string systemType) std::shared_ptr<T> World::GetSystem()
{ {
const char* systemType = typeid(T).name();
if (m_Systems.find(systemType) == m_Systems.end()) if (m_Systems.find(systemType) == m_Systems.end())
{ {
LOG_WARNING("Tried to get pointer to unregistered system \"%s\"!", systemType.c_str()); LOG_WARNING("Tried to get pointer to unregistered system \"%s\"!", systemType);
return nullptr; return nullptr;
} }
@@ -129,12 +135,14 @@ std::shared_ptr<T> World::GetSystem(std::string systemType)
} }
template <class T> template <class T>
std::shared_ptr<T> World::AddComponent(EntityID entity, std::string componentType) std::shared_ptr<T> World::AddComponent(EntityID entity)
{ {
std::shared_ptr<T> component = std::shared_ptr<T>(static_cast<T*>(m_ComponentFactory.Create(componentType))); const char* componentType = typeid(T).name();
std::shared_ptr<T> component = std::shared_ptr<T>(static_cast<T*>(m_ComponentFactory.Create<T>()));
if (component == nullptr) if (component == nullptr)
{ {
LOG_ERROR("Failed to attach invalid component \"%s\" to entity #%i", componentType.c_str(), entity); LOG_ERROR("Failed to attach invalid component \"%s\" to entity #%i", componentType, entity);
return nullptr; return nullptr;
} }
@@ -145,17 +153,11 @@ std::shared_ptr<T> World::AddComponent(EntityID entity, std::string componentTyp
template <class T> template <class T>
T* World::GetComponent(EntityID entity, std::string componentType) T* World::GetComponent(EntityID entity)
{ {
/*auto it0 = m_EntityComponents.find(entity);
if (it0 == m_EntityComponents.end())
return nullptr;*/
auto components = m_EntityComponents[entity]; auto components = m_EntityComponents[entity];
auto it = components.find(componentType); auto it = components.find(typeid(T).name());
if (it != components.end()) if (it != components.end())
{ {
return static_cast<T*>(it->second.get()); return static_cast<T*>(it->second.get());
-40
View File
@@ -1,40 +0,0 @@
#include "PrecompiledHeader.h"
#include "gBuffer.h"
bool GBuffer::Init(unsigned int WindowWidth, unsigned int WindowHeight)
{
// Create the FBO
glGenFramebuffers(1, &m_fbo);
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, m_fbo);
// Create the gbuffer textures
glGenTextures(ARRAY_SIZE_IN_ELEMENTS(m_textures), m_textures);
glGenTextures(1, &m_depthTexture);
for (unsigned int i = 0 ; i < ARRAY_SIZE_IN_ELEMENTS(m_textures) ; i++) {
glBindTexture(GL_TEXTURE_2D, m_textures[i]);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB32F, WindowWidth, WindowHeight, 0, GL_RGB, GL_FLOAT, NULL);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_COLOR_ATTACHMENT0 + i, GL_TEXTURE_2D, m_textures[i], 0);
}
// depth
glBindTexture(GL_TEXTURE_2D, m_depthTexture);
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT32F, WindowWidth, WindowHeight, 0, GL_DEPTH_COMPONENT, GL_FLOAT,
NULL);
glFramebufferTexture2D(GL_DRAW_FRAMEBUFFER, GL_DEPTH_ATTACHMENT, GL_TEXTURE_2D, m_depthTexture, 0);
GLenum DrawBuffers[] = { GL_COLOR_ATTACHMENT0, GL_COLOR_ATTACHMENT1, GL_COLOR_ATTACHMENT2, GL_COLOR_ATTACHMENT3 };
glDrawBuffers(ARRAY_SIZE_IN_ELEMENTS(DrawBuffers), DrawBuffers);
GLenum Status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
if (Status != GL_FRAMEBUFFER_COMPLETE) {
printf("FB error, status: 0x%x\n", Status);
return false;
}
// restore default FBO
glBindFramebuffer(GL_DRAW_FRAMEBUFFER, 0);
return true;
}
-35
View File
@@ -1,35 +0,0 @@
#ifndef gBuffer_h__
#define gBuffer_h__
#include <stdio.h>
class GBuffer
{
public:
enum GBUFFER_TEXTURE_TYPE {
GBUFFER_TEXTURE_TYPE_POSITION,
GBUFFER_TEXTURE_TYPE_DIFFUSE,
GBUFFER_TEXTURE_TYPE_NORMAL,
GBUFFER_TEXTURE_TYPE_TEXCOORD,
GBUFFER_NUM_TEXTURES
};
GBuffer();
~GBuffer();
bool Init(unsigned int WindowWidth, unsigned int WindowHeight);
void BindForWriting();
void BindForReading();
private:
GLuint m_fbo;
GLuint m_textures[GBUFFER_NUM_TEXTURES];
GLuint m_depthTexture;
};
#endif //gBuffer_h__
+83
View File
@@ -0,0 +1,83 @@
<?xml version="1.0" encoding="UTF-8"?>
<VSPerformanceSession Version="1.00">
<Options>
<Solution>Returngeance.sln</Solution>
<CollectionMethod>Sampling</CollectionMethod>
<AllocationMethod>None</AllocationMethod>
<AddReport>true</AddReport>
<ResourceBasedAnalysisSelected>true</ResourceBasedAnalysisSelected>
<UniqueReport>Timestamp</UniqueReport>
<SamplingMethod>Cycles</SamplingMethod>
<CycleCount>10000000</CycleCount>
<PageFaultCount>10</PageFaultCount>
<SysCallCount>10</SysCallCount>
<SamplingCounter Name="" ReloadValue="00000000000f4240" DisplayName="" />
<RelocateBinaries>false</RelocateBinaries>
<HardwareCounters EnableHWCounters="false" />
<EtwSettings />
<PdhSettings>
<PdhCountersEnabled>false</PdhCountersEnabled>
<PdhCountersRate>500</PdhCountersRate>
<PdhCounters>
<PdhCounter>\Memory\Pages/sec</PdhCounter>
<PdhCounter>\PhysicalDisk(_Total)\Avg. Disk Queue Length</PdhCounter>
<PdhCounter>\Processor(_Total)\% Processor Time</PdhCounter>
</PdhCounters>
</PdhSettings>
</Options>
<ExcludeSmallFuncs>true</ExcludeSmallFuncs>
<InteractionProfilingEnabled>false</InteractionProfilingEnabled>
<JScriptProfilingEnabled>false</JScriptProfilingEnabled>
<PreinstrumentEvent>
<InstrEventExclude>false</InstrEventExclude>
</PreinstrumentEvent>
<PostinstrumentEvent>
<InstrEventExclude>false</InstrEventExclude>
</PostinstrumentEvent>
<Binaries>
<ProjBinary>
<Path>bin\Debug\Returngeance.exe</Path>
<ArgumentTimestamp>01/01/0001 00:00:00</ArgumentTimestamp>
<Instrument>true</Instrument>
<Sample>true</Sample>
<ExternalWebsite>false</ExternalWebsite>
<InteractionProfilingEnabled>false</InteractionProfilingEnabled>
<IsLocalJavascript>false</IsLocalJavascript>
<IsWindowsStoreApp>false</IsWindowsStoreApp>
<IsWWA>false</IsWWA>
<LaunchProject>true</LaunchProject>
<OverrideProjectSettings>false</OverrideProjectSettings>
<LaunchMethod>Executable</LaunchMethod>
<ExecutablePath>bin\Debug\Returngeance.exe</ExecutablePath>
<StartupDirectory>..\bin\Debug</StartupDirectory>
<Arguments>
</Arguments>
<NetAppHost>IIS</NetAppHost>
<NetBrowser>InternetExplorer</NetBrowser>
<ExcludeSmallFuncs>true</ExcludeSmallFuncs>
<JScriptProfilingEnabled>false</JScriptProfilingEnabled>
<PreinstrumentEvent>
<InstrEventExclude>false</InstrEventExclude>
</PreinstrumentEvent>
<PostinstrumentEvent>
<InstrEventExclude>false</InstrEventExclude>
</PostinstrumentEvent>
<ProjRef>{E8B4A2A2-882B-402A-98A7-8B4F7233C8B3}|Returngeance\Returngeance.vcxproj</ProjRef>
<ProjPath>Returngeance\Returngeance.vcxproj</ProjPath>
<ProjName>Returngeance</ProjName>
</ProjBinary>
</Binaries>
<Reports>
<Report>
<Path>Returngeance140427.vsp</Path>
</Report>
<Report>
<Path>Returngeance140427(1).vsp</Path>
</Report>
</Reports>
<Launches>
<ProjBinary>
<Path>:PB:{E8B4A2A2-882B-402A-98A7-8B4F7233C8B3}|Returngeance\Returngeance.vcxproj</Path>
</ProjBinary>
</Launches>
</VSPerformanceSession>
+7
View File
@@ -162,6 +162,7 @@
<ClInclude Include="..\..\src\Events\InputCommand.h" /> <ClInclude Include="..\..\src\Events\InputCommand.h" />
<ClInclude Include="..\..\src\Events\KeyDown.h" /> <ClInclude Include="..\..\src\Events\KeyDown.h" />
<ClInclude Include="..\..\src\Events\KeyUp.h" /> <ClInclude Include="..\..\src\Events\KeyUp.h" />
<ClInclude Include="..\..\src\Events\LockMouse.h" />
<ClInclude Include="..\..\src\Events\MouseMove.h" /> <ClInclude Include="..\..\src\Events\MouseMove.h" />
<ClInclude Include="..\..\src\Events\MousePress.h" /> <ClInclude Include="..\..\src\Events\MousePress.h" />
<ClInclude Include="..\..\src\Events\MouseRelease.h" /> <ClInclude Include="..\..\src\Events\MouseRelease.h" />
@@ -196,6 +197,7 @@
<ClInclude Include="..\..\src\Systems\TankSteeringSystem.h" /> <ClInclude Include="..\..\src\Systems\TankSteeringSystem.h" />
<ClInclude Include="..\..\src\Systems\TransformSystem.h" /> <ClInclude Include="..\..\src\Systems\TransformSystem.h" />
<ClInclude Include="..\..\src\Texture.h" /> <ClInclude Include="..\..\src\Texture.h" />
<ClInclude Include="..\..\src\Util\defferedUtil.h" />
<ClInclude Include="..\..\src\Util\GLError.h" /> <ClInclude Include="..\..\src\Util\GLError.h" />
<ClInclude Include="..\..\src\Util\Rectangle.h" /> <ClInclude Include="..\..\src\Util\Rectangle.h" />
<ClInclude Include="..\..\src\Util\Logging.h" /> <ClInclude Include="..\..\src\Util\Logging.h" />
@@ -204,7 +206,11 @@
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\src\Shaders\AABB.frag.glsl" /> <None Include="..\..\src\Shaders\AABB.frag.glsl" />
<None Include="..\..\src\Shaders\FinalPass.frag.glsl" />
<None Include="..\..\src\Shaders\FinalPass.vert.glsl" />
<None Include="..\..\src\Shaders\Fragment.glsl" /> <None Include="..\..\src\Shaders\Fragment.glsl" />
<None Include="..\..\src\Shaders\Fragment2-Debug.glsl" />
<None Include="..\..\src\Shaders\Fragment2.glsl" />
<None Include="..\..\src\Shaders\Normals.frag.glsl" /> <None Include="..\..\src\Shaders\Normals.frag.glsl" />
<None Include="..\..\src\Shaders\Normals.geo.glsl" /> <None Include="..\..\src\Shaders\Normals.geo.glsl" />
<None Include="..\..\src\Shaders\ShadowMap.frag.glsl" /> <None Include="..\..\src\Shaders\ShadowMap.frag.glsl" />
@@ -212,6 +218,7 @@
<None Include="..\..\src\Shaders\Skybox.frag.glsl" /> <None Include="..\..\src\Shaders\Skybox.frag.glsl" />
<None Include="..\..\src\Shaders\Skybox.vert.glsl" /> <None Include="..\..\src\Shaders\Skybox.vert.glsl" />
<None Include="..\..\src\Shaders\Vertex.glsl" /> <None Include="..\..\src\Shaders\Vertex.glsl" />
<None Include="..\..\src\Shaders\Vertex2.glsl" />
<None Include="..\..\src\Shaders\VisualizeDepth.frag.glsl" /> <None Include="..\..\src\Shaders\VisualizeDepth.frag.glsl" />
<None Include="..\..\src\Shaders\VisualizeDepth.vert.glsl" /> <None Include="..\..\src\Shaders\VisualizeDepth.vert.glsl" />
</ItemGroup> </ItemGroup>
+22 -4
View File
@@ -355,12 +355,12 @@
<ClInclude Include="..\..\src\Components\Health.h"> <ClInclude Include="..\..\src\Components\Health.h">
<Filter>Physics\Components</Filter> <Filter>Physics\Components</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\src\Events\LockMouse.h">
<Filter>Input\Events</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="..\..\src\Shaders\AABB.frag.glsl"> <None Include="..\..\src\Shaders\Fragment2.glsl">
<Filter>Shaders</Filter>
</None>
<None Include="..\..\src\Shaders\Fragment.glsl">
<Filter>Shaders</Filter> <Filter>Shaders</Filter>
</None> </None>
<None Include="..\..\src\Shaders\Normals.frag.glsl"> <None Include="..\..\src\Shaders\Normals.frag.glsl">
@@ -384,11 +384,29 @@
<None Include="..\..\src\Shaders\Vertex.glsl"> <None Include="..\..\src\Shaders\Vertex.glsl">
<Filter>Shaders</Filter> <Filter>Shaders</Filter>
</None> </None>
<None Include="..\..\src\Shaders\Vertex2.glsl">
<Filter>Shaders</Filter>
</None>
<None Include="..\..\src\Shaders\VisualizeDepth.frag.glsl"> <None Include="..\..\src\Shaders\VisualizeDepth.frag.glsl">
<Filter>Shaders</Filter> <Filter>Shaders</Filter>
</None> </None>
<None Include="..\..\src\Shaders\VisualizeDepth.vert.glsl"> <None Include="..\..\src\Shaders\VisualizeDepth.vert.glsl">
<Filter>Shaders</Filter> <Filter>Shaders</Filter>
</None> </None>
<None Include="..\..\src\Shaders\AABB.frag.glsl">
<Filter>Shaders</Filter>
</None>
<None Include="..\..\src\Shaders\Fragment.glsl">
<Filter>Shaders</Filter>
</None>
<None Include="..\..\src\Shaders\Fragment2-Debug.glsl">
<Filter>Shaders</Filter>
</None>
<None Include="..\..\src\Shaders\FinalPass.vert.glsl">
<Filter>Shaders</Filter>
</None>
<None Include="..\..\src\Shaders\FinalPass.frag.glsl">
<Filter>Shaders</Filter>
</None>
</ItemGroup> </ItemGroup>
</Project> </Project>