public override State Next() { State res = this; AgentSpectator a = _stateMachine.Agent as AgentSpectator; if (a.inQueue) { res = new StateSpectatorFollowQueue(_stateMachine, _target); } a.inQueue = false; return(res); }
public override void Action() { AgentSpectator spectator = _stateMachine.Agent as AgentSpectator; if (spectator.inQueue) { _stateMachine.Agent.Body.MoveToDestination(spectator.queuePosition); } else if (_himSelf.isChecked) { _stateMachine.Agent.Body.MoveToDestination(spectator.ticket.position); } }
public override State Next() { AgentSpectator agent = _stateMachine.Agent as AgentSpectator; State res = this; if (!_askedForTicket && _ticketOffice.queue.First() == agent) { if (Vector3.Distance(agent.Position, _ticketOffice.Position) < 2f) { //First demand if (agent.ticketRefused == null) { int askForDoor = 0; askForDoor = agent.GetCategory();// Utils.PseudoGaussRandom(1, Environment.GetInstance().CategoriesNumber); agent.SendMessage(_ticketOffice, new MessageAskForTicket(askForDoor)); _askedForTicket = true; } //Second demand, he get a list with available category, he ask else { Debug.Log("new try"); int askForDoor = agent.ticketRefused.stillAvailableCategories[Random.Range(0, agent.ticketRefused.stillAvailableCategories.Count - 1)]; // ILLEGAL : if between there a no ticket in this category agent.SendMessage(_ticketOffice, new MessageAskForTicket(askForDoor)); _askedForTicket = true; } } } if (agent.ticketRefused != null && agent.notifiedTicketRefused) { _askedForTicket = false; agent.notifiedTicketRefused = false; } if (agent.ticket != null) { _ticketOffice.times.Add(Time.time - agent.timeEnterTicketOfficeQueue); res = new SpectatorStateEnterStadium(_stateMachine); } if (agent.noTicketAvailable) { res = new SpectatorStateGoOut(_stateMachine); } return(res); }
public SpectatorStateEnterStadium(StateMachine stateMachine) : base(stateMachine) { _himSelf = stateMachine.Agent as AgentSpectator; List <AgentSecurity> securityAgents = (_stateMachine.Agent.Body as AgentSpectatorBody).securityInLineOfVision; int minAgents = -1; AgentSecurity selectedSecurity = null; foreach (AgentSecurity ags in securityAgents) { int agents = ags.queue.agents.Count; if (agents < minAgents || minAgents == -1) { selectedSecurity = ags; minAgents = agents; } } _target = selectedSecurity; _stateMachine.Agent.SendMessage(_target, new MessageAskForQueue()); }
public SpectatorExitStadium(StateMachine stateMachine) : base(stateMachine) { isMoving = false; spectator = stateMachine.Agent as AgentSpectator; }