예제 #1
0
        public override void OnMissionTick(float dt)
        {
            base.OnMissionTick(dt);

            foreach (Agent agent in Mission.Agents)
            {
                if (agent.IsMainAgent || !agent.IsHuman)
                {
                    continue;
                }

                if (IsAgentSeeableByOtherAgent(Agent.Main, agent, 50f))
                {
                    GiveOrdersAfterDeathSubModule.Print($"You can be seen by {agent.Name}");
                }

                /*DetectThievingBehaviour detectThievingBehaviour = agentNavigator.GetBehaviorGroup<DailyBehaviorGroup>()?.GetBehavior<DetectThievingBehaviour>();
                 * if (detectThievingBehaviour == null)
                 * {
                 *  GiveOrdersAfterDeathSubModule.Print("detectThievingBehaviour is null");
                 *  return;
                 * }
                 *
                 * if (detectThievingBehaviour.IsMainAgentThieving)
                 * {
                 *  // InformationManager.DisplayMessage(new InformationMessage(agent.Character.Name + " Sees you !"));
                 *  GiveOrdersAfterDeathSubModule.Print($"{agent.Name} can see u");
                 * }*/
            }
        }
예제 #2
0
        private bool IsAgentSeeableByOtherAgent(Agent targetAgent, Agent agent, float distance)
        {
            float distanceFromTarget = (agent.Position - targetAgent.Position).Length;

            if (distanceFromTarget > distance)
            {
                return(false);
            }

            if (IsObjectOrTerrainBetweenAgents(agent, targetAgent))
            {
                return(false);
            }

            float eyeAngle = getEyeAngleBetweenAgentsFromLeftAgentPerspective(agent, targetAgent);

            GiveOrdersAfterDeathSubModule.Print($"$Angle for {agent.Name} is {eyeAngle} and distance {distanceFromTarget}");

            // If the target agent is less than X meters away from the agent, then the target agent can be seen
            // by agent, if the target agent is in front or less than Y° from the agent's eye sight.
            return(eyeAngle <= 1.4f && (
                       distanceFromTarget <= 5f ||
                       distanceFromTarget <= 10f && eyeAngle <= 1.3f ||
                       distanceFromTarget <= 12.5f && eyeAngle <= 1.15f ||
                       distanceFromTarget <= 15f && eyeAngle <= 1f ||
                       distanceFromTarget <= 17.5f && eyeAngle <= 0.85f ||
                       distanceFromTarget <= 20f && eyeAngle <= 0.75f ||
                       distanceFromTarget <= 30f && eyeAngle <= 0.60f ||
                       eyeAngle <= 0.5f));
        }
예제 #3
0
        /*public override void OnMissionTick(float dt)
         * {
         *  base.OnMissionTick(dt);
         *
         *  foreach (var VARIABLE in Mission.)
         *  {
         *
         *  }
         *
         *  if (agent.IsMainAgent || !agent.IsHuman)
         *  {
         *      return;
         *  }
         *
         *  if (agent.GetComponent<CampaignAgentComponent>().AgentNavigator != null)
         *  {
         *      GiveOrdersAfterDeathSubModule.Print($"{agent.Name} : Setting DetectThievingBehaviour");
         *      AgentNavigator agentNavigator = agent.GetComponent<CampaignAgentComponent>().AgentNavigator;
         *      agentNavigator.GetBehaviorGroup<DailyBehaviorGroup>().AddBehavior<DetectThievingBehaviour>();
         *  }
         *  else
         *  {
         *      GiveOrdersAfterDeathSubModule.Print($"{agent.Name} : AgentNavigator is null");
         *  }
         * }*/

        public override void AfterStart()
        {
            base.AfterStart();

            foreach (Agent agent in Mission.Agents)
            {
                if (agent.IsMainAgent || !agent.IsHuman)
                {
                    continue;
                }

                if (agent.GetComponent <CampaignAgentComponent>().AgentNavigator != null)
                {
                    AgentNavigator agentNavigator = agent.GetComponent <CampaignAgentComponent>().AgentNavigator;
                    agentNavigator.GetBehaviorGroup <DailyBehaviorGroup>().AddBehavior <DetectThievingBehaviour>();
                    GiveOrdersAfterDeathSubModule.Print($"{agent.Name} : Setting DetectThievingBehaviour");
                }
                else
                {
                    GiveOrdersAfterDeathSubModule.Print($"{agent.Name} : AgentNavigator is null");
                }
            }
        }