void ScriptedAnimation::Override(ScriptedAnimation *templ)
{
	Transparency = templ->Transparency;
	SequenceFlags = templ->SequenceFlags;
	XPos = templ->XPos;
	YPos = templ->YPos;
	ZPos = templ->ZPos;
	FrameRate = templ->FrameRate;
	FaceTarget = templ->FaceTarget;
	for (unsigned int i=0;i<3;i++) {
		memcpy(sounds[i],templ->sounds[i],sizeof(ieResRef));
	}
	if (templ->Duration!=0xffffffff) {
		SetDefaultDuration(templ->Duration);
	}
	if (templ->PaletteName[0]) {
		SetFullPalette(templ->PaletteName);
	}
}
Пример #2
0
	//! called when the HQ has taken damage
	bool HQ::OnDamage(float fDamage)
	{
		if (m_fExplosionTimer > 0.0f)
			return true;

		m_fHitPoints -= fDamage;

		m_HealthBG->SetVisible(true);
		m_HealthBar->SetProgress(m_fHitPoints / m_fMaxHitPoints);

		if(m_fHitPoints < 0.0f)
		{
			auto explosionVisitor = static_cast<ExplosionVisitor*>(m_ExplosionVisitor->Copy());
			auto explosionEntity = static_cast<Entity3D*>(m_ExplosionEntity->Copy());
			explosionEntity->SetScale(Vector3::One * 2.0f);

			// add explosion visitor
			explosionVisitor->SetDefaultIntensity(m_fExplosionIntensity);
			explosionVisitor->SetDefaultDuration(m_fExplosionDuration);
			auto mesh = static_cast<Entity3D*>(GetChildByName("HQMesh"));
			mesh->AddComponent(explosionVisitor);

			// add explosion entity
			AddChild(explosionEntity);
			explosionEntity->SetPosition(mesh->GetPosition());

			AUDIOMGR->Play(AudioManager::S_ExplosionNuclear);
			m_fExplosionTimer = m_fExplosionDuration;
			m_HealthBG->SetVisible(false);

			GAMECAM->Shake(.5f, .02f, m_fExplosionDuration / 2.0f);
			return true;
		}

		return false;
	}