95 lines
4.0 KiB
C++
95 lines
4.0 KiB
C++
#include "PlayerSystem.h"
|
|
|
|
void PlayerSystem::UpdateComponent(World * world, ComponentWrapper & player, double dt)
|
|
{
|
|
player["Velocity"] = glm::vec3(0.f, 0.f, 0.f);
|
|
if ((bool&)player["Forward"] == true) {
|
|
((glm::vec3&)player["Velocity"]).z = m_Speed * float(dt) * -1;
|
|
|
|
}
|
|
if ((bool&)player["Left"] == true) {
|
|
((glm::vec3&)player["Velocity"]).x = m_Speed * float(dt) * -1;
|
|
}
|
|
if ((bool&)player["Back"] == true) {
|
|
((glm::vec3&)player["Velocity"]).z = m_Speed * float(dt);
|
|
}
|
|
if ((bool&)player["Right"] == true) {
|
|
((glm::vec3&)player["Velocity"]).x = m_Speed * float(dt);
|
|
}
|
|
|
|
if ((glm::vec3)player["Velocity"] != glm::vec3(0.f)) {
|
|
ComponentWrapper& transform = world->GetComponent(player.EntityID, "Transform");
|
|
(glm::vec3&)transform["Position"] += (glm::vec3)player["Velocity"];
|
|
}
|
|
|
|
//do shootEvent: if left mouse was released, and ammo/weaponcooldown/playeralive/shootingcooldown are ok
|
|
if (leftMouseWasReleased) {
|
|
leftMouseWasReleased = false;
|
|
//get the health component linked to the playerId
|
|
double currentHealth = (double)world->GetComponent(player.EntityID, "Health")["Health"];
|
|
double currentAmmo = (double)0;
|
|
double currentCoolDownTimer = (double)0;
|
|
|
|
if (fabs((double)player["EquippedItem"] - (double)1) < (double) 0.0001f) {
|
|
ComponentWrapper& currentItem = world->GetComponent(player.EntityID, "PrimaryItem");
|
|
currentAmmo = (double)currentItem["Ammo"];
|
|
currentCoolDownTimer = (double)currentItem["CoolDownTimer"];
|
|
}
|
|
if (fabs((double)player["EquippedItem"] - (double)2) < (double) 0.0001f) {
|
|
ComponentWrapper& currentItem = world->GetComponent(player.EntityID, "SecondaryItem");
|
|
currentAmmo = (double)currentItem["Ammo"];
|
|
currentCoolDownTimer = (double)currentItem["CoolDownTimer"];
|
|
}
|
|
|
|
if (currentHealth > (double)0.0f && currentAmmo > (double)0.0f && currentCoolDownTimer < (double)0.001f) {
|
|
//decrease ammo count
|
|
//TODO: temp, set the cooldowntimer - probably done in some other system (itemSystem?) later
|
|
if (fabs((double)player["EquippedItem"] - (double)1) < (double) 0.0001f) {
|
|
ComponentWrapper& currentItem = world->GetComponent(player.EntityID, "PrimaryItem");
|
|
int currentAmmoInt = (int)((double)currentItem["Ammo"]);
|
|
currentItem["Ammo"] = (double)(currentAmmoInt - 1);
|
|
currentItem["CoolDownTimer"] = (double)2;
|
|
}
|
|
if (fabs((double)player["EquippedItem"] - (double)2) < (double) 0.0001f) {
|
|
ComponentWrapper& currentItem = world->GetComponent(player.EntityID, "SecondaryItem");
|
|
int currentAmmoInt = (int)((double)currentItem["Ammo"]);
|
|
currentItem["Ammo"] = (double)(currentAmmoInt - 1);
|
|
currentItem["CoolDownTimer"] = (double)2;
|
|
}
|
|
//create and publish the shoot event
|
|
Events::Shoot eShoot;
|
|
eShoot.currentAimingPoint = aimingCoordinates;
|
|
eShoot.weaponType = (int)player["EquippedItem"];
|
|
m_EventBroker->Publish(eShoot);
|
|
}
|
|
}
|
|
}
|
|
|
|
bool PlayerSystem::OnTouch(const Events::TriggerTouch &event)
|
|
{
|
|
LOG_INFO("Player entity %i touched widget (entity %i).", event.Entity, event.Trigger);
|
|
return false;
|
|
}
|
|
|
|
bool PlayerSystem::OnEnter(const Events::TriggerEnter &event)
|
|
{
|
|
LOG_INFO("Player entity %i entered widget (entity %i).", event.Entity, event.Trigger);
|
|
return false;
|
|
}
|
|
|
|
bool PlayerSystem::OnLeave(const Events::TriggerLeave &event)
|
|
{
|
|
LOG_INFO("Player entity %i left widget (entity %i).", event.Entity, event.Trigger);
|
|
return false;
|
|
}
|
|
|
|
bool PlayerSystem::OnMouseRelease(const Events::MouseRelease& e)
|
|
{
|
|
//kolla ammoleft, cooldowntimer shooting
|
|
//kolla om left mouse varit nere
|
|
if (e.Button != GLFW_MOUSE_BUTTON_LEFT)
|
|
return false;
|
|
aimingCoordinates = glm::vec2(e.X, e.Y);
|
|
leftMouseWasReleased = true;
|
|
return true;
|
|
} |