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); } }
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 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 static Ray AimAtBody(IHTNAgent npc, ref NpcPlayerInfo info) { HTNPlayer hTNPlayer = npc as HTNPlayer; if (hTNPlayer != null) { return(BearEnemyPlayersLineOfSightSensor.AimAtBody(hTNPlayer, ref info)); } HTNAnimal hTNAnimal = npc as HTNAnimal; if (hTNAnimal != null) { return(BearEnemyPlayersLineOfSightSensor.AimAtBody(hTNAnimal, ref info)); } return(new Ray()); }