コード例 #1
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        base.Result = base.Inverted;
        IAIAttack iAIAttack = base.Owner as IAIAttack;

        if (iAIAttack == null)
        {
            return;
        }
        BaseEntity bestTarget = iAIAttack.GetBestTarget();

        if (base.Inverted)
        {
            if (bestTarget == null && base.ShouldSetOutputEntityMemory)
            {
                memory.Entity.Remove(base.OutputEntityMemorySlot);
            }
            base.Result = bestTarget == null;
        }
        else
        {
            if (bestTarget != null && base.ShouldSetOutputEntityMemory)
            {
                memory.Entity.Set(bestTarget, base.OutputEntityMemorySlot);
            }
            base.Result = bestTarget != null;
        }
    }
コード例 #2
0
ファイル: AIEvents.cs プロジェクト: Ailtop/RustDocuments
 public void Init(IAIEventListener listener, AIStateContainer stateContainer, BaseEntity owner, AIBrainSenses senses)
 {
     CurrentInputMemorySlot = stateContainer.InputMemorySlot;
     eventListener          = listener;
     RemoveAll();
     AddStateEvents(stateContainer.Events, owner);
     Memory.Entity.Set(owner, 4);
     this.senses = senses;
 }
コード例 #3
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        BaseEntity baseEntity = memory.Entity.Get(base.InputEntityMemorySlot);

        base.Result = false;
        if (!(baseEntity == null))
        {
            bool flag = Vector3Ex.Distance2D(base.Owner.transform.position, baseEntity.transform.position) <= Range;
            base.Result = (base.Inverted ? (!flag) : flag);
        }
    }
コード例 #4
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        base.Result = false;
        BaseEntity baseEntity = memory.Entity.Get(base.InputEntityMemorySlot);

        if (!(baseEntity == null) && base.Owner is IAIAttack)
        {
            bool flag = senses.Memory.IsLOS(baseEntity);
            base.Result = (base.Inverted ? (!flag) : flag);
        }
    }
コード例 #5
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        base.Result = base.Inverted;
        IAIAttack iAIAttack = base.Owner as IAIAttack;

        if (iAIAttack != null)
        {
            BaseEntity baseEntity = memory.Entity.Get(base.InputEntityMemorySlot);
            iAIAttack.AttackTick(deltaTime, baseEntity, senses.Memory.IsLOS(baseEntity));
            base.Result = !base.Inverted;
        }
    }
コード例 #6
0
 public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
 {
     base.Result = base.Inverted;
     if (base.Inverted)
     {
         base.Result = senses.TimeInAgressiveState < Value;
     }
     else
     {
         base.Result = senses.TimeInAgressiveState >= Value;
     }
 }
コード例 #7
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        base.Result = base.Inverted;
        bool flag = Random.Range(0f, 1f) <= Chance;

        if (base.Inverted)
        {
            base.Result = !flag;
        }
        else
        {
            base.Result = flag;
        }
    }
コード例 #8
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        base.Result  = base.Inverted;
        combatEntity = memory.Entity.Get(base.InputEntityMemorySlot) as BaseCombatEntity;
        float num = lastExecuteTime;

        lastExecuteTime = Time.time;
        if (!(combatEntity == null) && combatEntity.lastAttackedTime >= num && !(combatEntity.lastAttacker == null) && !(combatEntity.lastAttacker == combatEntity))
        {
            if (base.ShouldSetOutputEntityMemory)
            {
                memory.Entity.Set(combatEntity.lastAttacker, base.OutputEntityMemorySlot);
            }
            base.Result = !base.Inverted;
        }
    }
コード例 #9
0
 public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
 {
     base.Result  = base.Inverted;
     combatEntity = memory.Entity.Get(base.InputEntityMemorySlot) as BaseCombatEntity;
     if (!(combatEntity == null))
     {
         bool flag = combatEntity.healthFraction < HealthFraction;
         if (base.Inverted)
         {
             base.Result = !flag;
         }
         else
         {
             base.Result = flag;
         }
     }
 }
コード例 #10
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        base.Result = base.Inverted;
        IAIAttack iAIAttack = base.Owner as IAIAttack;

        if (iAIAttack != null)
        {
            bool flag = iAIAttack.GetAmmoFraction() < Value;
            if (base.Inverted)
            {
                base.Result = !flag;
            }
            else
            {
                base.Result = flag;
            }
        }
    }
コード例 #11
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        IAIHungerAbove iAIHungerAbove = base.Owner as IAIHungerAbove;

        if (iAIHungerAbove == null)
        {
            base.Result = false;
            return;
        }
        bool flag = iAIHungerAbove.IsHungerAbove(Value);

        if (base.Inverted)
        {
            base.Result = !flag;
        }
        else
        {
            base.Result = flag;
        }
    }
コード例 #12
0
    public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
    {
        IAIMounted iAIMounted = memory.Entity.Get(base.InputEntityMemorySlot) as IAIMounted;

        base.Result = false;
        if (iAIMounted != null)
        {
            if (base.Inverted && !iAIMounted.IsMounted())
            {
                base.Result = true;
            }
            if (!base.Inverted && iAIMounted.IsMounted())
            {
                base.Result = true;
            }
            if (base.Result && base.ShouldSetOutputEntityMemory)
            {
                memory.Entity.Set(memory.Entity.Get(base.InputEntityMemorySlot), base.OutputEntityMemorySlot);
            }
        }
    }
コード例 #13
0
    public virtual bool GetBestFleePosition(BaseNavigator navigator, AIBrainSenses senses, BaseEntity fleeFrom, Vector3 fallbackPos, float minRange, float maxRange, out Vector3 result)
    {
        if (fleeFrom == null)
        {
            result = navigator.transform.position;
            return(false);
        }
        Vector3 dirFromThreat = Vector3Ex.Direction2D(navigator.transform.position, fleeFrom.transform.position);

        if (TestFleeDirection(navigator, dirFromThreat, 0f, minRange, maxRange, out result))
        {
            return(true);
        }
        bool flag = UnityEngine.Random.Range(0, 2) == 1;

        if (TestFleeDirection(navigator, dirFromThreat, flag ? 45f : 315f, minRange, maxRange, out result))
        {
            return(true);
        }
        if (TestFleeDirection(navigator, dirFromThreat, flag ? 315f : 45f, minRange, maxRange, out result))
        {
            return(true);
        }
        if (TestFleeDirection(navigator, dirFromThreat, flag ? 90f : 270f, minRange, maxRange, out result))
        {
            return(true);
        }
        if (TestFleeDirection(navigator, dirFromThreat, flag ? 270f : 90f, minRange, maxRange, out result))
        {
            return(true);
        }
        if (TestFleeDirection(navigator, dirFromThreat, 135f + UnityEngine.Random.Range(0f, 90f), minRange, maxRange, out result))
        {
            return(true);
        }
        return(false);
    }
コード例 #14
0
ファイル: BaseAIEvent.cs プロジェクト: Ailtop/RustDocuments
 public virtual void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
 {
 }
コード例 #15
0
ファイル: AndAIEvent.cs プロジェクト: Ailtop/RustDocuments
 public override void Execute(AIMemory memory, AIBrainSenses senses, StateStatus stateStatus)
 {
     base.Result = false;
 }