/// <summary> /// Exécutée dès qu'une entité est instanciée dans ce match. /// </summary> void OnEntitySpawned(BloodAndBileEngine.Entity entity) { entity.RegisterOnEntityDestroyedCallback(OnEntityDestroyed); LivingEntities.Add(entity); // Envoi de la commande aux clients ModuleMatch.SendCommandToPlayers("CreateEntity", entity.ID); }
/// <summary> /// Renvoi true si toutes les conditions de victoire sont réunies. /// </summary> protected virtual void CheckVictoryConditions() { int livingPlayersAmount = -1; EntitiesManagerModule entitiesModule = ModuleMatch.GetModule <EntitiesManagerModule>(); if (entitiesModule != null) { livingPlayersAmount = entitiesModule.GetPlayerControlledEntityLinks().Length; } if (livingPlayersAmount > -1 && livingPlayersAmount <= VICTORIOUS_PLAYER_AMOUNT) { BloodAndBileEngine.Debugger.Log("FIN DU MATCH"); // Envoi d'un message de victoire à tous les joueurs en vie. List <int> victoriousPlayers = new List <int>(); foreach (EntitiesManagerModule.PlayerToEntityLink link in entitiesModule.GetPlayerControlledEntityLinks()) { OnVictoriousPlayer(link.ConnectionID); victoriousPlayers.Add(link.ConnectionID); } // Envoi d'un message de défaite à tous les joueurs morts foreach (int coID in ModuleMatch.GetPlayerConnectionIDs()) { if (!victoriousPlayers.Contains(coID)) { OnDefeatedPlayer(coID); } } ModuleMatch.EndMatch(); } }
public override void Initialise() { base.Initialise(); EntityFactory = ModuleMatch.GetModule <MapStateModule>().GetWorldState().GetData <BloodAndBileEngine.WorldState.WorldStateData.WorldEntityFactory>(); EntityFactory.RegisterOnEntityCreatedCallback(OnEntitySpawned); SpawnPlayers(); }
void OnEntityDestroyed(BloodAndBileEngine.Entity entity) { BloodAndBileEngine.Debugger.Log("EntitiesStateModule : Entité " + entity.ID + " détruite !"); LivingEntities.Remove(entity); ModuleMatch.SendCommandToPlayers("KillEntity", entity.ID); PlayerToEntityLink destroyedLink = null; foreach (PlayerToEntityLink link in PlayerControlledEntities) { if (link.Entity == entity) { destroyedLink = link; } } if (destroyedLink != null) { BloodAndBileEngine.Debugger.Log("Destruction de l'entité joueur " + entity.ID, UnityEngine.Color.yellow); PlayerControlledEntities.Remove(destroyedLink); } }
public override void Initialise() { base.Initialise(); // Trouver tous les modules StateUpdater dans le Match. List <IStateUpdater> StateUpdaters = new List <IStateUpdater>(); MatchModule[] modules = ModuleMatch.GetModules(); foreach (MatchModule module in modules) { if (module is IStateUpdater) { StateUpdaters.Add((IStateUpdater)module); } } StateUpdaterModules = StateUpdaters.ToArray(); BloodAndBileEngine.Debugger.Log("StateUpdateModule Initialisé ! " + StateUpdaterModules.Length + " modules StateUpdater."); CookConstructionState(); SendStateConstruction(); }
void SpawnPlayers() { //Création des joueurs, placement sur la map, et assignation d'un connexionID pour chaque List <int> usedCells = new List <int>(); foreach (int coId in ModuleMatch.GetPlayerConnectionIDs()) { BloodAndBileEngine.WorldState.Cell cell = ModuleMatch.GetModule <MapStateModule>().GetWorldState().GetData <BloodAndBileEngine.WorldState.CellSystem>().FindSpawnPoint(usedCells.ToArray()); if (cell != null) { usedCells.Add(cell.ID); BloodAndBileEngine.Entity player = SpawnPlayer(coId, cell); SetControlledEntity(coId, player); BloodAndBileEngine.Debugger.Log("Entité joueur d'ID " + player.ID + " associée à la connexion d'ID " + coId); } else { BloodAndBileEngine.Debugger.Log("Aucun point de spawn trouvé !"); } } }
BloodAndBileEngine.WorldState.WorldState GetWorldState() { return(ModuleMatch.GetModule <MapStateModule>().GetWorldState()); }
void SendStateConstruction() { ModuleMatch.SendMessageToPlayers(StateConstructionMessage, 5); }
/// <summary> /// Envoi le message StateUpdate dans son état actuel vers les joueurs connectés à ce match sur le canal 7. /// </summary> void SendStateUpdate() { ModuleMatch.SendMessageToPlayers(StateUpdateMessage, 6); }
protected virtual void OnDefeatedPlayer(int connectionID) { ModuleMatch.SendCommandToPlayer(connectionID, "Log", "Vous avez été défait..."); }
protected virtual void OnVictoriousPlayer(int connectionID) { ModuleMatch.SendCommandToPlayer(connectionID, "Log", "Vous êtes victorieux !"); }