protected virtual Status Attack() { if (Target == null) { return(Status.Failure); } onUseAbility.Invoke(); AbilityStateDelta delta = UseAbility(); ProcessExitCondition(delta); if (Ability.Activator.HasPersistentObjects) { return(Status.Running); } else if (exitConditionHasBeenFullfilled) { return(Status.Success); } else { return(Status.Running); } }
protected void ProcessFireOnceCondition(AbilityStateDelta delta) { if (delta.HasFlag(AbilityStateDelta.Fired)) { exitConditionHasBeenFullfilled = true; } }
public override AbilityStateDelta PollInput(AbilityInput input) { AbilityStateDelta delta = AbilityStateDelta.None; CacheInput(input); if (HasPersistentObjects) { UpdatePersistentObjects(input); } else if (Ability.currentAmmo > 0) { if (Ability.Behaviour.ShouldFire(input)) { Fire(input); delta |= AbilityStateDelta.Fired; } } if (HasPersistentObjects) { delta |= AbilityStateDelta.HasPersistentObject; } return(delta); }
protected void ProcessExitCondition(AbilityStateDelta delta) { switch (exitCondition) { case AIAttackerExitCondition.FireOnce: ProcessFireOnceCondition(delta); break; case AIAttackerExitCondition.AmmoEmpty: ProcessAmmoEmptyCondition(); break; default: throw new System.NotImplementedException(); } }
public AbilityStateDelta UpdateState(AbilityInput input) { AbilityStateDelta delta = AbilityStateDelta.None; delta |= Reloader.PollInput(input); if (Reloader.IsReloading) { delta |= Reloader.DoReload(); } else { delta |= Activator.PollInput(input); } return(delta); }