From a4c804b49ec872b71bd5a0167c3ad45704a3cc30 Mon Sep 17 00:00:00 2001 From: adiblol Date: Thu, 8 Mar 2012 19:32:05 +0100 Subject: Initial commit, Copyright (C) 2001-2008, Daniel ROUX & EPSITEC SA, www.epsitec.ch --- src/taskspiderexplo.cpp | 108 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 108 insertions(+) create mode 100644 src/taskspiderexplo.cpp (limited to 'src/taskspiderexplo.cpp') diff --git a/src/taskspiderexplo.cpp b/src/taskspiderexplo.cpp new file mode 100644 index 0000000..6a2a322 --- /dev/null +++ b/src/taskspiderexplo.cpp @@ -0,0 +1,108 @@ +// taskspiderexplo.cpp + +#define STRICT +#define D3D_OVERLOADS + +#include +#include +#include + +#include "struct.h" +#include "D3DEngine.h" +#include "math3d.h" +#include "event.h" +#include "misc.h" +#include "iman.h" +#include "object.h" +#include "physics.h" +#include "pyro.h" +#include "motion.h" +#include "motionspider.h" +#include "task.h" +#include "taskspiderexplo.h" + + + + +// Constructeur de l'objet. + +CTaskSpiderExplo::CTaskSpiderExplo(CInstanceManager* iMan, CObject* object) + : CTask(iMan, object) +{ + CTask::CTask(iMan, object); + + m_time = 0.0f; + m_bError = FALSE; +} + +// Destructeur de l'objet. + +CTaskSpiderExplo::~CTaskSpiderExplo() +{ +} + + +// Gestion d'un événement. + +BOOL CTaskSpiderExplo::EventProcess(const Event &event) +{ + if ( m_engine->RetPause() ) return TRUE; + if ( event.event != EVENT_FRAME ) return TRUE; + + // Objet momentanément immobile (fourmi sur le dos) ? + if ( m_object->RetFixed() ) + { + m_bError = TRUE; + return TRUE; + } + + m_time += event.rTime; + + return TRUE; +} + + +// Assigne le but à atteindre. + +Error CTaskSpiderExplo::Start() +{ + m_motion->SetAction(MSS_EXPLO, 1.0f); // l'abdomen gonfle + m_time = 0.0f; + + m_physics->SetMotorSpeedX(0.0f); // stoppe l'avance + m_physics->SetMotorSpeedZ(0.0f); // stoppe la rotation + + m_bError = FALSE; + return ERR_OK; +} + +// Indique si l'action est terminée. + +Error CTaskSpiderExplo::IsEnded() +{ + CPyro* pyro; + + if ( m_engine->RetPause() ) return ERR_CONTINUE; + + if ( m_bError ) + { + Abort(); + return ERR_STOP; + } + + if ( m_time < 1.0f ) return ERR_CONTINUE; + + pyro = new CPyro(m_iMan); + pyro->Create(PT_SPIDER, m_object); // l'araignée explose (suicide) + + Abort(); + return ERR_STOP; +} + +// Termine brutalement l'action en cours. + +BOOL CTaskSpiderExplo::Abort() +{ + return TRUE; +} + -- cgit v1.2.3-1-g7c22