private void UpdateActions(float deltatime) { if (currentAction != null) { switch (currentAction.finish) { case NpcActorActionFinish.OnEnemyKilled: if (enemyTarget != null) { if (enemyTarget.isDead) { FinishCurrentAction(); } } break; case NpcActorActionFinish.OnEnemyOutOfSight: if (enemyTarget == null) { FinishCurrentAction(); } break; case NpcActorActionFinish.OnReachWalkTargetPosition: if (position.Equals(currentAction.walkPosition)) // create = operator and Vector3.Distance-method { FinishCurrentAction(); } break; case NpcActorActionFinish.OnEndTimer: if (currentActionExecutionTime >= currentAction.actionExecutionTime) { FinishCurrentAction(); } else { currentActionExecutionTime += deltatime; } break; } switch (currentAction.actionType) { case NpcActorActionType.AttackLiveActor: AttackLiveActor(currentAction.attackTargetActor); break; case NpcActorActionType.GotoPosition: GotoPosition(currentAction.walkPosition); break; case NpcActorActionType.PerformAnimation: specialAnimation = currentAction.performedAnimation; break; } } }
public NpcActorAction(NpcActorActionType actiontype, NpcActorActionFinish finish = NpcActorActionFinish.OnEndTimer, LiveActor attacktargetactor = null, Vector3 walkposition = default(Vector3), NpcActorActionTypeAnimation performedanimation = NpcActorActionTypeAnimation.Idle, float actionexecutiontime = 0, bool isloop = false) { actionType = actiontype; this.finish = finish; attackTargetActor = attacktargetactor; walkPosition = walkposition; performedAnimation = performedanimation; this.actionExecutionTime = actionexecutiontime; isLoop = isloop; }
private void FinishCurrentAction() { switch (currentAction.actionType) { case NpcActorActionType.AttackLiveActor: enemyTarget = null; break; case NpcActorActionType.GotoPosition: // If walkTarget = new Vector3(0, 0, 0) the npc will run to this position break; case NpcActorActionType.PerformAnimation: specialAnimation = NpcActorActionTypeAnimation.Idle; break; } currentActionExecutionTime = 0; if (!currentAction.isLoop) { SelectNextAction(); } }
private void PerformAnimation(NpcActorActionTypeAnimation animation) { QueueAction(new NpcActorAction(NpcActorActionType.PerformAnimation, performedanimation: animation)); }