private void OnVictory() { StateManager.GetSingleton.State = StateManager.GameState.Victory; SoundManager.GetSingularity.CleanProjectileSound(); currentState = VictoryStates.PlayerComingOut; inputInfo.SetActive(false); lettersInfo.SetActive(true); gameManager.OnWin(); playersLife = new LifeBehavior[numberPlayers]; for (int i = 0; i < numberPlayers; i++) { if (gameManager.PlayerControllers[i]) { playersLife[i] = gameManager.PlayerControllers[i].gameObject.GetComponent <LifeBehavior>(); } } var connected = PlayerConnected.GetSingleton.playerArrayConnected; for (int i = 0; i < connected.Length; i++) { if (connected[i]) { playerConnected.Add(PlayerConnected.GetSingleton.getPlayer(i)); } } }
public void Init() { currentState = VictoryStates.NotWin; BaseEnemy[] allEnemies = GameObject.FindObjectsOfType <BaseEnemy>(); numberEnemyInLevel = allEnemies.Length; currentEnemiesKilled = 0; //print("enemies = " + string.Join(" ", allEnemies.Select(e => e.name).ToArray())); playerUIReady = 0; }
public static void EndRound(VictoryStates VictoryState, byte TeamWon, byte RoundEndMusicIndex) { RoundTimer = 10; RoundEnded = true; if (MultiPlayer.Type() == MultiPlayer.Types.Server) { List <object> Details = new List <object>(); Details.Add((byte)VictoryState); if (VictoryState == VictoryStates.Team) { Details.Add(TeamWon); } Details.Add(RoundEndMusicIndex); MultiPlayer.Send(MultiPlayer.Construct(Packets.EndRound, Details)); } }
private void Victory() { switch (currentState) { case VictoryStates.NotWin: // Rien a faire tant que la partie n'est pas gagnée break; case VictoryStates.PlayerComingOut: if (lastState != currentState) { // On change le layer des players pour qu'ils ne soient plus bloqués //GameObject[] players = GameObject.FindGameObjectsWithTag("Player"); //ici changement, on a déjà une liste des players dans le gameManager PlayerController[] players = GameManager.GetSingleton.PlayerControllers; for (int i = 0; i < players.Length; i++) { //players[i].layer = 14; if (players[i] != null) { players[i].gameObject.layer = 14; } } } // On attends que tous les players aient disparus de l'écran (kill) avant de passer à la phase suivante int numberDeath = 0; for (int i = 0; i < playersLife.Length; i++) { if (!playersLife[i] || playersLife[i].CurrentLife <= 0) { numberDeath++; } } //print("number death : " + numberDeath); if (numberDeath >= numberPlayers) // si tous les joueurs sont mort -> étape suivante { NextState(); } break; case VictoryStates.DisplayUI: // TODO : Fade in ? if (lastState != currentState) { SoundManager.GetSingularity.PlayMenuMusic(); //print("Victory State : DisplayUI"); panelWin.SetActive(true); NextState(); } break; case VictoryStates.PlayerUIComing: if (lastState != currentState) // Activation que la première fois, on risque de passer plusieurs fois ici { //print("Victory State : PlayerUIComing"); foreach (var playerInUI in playerUiWin) { playerInUI.SetActive(true); } } if (playerUIReady >= numberPlayers) { NextState(); } break; case VictoryStates.DisplayScore: if (lastState != currentState) { SoundManager.GetSingularity.PlayScoreSound(); for (int i = 0; i < playerScoreInUI.Count; i++) { playerScoreInUI[i].enabled = true; } foreach (var name in playerNameInUI) { name.SetActive(true); } foreach (var playerLetters in playerLettersInUI) { playerLetters.SetActive(true); } if (!coroutineScoreLaunched) { StartCoroutine(AddScoreToPlayer(frequencyAddScore, scoreToAdd, gameManager.ScoreManager.Data)); } } break; case VictoryStates.DisplayWinner: if (lastState != currentState) { NextState(); // pour l'instant on passe à la suite setCourone(); } break; case VictoryStates.EnteringNames: if (lastState != currentState) { StartCoroutine(BlinkLetters(blinkFrequency)); bool[] arePlayersConnected = gameManager.PlayersInGame; for (int i = 0; i < arePlayersConnected.Length; i++) { if (!arePlayersConnected[i]) { currentLetterEditing[i] = 3; } } } int numberPlayersReady = currentLetterEditing.Where(l => l == 3).Count(); if (numberPlayersReady >= 4) { NextState(); } break; case VictoryStates.Ready: if (lastState != currentState) { inputInfo.SetActive(true); lettersInfo.SetActive(false); PlayerData datas = gameManager.ScoreManager.Data; for (int i = 0; i < datas.scorePlayer.Count; i++) { if (datas.scorePlayer[i] > 0 && i < 4) { string playerName = playerNames[i][0].ToString() + playerNames[i][1].ToString() + playerNames[i][2].ToString(); Leaderboard.GetSingleton.AddNewHighscore(playerName, datas.scorePlayer[i]); } } } break; default: Debug.LogError("Etat de victoire non géré (voir le WinManager)"); break; } lastState = currentState; }
public static void Read(Packets Packet, NetIncomingMessage I) { switch (Packet) { case Packets.Connection: if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { var ClientVersion = I.ReadUInt64(); if (ClientVersion == Globe.Version) { var Connector = Player.Add(new Player(I.ReadString()) { Connection = I.SenderConnection }); if (Connector != null) { if ((GameType == GameTypes.TeamDeathmatch) || (GameType == GameTypes.TeamStandard)) { Connector.Team = (byte)((TeamCount(1) > TeamCount(2)) ? 2 : ((TeamCount(2) > TeamCount(1)) ? 1 : Globe.Random(1, 2))); } MultiPlayer.Send("Game", MultiPlayer.Construct("Game", Packet, Connector.Slot, Connector.Name, Connector.Team), I.SenderConnection); var Details = new List <object>(); Details.Add((byte)GameType); Details.Add(RespawnTimer); Details.Add(Connector.Team); for (byte i = 0; i < Players.Length; i++) { if ((Players[i] != null) && (Players[i] != Connector)) { Details.Add(true); Details.Add(Players[i].Name); Details.Add(Players[i].Team); } else { Details.Add(false); } } I.SenderConnection.Approve(MultiPlayer.Construct("Game", Packets.Initial, (byte)Players.Length, Connector.Slot, Details)); } else { I.SenderConnection.Deny("Full"); } } else { I.SenderConnection.Deny("Version indifference, Client: " + ClientVersion + " - Server: " + Globe.Version); } } else if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client) { var Slot = I.ReadByte(); Player.Set(Slot, new Player(I.ReadString()) { Team = I.ReadByte() }); } break; case Packets.Disconnection: var Disconnector = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : ((MultiPlayer.Type("Game") == MultiPlayer.Types.Client) ? Players[I.ReadByte()] : null)); if (Disconnector != null) { Player.Remove(Disconnector); } if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send("Game", MultiPlayer.Construct("Game", Packets.Disconnection, Disconnector.Slot), I.SenderConnection); } break; case Packets.Initial: if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client) { Players = new Player[I.ReadByte()]; Self = Player.Set(I.ReadByte(), new Player(MpName)); GameType = (GameTypes)I.ReadByte(); RespawnTimer = I.ReadDouble(); Self.Team = I.ReadByte(); for (byte i = 0; i < Players.Length; i++) { if (I.ReadBoolean()) { Players[i] = new Player(i, I.ReadString()) { Team = I.ReadByte() }; } } State = States.RequestMap; Timers.Add("Positions", (1 / 30d)); } break; case Packets.RequestMap: if (MultiPlayer.Type() == MultiPlayer.Types.Server) { List <object> Details = new List <object>(); Details.AddRange(GetSyncedMap); Details.Add((byte)State); MultiPlayer.SendTo(MultiPlayer.Construct(Packet, Details), I.SenderConnection); } else if (MultiPlayer.Type() == MultiPlayer.Types.Client) { Map = ReadSyncedMap(I); State = (States)I.ReadByte(); } break; case Packets.Position: var Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : null); Vector2 Position; float Angle; if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { if (Sender != null) { Sender.Position = I.ReadVector2(); Sender.Angle = I.ReadFloat(); } } else if (MultiPlayer.Type("Game") == MultiPlayer.Types.Client) { var Count = (byte)((I.LengthBytes - 1) / 12); for (byte i = 0; i < Count; i++) { Sender = Players[I.ReadByte()]; Position = I.ReadVector2(); Angle = I.ReadFloat(); if (Sender != null) { Sender.Position = Position; Sender.Angle = Angle; } } } break; case Packets.PlaceFore: byte ID = I.ReadByte(); ushort x = I.ReadUInt16(), y = I.ReadUInt16(); byte TAngle = I.ReadByte(); Map.PlaceFore(ID, x, y, TAngle); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, ID, x, y, TAngle), I.SenderConnection); } break; case Packets.ClearFore: x = I.ReadUInt16(); y = I.ReadUInt16(); Map.ClearFore(x, y); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, x, y), I.SenderConnection); } break; case Packets.PlaceBack: ID = I.ReadByte(); x = I.ReadUInt16(); y = I.ReadUInt16(); Map.PlaceBack(ID, x, y); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, ID, x, y), I.SenderConnection); } break; case Packets.ClearBack: x = I.ReadUInt16(); y = I.ReadUInt16(); Map.ClearBack(x, y); if (MultiPlayer.Type("Game") == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, x, y), I.SenderConnection); } break; case Packets.Fire: Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : Players[I.ReadByte()]); Position = I.ReadVector2(); Angle = I.ReadFloat(); Sender.Fire(Position, Angle); if (MultiPlayer.Type() == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, Sender.Slot, Position, Angle), I.SenderConnection); } break; case Packets.Death: Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : Players[I.ReadByte()]); Sender.Killer = Players[I.ReadByte()]; Sender.Die(); if (MultiPlayer.Type() == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, Sender.Slot, Sender.Killer.Slot), I.SenderConnection); } break; case Packets.Respawn: Sender = ((MultiPlayer.Type("Game") == MultiPlayer.Types.Server) ? Player.Get(I.SenderConnection) : Players[I.ReadByte()]); Position = I.ReadVector2(); Sender.Respawn(Position); if (MultiPlayer.Type() == MultiPlayer.Types.Server) { MultiPlayer.Send(MultiPlayer.Construct(Packet, Sender.Slot, Position), I.SenderConnection); } break; case Packets.EndRound: VictoryStates VictoryState = (VictoryStates)I.ReadByte(); byte TeamWon = ((VictoryState == VictoryStates.Team) ? I.ReadByte() : (byte)0); byte RoundEndMusicIndex = I.ReadByte(); EndRound(VictoryState, TeamWon, RoundEndMusicIndex); break; case Packets.NewRound: NewRound(); break; } }