private void OnEnable() { PlayerCreationWriter.CommandReceiver.OnCreatePlayer.RegisterResponse(OnCreatePlayer); var update = new PlayerCreation.Update(); update.SetCanAddPlayers(true); PlayerCreationWriter.Send(update); }
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()); }
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); } }
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()); }