#include <src/Misc/SWTypes.h>
List of all members.
Constructor & Destructor Documentation
PsychicDominatorStateMachine::PsychicDominatorStateMachine |
( |
CellStruct |
XY, |
|
|
SuperClass * |
pSuper, |
|
|
NewSWType * |
pSWType |
|
) |
| [inline] |
Member Function Documentation
void PsychicDominatorStateMachine::Update |
( |
| ) |
[virtual] |
Reimplemented from SWStateMachine.
{
if(this->Deferment > 0) {
if(--this->Deferment) {
return;
}
}
SWTypeExt::ExtData *pData = SWTypeExt::ExtMap.Find(this->Super->Type);
switch(PsyDom::Status()) {
case PsychicDominatorStatus::FirstAnim:
{
CoordStruct coords;
CellClass *pTarget = MapClass::Instance->GetCellAt(&this->Coords);
pTarget->GetCoords(&coords);
coords.Z += pData->Dominator_FirstAnimHeight;
AnimClass* pAnim = NULL;
if(pData->Dominator_FirstAnim.Get()) {
GAME_ALLOC(AnimClass, pAnim, pData->Dominator_FirstAnim, &coords);
}
PsyDom::Anim(pAnim);
if(pData->SW_ActivationSound.Get()) {
VocClass::PlayAt(pData->SW_ActivationSound, &coords, NULL);
}
if(*pData->Message_Activate) {
pData->PrintMessage(pData->Message_Activate, this->Super->Owner);
}
PsyDom::Status(PsychicDominatorStatus::Fire);
ScenarioClass::Instance->Timer4.Start(1);
ScenarioClass::UpdateLighting();
return;
}
case PsychicDominatorStatus::Fire:
{
AnimClass* pAnim = PsyDom::Anim();
if(pAnim) {
int currentFrame = pAnim->CurrentFrame;
short frameCount = pAnim->Type->GetImage()->Frames;
if(frameCount * pData->Dominator_FireAtPercentage * 0.01 > currentFrame) {
return;
}
}
PsyDom::Fire();
PsyDom::Status(PsychicDominatorStatus::SecondAnim);
return;
}
case PsychicDominatorStatus::SecondAnim:
{
AnimClass* pAnim = PsyDom::Anim();
if(pAnim) {
int currentFrame = pAnim->CurrentFrame;
short frameCount = pAnim->Type->GetImage()->Frames;
if(frameCount - currentFrame > 10) {
return;
}
}
PsyDom::Status(PsychicDominatorStatus::Reset);
return;
}
case PsychicDominatorStatus::Reset:
{
AnimClass* pAnim = PsyDom::Anim();
if(pAnim) {
int currentFrame = pAnim->CurrentFrame;
short frameCount = pAnim->Type->GetImage()->Frames;
if(frameCount - currentFrame > 1) {
return;
}
}
PsyDom::Status(PsychicDominatorStatus::Over);
CellStruct nullCell;
nullCell.X = 0;
nullCell.Y = 0;
PsyDom::Coords(nullCell);
PsyDom::Anim(NULL);
ScenarioClass::UpdateLighting();
return;
}
case PsychicDominatorStatus::Over:
{
if(ScenarioClass::Instance->AmbientCurrent != ScenarioClass::Instance->AmbientTarget) {
return;
}
SW_PsychicDominator::CurrentPsyDom = NULL;
PsyDom::Status(PsychicDominatorStatus::Inactive);
ScenarioClass::UpdateLighting();
this->Clock.TimeLeft = 0;
}
}
}
Member Data Documentation
The documentation for this class was generated from the following files: