diff --git a/src/Components/SoundEmitter.h b/src/Components/SoundEmitter.h index cc9b738..e969fba 100755 --- a/src/Components/SoundEmitter.h +++ b/src/Components/SoundEmitter.h @@ -10,13 +10,14 @@ namespace Components struct SoundEmitter : Component { + enum class SoundType { SOUND_3D, SOUND_2D }; - SoundEmitter() : Gain(1.f), MaxDistance(1.f), MinDistance(1.f), Pitch(1.f), Loop(false) {} + SoundEmitter() : Gain(1.f), MaxDistance(10000.f), MinDistance(1.f), Pitch(1.f), Loop(false) {} float Gain; float MaxDistance; float MinDistance; diff --git a/src/Components/SpawnPoint.h b/src/Components/SpawnPoint.h index c29230d..74aaaf9 100644 --- a/src/Components/SpawnPoint.h +++ b/src/Components/SpawnPoint.h @@ -8,6 +8,8 @@ namespace Components struct SpawnPoint : Component { + EntityID Player; + virtual SpawnPoint* Clone() const override { return new SpawnPoint(*this); } }; diff --git a/src/Events/PlaySFX.h b/src/Events/PlaySFX.h index e96f8cf..4df4ce3 100644 --- a/src/Events/PlaySFX.h +++ b/src/Events/PlaySFX.h @@ -9,8 +9,17 @@ namespace Events struct PlaySFX : Event { - EntityID Emitter; + PlaySFX() : + MinDistance(100.f), + MaxDistance(10000.f), + Volume(1.f), + Loop (false) {} + //EntityID Emitter; + glm::vec3 Position; std::string Resource; + float MinDistance; + float MaxDistance; + float Volume; bool Loop; }; diff --git a/src/GUI/Frame.h b/src/GUI/Frame.h index 25c2dd1..ba99851 100644 --- a/src/GUI/Frame.h +++ b/src/GUI/Frame.h @@ -132,7 +132,11 @@ public: Rectangle AbsoluteRectangle() { int left = Left(); + if (m_Parent) + left = std::max(left, m_Parent->Left()); int top = Top(); + if (m_Parent) + top = std::max(top, m_Parent->Top()); int width = Right() - left; int height = Bottom() - top; return Rectangle(left, top, width, height); diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index d8dee4c..aa182bc 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -514,12 +514,15 @@ void GameWorld::BindGamepadButton(Gamepad::Button button, std::string command, f EventBroker->Publish(e); } -void GameWorld::CreateGate(glm::vec3 Position) +void GameWorld::CreateGate(EntityID parent, glm::vec3 position, glm::quat orientation) { + auto gateParent = CreateEntity(parent); + auto transform = AddComponent(gateParent); + transform->Position = position; + transform->Orientation = orientation; { - auto gateBase = CreateEntity(); + auto gateBase = CreateEntity(gateParent); auto transform = AddComponent(gateBase); - transform->Position = Position; auto model = AddComponent(gateBase); model->ModelFile = "Models/Gate/Lift/Lift.obj"; auto physics = AddComponent(gateBase); @@ -578,10 +581,9 @@ void GameWorld::CreateGate(glm::vec3 Position) CommitEntity(gateBase); } + auto gate = CreateEntity(gateParent); { - auto gate = CreateEntity(); auto transform = AddComponent(gate); - transform->Position = Position; auto model = AddComponent(gate); model->ModelFile = "Models/Gate/Gate/Gate.obj"; auto physics = AddComponent(gate); @@ -589,8 +591,8 @@ void GameWorld::CreateGate(glm::vec3 Position) physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC; auto move = AddComponent(gate); move->Speed = 5.f; - move->GoalPosition = glm::vec3(Position.x, Position.y + 9.02345f, Position.z); - move->StartPosition = glm::vec3(Position.x, Position.y, Position.z); + move->GoalPosition = glm::vec3(0, 9.02345f, 0); + move->StartPosition = glm::vec3(0, 0, 0); { auto mainShape = CreateEntity(gate); auto transform = AddComponent(mainShape); @@ -612,29 +614,27 @@ void GameWorld::CreateGate(glm::vec3 Position) CommitEntity(lowerShape); } CommitEntity(gate); + } + + { + auto gateTrigger = CreateEntity(gateParent); + auto transform = AddComponent(gateTrigger); + transform->Position = glm::vec3(0, 2.8241, 0); + auto trigger = AddComponent(gateTrigger); + auto triggerMove = AddComponent(gateTrigger); + triggerMove->Entity = gate; { - auto gateTrigger = CreateEntity(); - auto transform = AddComponent(gateTrigger); - transform->Position = glm::vec3(Position.x, Position.y + 2.8241, Position.z); - auto trigger = AddComponent(gateTrigger); - auto triggerMove = AddComponent(gateTrigger); - triggerMove->Entity = gate; - - - { - auto shape = CreateEntity(gateTrigger); - auto transform = AddComponent(shape); - transform->Position = glm::vec3(0.f, 2.8241f, 0.f); - auto box = AddComponent(shape); - box->Width = 6.963f; - box->Height = 3.104f; - box->Depth = 10.356f; - CommitEntity(shape); - } - CommitEntity(gateTrigger); + auto shape = CreateEntity(gateTrigger); + auto transform = AddComponent(shape); + transform->Position = glm::vec3(0.f, 2.8241f, 0.f); + auto box = AddComponent(shape); + box->Width = 6.963f; + box->Height = 3.104f; + box->Depth = 10.356f; + CommitEntity(shape); } - + CommitEntity(gateTrigger); } } @@ -790,14 +790,338 @@ EntityID GameWorld::CreateJeep(int playerID) return jeep; } -EntityID GameWorld::CreateGarage(glm::vec3 position, glm::quat orientation, int playerID) +void GameWorld::CreateTerrain() { - auto garage = CreateEntity(); - auto transform = AddComponent(garage); - transform->Position = position; + { + auto road_middle = CreateEntity(); + auto transform = AddComponent(road_middle); + auto model = AddComponent(road_middle); + model->ModelFile = "Models/TerrainFiveIstles/Roads/MiddleRoad.obj"; + auto physics = AddComponent(road_middle); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + auto groundshape = CreateEntity(road_middle); + auto transformshape = AddComponent(groundshape); + auto meshShape = AddComponent(groundshape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Roads/MiddleRoad.obj"; + + + CommitEntity(groundshape); + CommitEntity(road_middle); + } + + + + { + /*auto water = CreateEntity(); + auto transform = AddComponent(water); + transform->Position = glm::vec3(0, -35, 0); + transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); + transform->Scale = glm::vec3(5000.f, 10.f, 5000.f); + auto model = AddComponent(water); + model->ModelFile = "Models/Placeholders/PhysicsTest/Cube.obj"; + auto blendmap = AddComponent(water); + blendmap->TextureRed = "Textures/Skybox/Sky34/bottom.jpg"; + blendmap->TextureGreen = "Textures/Skybox/Sky34/bottom.jpg"; + blendmap->TextureBlue = "Textures/Skybox/Sky34/bottom.jpg"; + blendmap->TextureRepeats = 1.f; + + auto physics = AddComponent(water); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + { + + auto groundshape = CreateEntity(water); + auto box = AddComponent(groundshape); + box->Depth = 250.f; + box->Height = 5.f; + box->Width = 250.f; + + + CommitEntity(groundshape); + } + CommitEntity(water);*/ + } + + { + auto ground_middle = CreateEntity(); + auto transform = AddComponent(ground_middle); + auto model = AddComponent(ground_middle); + model->ModelFile = "Models/TerrainFiveIstles/Middle.obj"; + auto blendmap = AddComponent(ground_middle); + blendmap->TextureRed = "Textures/Ground/SoilBeach0087_11_S.jpg"; + blendmap->TextureRedNormal = "Textures/Ground/SoilBeach0087_11_SNM.png"; + blendmap->TextureGreen = "Textures/Ground/Grass0126_2_S.jpg"; + blendmap->TextureGreenNormal = "Textures/Ground/Grass0126_2_SNM.png"; + blendmap->TextureBlue = "Textures/Ground/Cliffs2.png"; + blendmap->TextureBlueNormal = "Textures/Ground/Cliffs2NM.png"; + blendmap->TextureRepeats = 30.f; + + auto physics = AddComponent(ground_middle); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + auto groundshape = CreateEntity(ground_middle); + auto transformshape = AddComponent(groundshape); + auto meshShape = AddComponent(groundshape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Middle.obj"; + + + CommitEntity(groundshape); + CommitEntity(ground_middle); + } + + CreateBase(glm::quat(), 1); + CreateBase(glm::quat(glm::vec3(0, glm::pi(), 0)), 2); + + { + auto tree = CreateEntity(); + auto transform = AddComponent(tree); + transform->Position = glm::vec3(0, -10, 0); + + auto physics = AddComponent(tree); + physics->Mass = 100.f; + physics->MotionType = Components::Physics::MotionTypeEnum::Keyframed; + physics->CollisionEvent = false; + //physics->LinearDamping = 3.f; + physics->CalculateCenterOfMass = true; + + { + auto stem = CreateEntity(tree); + auto transform = AddComponent(stem); + transform->Position = glm::vec3(0, -2.40906f, 0); + auto model = AddComponent(stem); + model->ModelFile = "Models/Tree/Stem/Stem.obj"; + } + + { + auto leafs = CreateEntity(tree); + auto transform = AddComponent(leafs); + transform->Position = glm::vec3(0, -2.45511f, 0); + auto model = AddComponent(leafs); + model->ModelFile = "Models/Tree/Leafs/Leafs.obj"; + model->Transparent = true; + CommitEntity(leafs); + } + + { + auto shape = CreateEntity(tree); + auto transform = AddComponent(shape); + transform->Position = glm::vec3(0.f, 0.f, 0.f); + auto mesh = AddComponent(shape); + mesh->ResourceName = "Models/Tree/Collision/Collision.obj"; + + CommitEntity(shape); + } + + + /*{ + auto shape = CreateEntity(tree); + auto transform = AddComponent(shape); + auto box = AddComponent(shape); + transform->Position = glm::vec3(0.f, 0, 0.f); + box->Width = 0.296f; + box->Height = 2.511f; + box->Depth = 0.296f; + + CommitEntity(shape); + } + + { + auto shape = CreateEntity(tree); + auto transform = AddComponent(shape); + auto sphere = AddComponent(shape); + transform->Position = glm::vec3(0, 2.04506f, 0.f); + sphere->Radius = 1.389f; + + CommitEntity(shape); + }*/ + + CommitEntity(tree); + } +} + +void GameWorld::CreateBase(glm::quat orientation, int playerID) +{ + auto base = CreateEntity(); + auto transform = AddComponent(base); transform->Orientation = orientation; - auto player = AddComponent(garage); - player->ID = playerID; +#pragma region Terrain + { + auto ground_small = CreateEntity(base); + auto transform = AddComponent(ground_small); + auto model = AddComponent(ground_small); + model->ModelFile = "Models/TerrainFiveIstles/Small.obj"; + auto blendmap = AddComponent(ground_small); + blendmap->TextureRed = "Textures/Ground/SoilBeach0087_11_S.jpg"; + blendmap->TextureRedNormal = "Textures/Ground/SoilBeach0087_11_SNM.png"; + blendmap->TextureGreen = "Textures/Ground/Grass0126_2_S.jpg"; + blendmap->TextureGreenNormal = "Textures/Ground/Grass0126_2_SNM.png"; + blendmap->TextureBlue = "Textures/Ground/Cliffs2.png"; + blendmap->TextureBlueNormal = "Textures/Ground/Cliffs2NM.png"; + blendmap->TextureRepeats = 30.f; + + auto physics = AddComponent(ground_small); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + auto groundshape = CreateEntity(ground_small); + auto transformshape = AddComponent(groundshape); + auto meshShape = AddComponent(groundshape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Small.obj"; + CommitEntity(groundshape); + + CommitEntity(ground_small); + } + + { + auto road_small = CreateEntity(base); + auto transform = AddComponent(road_small); + auto model = AddComponent(road_small); + model->ModelFile = "Models/TerrainFiveIstles/Roads/SmallRoad.obj"; + auto physics = AddComponent(road_small); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + auto groundshape = CreateEntity(road_small); + auto transformshape = AddComponent(groundshape); + auto meshShape = AddComponent(groundshape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Roads/SmallRoad.obj"; + + + CommitEntity(groundshape); + CommitEntity(road_small); + } + + { + auto bridge_middle = CreateEntity(base); + auto transform = AddComponent(bridge_middle); + auto model = AddComponent(bridge_middle); + model->ModelFile = "Models/TerrainFiveIstles/Bridges/MiddleBridge.obj"; + auto physics = AddComponent(bridge_middle); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + { + auto shape = CreateEntity(bridge_middle); + auto transformshape = AddComponent(shape); + auto meshShape = AddComponent(shape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Bridges/MiddleBridgeCollision.obj"; + CommitEntity(shape); + } + CommitEntity(bridge_middle); + } + + { + auto terrain_base = CreateEntity(base); + auto transform = AddComponent(terrain_base); + auto model = AddComponent(terrain_base); + model->ModelFile = "Models/TerrainFiveIstles/Base.obj"; + auto blendmap = AddComponent(terrain_base); + blendmap->TextureRed = "Textures/Ground/SoilBeach0087_11_S.jpg"; + blendmap->TextureRedNormal = "Textures/Ground/SoilBeach0087_11_SNM.png"; + blendmap->TextureGreen = "Textures/Ground/Grass0126_2_S.jpg"; + blendmap->TextureGreenNormal = "Textures/Ground/Grass0126_2_SNM.png"; + blendmap->TextureBlue = "Textures/Ground/Cliffs2.png"; + blendmap->TextureBlueNormal = "Textures/Ground/Cliffs2NM.png"; + blendmap->TextureRepeats = 30.f; + + auto physics = AddComponent(terrain_base); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + auto shape = CreateEntity(terrain_base); + auto transformshape = AddComponent(shape); + auto meshShape = AddComponent(shape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Base.obj"; + + + CommitEntity(shape); + CommitEntity(terrain_base); + } + + { + auto ground_base = CreateEntity(base); + auto transform = AddComponent(ground_base); + auto model = AddComponent(ground_base); + model->ModelFile = "Models/TerrainFiveIstles/BaseGround.obj"; + auto physics = AddComponent(ground_base); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + auto shape = CreateEntity(ground_base); + auto transformshape = AddComponent(shape); + auto meshShape = AddComponent(shape); + meshShape->ResourceName = "Models/TerrainFiveIstles/BaseGround.obj"; + + CommitEntity(shape); + CommitEntity(ground_base); + } + + { + auto road_base = CreateEntity(base); + auto transform = AddComponent(road_base); + auto model = AddComponent(road_base); + model->ModelFile = "Models/TerrainFiveIstles/Roads/BaseRoad.obj"; + auto physics = AddComponent(road_base); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + auto groundshape = CreateEntity(road_base); + auto transformshape = AddComponent(groundshape); + auto meshShape = AddComponent(groundshape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Roads/BaseRoad.obj"; + + + CommitEntity(groundshape); + CommitEntity(road_base); + } + + { + auto bridge_base = CreateEntity(base); + auto transform = AddComponent(bridge_base); + auto model = AddComponent(bridge_base); + model->ModelFile = "Models/TerrainFiveIstles/Bridges/BaseBridge.obj"; + auto physics = AddComponent(bridge_base); + physics->Mass = 10; + physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; + physics->CollisionLayer = 1; + + { + auto shape = CreateEntity(bridge_base); + auto transformshape = AddComponent(shape); + auto meshShape = AddComponent(shape); + meshShape->ResourceName = "Models/TerrainFiveIstles/Bridges/BaseBridge.obj"; + CommitEntity(shape); + } + CommitEntity(bridge_base); + } +#pragma endregion Terrain + + CreateGate(base, glm::vec3(273.f, 40.185f, 0.06f), glm::quat(glm::vec3(0, glm::pi() / 2.f, 0))); + + CreateGarage(base, glm::vec3(323.2f, 41.4f, -10.2f), glm::quat(glm::vec3(0, glm::pi() / 2.f, 0)), playerID); +} +EntityID GameWorld::CreateGarage(EntityID parent, glm::vec3 Position, glm::quat orientation, int playerID) +{ + auto garage = CreateEntity(parent); + auto transform = AddComponent(garage); + transform->Position = Position; + transform->Orientation = orientation; + + auto player = CreateEntity(garage); + auto playerComponent = AddComponent(player); + playerComponent->ID = playerID; auto ElevatorBase = CreateEntity(garage); { @@ -910,6 +1234,7 @@ EntityID GameWorld::CreateGarage(glm::vec3 position, glm::quat orientation, int auto transform = AddComponent(spawnPoint); transform->Position.y = 1.f; auto spawnPointComponent = AddComponent(spawnPoint); + spawnPointComponent->Player = player; } CommitEntity(spawnPoint); } @@ -961,264 +1286,3 @@ EntityID GameWorld::CreateGarage(glm::vec3 position, glm::quat orientation, int return garage; } - -void GameWorld::CreateTerrain() -{ - { - auto road_middle = CreateEntity(); - auto transform = AddComponent(road_middle); - auto model = AddComponent(road_middle); - model->ModelFile = "Models/TerrainFiveIstles/Roads/MiddleRoad.obj"; - auto physics = AddComponent(road_middle); - physics->Mass = 10; - physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; - physics->CollisionLayer = 1; - - auto groundshape = CreateEntity(road_middle); - auto transformshape = AddComponent(groundshape); - auto meshShape = AddComponent(groundshape); - meshShape->ResourceName = "Models/TerrainFiveIstles/Roads/MiddleRoad.obj"; - - - CommitEntity(groundshape); - CommitEntity(road_middle); - } - - - - { - /*auto water = CreateEntity(); - auto transform = AddComponent(water); - transform->Position = glm::vec3(0, -35, 0); - transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f)); - transform->Scale = glm::vec3(5000.f, 10.f, 5000.f); - auto model = AddComponent(water); - model->ModelFile = "Models/Placeholders/PhysicsTest/Cube.obj"; - auto blendmap = AddComponent(water); - blendmap->TextureRed = "Textures/Skybox/Sky34/bottom.jpg"; - blendmap->TextureGreen = "Textures/Skybox/Sky34/bottom.jpg"; - blendmap->TextureBlue = "Textures/Skybox/Sky34/bottom.jpg"; - blendmap->TextureRepeats = 1.f; - - auto physics = AddComponent(water); - physics->Mass = 10; - physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; - physics->CollisionLayer = 1; - { - - auto groundshape = CreateEntity(water); - auto box = AddComponent(groundshape); - box->Depth = 250.f; - box->Height = 5.f; - box->Width = 250.f; - - - CommitEntity(groundshape); - } - CommitEntity(water);*/ - } - - { - auto ground_middle = CreateEntity(); - auto transform = AddComponent(ground_middle); - auto model = AddComponent(ground_middle); - model->ModelFile = "Models/TerrainFiveIstles/Middle.obj"; - auto blendmap = AddComponent(ground_middle); - blendmap->TextureRed = "Textures/Ground/SoilBeach0087_11_S.jpg"; - blendmap->TextureRedNormal = "Textures/Ground/SoilBeach0087_11_SNM.png"; - blendmap->TextureGreen = "Textures/Ground/Grass0126_2_S.jpg"; - blendmap->TextureGreenNormal = "Textures/Ground/Grass0126_2_SNM.png"; - blendmap->TextureBlue = "Textures/Ground/Cliffs2.png"; - blendmap->TextureBlueNormal = "Textures/Ground/Cliffs2NM.png"; - blendmap->TextureRepeats = 30.f; - - auto physics = AddComponent(ground_middle); - physics->Mass = 10; - physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; - physics->CollisionLayer = 1; - - auto groundshape = CreateEntity(ground_middle); - auto transformshape = AddComponent(groundshape); - auto meshShape = AddComponent(groundshape); - meshShape->ResourceName = "Models/TerrainFiveIstles/Middle.obj"; - - - CommitEntity(groundshape); - CommitEntity(ground_middle); - } - - CreateBase(glm::quat()); - CreateBase(glm::quat(glm::vec3(0, glm::pi(), 0))); - - { - auto tree = CreateEntity(); - auto transform = AddComponent(tree); - transform->Position = glm::vec3(0, -10, 0); - - auto physics = AddComponent(tree); - physics->Mass = 100.f; - physics->MotionType = Components::Physics::MotionTypeEnum::Keyframed; - physics->CollisionEvent = false; - //physics->LinearDamping = 3.f; - physics->CalculateCenterOfMass = true; - - { - auto stem = CreateEntity(tree); - auto transform = AddComponent(stem); - transform->Position = glm::vec3(0, -2.40906f, 0); - auto model = AddComponent(stem); - model->ModelFile = "Models/Tree/Stem/Stem.obj"; - } - - { - auto leafs = CreateEntity(tree); - auto transform = AddComponent(leafs); - transform->Position = glm::vec3(0, -2.45511f, 0); - auto model = AddComponent(leafs); - model->ModelFile = "Models/Tree/Leafs/Leafs.obj"; - model->Transparent = true; - CommitEntity(leafs); - } - - { - auto shape = CreateEntity(tree); - auto transform = AddComponent(shape); - transform->Position = glm::vec3(0.f, 0.f, 0.f); - auto mesh = AddComponent(shape); - mesh->ResourceName = "Models/Tree/Collision/Collision.obj"; - - CommitEntity(shape); - } - - - /*{ - auto shape = CreateEntity(tree); - auto transform = AddComponent(shape); - auto box = AddComponent(shape); - transform->Position = glm::vec3(0.f, 0, 0.f); - box->Width = 0.296f; - box->Height = 2.511f; - box->Depth = 0.296f; - - CommitEntity(shape); - } - - { - auto shape = CreateEntity(tree); - auto transform = AddComponent(shape); - auto sphere = AddComponent(shape); - transform->Position = glm::vec3(0, 2.04506f, 0.f); - sphere->Radius = 1.389f; - - CommitEntity(shape); - }*/ - - CommitEntity(tree); - } -} - -void GameWorld::CreateBase(glm::quat orientation) -{ - { - auto ground_small = CreateEntity(); - auto transform = AddComponent(ground_small); - transform->Orientation = orientation; - auto model = AddComponent(ground_small); - model->ModelFile = "Models/TerrainFiveIstles/Small.obj"; - auto blendmap = AddComponent(ground_small); - blendmap->TextureRed = "Textures/Ground/SoilBeach0087_11_S.jpg"; - blendmap->TextureRedNormal = "Textures/Ground/SoilBeach0087_11_SNM.png"; - blendmap->TextureGreen = "Textures/Ground/Grass0126_2_S.jpg"; - blendmap->TextureGreenNormal = "Textures/Ground/Grass0126_2_SNM.png"; - blendmap->TextureBlue = "Textures/Ground/Cliffs2.png"; - blendmap->TextureBlueNormal = "Textures/Ground/Cliffs2NM.png"; - blendmap->TextureRepeats = 30.f; - - auto physics = AddComponent(ground_small); - physics->Mass = 10; - physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; - physics->CollisionLayer = 1; - - auto groundshape = CreateEntity(ground_small); - auto transformshape = AddComponent(groundshape); - auto meshShape = AddComponent(groundshape); - meshShape->ResourceName = "Models/TerrainFiveIstles/Small.obj"; - CommitEntity(groundshape); - - CommitEntity(ground_small); - } - - { - auto ground_base = CreateEntity(); - auto transform = AddComponent(ground_base); - transform->Orientation = orientation; - auto model = AddComponent(ground_base); - model->ModelFile = "Models/TerrainFiveIstles/Base.obj"; - auto blendmap = AddComponent(ground_base); - blendmap->TextureRed = "Textures/Ground/SoilBeach0087_11_S.jpg"; - blendmap->TextureRedNormal = "Textures/Ground/SoilBeach0087_11_SNM.png"; - blendmap->TextureGreen = "Textures/Ground/Grass0126_2_S.jpg"; - blendmap->TextureGreenNormal = "Textures/Ground/Grass0126_2_SNM.png"; - blendmap->TextureBlue = "Textures/Ground/Cliffs2.png"; - blendmap->TextureBlueNormal = "Textures/Ground/Cliffs2NM.png"; - blendmap->TextureRepeats = 30.f; - - auto physics = AddComponent(ground_base); - physics->Mass = 10; - physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; - physics->CollisionLayer = 1; - - auto groundshape = CreateEntity(ground_base); - auto transformshape = AddComponent(groundshape); - auto meshShape = AddComponent(groundshape); - meshShape->ResourceName = "Models/TerrainFiveIstles/Base.obj"; - - - CommitEntity(groundshape); - CommitEntity(ground_base); - } - - { - auto road_base = CreateEntity(); - auto transform = AddComponent(road_base); - transform->Orientation = orientation; - auto model = AddComponent(road_base); - model->ModelFile = "Models/TerrainFiveIstles/Roads/BaseRoad.obj"; - auto physics = AddComponent(road_base); - physics->Mass = 10; - physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; - physics->CollisionLayer = 1; - - auto groundshape = CreateEntity(road_base); - auto transformshape = AddComponent(groundshape); - auto meshShape = AddComponent(groundshape); - meshShape->ResourceName = "Models/TerrainFiveIstles/Roads/BaseRoad.obj"; - - - CommitEntity(groundshape); - CommitEntity(road_base); - } - - { - auto road_small = CreateEntity(); - auto transform = AddComponent(road_small); - transform->Orientation = orientation; - auto model = AddComponent(road_small); - model->ModelFile = "Models/TerrainFiveIstles/Roads/SmallRoad.obj"; - auto physics = AddComponent(road_small); - physics->Mass = 10; - physics->MotionType = Components::Physics::MotionTypeEnum::Fixed; - physics->CollisionLayer = 1; - - auto groundshape = CreateEntity(road_small); - auto transformshape = AddComponent(groundshape); - auto meshShape = AddComponent(groundshape); - meshShape->ResourceName = "Models/TerrainFiveIstles/Roads/SmallRoad.obj"; - - - CommitEntity(groundshape); - CommitEntity(road_small); - } - - CreateGarage(glm::vec3(323.2f, 41.4f, -10.2f), glm::quat(glm::vec3(0, glm::pi(), 0)), 1); // glm::vec3(0, glm::pi()/2.f, 0) -} \ No newline at end of file diff --git a/src/GameWorld.h b/src/GameWorld.h index cb5ec94..420a328 100755 --- a/src/GameWorld.h +++ b/src/GameWorld.h @@ -79,13 +79,13 @@ private: void BindGamepadAxis(Gamepad::Axis axis, std::string command, float value); void BindGamepadButton(Gamepad::Button button, std::string command, float value); - void CreateGate(glm::vec3 Position); + void CreateGate(EntityID parent, glm::vec3 position, glm::quat orientation); void AddTankWheelPair(EntityID tankEntity, glm::vec3 position, int axleID, bool steering); EntityID CreateJeep(int playerID); EntityID CreateWall(glm::vec3 pos, glm::quat orientation); - EntityID CreateGarage(glm::vec3 Position, glm::quat orientation, int playerID); + EntityID CreateGarage(EntityID parent, glm::vec3 Position, glm::quat orientation, int playerID); void CreateTerrain(); - void CreateBase(glm::quat orientation); + void CreateBase(glm::quat orientation, int playerID); std::vector m_WallDebrisTemplates; }; diff --git a/src/Renderer.cpp b/src/Renderer.cpp index 480e3dd..958fd1b 100755 --- a/src/Renderer.cpp +++ b/src/Renderer.cpp @@ -276,6 +276,7 @@ void Renderer::DrawFrame(RenderQueuePair &rq) //glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //glClearColor(0.0f, 0.5f, 0.0f, 1.0f); + glEnable(GL_SCISSOR_TEST); glDisable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); glCullFace(GL_BACK); @@ -531,8 +532,9 @@ void Renderer::ForwardRendering(RenderQueue &rq) if (spriteJob) { glm::mat4 modelMatrix = spriteJob->ModelMatrix; - MVP = cameraMatrix * modelMatrix; - + glm::mat4 billboardingMatrix = glm::inverse(glm::toMat4(glm::inverse(m_Camera->Orientation()))); + MVP = cameraMatrix * modelMatrix * billboardingMatrix; + glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "MVP"), 1, GL_FALSE, glm::value_ptr(glm::mat4(MVP))); glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "M"), 1, GL_FALSE, glm::value_ptr(glm::mat4(modelMatrix))); glUniformMatrix4fv(glGetUniformLocation(ShaderProgramHandle, "V"), 1, GL_FALSE, glm::value_ptr(glm::mat4(m_Camera->ViewMatrix()))); diff --git a/src/Systems/DebugSystem.cpp b/src/Systems/DebugSystem.cpp index b8d6d28..ed4c0aa 100644 --- a/src/Systems/DebugSystem.cpp +++ b/src/Systems/DebugSystem.cpp @@ -20,7 +20,7 @@ bool Systems::DebugSystem::OnKeyDown(const Events::KeyDown &event) if (event.KeyCode == GLFW_KEY_ENTER) { Events::PlaySFX e; - e.Emitter = 0; + e.Position = glm::vec3(0); e.Resource = "Sounds/korvring.wav"; EventBroker->Publish(e); diff --git a/src/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index f03709a..f7b34f0 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -284,7 +284,7 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p auto absoluteTransformParent = m_World->GetSystem()->AbsoluteTransform(parent); transformComponent->Position -= absoluteTransformParent.Position; transformComponent->Position = transformComponent->Position * absoluteTransformParent.Orientation; - transformComponent->Orientation = absoluteTransformParent.Orientation * glm::inverse(transformComponent->Orientation); + transformComponent->Orientation = glm::inverse(absoluteTransformParent.Orientation) * transformComponent->Orientation; } } diff --git a/src/Systems/SoundSystem.cpp b/src/Systems/SoundSystem.cpp index 7e0333e..5dd446b 100755 --- a/src/Systems/SoundSystem.cpp +++ b/src/Systems/SoundSystem.cpp @@ -20,7 +20,7 @@ void Systems::SoundSystem::Initialize() { LOG_INFO("FMOD initialized successfully"); } - FMOD_System_Set3DSettings(m_System, 1.f, 1.f, 1.f); //dopplerScale, distancefactor, rolloffscale + FMOD_System_Set3DSettings(m_System, 0.f, 1.f, 1.f); //dopplerScale, distancefactor, rolloffscale } @@ -44,20 +44,31 @@ void Systems::SoundSystem::Update(double dt) std::map::iterator it; for(it = m_DeleteChannels.begin(); it != m_DeleteChannels.end();) { - FMOD_BOOL *isPlaying = false; - FMOD_Channel_IsPlaying(it->second, isPlaying); + FMOD_BOOL isPlaying = false; + FMOD_Channel_IsPlaying(it->second, &isPlaying); if(isPlaying) { it++; } else { - FMOD_Sound_Release(m_DeleteSounds[it->first]); - m_DeleteSounds.erase(it->first); +// FMOD_Sound_Release(m_DeleteSounds[it->first]); +// m_DeleteSounds.erase(it->first); it = m_DeleteChannels.erase(it); } } + //LOG_INFO("Antal emitters i listan: %i", m_Channels.size()); + for (auto channel : m_Channels) + { + FMOD_BOOL isPlaying = false; + FMOD_Channel_IsPlaying(channel.second, &isPlaying); + if(!isPlaying) + { + m_Channels.erase(channel.first); + } + } + } void Systems::SoundSystem::UpdateEntity(double dt, EntityID entity, EntityID parent) @@ -86,7 +97,7 @@ void Systems::SoundSystem::UpdateEntity(double dt, EntityID entity, EntityID par if(emitter) { FMOD_CHANNEL* channel = m_Channels[entity]; - FMOD_SOUND* sound = m_Sounds[entity]; + //FMOD_SOUND* sound = m_Sounds[entity]; auto eTransform = m_World->GetComponent(entity); glm::vec3 tPos = m_TransformSystem->AbsolutePosition(entity); @@ -121,34 +132,28 @@ bool Systems::SoundSystem::OnComponentCreated(const Events::ComponentCreated &ev float pitch = emitter->Pitch; //LoadSound(sound, path, maxDist, minDist); m_Channels.insert(std::make_pair(emitter->Entity, channel)); - m_Sounds.insert(std::make_pair(emitter->Entity, sound)); +// m_Sounds.insert(std::make_pair(emitter->Entity, sound)); } return true; } bool Systems::SoundSystem::PlaySFX(const Events::PlaySFX &event) { - auto emitter = m_World->GetComponent(event.Emitter); - if(!emitter) - { - LOG_ERROR("FMOD: The Entity %i does not have a SoundEmitter-component, but is trying to play a sound", event.Emitter);FMOD_CHANNEL* channel = m_Channels[event.Emitter]; - return false; - } + auto eEntity = m_World->CreateEntity(); + auto eTransform = m_World->AddComponent(eEntity); + eTransform->Position = event.Position; + auto eComponent = m_World->AddComponent(eEntity); + eComponent->MinDistance = event.MinDistance; + eComponent->MaxDistance= event.MaxDistance; + eComponent->Loop = event.Loop; + eComponent->Gain = event.Volume; - emitter->type = Components::SoundEmitter::SoundType::SOUND_3D; + eComponent->type = Components::SoundEmitter::SoundType::SOUND_3D; Sound* sound = ResourceManager->Load("Sound3D", event.Resource); - m_Sounds[event.Emitter] = *sound; - FMOD_Sound_Set3DMinMaxDistance(*sound, emitter->MinDistance, emitter->MaxDistance); + //m_Sounds[eEntity] = *sound; + FMOD_Sound_Set3DMinMaxDistance(*sound, eComponent->MinDistance, eComponent->MaxDistance); - PlaySound(&m_Channels[event.Emitter], m_Sounds[event.Emitter], 1.0, event.Loop); - FMOD_System_Update(m_System); - - FMOD_BOOL isPlaying = false; - FMOD_Channel_IsPlaying(m_Channels[event.Emitter], &isPlaying); - if(!isPlaying) - LOG_ERROR("FMOD: File %s is not playing", event.Resource.c_str()); - else - LOG_INFO("Now playing sound %s", event.Resource.c_str()); + PlaySound(&m_Channels[eEntity], *sound, 1.0, eComponent->Loop); return true; } @@ -160,7 +165,7 @@ bool Systems::SoundSystem::PlayBGM(const Events::PlayBGM &event) m_Channels[emitter] = m_BGMChannel; eComponent->type = Components::SoundEmitter::SoundType::SOUND_3D; Sound* sound = ResourceManager->Load("Sound2D", event.Resource); - m_Sounds[emitter] = *sound; + //m_Sounds[emitter] = *sound; FMOD_System_PlaySound(m_System, FMOD_CHANNEL_FREE, *sound, false, &m_Channels[emitter]); return true; @@ -199,8 +204,8 @@ void Systems::SoundSystem::OnComponentRemoved(EntityID entity, std::string type, if(emitter) { m_DeleteChannels.insert(std::make_pair(entity, m_Channels[entity])); - m_DeleteSounds.insert(std::make_pair(entity, m_Sounds[entity])); + //m_DeleteSounds.insert(std::make_pair(entity, m_Sounds[entity])); m_Channels.erase(entity); - m_Sounds.erase(entity); + //m_Sounds.erase(entity); } } \ No newline at end of file diff --git a/src/Systems/SoundSystem.h b/src/Systems/SoundSystem.h index 3f0b426..66ef6bc 100755 --- a/src/Systems/SoundSystem.h +++ b/src/Systems/SoundSystem.h @@ -52,7 +52,7 @@ private: std::vector m_Listeners; std::map m_Channels; std::map m_DeleteChannels; - std::map m_Sounds; + //std::map m_Sounds; std::map m_DeleteSounds; std::shared_ptr m_TransformSystem; diff --git a/src/Systems/TankSteeringSystem.cpp b/src/Systems/TankSteeringSystem.cpp index 6f37005..edc92c8 100644 --- a/src/Systems/TankSteeringSystem.cpp +++ b/src/Systems/TankSteeringSystem.cpp @@ -90,12 +90,48 @@ void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, Entit auto cloneTransform = m_World->GetComponent(clone); cloneTransform->Position = templateAbsoluteTransform.Position; cloneTransform->Orientation = absoluteTransform.Orientation * cloneTransform->Orientation; + Events::SetVelocity eSetVelocity; eSetVelocity.Entity = clone; eSetVelocity.Velocity = tankTransform->Velocity + absoluteTransform.Orientation * (glm::vec3(0.f, 0.f, -1.f) * barrelSteeringComponent->ShotSpeed); EventBroker->Publish(eSetVelocity); m_TimeSinceLastShot[tankSteeringComponent->Barrel] = 0; + { + Events::CreateExplosion e; + e.LifeTime = 1.5; + e.ParticleScale.push_back(0.6); + e.ParticleScale.push_back(1.8); + e.ParticlesToSpawn = 5; + e.Position = cloneTransform->Position; + e.RelativeUpOrientation = glm::angleAxis(glm::pi() / 2, glm::vec3(1,0,0)); + e.Speed = 1.7; + e.SpreadAngle = glm::pi()/10; + e.spritePath = "Textures/Sprites/Smoke1.png"; + e.Color = glm::vec4(0.6,0.6,0.6,1); + EventBroker->Publish(e); + } + { + Events::CreateExplosion e; + e.LifeTime = 0.2; + e.ParticleScale.push_back(1); + //e.ParticleScale.push_back(2); + e.ParticlesToSpawn = 1; + e.Position = cloneTransform->Position; + e.Speed = 0; + e.SpreadAngle = glm::pi(); + e.spritePath = "Textures/Sprites/MuzzleFlash.png"; + e.Color = glm::vec4(2, 2, 2, 0.2); + EventBroker->Publish(e); + } + + { + Events::PlaySFX e; + e.Resource = "Sounds/SFX/TankShot.mp3"; + e.Position = cloneTransform->Position; + e.Loop = false; + EventBroker->Publish(e); + } auto clonePhysicsComponent = m_World->GetComponent(clone); //1,670m/s @@ -109,6 +145,15 @@ void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, Entit m_TimeSinceLastShot[tankSteeringComponent->Barrel] += dt; } + +// auto shot = m_World->GetComponent(entity); +// if(shot) +// { +// if(inputController->Shoot && m_TimeSinceLastShot[tankSteeringComponent->Barrel] > 0.5) +// { +// +// } +// } } bool Systems::TankSteeringSystem::OnCollision(const Events::Collision &e) @@ -179,6 +224,13 @@ bool Systems::TankSteeringSystem::OnCollision(const Events::Collision &e) e.Color = glm::vec4(2, 2, 2, 0.2); EventBroker->Publish(e); } + { + Events::PlaySFX e; + e.MinDistance = 150.f; + e.Position = shellTransform->Position; + e.Resource = "Sounds/SFX/Explosion.wav"; + EventBroker->Publish(e); + } for (auto &physComponent : *physicsComponents) { @@ -300,11 +352,11 @@ bool Systems::TankSteeringSystem::OnSpawnVehicle(const Events::SpawnVehicle &eve return false; } - for (auto &spawnPointComponent : *spawnPointComponents) + for (auto &component : *spawnPointComponents) { - auto spawnPoint = spawnPointComponent->Entity; - auto spawnPointBaseParent = m_World->GetEntityBaseParent(spawnPoint); - auto playerComponent = m_World->GetComponent(spawnPointBaseParent); + auto spawnPoint = component->Entity; + auto spawnPointComponent = std::dynamic_pointer_cast(component); + auto playerComponent = m_World->GetComponent(spawnPointComponent->Player); if (!playerComponent || playerComponent->ID != event.PlayerID) continue; @@ -359,6 +411,7 @@ EntityID Systems::TankSteeringSystem::CreateTank(int playerID) m_World->AddComponent(tank); auto health = m_World->AddComponent(tank); health->Amount = 100.f; + m_World->AddComponent(tank); { auto shape = m_World->CreateEntity(tank); diff --git a/src/Systems/TankSteeringSystem.h b/src/Systems/TankSteeringSystem.h index 981c650..3f2ee51 100644 --- a/src/Systems/TankSteeringSystem.h +++ b/src/Systems/TankSteeringSystem.h @@ -22,6 +22,7 @@ #include "Components/Health.h" #include "Components/TankShell.h" #include "Components/SphereShape.h" +#include "Components/Listener.h" #include "Events/EnableCollisions.h" #include "Events/DisableCollisions.h" @@ -29,6 +30,9 @@ #include "Components/TriggerExplosion.h" #include "Components/FrameTimer.h" +#include "Events/PlaySFX.h" +#include "Events/PlayBGM.h" + #include "Events/Damage.h" #include "Components/Vehicle.h" #include "Components/Player.h" diff --git a/vs11/Returngeance/Returngeance.vcxproj.filters b/vs11/Returngeance/Returngeance.vcxproj.filters index 1ccb35d..fed4ecf 100755 --- a/vs11/Returngeance/Returngeance.vcxproj.filters +++ b/vs11/Returngeance/Returngeance.vcxproj.filters @@ -1,201 +1,655 @@  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - + + + + Rendering\Systems + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Physics\Systems + + + Base\Systems + + + Base\Systems + + + Audio\Systems + + + Input\Systems + + + Input\Systems + + + + Particle System\Systems + + + + Physics + + + Input + + + Physics\Systems + + + Game\Vehicles\Helicopter\Systems + + + Physics\Systems + + + Base\Systems + + + Game\Systems + + + + Game\Systems + + + Gameplay\Systems + + + Game\Systems + + + Audio + + + + + {ce43847c-9745-46d2-b000-069af4882886} + + + {8974329a-5c12-4b94-86e7-5931555bc129} + + + {aca514ec-84de-423c-a270-ec4399904c5a} + + + {fcbc3469-7049-4c07-9d76-f8f1e872f042} + + + {f6c5fd1d-7180-42b7-b973-a91bfc3ea189} + + + {d08cc18b-b7d8-47a7-91af-7283052e4c97} + + + {1c5d571e-55f4-498b-b64a-2f28ac2cd9b0} + + + {635843f6-c94e-4798-8201-db64d11e2a03} + + + {3bd82924-397c-4c5a-959c-971612269374} + + + {c17ff66a-f9f5-4329-a05d-e7bf8a140dd3} + + + {caa1e07f-fa19-4706-bf59-de74a0290763} + + + {444e18d8-8ab6-413b-b9b0-59a6309e0511} + + + {a2db813b-1d08-4d48-97ac-2faaff29a1cc} + + + {44c41b41-b706-4d88-8d50-abdeb2a828fe} + + + {30c6d948-459c-4fc7-b44d-ecbe5f34203e} + + + {8bcc0a31-3e0d-4342-8d10-ec8edfa03abd} + + + {93ce6550-7614-46b4-a554-0eec26e6fbf6} + + + {0bb544bb-1b0a-487f-88d6-f8ab8a2795f4} + + + {a6ca6194-3aa5-46cc-ac05-206f9a400dec} + + + {9f45f029-46c8-4c0d-b44c-dc9bffd3c6a6} + + + {6e633434-4aed-453d-b2f9-8c51ca7f78db} + + + {85692f3a-5241-4780-a3ca-f4d8a2851392} + + + {ee125b77-b275-4841-abc9-374957a89916} + + + {42ae084f-ade8-402c-87ba-f03f6b846bc8} + + + {a025d51e-594d-4844-983b-f683726bf1bf} + + + {ffab6cc2-2fbf-400f-9398-a6741b6cc95c} + + + {5b992473-73e6-485e-8f13-17e0801fb2ca} + + + {8a78be3a-a3c5-4054-a2f1-1456f3fcbab0} + + + {8ccc0abe-5bdd-4656-ab11-5708a39c71ae} + + + {b2416d05-a49e-4fef-a5c4-cd03d8cc2efd} + + + {b34c0c95-a887-4cf4-af24-cf7c1f459aa8} + + + {cb06b441-90b8-46ed-b347-4190dac7185b} + + + {ddd3c442-7c2f-4690-9308-fcef62deee0b} + + + {3c2ea0e5-41a1-4b11-a891-1d59ead7223c} + + + {3cbe68d9-2446-45ee-8637-ffb805997dcd} + + + {a025d51e-594d-4844-983b-f683726bf1bf} + + + {9702064a-02a2-4b3c-a2ab-47c23a9cf49c} + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + Util + + + Util + + + + + + + Rendering\Components + + + Rendering\Components + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Rendering + + + Physics\Components + + + Physics\Systems + + + Base\Components + + + Base\Components + + + Rendering\Components + + + Base\Systems + + + Base\Systems + + + Audio\Systems + + + Audio\Components + + + Rendering\Systems + + + Input\Systems + + + Input\Systems + + + Input\Components + + + Input\Components + + + Particle System\Components + + + Rendering\Components + + + Rendering\Components + + + + Audio + + + Physics\Components + + + Physics\Components + + + Physics + + + Physics\Components + + + Physics\Components + + + Physics\Components + + + Util + + + Physics\Components + + + Physics\Components + + + Physics\Components + + + Particle System\Systems + + + Particle System\Components + + + GUI + + + Util + + + + Input\Events + + + Input\Events + + + Input + + + Input\Events + + + Input\Events + + + Input\Events + + + Input\Events + + + Input\Events + + + Input\Events + + + Input + + + Rendering + + + GUI + + + Physics + + + Physics\Components + + + Physics\Events + + + Physics\Systems + + + Physics\Components + + + Physics\Components + + + Physics\Events + + + Input\Events + + + Input\Events + + + Input\Events + + + Input\Events + + + Physics\Components + + + Physics\Components + + + Input\Events + + + Game\Vehicles\Helicopter\Components + + + Game\Vehicles\Helicopter\Systems + + + Physics\Events + + + Physics\Events + + + Game\Components + + + Particle System\Events + + + Physics\Events + + + Gameplay\Components + + + Audio\Components + + + Base\Events + + + Audio\Events + + + Audio\Events + + + Audio\Events + + + Physics\Components + + + Physics\Events + + + Physics\Events + + + Physics\Components + + + Physics\Systems + + + Physics\Components + + + Physics\Events + + + Base\Systems + + + Base\Components + + + Base\Components + + + Game\Systems + + + Game\Events + + + Game\Components + + + GUI + + + GUI + + + Rendering\Events + + + GUI + + + GUI + + + GUI + + + Physics\Systems + + + Base\Events + + + Rendering\Components + + + Gameplay\Systems + + + Physics\Events + + + Game\Components + + + Game\Systems + + + Base\Events + + + Physics\Components + + + Physics\Components + + + Game\Systems + + + Game\Components + + + Base\Components + + + Base\Components + + + Rendering\Components + + + GUI + + + Gameplay\Events + + + Game\Events + + + Game\Components + + + Game\Components + - - - - - - - - - - - - - - - - - - - - - - - - + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + + + Shaders + \ No newline at end of file