Esempio n. 1
0
        private void ProcessGroupMoveBeforeMeet(AgentData agentData)
        {
            var           agent         = agentData.Agent;
            GroupSequence groupSequence = null;

            if (SimulationController.Instance.GroupManager.IsMemberOfAGroup(agent))
            {
                Debug.Log("Already a member of a group!");
                SimulationController.Instance.GroupManager.GetActiveGroup(agent);
            }
            else if (SimulationController.Instance.GroupManager.CanCreateAGroup(agent, agent.GetNextSequence()))
            {
                Debug.Log("Creating a group!");
                SimulationController.Instance.GroupManager.CreateGroup(agent, agent.GetNextSequence(), agentData.StartingDoor);
            }
            else
            {
                Debug.Log("Act as individual");
                ProcessIndividualMoveAgent(agentData);
                return;
            }

            groupSequence = SimulationController.Instance.GroupManager.GetActiveGroup(agent);

            if (groupSequence.LeaveDoorTogether)
            {
                for (var index = 0; index < groupSequence.agents.Count; index++)
                {
                    var groupSequenceAgent = groupSequence.agents[index];

                    groupSequenceAgent.gameObject.SetActive(true);
                    groupSequenceAgent.gameObject.GetComponent <NavMeshAgent>().enabled = false;
                    groupSequenceAgent.SetStartingPosition(agentData.StartingDoor);
                    groupSequenceAgent.gameObject.GetComponent <MeshRenderer>()
                    .SetPropertyBlock(agentData.MaterialPropertyBlock);
                    groupSequenceAgent.StartSequence(AgentState.WalkingToMeetingPosition);
                    groupSequenceAgent.GetNextSequence().disabled = true;
                    groupSequence.MarkAgentArrived();
                    if (!activeAgents.Contains(groupSequenceAgent))
                    {
                        activeAgents.Add(groupSequenceAgent);
                    }
                }
                OverallData.Instance.AddAgentsLeavingBuilding(groupSequence.agents.Count);
            }
            else
            {
                agent.gameObject.SetActive(true);
                agent.gameObject.GetComponent <NavMeshAgent>().enabled = false;
                agent.SetStartingPosition(agentData.StartingDoor);
                agent.SetTarget(groupSequence.MeetingPoint);
                agent.gameObject.GetComponent <MeshRenderer>().SetPropertyBlock(agentData.MaterialPropertyBlock);
                agent.StartSequence(AgentState.WalkingToMeetingPosition);

                //Data only
                OverallData.Instance.AddAgentsLeavingBuilding(1);
            }
        }