public static bool IsAtPreferredRange(
            ScientistContext context,
            ref NpcPlayerInfo target,
            AttackEntity firearm)
        {
            if (Object.op_Equality((Object)firearm, (Object)null))
            {
                return(false);
            }
            switch (firearm.effectiveRangeType)
            {
            case NPCPlayerApex.WeaponTypeEnum.CloseRange:
                return((double)target.SqrDistance <= (double)context.Body.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm));

            case NPCPlayerApex.WeaponTypeEnum.MediumRange:
                if ((double)target.SqrDistance <= (double)context.Body.AiDefinition.Engagement.SqrMediumRangeFirearm(firearm))
                {
                    return((double)target.SqrDistance > (double)context.Body.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm));
                }
                return(false);

            case NPCPlayerApex.WeaponTypeEnum.LongRange:
                if ((double)target.SqrDistance < (double)context.Body.AiDefinition.Engagement.SqrLongRangeFirearm(firearm))
                {
                    return((double)target.SqrDistance > (double)context.Body.AiDefinition.Engagement.SqrMediumRangeFirearm(firearm));
                }
                return(false);

            default:
                return(false);
            }
        }
        public void Tick(IHTNAgent npc, float deltaTime, float time)
        {
            ScientistContext npcContext = npc.AiDomain.NpcContext as ScientistContext;

            if (npcContext == null)
            {
                return;
            }
            NpcPlayerInfo enemyPlayerTarget = npcContext.GetPrimaryEnemyPlayerTarget();

            if (!Object.op_Inequality((Object)enemyPlayerTarget.Player, (Object)null))
            {
                return;
            }
            AttackEntity firearm = npcContext.Domain.GetFirearm();

            if (PreferredFightingRangeReasoner.IsAtPreferredRange(npcContext, ref enemyPlayerTarget, firearm))
            {
                npcContext.SetFact(Rust.Ai.HTN.Scientist.Facts.AtLocationPreferredFightingRange, 1, true, true, true);
            }
            else
            {
                npcContext.SetFact(Rust.Ai.HTN.Scientist.Facts.AtLocationPreferredFightingRange, 0, true, true, true);
            }
        }
        public override Vector3 GetDirectionToPrimaryEnemyPlayerTargetBody()
        {
            NpcPlayerInfo enemyPlayerTarget = this.GetPrimaryEnemyPlayerTarget();

            if (Object.op_Inequality((Object)enemyPlayerTarget.Player, (Object)null))
            {
                Vector3 vector3_1 = Vector3.get_zero();
                if (enemyPlayerTarget.Player.IsDucked())
                {
                    vector3_1 = PlayerEyes.DuckOffset;
                }
                if (enemyPlayerTarget.Player.IsSleeping())
                {
                    vector3_1 = Vector3.get_down();
                }
                Vector3 target    = Vector3.op_Addition(enemyPlayerTarget.Player.CenterPoint(), vector3_1);
                Vector3 origin    = this.Body.CenterPoint();
                Vector3 vector3_2 = Vector3.op_Subtraction(target, origin);
                return(this.Domain.ModifyFirearmAim(((Vector3) ref vector3_2).get_normalized(), target, origin, 1f));
            }
            Quaternion rotation    = this.Body.eyes.rotation;
            Vector3    eulerAngles = ((Quaternion) ref rotation).get_eulerAngles();

            return(((Vector3) ref eulerAngles).get_normalized());
        }
        public static bool IsAtPreferredRange(ScientistJunkpileContext context, ref NpcPlayerInfo target, AttackEntity firearm)
        {
            if (firearm == null)
            {
                return(false);
            }
            switch (firearm.effectiveRangeType)
            {
            case NPCPlayerApex.WeaponTypeEnum.CloseRange:
            {
                return(target.SqrDistance <= context.Body.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm));
            }

            case NPCPlayerApex.WeaponTypeEnum.MediumRange:
            {
                if (target.SqrDistance > context.Body.AiDefinition.Engagement.SqrMediumRangeFirearm(firearm))
                {
                    return(false);
                }
                return(target.SqrDistance > context.Body.AiDefinition.Engagement.SqrCloseRangeFirearm(firearm));
            }

            case NPCPlayerApex.WeaponTypeEnum.LongRange:
            {
                if (target.SqrDistance >= context.Body.AiDefinition.Engagement.SqrLongRangeFirearm(firearm))
                {
                    return(false);
                }
                return(target.SqrDistance > context.Body.AiDefinition.Engagement.SqrMediumRangeFirearm(firearm));
            }
            }
            return(false);
        }
Esempio n. 5
0
        public static bool TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info)
        {
            info.HeadVisible = false;
            info.BodyVisible = false;
            Vector3 vector3_1    = Vector3.op_Subtraction(((Component)info.Player).get_transform().get_position(), npc.transform.get_position());
            Vector3 vector3_2    = Quaternion.op_Multiply(npc.EyeRotation, Vector3.get_forward());
            float   sqrMagnitude = ((Vector3) ref vector3_1).get_sqrMagnitude();
            Vector3 normalized   = ((Vector3) ref vector3_1).get_normalized();
            float   num          = Vector3.Dot(vector3_2, normalized);

            if ((double)sqrMagnitude < (double)npc.AiDefinition.Engagement.SqrAggroRange && (double)num > (double)npc.AiDefinition.Sensory.FieldOfViewRadians)
            {
                if (info.Player.IsVisible(npc.EyePosition, info.Player.CenterPoint(), npc.AiDefinition.Engagement.AggroRange))
                {
                    info.BodyVisible = true;
                    npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
                }
                else if (info.Player.IsVisible(npc.EyePosition, info.Player.eyes.position, npc.AiDefinition.Engagement.AggroRange))
                {
                    info.HeadVisible = true;
                    npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
                }
            }
            if (!info.HeadVisible)
            {
                return(info.BodyVisible);
            }
            return(true);
        }
Esempio n. 6
0
        public static Ray AimAtBody(HTNAnimal npc, ref NpcPlayerInfo info)
        {
            Vector3 vector3  = npc.CenterPoint();
            Vector3 vector31 = info.Player.CenterPoint() - npc.CenterPoint();

            return(new Ray(vector3, vector31.normalized));
        }
Esempio n. 7
0
        public static Ray AimAtHead(HTNAnimal npc, ref NpcPlayerInfo info)
        {
            Vector3 vector3 = npc.CenterPoint();
            Vector3 player  = info.Player.eyes.position - npc.CenterPoint();

            return(new Ray(vector3, player.normalized));
        }
Esempio n. 8
0
        public static void TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info)
        {
            BearDomain aiDomain = npc.AiDomain as BearDomain;

            if (aiDomain == null)
            {
                return;
            }
            bool flag = aiDomain.BearContext.IsFact(Facts.IsStandingUp);

            info.HeadVisible = false;
            info.BodyVisible = false;
            if (info.SqrDistance < aiDomain.BearDefinition.SqrAggroRange(flag) && info.ForwardDotDir > npc.AiDefinition.Sensory.FieldOfViewRadians)
            {
                float single = aiDomain.BearDefinition.AggroRange(flag);
                Ray   ray    = BearEnemyPlayersLineOfSightSensor.AimAtBody(npc, ref info);
                if (info.Player.IsVisible(ray, single))
                {
                    info.BodyVisible = true;
                    npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
                    return;
                }
                ray = BearEnemyPlayersLineOfSightSensor.AimAtHead(npc, ref info);
                if (info.Player.IsVisible(ray, single))
                {
                    info.HeadVisible = true;
                    npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
                }
            }
        }
 public static void TickFootstepHearingTest(IHTNAgent npc, ref NpcPlayerInfo info)
 {
     if (info.SqrDistance < npc.AiDefinition.Sensory.SqrHearingRange)
     {
         float player = info.Player.estimatedSpeed;
         if (player <= 2f)
         {
             return;
         }
         if (player > 5f)
         {
             npc.AiDomain.NpcContext.EnemyPlayersAudible.Add(info);
         }
         else
         {
             HTNPlayer hTNPlayer = npc as HTNPlayer;
             if (hTNPlayer)
             {
                 AttackEntity heldEntity = hTNPlayer.GetHeldEntity() as AttackEntity;
                 if (info.SqrDistance < npc.AiDefinition.Engagement.SqrCloseRangeFirearm(heldEntity))
                 {
                     npc.AiDomain.NpcContext.EnemyPlayersAudible.Add(info);
                     return;
                 }
             }
             else if (info.SqrDistance < npc.AiDefinition.Engagement.SqrCloseRange)
             {
                 npc.AiDomain.NpcContext.EnemyPlayersAudible.Add(info);
                 return;
             }
         }
     }
 }
        public void Tick(IHTNAgent npc, float deltaTime, float time)
        {
            ScientistAStarContext npcContext = npc.AiDomain.NpcContext as ScientistAStarContext;

            if (npcContext == null)
            {
                return;
            }
            npcContext.SetFact(Facts.CanSeeEnemy, npcContext.EnemyPlayersInLineOfSight.Count > 0, true, true, true);
            float         num1           = 0.0f;
            NpcPlayerInfo npcPlayerInfo1 = new NpcPlayerInfo();

            foreach (NpcPlayerInfo npcPlayerInfo2 in npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight)
            {
                float num2 = (float)((1.0 - (double)npcPlayerInfo2.SqrDistance / (double)npc.AiDefinition.Engagement.SqrAggroRange) * 2.0) + (float)(((double)npcPlayerInfo2.ForwardDotDir + 1.0) * 0.5);
                if ((double)num2 > (double)num1)
                {
                    num1           = num2;
                    npcPlayerInfo1 = npcPlayerInfo2;
                }
                NpcPlayerInfo info = npcPlayerInfo2;
                info.VisibilityScore = num2;
                npcContext.Memory.RememberEnemyPlayer(npc, ref info, time, 0.0f, "SEE!");
            }
            npcContext.PrimaryEnemyPlayerInLineOfSight = npcPlayerInfo1;
            if (!Object.op_Inequality((Object)npcPlayerInfo1.Player, (Object)null) || !Object.op_Equality((Object)npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player, (Object)null) && (double)npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.AudibleScore >= (double)num1)
            {
                return;
            }
            npcContext.Memory.RememberPrimaryEnemyPlayer(npcPlayerInfo1.Player);
            npcContext.IncrementFact(Facts.Alertness, 2, true, true, true);
        }
Esempio n. 11
0
        public static float GetPreferredRange(ScientistContext context, ref NpcPlayerInfo target, AttackEntity firearm)
        {
            if (firearm == null)
            {
                return(context.Body.AiDefinition.Engagement.CenterOfMediumRangeFirearm(firearm));
            }
            switch (firearm.effectiveRangeType)
            {
            case NPCPlayerApex.WeaponTypeEnum.CloseRange:
            {
                return(context.Body.AiDefinition.Engagement.CloseRangeFirearm(firearm));
            }

            case NPCPlayerApex.WeaponTypeEnum.MediumRange:
            {
                return(context.Body.AiDefinition.Engagement.CenterOfMediumRangeFirearm(firearm));
            }

            case NPCPlayerApex.WeaponTypeEnum.LongRange:
            {
                return(context.Body.AiDefinition.Engagement.LongRangeFirearm(firearm));
            }
            }
            return(context.Body.AiDefinition.Engagement.CenterOfMediumRangeFirearm(firearm));
        }
        public void Tick(IHTNAgent npc, float deltaTime, float time)
        {
            NPCTurretContext npcContext = npc.AiDomain.NpcContext as NPCTurretContext;

            if (npcContext == null)
            {
                return;
            }
            npcContext.SetFact(Facts.CanSeeEnemy, npcContext.EnemyPlayersInLineOfSight.Count > 0, true, true, true);
            float         single        = 0f;
            NpcPlayerInfo npcPlayerInfo = new NpcPlayerInfo();

            foreach (NpcPlayerInfo enemyPlayersInLineOfSight in npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight)
            {
                float forwardDotDir = (enemyPlayersInLineOfSight.ForwardDotDir + 1f) * 0.5f;
                float sqrDistance   = (1f - enemyPlayersInLineOfSight.SqrDistance / npc.AiDefinition.Engagement.SqrAggroRange) * 2f + forwardDotDir;
                if (sqrDistance > single)
                {
                    single        = sqrDistance;
                    npcPlayerInfo = enemyPlayersInLineOfSight;
                }
                NpcPlayerInfo npcPlayerInfo1 = enemyPlayersInLineOfSight;
                npcPlayerInfo1.VisibilityScore = sqrDistance;
                npcContext.Memory.RememberEnemyPlayer(npc, ref npcPlayerInfo1, time, 0f, "SEE!");
            }
            npcContext.PrimaryEnemyPlayerInLineOfSight = npcPlayerInfo;
            if (npcPlayerInfo.Player != null && (npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.Player == null || npcContext.Memory.PrimaryKnownEnemyPlayer.PlayerInfo.AudibleScore < single))
            {
                npcContext.Memory.RememberPrimaryEnemyPlayer(npcPlayerInfo.Player);
                npcContext.IncrementFact(Facts.Alertness, 2, true, true, true);
            }
        }
        public static bool TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info)
        {
            info.HeadVisible = false;
            info.BodyVisible = false;
            Vector3 player      = info.Player.transform.position - npc.transform.position;
            Vector3 eyeRotation = npc.EyeRotation * Vector3.forward;
            float   single      = player.sqrMagnitude;
            float   single1     = Vector3.Dot(eyeRotation, player.normalized);

            if (single < npc.AiDefinition.Engagement.SqrAggroRange && single1 > npc.AiDefinition.Sensory.FieldOfViewRadians)
            {
                if (info.Player.IsVisible(npc.EyePosition, info.Player.CenterPoint(), npc.AiDefinition.Engagement.AggroRange))
                {
                    info.BodyVisible = true;
                    npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
                }
                else if (info.Player.IsVisible(npc.EyePosition, info.Player.eyes.position, npc.AiDefinition.Engagement.AggroRange))
                {
                    info.HeadVisible = true;
                    npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
                }
            }
            if (info.HeadVisible)
            {
                return(true);
            }
            return(info.BodyVisible);
        }
        public void Tick(IHTNAgent npc, float deltaTime, float time)
        {
            ScientistJunkpileContext npcContext = npc.AiDomain.NpcContext as ScientistJunkpileContext;

            if (npcContext == null)
            {
                return;
            }
            float npcJunkpileDistAggroGate = ConVar.AI.npc_junkpile_dist_aggro_gate * ConVar.AI.npc_junkpile_dist_aggro_gate;

            for (int i = 0; i < npc.AiDomain.NpcContext.EnemyPlayersInRange.Count; i++)
            {
                NpcPlayerInfo item = npc.AiDomain.NpcContext.EnemyPlayersInRange[i];
                if (!(item.Player == null) && !(item.Player.transform == null))
                {
                    if (Mathf.Approximately(item.SqrDistance, 0f))
                    {
                        Vector3 player = item.Player.transform.position - npc.BodyPosition;
                        item.SqrDistance = player.sqrMagnitude;
                        npc.AiDomain.NpcContext.EnemyPlayersInRange[i] = item;
                    }
                    if (item.SqrDistance < npcJunkpileDistAggroGate)
                    {
                        npcContext.Memory.MarkEnemy(item.Player);
                    }
                }
            }
        }
Esempio n. 15
0
        public override void ResetState()
        {
            base.ResetState();
            this.Memory.ResetState();
            this.IsWorldStateDirty = false;
            this.PlanState         = PlanStateType.NoPlan;
            this.PlanResult        = PlanResultType.NoPlan;
            this.HtnPlan.Clear();
            this.AppliedEffects.Clear();
            this.AppliedExpectedEffects.Clear();
            this.DecompositionScore = 2147483647;
            this.CurrentTask        = null;
            this.HasVisitedLastKnownEnemyPlayerLocation = false;
            this.OrientationType = NpcOrientation.Heading;
            this.PlayersInRange.Clear();
            this.EnemyPlayersInRange.Clear();
            this.EnemyPlayersAudible.Clear();
            this.EnemyPlayersInLineOfSight.Clear();
            NpcPlayerInfo npcPlayerInfo = new NpcPlayerInfo();

            this.PrimaryEnemyPlayerAudible = npcPlayerInfo;
            npcPlayerInfo = new NpcPlayerInfo();
            this.PrimaryEnemyPlayerInLineOfSight = npcPlayerInfo;
            this.Location = null;
            this.CoverPoints.Clear();
            for (int i = 0; i < (int)this._worldState.Length; i++)
            {
                this._worldState[i]         = 0;
                this._previousWorldState[i] = 0;
            }
        }
Esempio n. 16
0
        public static void TickLineOfSightTest(IHTNAgent npc, ref NpcPlayerInfo info)
        {
            BearDomain aiDomain = npc.AiDomain as BearDomain;

            if (Object.op_Equality((Object)aiDomain, (Object)null))
            {
                return;
            }
            bool isStanding = aiDomain.BearContext.IsFact(Rust.Ai.HTN.Bear.Facts.IsStandingUp);

            info.HeadVisible = false;
            info.BodyVisible = false;
            if ((double)info.SqrDistance >= (double)aiDomain.BearDefinition.SqrAggroRange(isStanding) || (double)info.ForwardDotDir <= (double)npc.AiDefinition.Sensory.FieldOfViewRadians)
            {
                return;
            }
            float maxDistance = aiDomain.BearDefinition.AggroRange(isStanding);
            Ray   ray1        = BearEnemyPlayersLineOfSightSensor.AimAtBody(npc, ref info);

            if (info.Player.IsVisible(ray1, maxDistance))
            {
                info.BodyVisible = true;
                npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
            }
            else
            {
                Ray ray2 = BearEnemyPlayersLineOfSightSensor.AimAtHead(npc, ref info);
                if (!info.Player.IsVisible(ray2, maxDistance))
                {
                    return;
                }
                info.HeadVisible = true;
                npc.AiDomain.NpcContext.EnemyPlayersInLineOfSight.Add(info);
            }
        }
        protected virtual bool EvaluatePlayer(BaseNpcContext context, IHTNAgent npc, ref NpcPlayerInfo player, float time)
        {
            if (player.Player.Family == npc.Family)
            {
                return(false);
            }
            List <NpcPlayerInfo> playersInRange = npc.AiDomain.NpcContext.PlayersInRange;
            bool flag = false;
            int  num  = 0;

            while (num < playersInRange.Count)
            {
                if (playersInRange[num].Player != player.Player)
                {
                    num++;
                }
                else
                {
                    flag = true;
                    break;
                }
            }
            if (!flag)
            {
                playersInRange.Add(player);
            }
            return(true);
        }
        protected virtual bool EvaluatePlayer(
            BaseNpcContext context,
            IHTNAgent npc,
            ref NpcPlayerInfo player,
            float time)
        {
            if (player.Player.Family == npc.Family)
            {
                return(false);
            }
            List <NpcPlayerInfo> playersInRange = npc.AiDomain.NpcContext.PlayersInRange;
            bool flag = false;

            for (int index = 0; index < playersInRange.Count; ++index)
            {
                if (Object.op_Equality((Object)playersInRange[index].Player, (Object)player.Player))
                {
                    flag = true;
                    break;
                }
            }
            if (!flag)
            {
                playersInRange.Add(player);
            }
            return(true);
        }
        public void Tick(IHTNAgent npc, float deltaTime, float time)
        {
            ScientistJunkpileContext npcContext = npc.AiDomain.NpcContext as ScientistJunkpileContext;

            if (npcContext == null)
            {
                return;
            }
            float num = AI.npc_junkpile_dist_aggro_gate * AI.npc_junkpile_dist_aggro_gate;

            for (int index = 0; index < npc.AiDomain.NpcContext.EnemyPlayersInRange.Count; ++index)
            {
                NpcPlayerInfo npcPlayerInfo = npc.AiDomain.NpcContext.EnemyPlayersInRange[index];
                if (!Object.op_Equality((Object)npcPlayerInfo.Player, (Object)null) && !Object.op_Equality((Object)((Component)npcPlayerInfo.Player).get_transform(), (Object)null))
                {
                    if (Mathf.Approximately(npcPlayerInfo.SqrDistance, 0.0f))
                    {
                        ref NpcPlayerInfo local        = ref npcPlayerInfo;
                        Vector3           vector3      = Vector3.op_Subtraction(((Component)npcPlayerInfo.Player).get_transform().get_position(), npc.BodyPosition);
                        double            sqrMagnitude = (double)((Vector3) ref vector3).get_sqrMagnitude();
                        local.SqrDistance = (float)sqrMagnitude;
                        npc.AiDomain.NpcContext.EnemyPlayersInRange[index] = npcPlayerInfo;
                    }
                    if ((double)npcPlayerInfo.SqrDistance < (double)num)
                    {
                        npcContext.Memory.MarkEnemy(npcPlayerInfo.Player);
                    }
                }
            }
Esempio n. 20
0
        public static Ray AimAtHead(HTNAnimal npc, ref NpcPlayerInfo info)
        {
            Vector3 vector3_1  = npc.CenterPoint();
            Vector3 vector3_2  = Vector3.op_Subtraction(info.Player.eyes.position, npc.CenterPoint());
            Vector3 normalized = ((Vector3) ref vector3_2).get_normalized();

            return(new Ray(vector3_1, normalized));
        }
Esempio n. 21
0
        public static Ray AimAtBody(HTNPlayer npc, ref NpcPlayerInfo info)
        {
            Vector3 position   = npc.eyes.position;
            Vector3 vector3    = Vector3.op_Subtraction(info.Player.CenterPoint(), npc.CenterPoint());
            Vector3 normalized = ((Vector3) ref vector3).get_normalized();

            return(new Ray(position, normalized));
        }
 protected virtual bool EvaluatePlayer(BaseNpcContext context, IHTNAgent npc, NpcPlayerInfo player, float time)
 {
     if (player.Player.Family == npc.Family)
     {
         return(false);
     }
     context.EnemyPlayersInRange.Add(player);
     return(true);
 }
Esempio n. 23
0
        public override Vector3 GetDirectionToPrimaryEnemyPlayerTargetHead()
        {
            NpcPlayerInfo primaryEnemyPlayerTarget = this.GetPrimaryEnemyPlayerTarget();

            if (primaryEnemyPlayerTarget.Player == null)
            {
                return(this.Body.transform.forward);
            }
            return((primaryEnemyPlayerTarget.Player.eyes.position - this.Body.CenterPoint()).normalized);
        }
        public void Tick(IHTNAgent npc, float deltaTime, float time)
        {
            if (AI.ignoreplayers)
            {
                return;
            }
            BearPlayersInRangeSensor.PlayerQueryResultCount = BaseEntity.Query.Server.GetPlayersInSphere(npc.transform.get_position(), npc.AiDefinition.Sensory.VisionRange, BearPlayersInRangeSensor.PlayerQueryResults, (Func <BasePlayer, bool>)(player => !Object.op_Equality((Object)player, (Object)null) && player.isServer && (!player.IsDestroyed && !Object.op_Equality((Object)((Component)player).get_transform(), (Object)null)) && (!player.IsDead() && (!player.IsSleeping() || (double)player.secondsSleeping >= (double)NPCAutoTurret.sleeperhostiledelay))));
            List <NpcPlayerInfo> playersInRange = npc.AiDomain.NpcContext.PlayersInRange;

            if (BearPlayersInRangeSensor.PlayerQueryResultCount > 0)
            {
                for (int index1 = 0; index1 < BearPlayersInRangeSensor.PlayerQueryResultCount; ++index1)
                {
                    BasePlayer playerQueryResult = BearPlayersInRangeSensor.PlayerQueryResults[index1];
                    HTNPlayer  htnPlayer         = npc as HTNPlayer;
                    if (!Object.op_Inequality((Object)htnPlayer, (Object)null) || !Object.op_Equality((Object)playerQueryResult, (Object)htnPlayer))
                    {
                        Vector3 vector3 = Vector3.op_Subtraction(((Component)playerQueryResult).get_transform().get_position(), npc.transform.get_position());
                        if ((double)((Vector3) ref vector3).get_sqrMagnitude() <= (double)npc.AiDefinition.Sensory.SqrVisionRange)
                        {
                            bool flag = false;
                            for (int index2 = 0; index2 < playersInRange.Count; ++index2)
                            {
                                NpcPlayerInfo npcPlayerInfo = playersInRange[index2];
                                if (Object.op_Equality((Object)npcPlayerInfo.Player, (Object)playerQueryResult))
                                {
                                    npcPlayerInfo.Time     = time;
                                    playersInRange[index2] = npcPlayerInfo;
                                    flag = true;
                                    break;
                                }
                            }
                            if (!flag)
                            {
                                playersInRange.Add(new NpcPlayerInfo()
                                {
                                    Player = playerQueryResult,
                                    Time   = time
                                });
                            }
                        }
                    }
                }
            }
            for (int index = 0; index < playersInRange.Count; ++index)
            {
                NpcPlayerInfo player = playersInRange[index];
                if ((double)time - (double)player.Time > (double)npc.AiDefinition.Memory.ForgetInRangeTime && npc.AiDomain.NpcContext.BaseMemory.ShouldRemoveOnPlayerForgetTimeout(time, player))
                {
                    playersInRange.RemoveAt(index);
                    --index;
                }
            }
        }
Esempio n. 25
0
        public override Vector3 GetDirectionToPrimaryEnemyPlayerTargetHead()
        {
            NpcPlayerInfo enemyPlayerTarget = this.GetPrimaryEnemyPlayerTarget();

            if (!Object.op_Inequality((Object)enemyPlayerTarget.Player, (Object)null))
            {
                return(((Component)this.Body).get_transform().get_forward());
            }
            Vector3 vector3 = Vector3.op_Subtraction(enemyPlayerTarget.Player.eyes.position, this.Body.CenterPoint());

            return(((Vector3) ref vector3).get_normalized());
        }
        public override Vector3 GetDirectionToPrimaryEnemyPlayerTargetHead()
        {
            NpcPlayerInfo primaryEnemyPlayerTarget = this.GetPrimaryEnemyPlayerTarget();

            if (primaryEnemyPlayerTarget.Player == null)
            {
                return(this.Body.eyes.rotation.eulerAngles.normalized);
            }
            Vector3 player   = primaryEnemyPlayerTarget.Player.eyes.position;
            Vector3 vector3  = this.Body.CenterPoint();
            Vector3 vector31 = (player - vector3).normalized;

            return(this.Domain.ModifyFirearmAim(vector31, player, vector3, 1f));
        }
Esempio n. 27
0
        public static Ray AimAtHead(IHTNAgent npc, ref NpcPlayerInfo info)
        {
            HTNPlayer hTNPlayer = npc as HTNPlayer;

            if (hTNPlayer != null)
            {
                return(BearEnemyPlayersLineOfSightSensor.AimAtHead(hTNPlayer, ref info));
            }
            HTNAnimal hTNAnimal = npc as HTNAnimal;

            if (hTNAnimal != null)
            {
                return(BearEnemyPlayersLineOfSightSensor.AimAtHead(hTNAnimal, ref info));
            }
            return(new Ray());
        }
 public override bool ShouldRemoveOnPlayerForgetTimeout(float time, NpcPlayerInfo player)
 {
     if (player.Player == null || player.Player.transform == null || player.Player.IsDestroyed || player.Player.IsDead() || player.Player.IsWounded())
     {
         return(true);
     }
     if (time <= player.Time + this.Definition.Memory.ForgetInRangeTime)
     {
         return(false);
     }
     if (this.MarkedEnemies.Contains(player.Player) && (player.SqrDistance <= 0f || player.SqrDistance > this.Definition.Sensory.SqrVisionRange))
     {
         return(false);
     }
     return(true);
 }
Esempio n. 29
0
        public static Ray AimAtBody(IHTNAgent npc, ref NpcPlayerInfo info)
        {
            HTNPlayer npc1 = npc as HTNPlayer;

            if (Object.op_Inequality((Object)npc1, (Object)null))
            {
                return(BearEnemyPlayersLineOfSightSensor.AimAtBody(npc1, ref info));
            }
            HTNAnimal npc2 = npc as HTNAnimal;

            if (Object.op_Inequality((Object)npc2, (Object)null))
            {
                return(BearEnemyPlayersLineOfSightSensor.AimAtBody(npc2, ref info));
            }
            return((Ray)null);
        }
        public override Vector3 GetDirectionToPrimaryEnemyPlayerTargetHead()
        {
            NpcPlayerInfo enemyPlayerTarget = this.GetPrimaryEnemyPlayerTarget();

            if (Object.op_Inequality((Object)enemyPlayerTarget.Player, (Object)null))
            {
                Vector3 position = enemyPlayerTarget.Player.eyes.position;
                Vector3 origin   = this.Body.CenterPoint();
                Vector3 vector3  = Vector3.op_Subtraction(position, origin);
                return(this.Domain.ModifyFirearmAim(((Vector3) ref vector3).get_normalized(), position, origin, 1f));
            }
            Quaternion rotation    = this.Body.eyes.rotation;
            Vector3    eulerAngles = ((Quaternion) ref rotation).get_eulerAngles();

            return(((Vector3) ref eulerAngles).get_normalized());
        }