Merge pull request #222 from teamfisk/DeathAnimation

Death effect re-added
This commit is contained in:
Joachim Pettersson
2016-03-14 05:48:07 +01:00
+22 -19
View File
@@ -10,8 +10,7 @@ PlayerDeathSystem::PlayerDeathSystem(SystemParams params)
} }
void PlayerDeathSystem::Update(double dt) void PlayerDeathSystem::Update(double dt)
{ { }
}
bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e) bool PlayerDeathSystem::OnPlayerDeath(Events::PlayerDeath& e)
{ {
@@ -33,31 +32,35 @@ void PlayerDeathSystem::createDeathEffect(EntityWrapper player)
auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/PlayerDeathExplosionWithCamera.xml"); auto entityFile = ResourceManager::Load<EntityFile>("Schema/Entities/PlayerDeathExplosionWithCamera.xml");
EntityWrapper deathEffectEW = entityFile->MergeInto(m_World); EntityWrapper deathEffectEW = entityFile->MergeInto(m_World);
//components that we need from player
auto playerModel = player.FirstChildByName("PlayerModel"); auto playerModel = player.FirstChildByName("PlayerModel");
if (!playerModel.HasComponent("Model") || !playerModel.HasComponent("Animation")) { if (!playerModel.Valid()) {
if (player == LocalPlayer) { if (player == LocalPlayer) {
setSpectatorCamera(); setSpectatorCamera();
} }
return; return;
} }
auto playerEntityModel = playerModel["Model"]; if (!playerModel.HasComponent("Model")) {
auto playerEntityAnimation = playerModel["Animation"]; return;
}
//copy the data from player to explosioneffectmodel EntityWrapper deathEffect = playerModel.Clone();
playerEntityModel.Copy(deathEffectEW["Model"]); for (auto& cAnim : deathEffect.ChildrenWithComponent("Animation")) {
playerEntityAnimation.Copy(deathEffectEW["Animation"]); cAnim["Animation"]["Play"] = false;
}
//copy the models position,orientation deathEffect.AttachComponent("ExplosionEffect");
deathEffectEW["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"]; deathEffectEW["ExplosionEffect"].Copy(deathEffect["ExplosionEffect"]);
deathEffectEW["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"]; deathEffect.AttachComponent("Lifetime");
//effect,camera is relative to playersPosition deathEffectEW["Lifetime"].Copy(deathEffect["Lifetime"]);
//deathEffectEW["ExplosionEffect"]["ExplosionOrigin"] = glm::vec3(0, 0, 0); deathEffect["Transform"]["Position"] = (glm::vec3)player["Transform"]["Position"];
deathEffect["Transform"]["Orientation"] = (glm::vec3)player["Transform"]["Orientation"];
for (auto& cModel : deathEffect.ChildrenWithComponent("Model")) {
EntityWrapper e(m_World, cModel.ID);
e.AttachComponent("ExplosionEffect");
deathEffectEW["ExplosionEffect"].Copy(e["ExplosionEffect"]);
}
EntityWrapper cam = deathEffectEW.FirstChildByName("Camera").Clone(deathEffect);
//camera (with lifetime) behind the player //camera (with lifetime) behind the player
if (player == LocalPlayer) { if (player == LocalPlayer) {
m_LocalPlayerDeathEffect = deathEffectEW; m_LocalPlayerDeathEffect = deathEffect;
auto cam = deathEffectEW.FirstChildByName("Camera");
Events::SetCamera eSetCamera; Events::SetCamera eSetCamera;
eSetCamera.CameraEntity = cam; eSetCamera.CameraEntity = cam;
m_EventBroker->Publish(eSetCamera); m_EventBroker->Publish(eSetCamera);