void ADebuff::RefreshDebuff_Implementation(ADebuff* NewDebuff) { if (NewDebuff->Duration > (FinishTime - ElapsedTime)) SetRemainingTime(NewDebuff->Duration); }
bool CollisionSystem::TransmitInfection(std::shared_ptr<Entity> transmitterEntity, std::shared_ptr<Entity> receiverEntity) { auto transmitterInfectionComponent = std::static_pointer_cast<InfectionComponent>(Engine::GetInstance().GetSingleComponentOfClass(transmitterEntity, "InfectionComponent")); auto receiverInfectionComponent = std::static_pointer_cast<InfectionComponent>(Engine::GetInstance().GetSingleComponentOfClass(receiverEntity, "InfectionComponent")); // Only transmit to healthy entities if (receiverInfectionComponent->GetInfectionType() != NoInfection) return false; if (transmitterInfectionComponent->GetTransmissible()) { receiverInfectionComponent->SetInfectionType( transmitterInfectionComponent->GetInfectionType()); // Avoid epidemies by blocking further transmissions receiverInfectionComponent->SetTransmissible(false); receiverInfectionComponent->SetRemainingTime( transmitterInfectionComponent->GetRemainingTime()); receiverInfectionComponent->SetTemporary(true); if (transmitterInfectionComponent->GetInfectionType() == CannotInput) { if (Engine::GetInstance().HasComponent(receiverEntity, "PlayerComponent")) Engine::GetInstance().PlaySoundEffect(CFG_GETP("FROZEN_SOUND_EFFECT")); auto spriteComponents = Engine::GetInstance().GetComponentsOfClass(receiverEntity, "SpriteComponent"); Engine::GetInstance().GetEntityManager()->DeleteComponentsOfClass(receiverEntity, "SpriteComponent"); Engine::GetInstance().AddComponent( std::make_shared<SpriteComponent>(CFG_GETP("CELL_FROZEN_IMAGE"), Vector(0, 0), 0, 0, true, CFG_GETF("CELL_FROZEN_SCALE")), receiverEntity); for (unsigned int i = 1; i < spriteComponents.size(); ++i) Engine::GetInstance().AddComponent(spriteComponents[i], receiverEntity); } else if (transmitterInfectionComponent->GetInfectionType() == StrongImpulses) { if (Engine::GetInstance().HasComponent(receiverEntity, "PlayerComponent")) Engine::GetInstance().PlaySoundEffect(CFG_GETP("IMPULSES_SOUND_EFFECT")); auto spriteComponents = Engine::GetInstance().GetComponentsOfClass(receiverEntity, "SpriteComponent"); Engine::GetInstance().GetEntityManager()->DeleteComponentsOfClass(receiverEntity, "SpriteComponent"); Engine::GetInstance().AddComponent( std::make_shared<SpriteComponent>(CFG_GETP("CELL_ERRACTIC_IMAGE"), Vector(0, 0), 0, CFG_GETF("CELL_ERRACTIC_ROTATION_SPEED"), true, CFG_GETF("CELL_ERRACTIC_SCALE")), receiverEntity); for (unsigned int i = 1; i < spriteComponents.size(); ++i) Engine::GetInstance().AddComponent(spriteComponents[i], receiverEntity); } else if (transmitterInfectionComponent->GetInfectionType() == CannotEat) { if (Engine::GetInstance().HasComponent(receiverEntity, "PlayerComponent")) Engine::GetInstance().PlaySoundEffect(CFG_GETP("IMPULSES_SOUND_EFFECT")); auto spriteComponents = Engine::GetInstance().GetComponentsOfClass(receiverEntity, "SpriteComponent"); Engine::GetInstance().GetEntityManager()->DeleteComponentsOfClass(receiverEntity, "SpriteComponent"); Engine::GetInstance().AddComponent( std::make_shared<SpriteComponent>(CFG_GETP("CELL_CANNOT_EAT_IMAGE"), Vector(0, 0), 0, 0, true, CFG_GETF("CELL_CANNOT_EAT_SCALE")), receiverEntity); for (unsigned int i = 1; i < spriteComponents.size(); ++i) Engine::GetInstance().AddComponent(spriteComponents[i], receiverEntity); } DestroyEntity(transmitterEntity); return true; } return false; }