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); }
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); }
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)); }
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)); }
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); }
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); } } } }
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; } }
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); } } }
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)); }
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); }
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; } } }
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)); }
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); }
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()); }