示例#1
0
 //------------------------------------------------------------------------------
 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;
     }
 }
示例#2
0
void ComponentMovement::handleActionSetCharacterFaceAngle( const ActionSetCharacterFaceAngle *action ) {
	turnToFace(action->facingAngle);
}
示例#3
0
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;
	}
}