Player death effect fixes
This commit is contained in:
@@ -22,5 +22,8 @@ public:
|
|||||||
private:
|
private:
|
||||||
EventRelay<PlayerDeathSystem, Events::PlayerDeath> m_OnPlayerDeath;
|
EventRelay<PlayerDeathSystem, Events::PlayerDeath> m_OnPlayerDeath;
|
||||||
bool OnPlayerDeath(Events::PlayerDeath& e);
|
bool OnPlayerDeath(Events::PlayerDeath& e);
|
||||||
|
|
||||||
|
void createDeathEffect(EntityWrapper player);
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "Systems/SpawnerSystem.h"
|
#include "Systems/SpawnerSystem.h"
|
||||||
#include "Events/ESpawnerSpawn.h"
|
#include "Events/ESpawnerSpawn.h"
|
||||||
#include "Core/EPlayerSpawned.h"
|
#include "Core/EPlayerSpawned.h"
|
||||||
|
#include "Core/EPlayerDeath.h"
|
||||||
#include "Rendering/ESetCamera.h"
|
#include "Rendering/ESetCamera.h"
|
||||||
#include "Core/ConfigFile.h"
|
#include "Core/ConfigFile.h"
|
||||||
|
|
||||||
|
|||||||
@@ -4,17 +4,18 @@
|
|||||||
<Components>
|
<Components>
|
||||||
<c:Animation>
|
<c:Animation>
|
||||||
<Name>Hold Pos</Name>
|
<Name>Hold Pos</Name>
|
||||||
<Time>0</Time>
|
|
||||||
<Speed>0</Speed>
|
|
||||||
</c:Animation>
|
</c:Animation>
|
||||||
<c:Lifetime>
|
<c:Lifetime>
|
||||||
<Lifetime>4</Lifetime>
|
<Lifetime>2.5</Lifetime>
|
||||||
</c:Lifetime>
|
</c:Lifetime>
|
||||||
<c:ExplosionEffect>
|
<c:ExplosionEffect>
|
||||||
<TimeSinceDeath>0</TimeSinceDeath>
|
<ColorByDistance>true</ColorByDistance>
|
||||||
<ExplosionDuration>4</ExplosionDuration>
|
<Velocity X="0" Y="7.76300049" Z="0"/>
|
||||||
<ExplosionOrigin X="-60.9153252" Y="0.767338753" Z="-76.4729843"/>
|
<ExplosionOrigin X="0" Y="0.67900002" Z="0"/>
|
||||||
<Velocity X="0.5" Y="0.5" Z="0"/>
|
<ExponentialAccelaration>true</ExponentialAccelaration>
|
||||||
|
<ExplosionDuration>3</ExplosionDuration>
|
||||||
|
<EndColor A="0" B="0" G="0" R="1"/>
|
||||||
|
<Randomness>true</Randomness>
|
||||||
</c:ExplosionEffect>
|
</c:ExplosionEffect>
|
||||||
<c:Model>
|
<c:Model>
|
||||||
<Resource>Models/AssaultAnimated.mesh</Resource>
|
<Resource>Models/AssaultAnimated.mesh</Resource>
|
||||||
@@ -22,24 +23,17 @@
|
|||||||
<Transparent>true</Transparent>
|
<Transparent>true</Transparent>
|
||||||
</c:Model>
|
</c:Model>
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-60.9153252" Y="0.767338753" Z="-76.4729843"/>
|
<Position X="0" Y="0" Z="3.46966481"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
|
|
||||||
<Children>
|
<Children>
|
||||||
<Entity name="Camera">
|
<Entity name="Camera">
|
||||||
<Components>
|
<Components>
|
||||||
<c:Lifetime>
|
<c:Camera/>
|
||||||
<Lifetime>1</Lifetime>
|
|
||||||
</c:Lifetime>
|
|
||||||
<c:Camera>
|
|
||||||
<FOV>120</FOV>
|
|
||||||
<NearClip>0.1</NearClip>
|
|
||||||
<FarClip>10000</FarClip>
|
|
||||||
</c:Camera>
|
|
||||||
<c:Transform>
|
<c:Transform>
|
||||||
<Position X="-60.9153252" Y="0.767338753" Z="-76.4729843"/>
|
<Position X="0" Y="2.49700022" Z="4.31700039"/>
|
||||||
<Orientation X="-0.7" Y="1.46" Z="0.8"/>
|
<Orientation X="5.95600033" Y="0" Z="0"/>
|
||||||
</c:Transform>
|
</c:Transform>
|
||||||
</Components>
|
</Components>
|
||||||
<Children/>
|
<Children/>
|
||||||
|
|||||||
@@ -11,18 +11,31 @@ void PlayerDeathSystem::Update(double dt)
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e)
|
bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e)
|
||||||
|
{
|
||||||
|
if (!e.Player.Valid()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
createDeathEffect(e.Player);
|
||||||
|
|
||||||
|
// Delete player
|
||||||
|
m_World->DeleteEntity(e.Player.ID);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PlayerDeathSystem::createDeathEffect(EntityWrapper player)
|
||||||
{
|
{
|
||||||
//load the explosioneffect XML
|
//load the explosioneffect XML
|
||||||
auto deathEffect = ResourceManager::Load<EntityFile>("Schema/Entities/PlayerDeathExplosionWithCamera.xml");
|
auto deathEffect = ResourceManager::Load<EntityFile>("Schema/Entities/PlayerDeathExplosionWithCamera.xml");
|
||||||
|
|
||||||
EntityFileParser parser(deathEffect);
|
EntityFileParser parser(deathEffect);
|
||||||
EntityID deathEffectID = parser.MergeEntities(m_World);
|
EntityID deathEffectID = parser.MergeEntities(m_World);
|
||||||
EntityWrapper deathEffectEW = EntityWrapper(m_World, deathEffectID);
|
EntityWrapper deathEffectEW = EntityWrapper(m_World, deathEffectID);
|
||||||
|
|
||||||
//components that we need from player
|
//components that we need from player
|
||||||
auto playerCamera = e.Player.FirstChildByName("Camera");
|
auto playerCamera = player.FirstChildByName("Camera");
|
||||||
auto playerEntityModel = e.Player.FirstChildByName("PlayerModel")["Model"];
|
auto playerEntityModel = player.FirstChildByName("PlayerModel")["Model"];
|
||||||
auto playerEntityAnimation = e.Player.FirstChildByName("PlayerModel")["Animation"];
|
auto playerEntityAnimation = player.FirstChildByName("PlayerModel")["Animation"];
|
||||||
|
|
||||||
//copy the data from player to explisioneffectmodel
|
//copy the data from player to explisioneffectmodel
|
||||||
playerEntityModel.Copy(deathEffectEW["Model"]);
|
playerEntityModel.Copy(deathEffectEW["Model"]);
|
||||||
@@ -31,20 +44,14 @@ bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e)
|
|||||||
deathEffectEW["Animation"]["Speed"] = 0.0;
|
deathEffectEW["Animation"]["Speed"] = 0.0;
|
||||||
|
|
||||||
//copy the models position,orientation
|
//copy the models position,orientation
|
||||||
deathEffectEW["Transform"]["Position"] = (glm::vec3)e.Player["Transform"]["Position"];
|
deathEffectEW["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
|
||||||
deathEffectEW["Transform"]["Orientation"] = (glm::vec3)e.Player["Transform"]["Orientation"];
|
deathEffectEW["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
|
||||||
//effect,camera is relative to playersPosition
|
//effect,camera is relative to playersPosition
|
||||||
deathEffectEW["ExplosionEffect"]["ExplosionOrigin"] = glm::vec3(0, 0, 0);
|
//deathEffectEW["ExplosionEffect"]["ExplosionOrigin"] = glm::vec3(0, 0, 0);
|
||||||
|
|
||||||
//camera (with lifetime) behind the player
|
//camera (with lifetime) behind the player
|
||||||
auto cam = deathEffectEW.FirstChildByName("Camera");
|
auto cam = deathEffectEW.FirstChildByName("Camera");
|
||||||
cam["Transform"]["Position"] = glm::vec3(0, 2.5f, 1.8f);
|
|
||||||
cam["Transform"]["Orientation"] = glm::vec3(5.655f, 0, 0);
|
|
||||||
Events::SetCamera eSetCamera;
|
Events::SetCamera eSetCamera;
|
||||||
eSetCamera.CameraEntity = cam;
|
eSetCamera.CameraEntity = cam;
|
||||||
m_EventBroker->Publish(eSetCamera);
|
m_EventBroker->Publish(eSetCamera);
|
||||||
|
|
||||||
//done -> del entity
|
|
||||||
m_World->DeleteEntity(e.Player.ID);
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -75,7 +75,9 @@ bool PlayerSpawnSystem::OnPlayerSpawned(Events::PlayerSpawned& e)
|
|||||||
// Check if a player already exists
|
// Check if a player already exists
|
||||||
if (m_PlayerEntities.count(e.PlayerID) != 0) {
|
if (m_PlayerEntities.count(e.PlayerID) != 0) {
|
||||||
// TODO: Disallow infinite respawning here
|
// TODO: Disallow infinite respawning here
|
||||||
m_World->DeleteEntity(m_PlayerEntities[e.PlayerID].ID);
|
if (m_PlayerEntities[e.PlayerID].Valid()) {
|
||||||
|
m_World->DeleteEntity(m_PlayerEntities[e.PlayerID].ID);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Store the player for future reference
|
// Store the player for future reference
|
||||||
|
|||||||
Reference in New Issue
Block a user