예제 #1
0
    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);
        }
    }
예제 #2
0
 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);
        }
예제 #4
0
    protected void ProcessExitCondition(AbilityStateDelta delta)
    {
        switch (exitCondition)
        {
        case AIAttackerExitCondition.FireOnce:
            ProcessFireOnceCondition(delta);
            break;

        case AIAttackerExitCondition.AmmoEmpty:
            ProcessAmmoEmptyCondition();
            break;

        default:
            throw new System.NotImplementedException();
        }
    }
예제 #5
0
    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);
    }