From ac855f554b3f569d65b8053b823f3546e8e5fb7c Mon Sep 17 00:00:00 2001 From: ViktorLjung Date: Wed, 4 Jun 2014 00:45:43 +0200 Subject: [PATCH 1/5] Fixed local physics orientation --- assets | 2 +- src/GameWorld.cpp | 11 ++++++----- src/Systems/PhysicsSystem.cpp | 30 ++++++++++++++++++++++++++---- src/Systems/TransformSystem.cpp | 3 ++- 4 files changed, 35 insertions(+), 11 deletions(-) diff --git a/assets b/assets index 75977fd..588da9c 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 75977fd865557478a72053a93f08f10851838730 +Subproject commit 588da9ca0d0e6a3dd08f4373e03468f79082b359 diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index 6fe9f89..ed130c7 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -91,7 +91,7 @@ void GameWorld::Initialize() EventBroker->Publish(e); } - //CreateTerrain(); + CreateTerrain(); #pragma region Wall_Debris_Template @@ -301,8 +301,7 @@ void GameWorld::Initialize() EventBroker->Publish(e); }*/ - CreateGarage(glm::vec3(323.2f, 41.4f, -10.2f), glm::quat(), 1); // glm::vec3(0, glm::pi()/2.f, 0) - CreateGarage(glm::vec3(-323.2f, 41.4f, -10.2f), glm::quat(), 2); // glm::vec3(0, -glm::pi()/2.f, 0) + { auto flag = CreateEntity(); @@ -866,7 +865,7 @@ EntityID GameWorld::CreateGarage(glm::vec3 position, glm::quat orientation, int physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC; auto rotate = AddComponent(rightHatch); rotate->StartRotation = transform->Orientation; - rotate->GoalRotation = transform->Orientation * glm::angleAxis(glm::radians(110.f), glm::vec3(0, 0, 1)); + rotate->GoalRotation = transform->Orientation * glm::angleAxis(glm::radians(110.f), glm::vec3(0, 0, 1)); rotate->Time = 5.f; { auto shape = CreateEntity(rightHatch); @@ -1048,7 +1047,7 @@ void GameWorld::CreateTerrain() } CreateBase(glm::quat()); - CreateBase(glm::quat(glm::vec3(0, glm::pi()/2.f, 0))); + CreateBase(glm::quat(glm::vec3(0, glm::pi(), 0))); { auto tree = CreateEntity(); @@ -1219,4 +1218,6 @@ void GameWorld::CreateBase(glm::quat orientation) 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/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index 465e498..1e8e2dd 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -180,6 +180,12 @@ void Systems::PhysicsSystem::Update(double dt) rotation = GLMQUAT_TO_HKQUATERNION(transformComponent->Orientation); velocity = GLMVEC3_TO_HKVECTOR4(transformComponent->Velocity); } + + /*auto absoluteTransform = m_World->GetSystem()->AbsoluteTransform(entity); + position = GLMVEC3_TO_HKVECTOR4(absoluteTransform.Position); + rotation = GLMQUAT_TO_HKQUATERNION(absoluteTransform.Orientation); + velocity = GLMVEC3_TO_HKVECTOR4(absoluteTransform.Velocity);*/ + m_PhysicsWorld->markForWrite(); m_RigidBodies[entity]->setPositionAndRotation(position, rotation); @@ -268,17 +274,33 @@ void Systems::PhysicsSystem::UpdateEntity(double dt, EntityID entity, EntityID p else if(m_RigidBodies.find(entity) != m_RigidBodies.end()) { auto transformComponentParent = m_World->GetComponent(parent); + + /* if(transformComponentParent) + { + auto absoluteTransformParent = m_World->GetSystem()->AbsoluteTransform(parent); + transformComponent->Position = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getPosition()); + transformComponent->Orientation = glm::inverse(HKQUATERNION_TO_GLMQUAT(m_RigidBodies[entity]->getRotation())) * absoluteTransformParent.Orientation; + transformComponent->Velocity = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getLinearVelocity()); + } + else + { + auto transformComponentParent = m_World->GetComponent(parent); + transformComponent->Position = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getPosition()); + transformComponent->Orientation = HKQUATERNION_TO_GLMQUAT(m_RigidBodies[entity]->getRotation()); + transformComponent->Velocity = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getLinearVelocity()); + }*/ + transformComponent->Position = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getPosition()); transformComponent->Orientation = HKQUATERNION_TO_GLMQUAT(m_RigidBodies[entity]->getRotation()); transformComponent->Velocity = HKVECTOR4_TO_GLMVEC3(m_RigidBodies[entity]->getLinearVelocity()); - // TODO: No support for Scale, MIGHT be possible // HACK: WTF IS THIS? if (transformComponentParent) { - transformComponent->Position -= transformComponentParent->Position; - transformComponent->Position = transformComponent->Position * transformComponentParent->Orientation; - transformComponent->Orientation = transformComponent->Orientation * glm::inverse(transformComponentParent->Orientation); + 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); } } diff --git a/src/Systems/TransformSystem.cpp b/src/Systems/TransformSystem.cpp index 5823d12..7265b7a 100755 --- a/src/Systems/TransformSystem.cpp +++ b/src/Systems/TransformSystem.cpp @@ -24,7 +24,7 @@ void Systems::TransformSystem::UpdateEntity( double dt, EntityID entity, EntityI if(m_MoveItems.find(entity) != m_MoveItems.end()) { auto transform = m_World->GetComponent(entity); - + glm::vec3 direction = glm::normalize(m_MoveItems[entity].GoalPosition - transform->Position); glm::vec3 movement = direction * m_MoveItems[entity].Speed * (float)dt; @@ -54,6 +54,7 @@ void Systems::TransformSystem::UpdateEntity( double dt, EntityID entity, EntityI if(m_RotationItems.find(entity) != m_RotationItems.end()) { auto transform = m_World->GetComponent(entity); + auto absolutetransform = AbsoluteTransform(entity); float percentage = dt/m_RotationItems[entity].Time; m_RotationItems[entity].Time -= dt; From 397188b8557bb344be615e8a37856bf96405318d Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Wed, 4 Jun 2014 00:46:03 +0200 Subject: [PATCH 2/5] Fixed frame scissor test --- src/GUI/Frame.h | 4 ++++ src/Renderer.cpp | 1 + 2 files changed, 5 insertions(+) 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/Renderer.cpp b/src/Renderer.cpp index 480e3dd..381fde0 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); From e11f656b3d9b781e20276ba6f80aaa2f15512f0e Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Wed, 4 Jun 2014 04:18:44 +0200 Subject: [PATCH 3/5] Fixed physics relative orientations! --- assets | 2 +- src/Components/SpawnPoint.h | 2 + src/GameWorld.cpp | 555 +++++++++++++++-------------- src/GameWorld.h | 4 +- src/Systems/PhysicsSystem.cpp | 2 +- src/Systems/TankSteeringSystem.cpp | 8 +- 6 files changed, 298 insertions(+), 275 deletions(-) diff --git a/assets b/assets index 588da9c..cc30e5f 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 588da9ca0d0e6a3dd08f4373e03468f79082b359 +Subproject commit cc30e5fb5c32068ef973a15d0142899c0d3b9cf4 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/GameWorld.cpp b/src/GameWorld.cpp index ed130c7..a7b15bd 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -789,14 +789,295 @@ 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; + + { + 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 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); + } + + 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); { @@ -909,6 +1190,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); } @@ -960,264 +1242,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 66dde65..20b3e98 100755 --- a/src/GameWorld.h +++ b/src/GameWorld.h @@ -82,9 +82,9 @@ private: 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/Systems/PhysicsSystem.cpp b/src/Systems/PhysicsSystem.cpp index 1e8e2dd..3db178b 100644 --- a/src/Systems/PhysicsSystem.cpp +++ b/src/Systems/PhysicsSystem.cpp @@ -300,7 +300,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/TankSteeringSystem.cpp b/src/Systems/TankSteeringSystem.cpp index e140f49..4bd4c91 100644 --- a/src/Systems/TankSteeringSystem.cpp +++ b/src/Systems/TankSteeringSystem.cpp @@ -300,11 +300,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; From 7f017bfaed19c9510a42c53ccdb79450ef4ee76e Mon Sep 17 00:00:00 2001 From: Stiffly Date: Wed, 4 Jun 2014 04:40:16 +0200 Subject: [PATCH 4/5] Tanks now have listeners. --- assets | 2 +- src/Systems/TankSteeringSystem.cpp | 21 +++++++++++---------- src/Systems/TankSteeringSystem.h | 1 + 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/assets b/assets index 78ba667..a6e3f12 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit 78ba667b37a553c8387bc2717032c284dbd14aa9 +Subproject commit a6e3f120fd90e4c2c3983cf0098bb9c3ebdc4b39 diff --git a/src/Systems/TankSteeringSystem.cpp b/src/Systems/TankSteeringSystem.cpp index 88d05a3..312eafc 100644 --- a/src/Systems/TankSteeringSystem.cpp +++ b/src/Systems/TankSteeringSystem.cpp @@ -126,11 +126,11 @@ void Systems::TankSteeringSystem::UpdateEntity(double dt, EntityID entity, Entit } { -// Events::PlaySFX e; -// e.Resource = "Sounds/SFX/TankShot.mp3"; -// e.Position = absoluteTransform.Position; -// e.Loop = false; -// 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); @@ -225,11 +225,11 @@ bool Systems::TankSteeringSystem::OnCollision(const Events::Collision &e) EventBroker->Publish(e); } { -// Events::PlaySFX e; -// e.MinDistance = 150.f; -// e.Position = shellTransform->Position; -// e.Resource = "Sounds/SFX/Explosion.wav"; -// 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) @@ -399,6 +399,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 7035825..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" From 3c17ab603772149c997ad03ddf498513fe003f2d Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Wed, 4 Jun 2014 05:12:06 +0200 Subject: [PATCH 5/5] Bridges --- assets | 2 +- src/GameWorld.cpp | 40 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 41 insertions(+), 1 deletion(-) diff --git a/assets b/assets index a6e3f12..637f866 160000 --- a/assets +++ b/assets @@ -1 +1 @@ -Subproject commit a6e3f120fd90e4c2c3983cf0098bb9c3ebdc4b39 +Subproject commit 637f866e2d220a1c063f7de2d9f64863643d686f diff --git a/src/GameWorld.cpp b/src/GameWorld.cpp index a7b15bd..4f3d9fd 100755 --- a/src/GameWorld.cpp +++ b/src/GameWorld.cpp @@ -998,6 +998,26 @@ void GameWorld::CreateBase(glm::quat orientation, int playerID) 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/MiddleBridge.obj"; + CommitEntity(shape); + } + CommitEntity(bridge_middle); + } + { auto terrain_base = CreateEntity(base); auto transform = AddComponent(terrain_base); @@ -1066,6 +1086,26 @@ void GameWorld::CreateBase(glm::quat orientation, int playerID) 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); + } + 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)