//------------------------------------------------------------------------------ void TurnToAction::Execute (void) { IshipIGC* pShip = static_cast<IshipIGC*> (static_cast<ImodelIGC*> (*m_pObject)); ImodelIGC* pTarget = static_cast<ImodelIGC*> (*m_pTarget); if (pShip && pTarget) { Vector delta = pTarget->GetPosition () - pShip->GetPosition (); turnToFace (delta, GetWindow ()->GetDeltaTime (), pShip, &g_setInputControls); g_setInputControls.jsValues[c_axisYaw] *= 0.5f; g_setInputControls.jsValues[c_axisPitch] *= 0.5f; g_setInputControls.jsValues[c_axisRoll] *= 0.5f; } else { g_setInputControls.jsValues[c_axisYaw] = NA; g_setInputControls.jsValues[c_axisPitch] = NA; g_setInputControls.jsValues[c_axisRoll] = NA; } }
void ComponentMovement::handleActionSetCharacterFaceAngle( const ActionSetCharacterFaceAngle *action ) { turnToFace(action->facingAngle); }
void ComponentMovement::applyAction(CharacterAction action) { vec2 x(-1, 1); vec2 y(-1, -1); if (!dead || getDeathBehavior()==Ghost) { switch (action) { /* Step in an absolute direction */ case StepNorth: walk(y); turnToFace(velocity.xy()); break; case StepSouth: walk(-y); turnToFace(velocity.xy()); break; case StepEast: walk(x); turnToFace(velocity.xy()); break; case StepWest: walk(-x); turnToFace(velocity.xy()); break; case StepNorthEast: walk(y+x); turnToFace(velocity.xy()); break; case StepNorthWest: walk(y-x); turnToFace(velocity.xy()); break; case StepSouthEast: walk(-y+x); turnToFace(velocity.xy()); break; case StepSouthWest: walk(-y-x); turnToFace(velocity.xy()); break; /* Step in a relative direction */ case StepForward: walk(getDirectionVector(facingAngle)); break; case StepForwardRight: walk(getDirectionVector(facingAngle - (float)(M_PI * 0.25))); break; case StepRight: walk(getDirectionVector(facingAngle - (float)(M_PI * 0.50))); break; case StepBackWardRight: walk(getDirectionVector(facingAngle - (float)(M_PI * 0.75))); break; case StepBackWard: walk(getDirectionVector(facingAngle - (float)M_PI)); break; case StepBackWardLeft: walk(getDirectionVector(facingAngle + (float)(M_PI * 0.75))); break; case StepLeft: walk(getDirectionVector(facingAngle + (float)(M_PI * 0.50))); break; case StepForwardLeft: walk(getDirectionVector(facingAngle + (float)(M_PI * 0.25))); break; /* Other */ case BeginChargeUp: chargeUp(); break; case EndChargeUp: endChargeUp(); break; case AttackOnce: attackOnce(); break; case Suicide: suicide(); break; default: break; } lastAction = action; } else { lastAction = InvalidAction; } }