public void DispatchMessage(float delay, int sender, int receiver, int msg, Transform info = null) { Telegram_CH4 telegram = new Telegram_CH4(); telegram.ConstructTelegram(delay, sender, receiver, msg, info); if (delay <= 0.0f) { if (receiver != 1 || receiver != 6) { Discharge(EntityManager_CH4.instance.GetEntityFromID(receiver) as FieldPlayer, telegram); } else { Discharge(EntityManager_CH4.instance.GetEntityFromID(receiver) as GoalKeeper, telegram); } } else { float currentTime = Time.time; telegram.DispatchTime = currentTime + delay; // Input telegram into pq. priorityQ.Enqueue(telegram); } }
private void Discharge(GoalKeeper pReceiver, Telegram_CH4 msg = null) { if (msg == null || !pReceiver.HandleMessage(msg)) { Debug.Log("Empty Msg Detected"); } }
public override bool OnMessage(FieldPlayer player, Telegram_CH4 telegram) { switch (telegram.GetMessageIndex()) { case SoccerMessages.Msg_ReceiveBall: { // set the target for this player player.Steering().SetTarget(telegram.infos.position); // change the state. player.GetFSM().ChangeState(ReceiveBall.instance); return true; } case SoccerMessages.Msg_SupportAttacker: { if (player.GetFSM().IsInstate(SupportAttacker.instance)) { return true; } player.Steering().SetTarget(SupportSpotCalculator.instance.DetermineBestSupportingPosition(player.transform.parent.GetComponent<SoccerTeam>().teamColor)); player.GetFSM().ChangeState(SupportAttacker.instance); return true; } case SoccerMessages.Msg_GoHome: { player.SetHomeRegion(player.transform.parent.GetComponent<SoccerTeam>().initialRegion[int.Parse(player.transform.name) - 1]); player.GetFSM().ChangeState(ReturnToHomeRegion.instance); return true; } case SoccerMessages.Msg_Wait: { player.GetFSM().ChangeState(Wait.instance); return true; } case SoccerMessages.Msg_PassToMe: { FieldPlayer receiver = telegram.infos.gameObject.GetComponent<FieldPlayer>(); if (player.Team().Receiver() != null && !player.BallWithKickingRange()) { return true; } player.Ball().SetOwner(receiver.gameObject); player.Ball().Kick((receiver.transform.position - player.Ball().transform.position).normalized, Prm.instance.MaxPassingForce); MessageDispatcher_CH4.instance.DispatchMessage(0f, player.Id(), receiver.Id(), SoccerMessages.Msg_ReceiveBall, receiver.transform); player.GetFSM().ChangeState(Wait.instance); player.FindSupport(); return true; } } return false; }
public Telegram_CH4 Peek() { if (priorityQueue.Count > 0) { return(priorityQueue[0]); } else { Telegram_CH4 dummy = new Telegram_CH4(); return(dummy); } }
public bool HandleMessage(Telegram_CH4 msg) { // 1. We have to check whether this state is valid and executable or not. if (m_pCurrentState && m_pCurrentState.OnMessage(m_pOwner, msg)) { return(true); } // 2. If we couldn't execute, and Global state is set, move our Message to global state. if (m_pGlobalState && m_pGlobalState.OnMessage(m_pOwner, msg)) { return(true); } return(false); }
public void Enqueue(Telegram_CH4 telegram) { float delayTime = telegram.DispatchTime; int index = 0; bool isInserted = false; for (int iter = 0; iter < priorityQueue.Count; iter++) { if (priorityQueue[iter].DispatchTime >= delayTime) { priorityQueue.Insert(index, telegram); isInserted = true; break; } } if (!isInserted) { priorityQueue.Add(telegram); } }
public override bool OnMessage(GoalKeeper keeper, Telegram_CH4 telegram) { switch (telegram.GetMessageIndex()) { case SoccerMessages.Msg_GoHome: { // set the target for this player(original location of keeper) keeper.Steering().SetTarget(keeper.Team().initialRegion[0]); // change the state. keeper.GetFSM().ChangeState(ReturnHome.instance); return(true); } case SoccerMessages.Msg_ReceiveBall: { keeper.GetFSM().ChangeState(InterceptBall.instance); return(true); } } return(false); }
public new bool HandleMessage(Telegram_CH4 msg) { return(m_pStateMachine.HandleMessage(msg)); }
public bool HandleMessage(Telegram_CH4 msg) { return(false); }
public virtual bool OnMessage(Entity_Type entityType, Telegram_CH4 telegram) { return(false); }