Player death effect fixes
This commit is contained in:
@@ -11,18 +11,31 @@ void PlayerDeathSystem::Update(double dt)
|
||||
}
|
||||
|
||||
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
|
||||
auto deathEffect = ResourceManager::Load<EntityFile>("Schema/Entities/PlayerDeathExplosionWithCamera.xml");
|
||||
|
||||
EntityFileParser parser(deathEffect);
|
||||
EntityID deathEffectID = parser.MergeEntities(m_World);
|
||||
EntityWrapper deathEffectEW = EntityWrapper(m_World, deathEffectID);
|
||||
|
||||
//components that we need from player
|
||||
auto playerCamera = e.Player.FirstChildByName("Camera");
|
||||
auto playerEntityModel = e.Player.FirstChildByName("PlayerModel")["Model"];
|
||||
auto playerEntityAnimation = e.Player.FirstChildByName("PlayerModel")["Animation"];
|
||||
auto playerCamera = player.FirstChildByName("Camera");
|
||||
auto playerEntityModel = player.FirstChildByName("PlayerModel")["Model"];
|
||||
auto playerEntityAnimation = player.FirstChildByName("PlayerModel")["Animation"];
|
||||
|
||||
//copy the data from player to explisioneffectmodel
|
||||
playerEntityModel.Copy(deathEffectEW["Model"]);
|
||||
@@ -31,20 +44,14 @@ bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e)
|
||||
deathEffectEW["Animation"]["Speed"] = 0.0;
|
||||
|
||||
//copy the models position,orientation
|
||||
deathEffectEW["Transform"]["Position"] = (glm::vec3)e.Player["Transform"]["Position"];
|
||||
deathEffectEW["Transform"]["Orientation"] = (glm::vec3)e.Player["Transform"]["Orientation"];
|
||||
deathEffectEW["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
|
||||
deathEffectEW["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
|
||||
//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
|
||||
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;
|
||||
eSetCamera.CameraEntity = cam;
|
||||
m_EventBroker->Publish(eSetCamera);
|
||||
|
||||
//done -> del entity
|
||||
m_World->DeleteEntity(e.Player.ID);
|
||||
return true;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user