Ejemplo n.º 1
0
        public void ActivateNext()
        {
            if (m_botCtrlIndex >= 0)
            {
                Player player = m_players[m_botCtrlIndex];
                if (player != null)
                {
                    m_engine.DenyBotCtrl(m_botCtrlIndex);
                }
            }

            bool isActivated = false;

            for (int i = 0; i < m_players.Length; ++i)
            {
                m_botCtrlIndex++;
                m_botCtrlIndex %= m_players.Length;
                Player player = m_players[m_botCtrlIndex];
                if (m_clientId != m_clientIds[m_botCtrlIndex] && player != null && !player.IsBot)
                {
                    m_clientId = m_clientIds[m_botCtrlIndex];
                    m_engine.GrantBotCtrl(m_botCtrlIndex);
                    m_pingTime  = m_time.Time;
                    isActivated = true;
                }
            }

            if (!isActivated)
            {
                m_clientId     = Guid.Empty;
                m_botCtrlIndex = -1;
            }
        }
Ejemplo n.º 2
0
        private void OnPong(Error error)
        {
            //Currently MatchEngine will be launched immediately and it does not care about different RTT for diffierent clients.
            //Some clients will look -50 ms to the past and some clients will look -500 ms or more to the past.
            //Is this a big deal? Don't know... Further investigation and playtest needed

            m_room = m_gState.GetValue <Room>("LocalGameServer.m_room");

            Player[] players;
            VoxelAbilitiesArray[]          abilities;
            SerializedTaskArray[]          serializedTasks;
            SerializedTaskTemplatesArray[] serializedTaskTemplates;
            AssignmentGroupArray[]         assignmentGroups;
            if (m_room != null)
            {
                error.Code = StatusCode.OK;
                players    = new Player[m_room.Players.Count];

                List <IBotController> bots = new List <IBotController>();

                //Will override or
                abilities               = new VoxelAbilitiesArray[m_room.Players.Count];
                serializedTasks         = new SerializedTaskArray[m_room.Players.Count];
                serializedTaskTemplates = new SerializedTaskTemplatesArray[m_room.Players.Count];
                assignmentGroups        = new AssignmentGroupArray[m_room.Players.Count];
                for (int i = 0; i < m_room.Players.Count; ++i)
                {
                    Player player = m_players[m_room.Players[i]];

                    players[i]                 = player;
                    abilities[i]               = m_abilities[m_room.Players[i]];
                    serializedTasks[i]         = m_tasks[m_room.Players[i]];
                    serializedTaskTemplates[i] = m_serializedTaskTemplates[m_room.Players[i]];
                    assignmentGroups[i]        = new AssignmentGroupArray
                    {
                        Groups = new AssignmentGroup[0]
                    };
                    if (player.IsActiveBot)
                    {
                        bots.Add(MatchFactory.CreateBotController(player, m_engine.GetTaskEngine(i), new DefaultStrategy()));
                    }
                }

                m_bots = bots.ToArray();
            }
            else
            {
                error.Code              = StatusCode.NotFound;
                error.Message           = "Room not found";
                players                 = new Player[0];
                abilities               = new VoxelAbilitiesArray[0];
                serializedTasks         = new SerializedTaskArray[0];
                serializedTaskTemplates = new SerializedTaskTemplatesArray[0];
                assignmentGroups        = new AssignmentGroupArray[0];
            }

            RaiseReadyToPlayAll(error, players, abilities, serializedTasks, serializedTaskTemplates, assignmentGroups);
            for (int i = 0; i < players.Length; ++i)
            {
                if (players[i].IsActiveBot)
                {
                    m_engine.GrantBotCtrl(i);
                    break;
                }
            }
        }