Tank wheel pair!
This commit is contained in:
@@ -8,8 +8,8 @@ namespace Components
|
|||||||
|
|
||||||
struct WheelPair : Component
|
struct WheelPair : Component
|
||||||
{
|
{
|
||||||
EntityID FakeWheel1;
|
EntityID FakeWheelFront;
|
||||||
EntityID FakeWheel2;
|
EntityID FakeWheelBack;
|
||||||
|
|
||||||
virtual WheelPair* Clone() const override { return new WheelPair(*this); }
|
virtual WheelPair* Clone() const override { return new WheelPair(*this); }
|
||||||
};
|
};
|
||||||
|
|||||||
+8
-9
@@ -18,7 +18,7 @@ public:
|
|||||||
GameFrame(Frame* parent, std::string name)
|
GameFrame(Frame* parent, std::string name)
|
||||||
: Frame(parent, name)
|
: Frame(parent, name)
|
||||||
{
|
{
|
||||||
EVENT_SUBSCRIBE_MEMBER(m_EInputCommand, &GameFrame::OnCommand);
|
EVENT_SUBSCRIBE_MEMBER(m_EKeyUp, &GameFrame::OnKeyUp);
|
||||||
|
|
||||||
m_World = std::make_shared<GameWorld>(EventBroker, ResourceManager);
|
m_World = std::make_shared<GameWorld>(EventBroker, ResourceManager);
|
||||||
auto worldFrame = new WorldFrame(this, "GameWorldFrame", m_World);
|
auto worldFrame = new WorldFrame(this, "GameWorldFrame", m_World);
|
||||||
@@ -40,22 +40,21 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
EventRelay<Frame, Events::InputCommand> m_EInputCommand;
|
EventRelay<Frame, Events::KeyUp> m_EKeyUp;
|
||||||
|
|
||||||
std::shared_ptr<GameWorld> m_World;
|
std::shared_ptr<GameWorld> m_World;
|
||||||
Viewport* vp1;
|
Viewport* vp1;
|
||||||
Viewport* vp2;
|
Viewport* vp2;
|
||||||
Viewport* m_FreeCamViewport;
|
Viewport* m_FreeCamViewport;
|
||||||
|
|
||||||
bool OnCommand(const Events::InputCommand &event)
|
bool OnKeyUp(const Events::KeyUp &event)
|
||||||
{
|
{
|
||||||
if (event.Command == "cam_vertical" || event.Command == "cam_horizontal" || event.Command == "cam_normal" || event.Command == "cam_lock")
|
if (event.KeyCode == GLFW_KEY_1)
|
||||||
{
|
{
|
||||||
m_FreeCamViewport->Show();
|
if (m_FreeCamViewport->Hidden())
|
||||||
}
|
m_FreeCamViewport->Show();
|
||||||
else
|
else
|
||||||
{
|
m_FreeCamViewport->Hide();
|
||||||
m_FreeCamViewport->Hide();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
+121
-290
@@ -56,8 +56,8 @@ void GameWorld::Initialize()
|
|||||||
auto camera = CreateEntity();
|
auto camera = CreateEntity();
|
||||||
{
|
{
|
||||||
auto transform = AddComponent<Components::Transform>(camera);
|
auto transform = AddComponent<Components::Transform>(camera);
|
||||||
transform->Position.z = 20.f;
|
transform->Position.z = 150.f;
|
||||||
transform->Position.y = 20.f;
|
transform->Position.y = 10.f;
|
||||||
//transform->Orientation = glm::quat(glm::vec3(glm::pi<float>() / 8.f, 0.f, 0.f));
|
//transform->Orientation = glm::quat(glm::vec3(glm::pi<float>() / 8.f, 0.f, 0.f));
|
||||||
auto cameraComp = AddComponent<Components::Camera>(camera);
|
auto cameraComp = AddComponent<Components::Camera>(camera);
|
||||||
cameraComp->FarClip = 2000.f;
|
cameraComp->FarClip = 2000.f;
|
||||||
@@ -126,7 +126,7 @@ void GameWorld::Initialize()
|
|||||||
EntityID tank1 = CreateTank(1);
|
EntityID tank1 = CreateTank(1);
|
||||||
{
|
{
|
||||||
auto transform = GetComponent<Components::Transform>(tank1);
|
auto transform = GetComponent<Components::Transform>(tank1);
|
||||||
transform->Position.z = 50.f;
|
transform->Position.z = 145.f;
|
||||||
|
|
||||||
Events::SetViewportCamera e;
|
Events::SetViewportCamera e;
|
||||||
e.CameraEntity = GetProperty<EntityID>(tank1, "Camera");
|
e.CameraEntity = GetProperty<EntityID>(tank1, "Camera");
|
||||||
@@ -480,295 +480,17 @@ EntityID GameWorld::CreateTank(int playerID)
|
|||||||
|
|
||||||
#pragma region Wheels
|
#pragma region Wheels
|
||||||
//Create wheels
|
//Create wheels
|
||||||
float wheelOffset = 0.4f;
|
float wheelOffset = -0.83f;
|
||||||
float springLength = 0.3f;
|
const float suspensionStrength = 15.f;
|
||||||
float suspensionStrength = 15.f;
|
const float springLength = 0.3f;
|
||||||
|
|
||||||
#pragma region Pair R1
|
AddTankWheelPair(tank, glm::vec3(1.68f, wheelOffset, -1.715f), 0, true);
|
||||||
{
|
AddTankWheelPair(tank, glm::vec3(-1.68f, wheelOffset, -1.715f), 0, true);
|
||||||
auto wheel1 = CreateEntity(tank);
|
AddTankWheelPair(tank, glm::vec3(1.68f, wheelOffset, 2.375), 1, false);
|
||||||
{
|
AddTankWheelPair(tank, glm::vec3(-1.68f, wheelOffset, 2.375), 1, false);
|
||||||
auto transform = AddComponent<Components::Transform>(wheel1);
|
|
||||||
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, -2.6f);
|
|
||||||
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
|
||||||
auto model = AddComponent<Components::Model>(wheel1);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel1);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 0;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = true;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel1);
|
|
||||||
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(wheel1);
|
|
||||||
}
|
|
||||||
auto wheel2 = CreateEntity(tank);
|
|
||||||
{
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheel2);
|
|
||||||
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, -0.83f);
|
|
||||||
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
|
||||||
auto model = AddComponent<Components::Model>(wheel2);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel2);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 0;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = false;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel2);
|
|
||||||
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(wheel2);
|
|
||||||
}
|
|
||||||
|
|
||||||
auto wheelPair = CreateEntity(tank);
|
|
||||||
{
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheelPair);
|
|
||||||
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, -1.715f);
|
|
||||||
auto pair = AddComponent<Components::WheelPair>(wheelPair);
|
|
||||||
pair->FakeWheel1 = wheel1;
|
|
||||||
pair->FakeWheel2 = wheel2;
|
|
||||||
auto model = AddComponent<Components::Model>(wheel2);
|
|
||||||
model->ModelFile = "Models/Tank/tankWheel.obj";
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#pragma endregion
|
|
||||||
#pragma region Pair L1
|
|
||||||
{
|
|
||||||
auto wheel = CreateEntity(tank);
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheel);
|
|
||||||
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, -2.6f);
|
|
||||||
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
|
||||||
auto model = AddComponent<Components::Model>(wheel);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 0;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = true;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel);
|
|
||||||
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(wheel);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
auto wheel = CreateEntity(tank);
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheel);
|
|
||||||
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, -0.83f);
|
|
||||||
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
|
||||||
auto model = AddComponent<Components::Model>(wheel);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 0;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = true;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel);
|
|
||||||
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(wheel);
|
|
||||||
}
|
|
||||||
|
|
||||||
#pragma endregion
|
|
||||||
#pragma region Pair R2
|
|
||||||
//Back
|
|
||||||
{
|
|
||||||
auto wheel = CreateEntity(tank);
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheel);
|
|
||||||
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, 1.f);
|
|
||||||
auto model = AddComponent<Components::Model>(wheel);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 1;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = false;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel);
|
|
||||||
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(wheel);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
auto wheel = CreateEntity(tank);
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheel);
|
|
||||||
transform->Position = glm::vec3(1.68f, -0.83f - wheelOffset, 2.95f);
|
|
||||||
auto model = AddComponent<Components::Model>(wheel);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 1;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = false;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel);
|
|
||||||
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(wheel);
|
|
||||||
|
|
||||||
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);
|
|
||||||
}
|
|
||||||
#pragma endregion
|
|
||||||
#pragma region Pair L2
|
|
||||||
{
|
|
||||||
auto wheel = CreateEntity(tank);
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheel);
|
|
||||||
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, 1.f);
|
|
||||||
transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
|
||||||
auto model = AddComponent<Components::Model>(wheel);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 1;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = false;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel);
|
|
||||||
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(wheel);
|
|
||||||
}
|
|
||||||
{
|
|
||||||
auto wheel = CreateEntity(tank);
|
|
||||||
auto transform = AddComponent<Components::Transform>(wheel);
|
|
||||||
transform->Position = glm::vec3(-1.68f, -0.83f - wheelOffset, 2.95f);
|
|
||||||
auto model = AddComponent<Components::Model>(wheel);
|
|
||||||
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
|
||||||
auto Wheel = AddComponent<Components::Wheel>(wheel);
|
|
||||||
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
|
||||||
Wheel->AxleID = 1;
|
|
||||||
Wheel->Mass = 2000;
|
|
||||||
Wheel->Radius = 0.6f;
|
|
||||||
Wheel->Steering = false;
|
|
||||||
Wheel->SuspensionStrength = suspensionStrength;
|
|
||||||
Wheel->Friction = 3.f;
|
|
||||||
Wheel->ConnectedToHandbrake = true;
|
|
||||||
Wheel->TorqueRatio = 0.125f;
|
|
||||||
Wheel->Width = 0.6f;
|
|
||||||
{
|
|
||||||
auto shape = CreateEntity(wheel);
|
|
||||||
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(wheel);
|
|
||||||
#pragma endregion
|
|
||||||
#pragma endregion
|
#pragma endregion
|
||||||
|
|
||||||
|
{
|
||||||
auto entity = CreateEntity(tank);
|
auto entity = CreateEntity(tank);
|
||||||
auto transformComponent = AddComponent<Components::Transform>(entity);
|
auto transformComponent = AddComponent<Components::Transform>(entity);
|
||||||
transformComponent->Position = glm::vec3(-2, -1.7, 2.0);
|
transformComponent->Position = glm::vec3(-2, -1.7, 2.0);
|
||||||
@@ -799,6 +521,115 @@ EntityID GameWorld::CreateTank(int playerID)
|
|||||||
return tank;
|
return tank;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GameWorld::AddTankWheelPair(EntityID tankEntity, glm::vec3 position, int axleID, bool front)
|
||||||
|
{
|
||||||
|
const float separation = 1.77f;
|
||||||
|
const float suspensionStrength = 15.f;
|
||||||
|
const float springLength = 0.3f;
|
||||||
|
|
||||||
|
bool steering = front;
|
||||||
|
|
||||||
|
auto wheelFront = CreateEntity(tankEntity);
|
||||||
|
{
|
||||||
|
auto transform = AddComponent<Components::Transform>(wheelFront);
|
||||||
|
transform->Position = position - glm::vec3(0, 0, separation / 2.f); // glm::vec3(1.68f, -0.83f - wheelOffset, -0.83f);
|
||||||
|
//transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
||||||
|
#ifdef DEBUG
|
||||||
|
auto model = AddComponent<Components::Model>(wheelFront);
|
||||||
|
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
||||||
|
#endif
|
||||||
|
auto Wheel = AddComponent<Components::Wheel>(wheelFront);
|
||||||
|
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
||||||
|
Wheel->AxleID = axleID;
|
||||||
|
Wheel->Mass = 2000;
|
||||||
|
Wheel->Radius = 0.6f;
|
||||||
|
Wheel->Steering = steering;
|
||||||
|
Wheel->SuspensionStrength = suspensionStrength;
|
||||||
|
Wheel->Friction = 3.f;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto wheelBack = CreateEntity(tankEntity);
|
||||||
|
{
|
||||||
|
auto transform = AddComponent<Components::Transform>(wheelBack);
|
||||||
|
transform->Position = position + glm::vec3(0, 0, separation / 2.f); // glm::vec3(1.68f, -0.83f - wheelOffset, -2.6f);
|
||||||
|
//transform->Orientation = glm::angleAxis(glm::pi<float>(), glm::vec3(0, 1, 0));
|
||||||
|
#ifdef DEBUG
|
||||||
|
auto model = AddComponent<Components::Model>(wheelBack);
|
||||||
|
model->ModelFile = "Models/Tank/Fix/WheelPhysics.obj";
|
||||||
|
#endif
|
||||||
|
auto Wheel = AddComponent<Components::Wheel>(wheelBack);
|
||||||
|
Wheel->Hardpoint = transform->Position + glm::vec3(0.f, springLength, 0.f);
|
||||||
|
Wheel->AxleID = axleID;
|
||||||
|
Wheel->Mass = 2000;
|
||||||
|
Wheel->Radius = 0.6f;
|
||||||
|
Wheel->Steering = steering;
|
||||||
|
Wheel->SuspensionStrength = suspensionStrength;
|
||||||
|
Wheel->Friction = 3.f;
|
||||||
|
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);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto wheelPair = CreateEntity(tankEntity);
|
||||||
|
{
|
||||||
|
{
|
||||||
|
auto transform = AddComponent<Components::Transform>(wheelPair);
|
||||||
|
transform->Position = position;
|
||||||
|
//transform->Orientation = glm::quat(glm::vec3(0, glm::pi<float>() / 4.f, 0));
|
||||||
|
|
||||||
|
auto pair = AddComponent<Components::WheelPair>(wheelPair);
|
||||||
|
pair->FakeWheelFront = wheelFront;
|
||||||
|
pair->FakeWheelBack = wheelBack;
|
||||||
|
}
|
||||||
|
|
||||||
|
auto modelEntity = CreateEntity(wheelPair);
|
||||||
|
{
|
||||||
|
auto transform = AddComponent<Components::Transform>(modelEntity);
|
||||||
|
//transform->Position = glm::vec3(0.f, 0.35f, 0.f);
|
||||||
|
if (front)
|
||||||
|
{
|
||||||
|
transform->Position = glm::vec3(0.f, 0.03f, 0.f);
|
||||||
|
transform->Orientation = glm::quat(glm::vec3(0, glm::pi<float>(), 0));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
transform->Position = glm::vec3(0.f, 0.17f, 0.f);
|
||||||
|
transform->Scale = glm::vec3(1.f, 1.2f, 1.2f);
|
||||||
|
}
|
||||||
|
|
||||||
|
auto model = AddComponent<Components::Model>(modelEntity);
|
||||||
|
model->ModelFile = "Models/Tank/tankWheel.obj";
|
||||||
|
}
|
||||||
|
CommitEntity(modelEntity);
|
||||||
|
}
|
||||||
|
CommitEntity(wheelPair);
|
||||||
|
}
|
||||||
|
|
||||||
EntityID GameWorld::CreateJeep(int playerID)
|
EntityID GameWorld::CreateJeep(int playerID)
|
||||||
{
|
{
|
||||||
auto jeep = CreateEntity();
|
auto jeep = CreateEntity();
|
||||||
|
|||||||
+4
-3
@@ -59,9 +59,6 @@ public:
|
|||||||
|
|
||||||
void Initialize();
|
void Initialize();
|
||||||
|
|
||||||
EntityID CreateTank(int playerID);
|
|
||||||
EntityID CreateJeep(int playerID);
|
|
||||||
|
|
||||||
void RegisterSystems() override;
|
void RegisterSystems() override;
|
||||||
void AddSystems() override;
|
void AddSystems() override;
|
||||||
void RegisterComponents() override;
|
void RegisterComponents() override;
|
||||||
@@ -73,6 +70,10 @@ private:
|
|||||||
void BindMouseButton(int button, std::string command, float value);
|
void BindMouseButton(int button, std::string command, float value);
|
||||||
void BindGamepadAxis(Gamepad::Axis axis, std::string command, float value);
|
void BindGamepadAxis(Gamepad::Axis axis, std::string command, float value);
|
||||||
void BindGamepadButton(Gamepad::Button button, std::string command, float value);
|
void BindGamepadButton(Gamepad::Button button, std::string command, float value);
|
||||||
|
|
||||||
|
EntityID CreateTank(int playerID);
|
||||||
|
void AddTankWheelPair(EntityID tankEntity, glm::vec3 position, int axleID, bool steering);
|
||||||
|
EntityID CreateJeep(int playerID);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // GameWorld_h__
|
#endif // GameWorld_h__
|
||||||
|
|||||||
@@ -16,20 +16,18 @@ void Systems::WheelPairSystem::UpdateEntity(double dt, EntityID entity, EntityID
|
|||||||
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
auto transform = m_World->GetComponent<Components::Transform>(entity);
|
||||||
if (!transform)
|
if (!transform)
|
||||||
return;
|
return;
|
||||||
auto transformFake1 = m_World->GetComponent<Components::Transform>(wheelPair->FakeWheel1);
|
auto transformFakeFront = m_World->GetComponent<Components::Transform>(wheelPair->FakeWheelFront);
|
||||||
if (!transformFake1)
|
if (!transformFakeFront)
|
||||||
return;
|
return;
|
||||||
auto transformFake2 = m_World->GetComponent<Components::Transform>(wheelPair->FakeWheel2);
|
auto transformFakeBack = m_World->GetComponent<Components::Transform>(wheelPair->FakeWheelBack);
|
||||||
if (!transformFake2)
|
if (!transformFakeBack)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
glm::vec3 thing = transformFake2->Position - transformFake1->Position;
|
glm::vec3 thing = transformFakeBack->Position - transformFakeFront->Position;
|
||||||
glm::vec3 forward = glm::normalize(glm::vec3(thing.x, 0, thing.z));
|
|
||||||
glm::vec3 up = glm::vec3(0, 1, 0);
|
|
||||||
|
|
||||||
float angle = glm::acos(glm::dot(glm::normalize(thing), forward));
|
float height = ((transformFakeFront->Position + transformFakeBack->Position) / 2.f).y;
|
||||||
float height = (thing / 2.f).y;
|
float angle = std::atan2f(thing.y, thing.z);
|
||||||
|
|
||||||
transform->Position.y = height;
|
transform->Position.y = height;
|
||||||
//transform->Orientation = glm::quat(glm::vec3())
|
transform->Orientation = glm::quat(glm::eulerAngles(transform->Orientation) * glm::vec3(0, 1, 1) + glm::vec3(-angle, 0, 0));
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user