Esempio n. 1
0
    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);
        }
    }
Esempio n. 2
0
 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);
 }
Esempio n. 10
0
 public virtual bool OnMessage(Entity_Type entityType, Telegram_CH4 telegram)
 {
     return(false);
 }