Garage working, ready for vehicle swap implementation
This commit is contained in:
+1
-1
Submodule assets updated: 0f0dc5d839...4a7b5c236d
@@ -0,0 +1,35 @@
|
||||
#ifndef Components_Garage_h__
|
||||
#define Components_Garage_h__
|
||||
|
||||
#include "Component.h"
|
||||
|
||||
namespace Components
|
||||
{
|
||||
struct Garage : Component
|
||||
{
|
||||
Garage()
|
||||
: Open(false)
|
||||
, Elevator(0)
|
||||
, DoorLeft(0)
|
||||
, DoorRight(0)
|
||||
, Light1(0)
|
||||
, Light2(0)
|
||||
, Light3(0)
|
||||
, Light4(0)
|
||||
{ }
|
||||
|
||||
EntityID Elevator;
|
||||
EntityID DoorLeft;
|
||||
EntityID DoorRight;
|
||||
EntityID Light1;
|
||||
EntityID Light2;
|
||||
EntityID Light3;
|
||||
EntityID Light4;
|
||||
|
||||
bool Open;
|
||||
|
||||
virtual Garage* Clone() const override { return new Garage(*this); }
|
||||
};
|
||||
}
|
||||
|
||||
#endif // Components_TankShell_h__
|
||||
@@ -0,0 +1,20 @@
|
||||
#ifndef Components_Move_h__
|
||||
#define Components_Move_h__
|
||||
|
||||
#include "Component.h"
|
||||
|
||||
namespace Components
|
||||
{
|
||||
|
||||
struct Move : Component
|
||||
{
|
||||
float Speed;
|
||||
glm::vec3 StartPosition;
|
||||
glm::vec3 GoalPosition;
|
||||
|
||||
virtual Move* Clone() const override { return new Move(*this); }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // Components_Move_h__
|
||||
@@ -0,0 +1,19 @@
|
||||
#ifndef Components_Rotate_h__
|
||||
#define Components_Rotate_h__
|
||||
|
||||
#include "Component.h"
|
||||
|
||||
namespace Components
|
||||
{
|
||||
|
||||
struct Rotate : Component
|
||||
{
|
||||
float Time;
|
||||
glm::quat StartRotation;
|
||||
glm::quat GoalRotation;
|
||||
virtual Rotate* Clone() const override { return new Rotate(*this); }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // Components_Rotate_h__
|
||||
@@ -8,10 +8,14 @@ namespace Components
|
||||
|
||||
struct TriggerMove : Component
|
||||
{
|
||||
TriggerMove()
|
||||
: Queue(false)
|
||||
, Swap(true)
|
||||
{ }
|
||||
|
||||
EntityID Entity;
|
||||
float Speed;
|
||||
glm::vec3 StartPosition;
|
||||
glm::vec3 GoalPosition;
|
||||
bool Queue;
|
||||
bool Swap;
|
||||
virtual TriggerMove* Clone() const override { return new TriggerMove(*this); }
|
||||
};
|
||||
|
||||
|
||||
@@ -0,0 +1,24 @@
|
||||
#ifndef TriggerRotate_h__
|
||||
#define TriggerRotate_h__
|
||||
|
||||
#include "Component.h"
|
||||
|
||||
namespace Components
|
||||
{
|
||||
|
||||
struct TriggerRotate : Component
|
||||
{
|
||||
TriggerRotate()
|
||||
: Queue(false)
|
||||
, Swap(true)
|
||||
{ }
|
||||
|
||||
EntityID Entity;
|
||||
bool Queue;
|
||||
bool Swap;
|
||||
virtual TriggerRotate* Clone() const override { return new TriggerRotate(*this); }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // TriggerRotate_h__
|
||||
@@ -8,8 +8,8 @@ namespace Events
|
||||
|
||||
struct EnterTrigger : Event
|
||||
{
|
||||
EntityID Entity1;
|
||||
EntityID Entity2;
|
||||
EntityID Trigger;
|
||||
EntityID Entity;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -8,8 +8,8 @@
|
||||
|
||||
struct LeaveTrigger : Event
|
||||
{
|
||||
EntityID Entity1;
|
||||
EntityID Entity2;
|
||||
EntityID Trigger;
|
||||
EntityID Entity;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
+356
-207
@@ -106,7 +106,7 @@ void GameWorld::Initialize()
|
||||
//transform->Scale = glm::vec3(400.0f, 10.0f, 400.0f);
|
||||
transform->Orientation = glm::quat(glm::vec3(0.0f, 0.0f, 0.0f));
|
||||
auto model = AddComponent<Components::Model>(ground);
|
||||
model->ModelFile = "Models/TestScene3/testScene.obj";
|
||||
model->ModelFile = "Models/TestScene3/testScene2.obj";
|
||||
//model->ModelFile = "Models/Placeholders/Terrain/Terrain2.obj";
|
||||
|
||||
auto physics = AddComponent<Components::Physics>(ground);
|
||||
@@ -118,7 +118,7 @@ void GameWorld::Initialize()
|
||||
auto transformshape = AddComponent<Components::Transform>(groundshape);
|
||||
auto meshShape = AddComponent<Components::MeshShape>(groundshape);
|
||||
//meshShape->ResourceName = "Models/Placeholders/Terrain/Terrain2.obj";
|
||||
meshShape->ResourceName = "Models/TestScene3/testScene.obj";
|
||||
meshShape->ResourceName = "Models/TestScene3/testScene2.obj";
|
||||
|
||||
|
||||
CommitEntity(groundshape);
|
||||
@@ -128,7 +128,7 @@ void GameWorld::Initialize()
|
||||
EntityID tank1 = CreateTank(1);
|
||||
{
|
||||
auto transform = GetComponent<Components::Transform>(tank1);
|
||||
transform->Position.z = 125.f;
|
||||
transform->Position.z = -125.f;
|
||||
transform->Position.y = -20.f;
|
||||
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
||||
Events::SetViewportCamera e;
|
||||
@@ -137,7 +137,7 @@ void GameWorld::Initialize()
|
||||
EventBroker->Publish(e);
|
||||
}
|
||||
|
||||
EntityID tank2 = CreateTank(2);
|
||||
/*EntityID tank2 = CreateTank(2);
|
||||
{
|
||||
auto transform = GetComponent<Components::Transform>(tank2);
|
||||
transform->Position.x = 10.f;
|
||||
@@ -147,7 +147,7 @@ void GameWorld::Initialize()
|
||||
e.CameraEntity = GetProperty<EntityID>(tank2, "Camera");
|
||||
e.ViewportFrame = "Viewport2";
|
||||
EventBroker->Publish(e);
|
||||
}
|
||||
}*/
|
||||
|
||||
{
|
||||
auto flag = CreateEntity();
|
||||
@@ -182,6 +182,164 @@ void GameWorld::Initialize()
|
||||
}
|
||||
|
||||
CreateGate(glm::vec3(0, -50, 150));
|
||||
glm::vec3 Position = glm::vec3(-3.93076, -49, 0);
|
||||
{
|
||||
auto garage = CreateEntity();
|
||||
auto transform = AddComponent<Components::Transform>(garage);
|
||||
transform->Position = Position;
|
||||
|
||||
auto ElevatorBase = CreateEntity(garage);
|
||||
{
|
||||
auto transform = AddComponent<Components::Transform>(ElevatorBase);
|
||||
auto model = AddComponent<Components::Model>(ElevatorBase);
|
||||
model->ModelFile = "Models/SpawnRamp/Main/Main.obj";
|
||||
auto physics = AddComponent<Components::Physics>(ElevatorBase);
|
||||
physics->Static = true;
|
||||
physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC;
|
||||
|
||||
{
|
||||
auto mainShape = CreateEntity(ElevatorBase);
|
||||
auto transform = AddComponent<Components::Transform>(mainShape);
|
||||
transform->Position = glm::vec3(0.f, 0, 0.f);
|
||||
auto mesh = AddComponent<Components::MeshShape>(mainShape);
|
||||
mesh->ResourceName = "Models/SpawnRamp/Main/CollisionShape.obj";
|
||||
CommitEntity(mainShape);
|
||||
}
|
||||
{
|
||||
auto StairsShape = CreateEntity(ElevatorBase);
|
||||
auto transform = AddComponent<Components::Transform>(StairsShape);
|
||||
transform->Position = glm::vec3(-7.48639f, 0.4809f, 3.79166f);
|
||||
auto box = AddComponent<Components::BoxShape>(StairsShape);
|
||||
box->Width = 1.211f;
|
||||
box->Height = 1.798f;
|
||||
box->Depth = 3.229f;
|
||||
CommitEntity(StairsShape);
|
||||
}
|
||||
}
|
||||
CommitEntity(ElevatorBase);
|
||||
|
||||
auto leftHatch = CreateEntity(garage);
|
||||
{
|
||||
auto transform = AddComponent<Components::Transform>(leftHatch);
|
||||
transform->Position = glm::vec3(5.83103f, 1.3553f, -2.40268f);
|
||||
auto model = AddComponent<Components::Model>(leftHatch);
|
||||
model->ModelFile = "Models/SpawnRamp/LeftHatch/LeftHatch.obj";
|
||||
auto physics = AddComponent<Components::Physics>(leftHatch);
|
||||
physics->Static = true;
|
||||
physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC;
|
||||
auto rotate = AddComponent<Components::Rotate>(leftHatch);
|
||||
rotate->StartRotation = transform->Orientation;
|
||||
rotate->GoalRotation = transform->Orientation * glm::angleAxis(-glm::radians(110.f),glm::vec3(0, 0, 1));
|
||||
rotate->Time = 5.f;
|
||||
{
|
||||
auto shape = CreateEntity(leftHatch);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
transform->Position = glm::vec3(-2.79331, 0, 0);
|
||||
auto box = AddComponent<Components::BoxShape>(shape);
|
||||
box->Width = 2.317f;
|
||||
box->Height = 0.183f;
|
||||
box->Depth = 6.987f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(leftHatch);
|
||||
}
|
||||
|
||||
auto rightHatch = CreateEntity(garage);
|
||||
{
|
||||
auto transform = AddComponent<Components::Transform>(rightHatch);
|
||||
transform->Position = glm::vec3(-4.52423f, 1.3553f, -2.40268f);
|
||||
auto model = AddComponent<Components::Model>(rightHatch);
|
||||
model->ModelFile = "Models/SpawnRamp/RightHatch/RightHatch.obj";
|
||||
auto physics = AddComponent<Components::Physics>(rightHatch);
|
||||
physics->Static = true;
|
||||
physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC;
|
||||
auto rotate = AddComponent<Components::Rotate>(rightHatch);
|
||||
rotate->StartRotation = transform->Orientation;
|
||||
rotate->GoalRotation = transform->Orientation * glm::angleAxis(glm::radians(110.f),glm::vec3(0, 0, 1));
|
||||
rotate->Time = 5.f;
|
||||
{
|
||||
auto shape = CreateEntity(rightHatch);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
transform->Position = glm::vec3(2.79331, 0, 0);
|
||||
auto box = AddComponent<Components::BoxShape>(shape);
|
||||
box->Width = 2.317f;
|
||||
box->Height = 0.183f;
|
||||
box->Depth = 6.987f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(rightHatch);
|
||||
}
|
||||
|
||||
auto elevator = CreateEntity(garage);
|
||||
{
|
||||
auto transform = AddComponent<Components::Transform>(elevator);
|
||||
transform->Position = glm::vec3(0.69385f, 1.25222f, -2.39938f) + glm::vec3(0, -9.5f, 0);
|
||||
auto model = AddComponent<Components::Model>(elevator);
|
||||
model->ModelFile = "Models/SpawnRamp/Elevator/Elevator.obj";
|
||||
auto physics = AddComponent<Components::Physics>(elevator);
|
||||
physics->Static = true;
|
||||
physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC;
|
||||
auto move = AddComponent<Components::Move>(elevator);
|
||||
move->StartPosition = transform->Position;
|
||||
move->GoalPosition = transform->Position + glm::vec3(0, 9.5f, 0);
|
||||
move->Speed = 1.5f;
|
||||
{
|
||||
auto shape = CreateEntity(elevator);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
transform->Position = glm::vec3(0, 0, 0);
|
||||
auto box = AddComponent<Components::BoxShape>(shape);
|
||||
box->Width = 4.754f;
|
||||
box->Height = 0.141f;
|
||||
box->Depth = 6.86f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
}
|
||||
CommitEntity(elevator);
|
||||
|
||||
auto garageComponent = AddComponent<Components::Garage>(garage);
|
||||
garageComponent->DoorLeft = leftHatch;
|
||||
garageComponent->DoorRight = rightHatch;
|
||||
garageComponent->Elevator = elevator;
|
||||
CommitEntity(garage);
|
||||
|
||||
{
|
||||
auto trigger = CreateEntity(garage);
|
||||
SetProperty(trigger, "Name", "BoundsTrigger");
|
||||
auto transform = AddComponent<Components::Transform>(trigger);
|
||||
transform->Position = glm::vec3(0, 44.87521f, 0);
|
||||
auto triggerComponent = AddComponent<Components::Trigger>(trigger);
|
||||
{
|
||||
auto shape = CreateEntity(trigger);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
transform->Position = glm::vec3(0, 0, 0);
|
||||
auto box = AddComponent<Components::BoxShape>(shape);
|
||||
box->Width = 72.98f;
|
||||
box->Height = 54.53f;
|
||||
box->Depth = 72.98f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(trigger);
|
||||
}
|
||||
|
||||
{
|
||||
auto trigger = CreateEntity(garage);
|
||||
SetProperty(trigger, "Name", "ElevatorShaftTrigger");
|
||||
auto transform = AddComponent<Components::Transform>(trigger);
|
||||
transform->Position = glm::vec3(0.69385f, -6.7997f, 2.39938f);
|
||||
auto triggerComponent = AddComponent<Components::Trigger>(trigger);
|
||||
{
|
||||
auto shape = CreateEntity(trigger);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
transform->Position = glm::vec3(0, 0, 0);
|
||||
auto box = AddComponent<Components::BoxShape>(shape);
|
||||
box->Width = 1.0f;
|
||||
box->Height = 10.f;
|
||||
box->Depth = 1.0f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(trigger);
|
||||
}
|
||||
}
|
||||
|
||||
//for (int i = 0; i < 500; i++)
|
||||
//{
|
||||
@@ -210,6 +368,8 @@ void GameWorld::RegisterComponents()
|
||||
m_ComponentFactory.Register<Components::Template>([]() { return new Components::Template(); });
|
||||
m_ComponentFactory.Register<Components::Player>([]() { return new Components::Player(); });
|
||||
m_ComponentFactory.Register<Components::Flag>([]() { return new Components::Flag(); });
|
||||
m_ComponentFactory.Register<Components::Move>([]() { return new Components::Move(); });
|
||||
m_ComponentFactory.Register<Components::Rotate>([]() { return new Components::Rotate(); });
|
||||
}
|
||||
|
||||
void GameWorld::RegisterSystems()
|
||||
@@ -230,6 +390,7 @@ void GameWorld::RegisterSystems()
|
||||
m_SystemFactory.Register<Systems::PhysicsSystem>([this]() { return new Systems::PhysicsSystem(this, EventBroker, ResourceManager); });
|
||||
m_SystemFactory.Register<Systems::TriggerSystem>([this]() { return new Systems::TriggerSystem(this, EventBroker, ResourceManager); });
|
||||
m_SystemFactory.Register<Systems::FollowSystem>([this]() { return new Systems::FollowSystem(this, EventBroker, ResourceManager); });
|
||||
m_SystemFactory.Register<Systems::GarageSystem>([this]() { return new Systems::GarageSystem(this, EventBroker, ResourceManager); });
|
||||
m_SystemFactory.Register<Systems::RenderSystem>([this]() { return new Systems::RenderSystem(this, EventBroker, ResourceManager); });
|
||||
}
|
||||
|
||||
@@ -251,6 +412,7 @@ void GameWorld::AddSystems()
|
||||
AddSystem<Systems::PhysicsSystem>();
|
||||
AddSystem<Systems::TriggerSystem>();
|
||||
AddSystem<Systems::FollowSystem>();
|
||||
AddSystem<Systems::GarageSystem>();
|
||||
AddSystem<Systems::RenderSystem>();
|
||||
}
|
||||
|
||||
@@ -290,184 +452,6 @@ void GameWorld::BindGamepadButton(Gamepad::Button button, std::string command, f
|
||||
EventBroker->Publish(e);
|
||||
}
|
||||
|
||||
EntityID GameWorld::CreateTank(int playerID)
|
||||
{
|
||||
auto tank = CreateEntity();
|
||||
auto transform = AddComponent<Components::Transform>(tank);
|
||||
transform->Position = glm::vec3(0, 5, 0);
|
||||
//transform->Orientation = glm::angleAxis(0.f, glm::vec3(0, 1, 0));
|
||||
auto physics = AddComponent<Components::Physics>(tank);
|
||||
physics->Mass = 63000 - 16000;
|
||||
physics->Static = false;
|
||||
auto vehicle = AddComponent<Components::Vehicle>(tank);
|
||||
vehicle->MaxTorque = 36000.f;
|
||||
vehicle->MaxSteeringAngle = 90.f;
|
||||
vehicle->MaxSpeedFullSteeringAngle = 4.f;
|
||||
auto player = AddComponent<Components::Player>(tank);
|
||||
player->ID = playerID;
|
||||
auto tankSteering = AddComponent<Components::TankSteering>(tank);
|
||||
AddComponent<Components::Input>(tank);
|
||||
auto health = AddComponent<Components::Health>(tank);
|
||||
health->Amount = 100.f;
|
||||
|
||||
{
|
||||
auto shape = CreateEntity(tank);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
auto meshShape = AddComponent<Components::MeshShape>(shape);
|
||||
meshShape->ResourceName = "Models/Tank/Fix/ChassiCollision.obj";
|
||||
CommitEntity(shape);
|
||||
|
||||
// auto box = AddComponent<Components::Box>(jeep);
|
||||
// box->Width = 1.487f;
|
||||
// box->Height = 0.727f;
|
||||
// box->Depth = 2.594f;
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
auto chassis = CreateEntity(tank);
|
||||
auto transform = AddComponent<Components::Transform>(chassis);
|
||||
transform->Position = glm::vec3(0, 0, 0);
|
||||
auto model = AddComponent<Components::Model>(chassis);
|
||||
model->ModelFile = "Models/Tank/tankBody.obj";
|
||||
}
|
||||
{
|
||||
auto tower = CreateEntity(tank);
|
||||
SetProperty(tower, "Name", "tower");
|
||||
auto transform = AddComponent<Components::Transform>(tower);
|
||||
transform->Position = glm::vec3(0.f, 0.68f, 0.9f);
|
||||
auto model = AddComponent<Components::Model>(tower);
|
||||
model->ModelFile = "Models/Tank/tankTop.obj";
|
||||
auto towerSteering = AddComponent<Components::TowerSteering>(tower);
|
||||
towerSteering->Axis = glm::vec3(0.f, 1.f, 0.f);
|
||||
towerSteering->TurnSpeed = glm::pi<float>() / 4.f;
|
||||
{
|
||||
auto barrel = CreateEntity(tower);
|
||||
auto transform = AddComponent<Components::Transform>(barrel);
|
||||
transform->Position = glm::vec3(-0.012f, 0.3f, -0.95);
|
||||
auto model = AddComponent<Components::Model>(barrel);
|
||||
model->ModelFile = "Models/Tank/tankBarrel.obj";
|
||||
auto barrelSteering = AddComponent<Components::BarrelSteering>(barrel);
|
||||
barrelSteering->Axis = glm::vec3(1.f, 0.f, 0.f);
|
||||
barrelSteering->TurnSpeed = glm::pi<float>() / 4.f;
|
||||
barrelSteering->ShotSpeed = 70.f;
|
||||
barrelSteering->LowerRotationLimit = glm::radians(-10.f);
|
||||
barrelSteering->UpperRotationLimit = glm::radians(40.f);
|
||||
{
|
||||
auto shot = CreateEntity(barrel);
|
||||
auto transform = AddComponent<Components::Transform>(shot);
|
||||
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->Scale = glm::vec3(3.f);
|
||||
AddComponent<Components::Template>(shot);
|
||||
auto physics = AddComponent<Components::Physics>(shot);
|
||||
physics->Mass = 25.f;
|
||||
physics->Static = false;
|
||||
physics->CollisionEvent = true;
|
||||
auto modelComponent = AddComponent<Components::Model>(shot);
|
||||
modelComponent->ModelFile = "Models/Placeholders/rocket/Rocket.obj";
|
||||
auto tankShellComponent = AddComponent<Components::TankShell>(shot);
|
||||
tankShellComponent->Damage = 20.f;
|
||||
tankShellComponent->ExplosionRadius = 30.f;
|
||||
tankShellComponent->ExplosionStrength = 300000.f;
|
||||
{
|
||||
auto shape = CreateEntity(shot);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
auto boxShape = AddComponent<Components::BoxShape>(shape);
|
||||
boxShape->Width = 0.5f;
|
||||
boxShape->Height = 0.5f;
|
||||
boxShape->Depth = 0.5f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(shot);
|
||||
barrelSteering->ShotTemplate = shot;
|
||||
|
||||
|
||||
auto cameraTower = CreateEntity();
|
||||
{
|
||||
auto model = AddComponent<Components::Model>(cameraTower);
|
||||
model->ModelFile = "Models/Placeholders/PhysicsTest/PointLight.obj";
|
||||
auto transform = AddComponent<Components::Transform>(cameraTower);
|
||||
transform->Scale = glm::vec3(10);
|
||||
auto cameraComp = AddComponent<Components::Camera>(cameraTower);
|
||||
cameraComp->FarClip = 2000.f;
|
||||
auto follow = AddComponent<Components::Follow>(cameraTower);
|
||||
follow->Entity = barrel;
|
||||
follow->Distance = 15.f;
|
||||
follow->FollowAxis = glm::vec3(1, 1, 1);
|
||||
}
|
||||
|
||||
SetProperty(tank, "Camera", cameraTower);
|
||||
}
|
||||
CommitEntity(barrel);
|
||||
tankSteering->Barrel = barrel;
|
||||
}
|
||||
CommitEntity(tower);
|
||||
tankSteering->Turret = tower;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
//{
|
||||
// auto lightentity = CreateEntity(tank);
|
||||
// auto transform = AddComponent<Components::Transform>(lightentity);
|
||||
// transform->Position = glm::vec3(0, 0, 0);
|
||||
// auto light = AddComponent<Components::PointLight>(lightentity);
|
||||
// //light->Diffuse = glm::vec3(128.f/255.f, 172.f/255.f, 242.f/255.f);
|
||||
// //light->Specular = glm::vec3(1.f);
|
||||
// /*light->ConstantAttenuation = 0.3f;
|
||||
// light->LinearAttenuation = 0.003f;
|
||||
// light->QuadraticAttenuation = 0.002f;*/
|
||||
//}
|
||||
|
||||
// auto wheelpair = CreateEntity(tank);
|
||||
// SetProperty(wheelpair, "Name", "WheelPair");
|
||||
// AddComponent(wheelpair, "WheelPairThingy");
|
||||
|
||||
#pragma region Wheels
|
||||
//Create wheels
|
||||
float wheelOffset = -0.83f;
|
||||
const float suspensionStrength = 15.f;
|
||||
const float springLength = 0.3f;
|
||||
|
||||
AddTankWheelPair(tank, glm::vec3(1.68f, wheelOffset, -1.715f), 0, true);
|
||||
AddTankWheelPair(tank, glm::vec3(-1.68f, wheelOffset, -1.715f), 0, true);
|
||||
AddTankWheelPair(tank, glm::vec3(1.68f, wheelOffset, 2.375), 1, false);
|
||||
AddTankWheelPair(tank, glm::vec3(-1.68f, wheelOffset, 2.375), 1, false);
|
||||
#pragma endregion
|
||||
|
||||
{
|
||||
auto entity = CreateEntity(tank);
|
||||
auto transformComponent = AddComponent<Components::Transform>(entity);
|
||||
transformComponent->Position = glm::vec3(-2, -1.7, 2.0);
|
||||
transformComponent->Scale = glm::vec3(3, 3, 3);
|
||||
transformComponent->Orientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1, 0, 0));
|
||||
auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity);
|
||||
emitterComponent->SpawnCount = 2;
|
||||
emitterComponent->SpawnFrequency = 0.005;
|
||||
emitterComponent->SpreadAngle = glm::pi<float>();
|
||||
emitterComponent->UseGoalVelocity = false;
|
||||
emitterComponent->LifeTime = 0.5;
|
||||
//emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100);
|
||||
emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05));
|
||||
CommitEntity(entity);
|
||||
|
||||
auto particleEntity = CreateEntity(entity);
|
||||
auto TEMP = AddComponent<Components::Transform>(particleEntity);
|
||||
TEMP->Scale = glm::vec3(0);
|
||||
auto spriteComponent = AddComponent<Components::Sprite>(particleEntity);
|
||||
spriteComponent->SpriteFile = "Models/Textures/Sprites/Dust.png";
|
||||
emitterComponent->ParticleTemplate = particleEntity;
|
||||
|
||||
CommitEntity(particleEntity);
|
||||
}
|
||||
|
||||
CommitEntity(tank);
|
||||
|
||||
return tank;
|
||||
}
|
||||
|
||||
void GameWorld::CreateGate(glm::vec3 Position)
|
||||
{
|
||||
{
|
||||
@@ -540,7 +524,10 @@ void GameWorld::CreateGate(glm::vec3 Position)
|
||||
auto physics = AddComponent<Components::Physics>(gate);
|
||||
physics->Static = true;
|
||||
physics->CollisionLayer = (int)Components::Physics::CollisionLayer::STATIC;
|
||||
|
||||
auto move = AddComponent<Components::Move>(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);
|
||||
{
|
||||
auto mainShape = CreateEntity(gate);
|
||||
auto transform = AddComponent<Components::Transform>(mainShape);
|
||||
@@ -570,9 +557,6 @@ void GameWorld::CreateGate(glm::vec3 Position)
|
||||
auto trigger = AddComponent<Components::Trigger>(gateTrigger);
|
||||
auto triggerMove = AddComponent<Components::TriggerMove>(gateTrigger);
|
||||
triggerMove->Entity = gate;
|
||||
triggerMove->Speed = 5.f;
|
||||
triggerMove->GoalPosition = glm::vec3(0, -50 + 9.02345f, 150);
|
||||
triggerMove->StartPosition = glm::vec3(0, -50, 150);
|
||||
|
||||
|
||||
{
|
||||
@@ -591,6 +575,191 @@ void GameWorld::CreateGate(glm::vec3 Position)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
EntityID GameWorld::CreateTank(int playerID)
|
||||
{
|
||||
auto tank = CreateEntity();
|
||||
auto transform = AddComponent<Components::Transform>(tank);
|
||||
transform->Position = glm::vec3(0, 5, 0);
|
||||
//transform->Orientation = glm::angleAxis(0.f, glm::vec3(0, 1, 0));
|
||||
auto physics = AddComponent<Components::Physics>(tank);
|
||||
physics->Mass = 63000 - 16000;
|
||||
physics->Static = false;
|
||||
auto vehicle = AddComponent<Components::Vehicle>(tank);
|
||||
vehicle->MaxTorque = 36000.f;
|
||||
vehicle->MaxSteeringAngle = 90.f;
|
||||
vehicle->MaxSpeedFullSteeringAngle = 4.f;
|
||||
auto player = AddComponent<Components::Player>(tank);
|
||||
player->ID = playerID;
|
||||
auto tankSteering = AddComponent<Components::TankSteering>(tank);
|
||||
AddComponent<Components::Input>(tank);
|
||||
auto health = AddComponent<Components::Health>(tank);
|
||||
health->Amount = 100.f;
|
||||
|
||||
{
|
||||
auto shape = CreateEntity(tank);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
auto meshShape = AddComponent<Components::MeshShape>(shape);
|
||||
meshShape->ResourceName = "Models/Tank/TankCollisionShape.obj";
|
||||
CommitEntity(shape);
|
||||
}
|
||||
{
|
||||
auto shapeTower = CreateEntity(tank);
|
||||
auto transform = AddComponent<Components::Transform>(shapeTower);
|
||||
transform->Position = glm::vec3(0, 1.10633f, 1.03024f);
|
||||
auto box = AddComponent<Components::BoxShape>(shapeTower);
|
||||
box->Width = 1.298f;
|
||||
box->Height = 0.502f;
|
||||
box->Depth = 1.211f;
|
||||
CommitEntity(shapeTower);
|
||||
}
|
||||
|
||||
{
|
||||
auto chassis = CreateEntity(tank);
|
||||
auto transform = AddComponent<Components::Transform>(chassis);
|
||||
transform->Position = glm::vec3(0, 0, 0);
|
||||
auto model = AddComponent<Components::Model>(chassis);
|
||||
model->ModelFile = "Models/Tank/tankBody.obj";
|
||||
}
|
||||
{
|
||||
auto tower = CreateEntity(tank);
|
||||
SetProperty(tower, "Name", "tower");
|
||||
auto transform = AddComponent<Components::Transform>(tower);
|
||||
transform->Position = glm::vec3(0.f, 0.68f, 0.9f);
|
||||
auto model = AddComponent<Components::Model>(tower);
|
||||
model->ModelFile = "Models/Tank/tankTop.obj";
|
||||
auto towerSteering = AddComponent<Components::TowerSteering>(tower);
|
||||
towerSteering->Axis = glm::vec3(0.f, 1.f, 0.f);
|
||||
towerSteering->TurnSpeed = glm::pi<float>() / 4.f;
|
||||
{
|
||||
auto barrel = CreateEntity(tower);
|
||||
auto transform = AddComponent<Components::Transform>(barrel);
|
||||
transform->Position = glm::vec3(-0.012f, 0.3f, -0.95);
|
||||
auto model = AddComponent<Components::Model>(barrel);
|
||||
model->ModelFile = "Models/Tank/tankBarrel.obj";
|
||||
auto barrelSteering = AddComponent<Components::BarrelSteering>(barrel);
|
||||
barrelSteering->Axis = glm::vec3(1.f, 0.f, 0.f);
|
||||
barrelSteering->TurnSpeed = glm::pi<float>() / 4.f;
|
||||
barrelSteering->ShotSpeed = 70.f;
|
||||
barrelSteering->LowerRotationLimit = glm::radians(-10.f);
|
||||
barrelSteering->UpperRotationLimit = glm::radians(40.f);
|
||||
{
|
||||
auto shot = CreateEntity(barrel);
|
||||
auto transform = AddComponent<Components::Transform>(shot);
|
||||
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->Scale = glm::vec3(3.f);
|
||||
AddComponent<Components::Template>(shot);
|
||||
auto physics = AddComponent<Components::Physics>(shot);
|
||||
physics->Mass = 25.f;
|
||||
physics->Static = false;
|
||||
physics->CollisionEvent = true;
|
||||
auto modelComponent = AddComponent<Components::Model>(shot);
|
||||
modelComponent->ModelFile = "Models/Placeholders/rocket/Rocket.obj";
|
||||
auto tankShellComponent = AddComponent<Components::TankShell>(shot);
|
||||
tankShellComponent->Damage = 20.f;
|
||||
tankShellComponent->ExplosionRadius = 30.f;
|
||||
tankShellComponent->ExplosionStrength = 300000.f;
|
||||
{
|
||||
auto shape = CreateEntity(shot);
|
||||
auto transform = AddComponent<Components::Transform>(shape);
|
||||
auto boxShape = AddComponent<Components::BoxShape>(shape);
|
||||
boxShape->Width = 0.5f;
|
||||
boxShape->Height = 0.5f;
|
||||
boxShape->Depth = 0.5f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(shot);
|
||||
barrelSteering->ShotTemplate = shot;
|
||||
|
||||
|
||||
auto cameraTower = CreateEntity(barrel);
|
||||
{
|
||||
auto transform = AddComponent<Components::Transform>(cameraTower);
|
||||
transform->Position.z = 16.f;
|
||||
transform->Position.y = 4.f;
|
||||
transform->Orientation = glm::quat(glm::vec3(-glm::radians(5.f), 0.f, 0.f));
|
||||
auto cameraComp = AddComponent<Components::Camera>(cameraTower);
|
||||
cameraComp->FarClip = 2000.f;
|
||||
/*auto follow = AddComponent<Components::Follow>(cameraTower);
|
||||
follow->Entity = barrel;
|
||||
follow->Distance = 15.f;
|
||||
follow->FollowAxis = glm::vec3(1, 1, 1);*/
|
||||
}
|
||||
|
||||
SetProperty(tank, "Camera", cameraTower);
|
||||
}
|
||||
CommitEntity(barrel);
|
||||
tankSteering->Barrel = barrel;
|
||||
}
|
||||
CommitEntity(tower);
|
||||
tankSteering->Turret = tower;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
//{
|
||||
// auto lightentity = CreateEntity(tank);
|
||||
// auto transform = AddComponent<Components::Transform>(lightentity);
|
||||
// transform->Position = glm::vec3(0, 0, 0);
|
||||
// auto light = AddComponent<Components::PointLight>(lightentity);
|
||||
// //light->Diffuse = glm::vec3(128.f/255.f, 172.f/255.f, 242.f/255.f);
|
||||
// //light->Specular = glm::vec3(1.f);
|
||||
// /*light->ConstantAttenuation = 0.3f;
|
||||
// light->LinearAttenuation = 0.003f;
|
||||
// light->QuadraticAttenuation = 0.002f;*/
|
||||
//}
|
||||
|
||||
// auto wheelpair = CreateEntity(tank);
|
||||
// SetProperty(wheelpair, "Name", "WheelPair");
|
||||
// AddComponent(wheelpair, "WheelPairThingy");
|
||||
|
||||
#pragma region Wheels
|
||||
//Create wheels
|
||||
float wheelOffset = -0.83f;
|
||||
const float suspensionStrength = 15.f;
|
||||
const float springLength = 0.3f;
|
||||
|
||||
AddTankWheelPair(tank, glm::vec3(1.68f, wheelOffset, -1.715f), 0, true);
|
||||
AddTankWheelPair(tank, glm::vec3(-1.68f, wheelOffset, -1.715f), 0, true);
|
||||
AddTankWheelPair(tank, glm::vec3(1.68f, wheelOffset, 2.375), 1, false);
|
||||
AddTankWheelPair(tank, glm::vec3(-1.68f, wheelOffset, 2.375), 1, false);
|
||||
#pragma endregion
|
||||
|
||||
{
|
||||
auto entity = CreateEntity(tank);
|
||||
auto transformComponent = AddComponent<Components::Transform>(entity);
|
||||
transformComponent->Position = glm::vec3(-2, -1.7, 2.0);
|
||||
transformComponent->Scale = glm::vec3(3, 3, 3);
|
||||
transformComponent->Orientation = glm::angleAxis(glm::pi<float>() / 2, glm::vec3(1, 0, 0));
|
||||
auto emitterComponent = AddComponent<Components::ParticleEmitter>(entity);
|
||||
emitterComponent->SpawnCount = 2;
|
||||
emitterComponent->SpawnFrequency = 0.005;
|
||||
emitterComponent->SpreadAngle = glm::pi<float>();
|
||||
emitterComponent->UseGoalVelocity = false;
|
||||
emitterComponent->LifeTime = 0.5;
|
||||
//emitterComponent->AngularVelocitySpectrum.push_back(glm::pi<float>() / 100);
|
||||
emitterComponent->ScaleSpectrum.push_back(glm::vec3(0.05));
|
||||
CommitEntity(entity);
|
||||
|
||||
auto particleEntity = CreateEntity(entity);
|
||||
auto TEMP = AddComponent<Components::Transform>(particleEntity);
|
||||
TEMP->Scale = glm::vec3(0);
|
||||
auto spriteComponent = AddComponent<Components::Sprite>(particleEntity);
|
||||
spriteComponent->SpriteFile = "Models/Textures/Sprites/Dust.png";
|
||||
emitterComponent->ParticleTemplate = particleEntity;
|
||||
|
||||
CommitEntity(particleEntity);
|
||||
}
|
||||
|
||||
CommitEntity(tank);
|
||||
|
||||
return tank;
|
||||
}
|
||||
|
||||
void GameWorld::AddTankWheelPair(EntityID tankEntity, glm::vec3 position, int axleID, bool front)
|
||||
{
|
||||
const float separation = 1.77f;
|
||||
@@ -619,16 +788,6 @@ void GameWorld::AddTankWheelPair(EntityID tankEntity, glm::vec3 position, int ax
|
||||
Wheel->ConnectedToHandbrake = true;
|
||||
Wheel->TorqueRatio = 0.125f;
|
||||
Wheel->Width = 0.6f;
|
||||
{
|
||||
auto shape = CreateEntity(wheelFront);
|
||||
auto shapetransform = AddComponent<Components::Transform>(shape);
|
||||
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
|
||||
auto boxShape = AddComponent<Components::BoxShape>(shape);
|
||||
boxShape->Width = 0.7f;
|
||||
boxShape->Height = 0.34f;
|
||||
boxShape->Depth = 0.7f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(wheelFront);
|
||||
}
|
||||
|
||||
@@ -652,16 +811,6 @@ void GameWorld::AddTankWheelPair(EntityID tankEntity, glm::vec3 position, int ax
|
||||
Wheel->ConnectedToHandbrake = true;
|
||||
Wheel->TorqueRatio = 0.125f;
|
||||
Wheel->Width = 0.6f;
|
||||
{
|
||||
auto shape = CreateEntity(wheelBack);
|
||||
auto shapetransform = AddComponent<Components::Transform>(shape);
|
||||
shapetransform->Position = glm::vec3(0.f, 0.32f, 0.f) + transform->Position;
|
||||
auto boxShape = AddComponent<Components::BoxShape>(shape);
|
||||
boxShape->Width = 0.7f;
|
||||
boxShape->Height = 0.34f;
|
||||
boxShape->Depth = 0.7f;
|
||||
CommitEntity(shape);
|
||||
}
|
||||
CommitEntity(wheelBack);
|
||||
}
|
||||
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
#include "Systems/DamageSystem.h"
|
||||
#include "Systems/WheelPairSystem.h"
|
||||
#include "Systems/FollowSystem.h"
|
||||
#include "Systems/GarageSystem.h"
|
||||
|
||||
#include "Components/Camera.h"
|
||||
#include "Components/DirectionalLight.h"
|
||||
@@ -51,6 +52,9 @@
|
||||
#include "Components/Flag.h"
|
||||
#include "Components/WheelPair.h"
|
||||
#include "Components/Follow.h"
|
||||
#include "Components/TriggerRotate.h"
|
||||
#include "Components/Move.h"
|
||||
#include "Components/Rotate.h"
|
||||
|
||||
class GameWorld : public World
|
||||
{
|
||||
|
||||
@@ -0,0 +1,104 @@
|
||||
#include "PrecompiledHeader.h"
|
||||
#include "GarageSystem.h"
|
||||
#include "World.h"
|
||||
|
||||
void Systems::GarageSystem::RegisterComponents( ComponentFactory* cf )
|
||||
{
|
||||
cf->Register<Components::Garage>([]() { return new Components::Garage(); });
|
||||
}
|
||||
|
||||
void Systems::GarageSystem::Initialize()
|
||||
{
|
||||
EVENT_SUBSCRIBE_MEMBER(m_EEnterTrigger, &Systems::GarageSystem::OnEnterTrigger);
|
||||
EVENT_SUBSCRIBE_MEMBER(m_ELeaveTrigger, &Systems::GarageSystem::OnLeaveTrigger);
|
||||
}
|
||||
|
||||
void Systems::GarageSystem::Update(double dt)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Systems::GarageSystem::UpdateEntity(double dt, EntityID entity, EntityID parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
bool Systems::GarageSystem::OnEnterTrigger(const Events::EnterTrigger &event)
|
||||
{
|
||||
EntityID garage = m_World->GetEntityParent(event.Trigger);
|
||||
if (garage == 0)
|
||||
return false;
|
||||
auto garageComponent = m_World->GetComponent<Components::Garage>(garage);
|
||||
if (!garageComponent)
|
||||
return false;
|
||||
|
||||
std::string name = m_World->GetProperty<std::string>(event.Trigger, "Name");
|
||||
|
||||
if (name == "BoundsTrigger" || name == "ElevatorShaftTrigger")
|
||||
{
|
||||
ToggleGarage(garageComponent);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
bool Systems::GarageSystem::OnLeaveTrigger(const Events::LeaveTrigger &event)
|
||||
{
|
||||
EntityID garage = m_World->GetEntityParent(event.Trigger);
|
||||
if (garage == 0)
|
||||
return false;
|
||||
auto garageComponent = m_World->GetComponent<Components::Garage>(garage);
|
||||
if (!garageComponent)
|
||||
return false;
|
||||
|
||||
std::string name = m_World->GetProperty<std::string>(event.Trigger, "Name");
|
||||
|
||||
if (name == "BoundsTrigger")
|
||||
{
|
||||
ToggleGarage(garageComponent);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void Systems::GarageSystem::ToggleGarage(Components::Garage* garageComponent)
|
||||
{
|
||||
// Elevator
|
||||
if (garageComponent->Elevator != 0)
|
||||
{
|
||||
auto move = m_World->GetComponent<Components::Move>(garageComponent->Elevator);
|
||||
Events::Move e;
|
||||
e.Entity = garageComponent->Elevator;
|
||||
e.GoalPosition = move->GoalPosition;
|
||||
e.Speed = move->Speed;
|
||||
e.Queue = true;
|
||||
EventBroker->Publish(e);
|
||||
std::swap(move->GoalPosition, move->StartPosition);
|
||||
}
|
||||
|
||||
// Left door
|
||||
if (garageComponent->DoorLeft != 0)
|
||||
{
|
||||
auto rotate = m_World->GetComponent<Components::Rotate>(garageComponent->DoorLeft);
|
||||
Events::Rotate e;
|
||||
e.Entity = garageComponent->DoorLeft;
|
||||
e.GoalRotation = rotate->GoalRotation;
|
||||
e.Time = rotate->Time;
|
||||
e.Queue = true;
|
||||
EventBroker->Publish(e);
|
||||
std::swap(rotate->GoalRotation, rotate->StartRotation);
|
||||
}
|
||||
// Right door
|
||||
if (garageComponent->DoorRight != 0)
|
||||
{
|
||||
auto rotate = m_World->GetComponent<Components::Rotate>(garageComponent->DoorRight);
|
||||
Events::Rotate e;
|
||||
e.Entity = garageComponent->DoorRight;
|
||||
e.GoalRotation = rotate->GoalRotation;
|
||||
e.Time = rotate->Time;
|
||||
e.Queue = true;
|
||||
EventBroker->Publish(e);
|
||||
std::swap(rotate->GoalRotation, rotate->StartRotation);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,42 @@
|
||||
#ifndef GarageSystem_h__
|
||||
#define GarageSystem_h__
|
||||
|
||||
|
||||
#include "System.h"
|
||||
#include "Components/Transform.h"
|
||||
#include "Components/Trigger.h"
|
||||
#include "Components/Garage.h"
|
||||
#include "Events/EnterTrigger.h"
|
||||
#include "Events/LeaveTrigger.h"
|
||||
|
||||
#include "Components/Player.h"
|
||||
#include "Events/Move.h"
|
||||
#include "Events/Rotate.h"
|
||||
#include "Components/Move.h"
|
||||
#include "Components/Rotate.h"
|
||||
|
||||
namespace Systems
|
||||
{
|
||||
class GarageSystem : public System
|
||||
{
|
||||
public:
|
||||
|
||||
GarageSystem(World* world, std::shared_ptr<::EventBroker> eventBroker, std::shared_ptr<::ResourceManager> resourceManager)
|
||||
: System(world, eventBroker, resourceManager) { }
|
||||
|
||||
void Initialize() override;
|
||||
void RegisterComponents(ComponentFactory* cf) override;
|
||||
void Update(double dt) override;
|
||||
void UpdateEntity(double dt, EntityID entity, EntityID parent) override;
|
||||
|
||||
private:
|
||||
EventRelay<GarageSystem, Events::EnterTrigger> m_EEnterTrigger;
|
||||
bool OnEnterTrigger(const Events::EnterTrigger &event);
|
||||
EventRelay<GarageSystem, Events::LeaveTrigger> m_ELeaveTrigger;
|
||||
bool OnLeaveTrigger(const Events::LeaveTrigger &event);
|
||||
|
||||
void ToggleGarage(Components::Garage* garageComponent);
|
||||
};
|
||||
|
||||
}
|
||||
#endif // GarageSystem_h__
|
||||
@@ -282,26 +282,27 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
|
||||
m_Wheels.push_back(entity);
|
||||
}
|
||||
|
||||
EntityID entityParent = m_World->GetEntityBaseParent(entity);
|
||||
EntityID entityParent = m_World->GetEntityParent(entity);
|
||||
|
||||
auto sphereComponent = m_World->GetComponent<Components::SphereShape>(entity);
|
||||
auto boxComponent = m_World->GetComponent<Components::BoxShape>(entity);
|
||||
auto meshShapeComponent = m_World->GetComponent<Components::MeshShape >(entity);
|
||||
|
||||
if(entityParent == entity && (sphereComponent || boxComponent || meshShapeComponent))
|
||||
if(entityParent == 0 && (sphereComponent || boxComponent || meshShapeComponent))
|
||||
{
|
||||
LOG_ERROR("Entity: %i , Only the children can have a shapeComponent", entity);
|
||||
LOG_ERROR("Entity: %i, Only the children can have a shapeComponent", entity);
|
||||
return;
|
||||
}
|
||||
|
||||
auto physicsComponent = m_World->GetComponent<Components::Physics>(entity);
|
||||
if (physicsComponent && m_Shapes[entity].size() > 0)
|
||||
{
|
||||
if(entityParent != entity)
|
||||
if(entityParent != 0 && !physicsComponent->Static)
|
||||
{
|
||||
LOG_ERROR("Entity: %i , Only the baseparent can have a PhysicsComponent", entity);
|
||||
LOG_ERROR("Entity: %i, Only the baseparent can have a dynamic PhysicsComponent", entity);
|
||||
return;
|
||||
}
|
||||
|
||||
hkpShape* shape;
|
||||
if(! physicsComponent->Static) // Not static
|
||||
{
|
||||
@@ -489,7 +490,7 @@ void Systems::PhysicsSystem::OnEntityCommit( EntityID entity )
|
||||
hkpRigidBodyCinfo rigidBodyInfo;
|
||||
{
|
||||
rigidBodyInfo.m_shape = shape;
|
||||
rigidBodyInfo.m_motionType = hkpMotion::MOTION_FIXED;
|
||||
rigidBodyInfo.m_motionType = hkpMotion::MOTION_KEYFRAMED;
|
||||
auto absoluteTransform = m_World->GetSystem<Systems::TransformSystem>()->AbsoluteTransform(entity);
|
||||
hkVector4 position = GLMVEC3_TO_HKVECTOR4(absoluteTransform.Position);
|
||||
hkQuaternion rotation = GLMQUAT_TO_HKQUATERNION(absoluteTransform.Orientation);
|
||||
|
||||
@@ -132,8 +132,8 @@ public:
|
||||
if(m_PhysicsSystem->m_World->ValidEntity(entity1) && m_PhysicsSystem->m_World->ValidEntity(entity2))
|
||||
{
|
||||
Events::EnterTrigger e;
|
||||
e.Entity1 = entity1;
|
||||
e.Entity2 = entity2;
|
||||
e.Trigger = entity1;
|
||||
e.Entity = entity2;
|
||||
m_PhysicsSystem->EventBroker->Publish(e);
|
||||
}
|
||||
}
|
||||
@@ -146,8 +146,8 @@ public:
|
||||
if(m_PhysicsSystem->m_World->ValidEntity(entity1) && m_PhysicsSystem->m_World->ValidEntity(entity2))
|
||||
{
|
||||
Events::LeaveTrigger e;
|
||||
e.Entity1 = entity1;
|
||||
e.Entity2 = entity2;
|
||||
e.Trigger = entity1;
|
||||
e.Entity = entity2;
|
||||
m_PhysicsSystem->EventBroker->Publish(e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@ void Systems::TriggerSystem::RegisterComponents( ComponentFactory* cf )
|
||||
cf->Register<Components::Trigger>([]() { return new Components::Trigger(); });
|
||||
cf->Register<Components::TriggerExplosion>([]() { return new Components::TriggerExplosion(); });
|
||||
cf->Register<Components::TriggerMove>([]() { return new Components::TriggerMove(); });
|
||||
cf->Register<Components::TriggerRotate>([]() { return new Components::TriggerRotate(); });
|
||||
}
|
||||
|
||||
void Systems::TriggerSystem::Initialize()
|
||||
@@ -47,44 +48,31 @@ void Systems::TriggerSystem::OnEntityRemoved( EntityID entity )
|
||||
|
||||
bool Systems::TriggerSystem::OnEnterTrigger( const Events::EnterTrigger &event )
|
||||
{
|
||||
/*auto explosionComponent1 = m_World->GetComponent<Components::TriggerExplosion>(event.Entity1);
|
||||
auto explosionComponent2 = m_World->GetComponent<Components::TriggerExplosion>(event.Entity2);
|
||||
|
||||
if(explosionComponent1)
|
||||
{
|
||||
Explosion(event.Entity2, event.Entity1);
|
||||
}
|
||||
else if (explosionComponent2)
|
||||
{
|
||||
Explosion(event.Entity1, event.Entity2);
|
||||
}*/
|
||||
|
||||
auto flagComponent1 = m_World->GetComponent<Components::Flag>(event.Entity1);
|
||||
auto flagComponent2 = m_World->GetComponent<Components::Flag>(event.Entity2);
|
||||
|
||||
auto flagComponent1 = m_World->GetComponent<Components::Flag>(event.Trigger);
|
||||
auto flagComponent2 = m_World->GetComponent<Components::Flag>(event.Entity);
|
||||
//HACK: SIMON IS DISSING AMERICA
|
||||
if(flagComponent1)
|
||||
{
|
||||
Flag(event.Entity2, event.Entity1);
|
||||
Flag(event.Entity, event.Trigger);
|
||||
}
|
||||
else if (flagComponent2)
|
||||
{
|
||||
Flag(event.Entity1, event.Entity2);
|
||||
Flag(event.Trigger, event.Entity);
|
||||
}
|
||||
|
||||
|
||||
auto triggerComponent1 = m_World->GetComponent<Components::TriggerMove>(event.Entity1);
|
||||
auto triggerComponent2 = m_World->GetComponent<Components::TriggerMove>(event.Entity2);
|
||||
|
||||
auto playerComponent1 = m_World->GetComponent<Components::Player>(event.Entity1);
|
||||
auto playerComponent2 = m_World->GetComponent<Components::Player>(event.Entity2);
|
||||
|
||||
if(triggerComponent1 && playerComponent2)
|
||||
auto triggerMoveComponent = m_World->GetComponent<Components::TriggerMove>(event.Trigger);
|
||||
if (triggerMoveComponent)
|
||||
{
|
||||
Move(event.Entity1);
|
||||
Move(triggerMoveComponent->Entity, triggerMoveComponent->Queue, triggerMoveComponent->Swap);
|
||||
}
|
||||
else if (triggerComponent2 && playerComponent1)
|
||||
|
||||
auto triggerRotateComponent = m_World->GetComponent<Components::TriggerRotate>(event.Trigger);
|
||||
if (triggerRotateComponent)
|
||||
{
|
||||
Move(event.Entity2);
|
||||
Rotate(triggerMoveComponent->Entity, triggerMoveComponent->Queue, triggerMoveComponent->Swap);
|
||||
}
|
||||
|
||||
return true;
|
||||
@@ -93,41 +81,56 @@ bool Systems::TriggerSystem::OnEnterTrigger( const Events::EnterTrigger &event )
|
||||
|
||||
bool Systems::TriggerSystem::OnLeaveTrigger( const Events::LeaveTrigger &event )
|
||||
{
|
||||
auto triggerComponent1 = m_World->GetComponent<Components::TriggerMove>(event.Entity1);
|
||||
auto triggerComponent2 = m_World->GetComponent<Components::TriggerMove>(event.Entity2);
|
||||
|
||||
auto playerComponent1 = m_World->GetComponent<Components::Player>(event.Entity1);
|
||||
auto playerComponent2 = m_World->GetComponent<Components::Player>(event.Entity2);
|
||||
|
||||
if(triggerComponent1 && playerComponent2)
|
||||
auto triggerMoveComponent = m_World->GetComponent<Components::TriggerMove>(event.Trigger);
|
||||
if (triggerMoveComponent)
|
||||
{
|
||||
Move(event.Entity1);
|
||||
Move(triggerMoveComponent->Entity, triggerMoveComponent->Queue, triggerMoveComponent->Swap);
|
||||
}
|
||||
else if (triggerComponent2 && playerComponent1)
|
||||
|
||||
auto triggerRotateComponent = m_World->GetComponent<Components::TriggerRotate>(event.Trigger);
|
||||
if (triggerRotateComponent)
|
||||
{
|
||||
Move(event.Entity2);
|
||||
Rotate(triggerMoveComponent->Entity, triggerMoveComponent->Queue, triggerMoveComponent->Swap);
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Systems::TriggerSystem::Move( EntityID entity )
|
||||
void Systems::TriggerSystem::Rotate(EntityID entity, bool queue, bool swap)
|
||||
{
|
||||
auto trigger = m_World->GetComponent<Components::TriggerMove>(entity);
|
||||
auto transform = m_World->GetComponent<Components::Transform>(trigger->Entity);
|
||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||
auto rotate = m_World->GetComponent<Components::Rotate>(entity);
|
||||
|
||||
Events::Move e;
|
||||
e.Entity = trigger->Entity;
|
||||
e.GoalPosition = trigger->GoalPosition;
|
||||
e.Speed = trigger->Speed;
|
||||
e.Queue = false;
|
||||
Events::Rotate e;
|
||||
e.Entity = entity;
|
||||
e.GoalRotation = rotate->GoalRotation;
|
||||
e.Time = rotate->Time;
|
||||
e.Queue = queue;
|
||||
EventBroker->Publish(e);
|
||||
|
||||
glm::vec3 temp = trigger->GoalPosition;
|
||||
trigger->GoalPosition = trigger->StartPosition;
|
||||
trigger->StartPosition = temp;
|
||||
if (swap)
|
||||
{
|
||||
std::swap(rotate->GoalRotation, rotate->StartRotation);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
void Systems::TriggerSystem::Move(EntityID entity, bool queue, bool swap)
|
||||
{
|
||||
auto move = m_World->GetComponent<Components::Move>(entity);
|
||||
Events::Move e;
|
||||
e.Entity = entity;
|
||||
e.GoalPosition = move->GoalPosition;
|
||||
e.Speed = move->Speed;
|
||||
e.Queue = queue;
|
||||
EventBroker->Publish(e);
|
||||
|
||||
if (swap)
|
||||
{
|
||||
std::swap(move->GoalPosition, move->StartPosition);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -17,6 +17,9 @@
|
||||
#include "Events/LeaveTrigger.h"
|
||||
#include "Components/Flag.h"
|
||||
#include "Components/TriggerMove.h"
|
||||
#include "Components/TriggerRotate.h"
|
||||
#include "Components/Move.h"
|
||||
#include "Components/Rotate.h"
|
||||
#include "Components/Player.h"
|
||||
#include "Events/Move.h"
|
||||
#include "Events/Rotate.h"
|
||||
@@ -46,7 +49,8 @@ namespace Systems
|
||||
private:
|
||||
void Flag(EntityID entity, EntityID phantomEntity);
|
||||
void Explosion(EntityID entity, EntityID phantomEntity);
|
||||
void Move(EntityID entity);
|
||||
void Move(EntityID entity, bool queue, bool swap);
|
||||
void Rotate(EntityID entity, bool queue, bool swap);
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@@ -113,6 +113,7 @@
|
||||
<ClCompile Include="..\..\src\Systems\DebugSystem.cpp" />
|
||||
<ClCompile Include="..\..\src\Systems\FollowSystem.cpp" />
|
||||
<ClCompile Include="..\..\src\Systems\FreeSteeringSystem.cpp" />
|
||||
<ClCompile Include="..\..\src\Systems\GarageSystem.cpp" />
|
||||
<ClCompile Include="..\..\src\Systems\HelicopterSteeringSystem.cpp" />
|
||||
<ClCompile Include="..\..\src\Systems\InputSystem.cpp" />
|
||||
<ClCompile Include="..\..\src\Systems\ParticleSystem.cpp" />
|
||||
@@ -138,6 +139,9 @@
|
||||
<ClInclude Include="..\..\src\Components\Flag.h" />
|
||||
<ClInclude Include="..\..\src\Components\Follow.h" />
|
||||
<ClInclude Include="..\..\src\Components\FrameTimer.h" />
|
||||
<ClInclude Include="..\..\src\Components\Garage.h" />
|
||||
<ClInclude Include="..\..\src\Components\Move.h" />
|
||||
<ClInclude Include="..\..\src\Components\Rotate.h" />
|
||||
<ClInclude Include="..\..\src\Components\TriggerMove.h" />
|
||||
<ClInclude Include="..\..\src\Components\Timer.h" />
|
||||
<ClInclude Include="..\..\src\Components\TriggerExplosion.h" />
|
||||
@@ -163,6 +167,7 @@
|
||||
<ClInclude Include="..\..\src\Components\TowerSteering.h" />
|
||||
<ClInclude Include="..\..\src\Components\Transform.h" />
|
||||
<ClInclude Include="..\..\src\Components\Trigger.h" />
|
||||
<ClInclude Include="..\..\src\Components\TriggerRotate.h" />
|
||||
<ClInclude Include="..\..\src\Components\Vehicle.h" />
|
||||
<ClInclude Include="..\..\src\Components\Viewport.h" />
|
||||
<ClInclude Include="..\..\src\Components\Wheel.h" />
|
||||
@@ -224,6 +229,7 @@
|
||||
<ClInclude Include="..\..\src\Systems\DebugSystem.h" />
|
||||
<ClInclude Include="..\..\src\Systems\FollowSystem.h" />
|
||||
<ClInclude Include="..\..\src\Systems\FreeSteeringSystem.h" />
|
||||
<ClInclude Include="..\..\src\Systems\GarageSystem.h" />
|
||||
<ClInclude Include="..\..\src\Systems\HelicopterSteeringSystem.h" />
|
||||
<ClInclude Include="..\..\src\Systems\InputSystem.h" />
|
||||
<ClInclude Include="..\..\src\Systems\ParticleSystem.h" />
|
||||
|
||||
@@ -79,6 +79,9 @@
|
||||
<ClCompile Include="..\..\src\Systems\FollowSystem.cpp">
|
||||
<Filter>Game\Systems</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\src\Systems\GarageSystem.cpp">
|
||||
<Filter>Game\Systems</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="Util">
|
||||
@@ -494,7 +497,6 @@
|
||||
<ClInclude Include="..\..\src\Events\LeaveTrigger.h">
|
||||
<Filter>Physics\Events</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Components\TriggerMove.h" />
|
||||
<ClInclude Include="..\..\src\Components\Follow.h">
|
||||
<Filter>Game\Components</Filter>
|
||||
</ClInclude>
|
||||
@@ -504,6 +506,24 @@
|
||||
<ClInclude Include="..\..\src\Events\Rotate.h">
|
||||
<Filter>Base\Events</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Components\TriggerMove.h">
|
||||
<Filter>Physics\Components</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Components\TriggerRotate.h">
|
||||
<Filter>Physics\Components</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Systems\GarageSystem.h">
|
||||
<Filter>Game\Systems</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Components\Garage.h">
|
||||
<Filter>Game\Components</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Components\Move.h">
|
||||
<Filter>Base\Components</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\src\Components\Rotate.h">
|
||||
<Filter>Base\Components</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="..\..\src\Shaders\Fragment2.glsl">
|
||||
|
||||
Reference in New Issue
Block a user