Exemplo n.º 1
0
        private void OnEnable()
        {
            PlayerCreationWriter.CommandReceiver.OnCreatePlayer.RegisterResponse(OnCreatePlayer);

            var update = new PlayerCreation.Update();

            update.SetCanAddPlayers(true);
            PlayerCreationWriter.Send(update);
        }
Exemplo n.º 2
0
        private HandlePlayerDeathResponse OnHandlePlayerDeath(HandlePlayerDeathRequest request, ICommandCallerInfo callerinfo)
        {
            EntityId dyingId              = request.dyingPlayerId;
            EntityId killerId             = playerCreationWriter.Data.killerId;
            int      numberOfPlayersAlive = playerCreationWriter.Data.numberOfPlayersAlive - 1;

            if (dyingId.Equals(killerId))
            {
                var playerQuery = Query.HasComponent <Health>().ReturnOnlyEntityIds();
                SpatialOS.WorkerCommands.SendQuery(playerQuery)
                .OnSuccess(result => {
                    var playerEntityIds = result.Entities.Keys.GetEnumerator();

                    int i = 0;
                    while (i < numberOfPlayersAlive)
                    {
                        EntityId curId = playerEntityIds.Current;
                        if (curId.Id != 0)
                        {
                            if (curId == killerId)
                            {
                                SendDeathCommand("You have been rekt.", curId);
                            }
                            else
                            {
                                SendDeathCommand("The rogue monkey has been rekt.  You win!", curId);
                            }
                            i++;
                        }
                        playerEntityIds.MoveNext();
                    }
                })
                .OnFailure(response => {
                    Debug.Log("All players query failed.  Trying again...");
                    OnHandlePlayerDeath(request, callerinfo);
                });
            }
            else
            {
                SendDeathCommand("You have been rekt.", dyingId);
                if (numberOfPlayersAlive == 1)
                {
                    SendDeathCommand("All the other monkeys are rekt.  You win!", killerId);
                }
            }

            var update = new PlayerCreation.Update();

            update.SetNumberOfPlayersAlive(numberOfPlayersAlive);
            playerCreationWriter.Send(update);

            return(new HandlePlayerDeathResponse());
        }
Exemplo n.º 3
0
        private void OnSuccessfulPlayerCreation(int numberOfPlayersConnected, EntityId entityId)
        {
            numberOfPlayersConnected = numberOfPlayersConnected + 1;

            var update = new PlayerCreation.Update();

            update.SetNumberOfPlayersConnected(numberOfPlayersConnected);
            update.SetNumberOfPlayersAlive(numberOfPlayersConnected);

            if (numberOfPlayersConnected == SimulationSettings.RequiredNumberOfPlayers)
            {
                var playerQuery = Query.HasComponent <Health>().ReturnOnlyEntityIds();
                SpatialOS.WorkerCommands.SendQuery(playerQuery)
                .OnSuccess(result => {
                    var playerEntityIds = result.Entities.Keys.GetEnumerator();
                    int randIndex       = UnityEngine.Random.Range(0, numberOfPlayersConnected);
                    EntityId killerId   = new EntityId(0);

                    int i = 0;
                    while (i < numberOfPlayersConnected)
                    {
                        EntityId curId = playerEntityIds.Current;
                        if (curId.Id != 0)
                        {
                            if (i == randIndex)
                            {
                                killerId = curId;
                                SendInitialInstructions("You are the rogue monkey", curId);
                            }
                            else
                            {
                                SendInitialInstructions("You are innocent", curId);
                            }
                            i++;
                        }
                        playerEntityIds.MoveNext();
                    }

                    update.SetKillerId(killerId);
                    update.SetCanAddPlayers(false);
                    PlayerCreationWriter.Send(update);
                })
                .OnFailure(response => {
                    Debug.Log("All players query failed.  Trying again...");
                    SpatialOS.WorkerCommands.SendQuery(playerQuery);
                });
            }
            else
            {
                PlayerCreationWriter.Send(update);
            }
        }
Exemplo n.º 4
0
        private HandlePlayerDisconnectResponse OnHandlePlayerDisconnect(HandlePlayerDisconnectRequest request, ICommandCallerInfo callerinfo)
        {
            int numberOfPlayersConnected = playerCreationWriter.Data.numberOfPlayersConnected - 1;

            Debug.Log("HANDLING A PLAYER DISCONNECT");
            var update = new PlayerCreation.Update();

            update.SetNumberOfPlayersConnected(numberOfPlayersConnected);
            if (numberOfPlayersConnected == 0)
            {
                update.SetCanAddPlayers(true);
                update.SetNumberOfPlayersAlive(0);
            }
            playerCreationWriter.Send(update);

            return(new HandlePlayerDisconnectResponse());
        }