Ejemplo n.º 1
0
 /// <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);
 }
Ejemplo n.º 2
0
    /// <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();
        }
    }
Ejemplo n.º 3
0
 public override void Initialise()
 {
     base.Initialise();
     EntityFactory = ModuleMatch.GetModule <MapStateModule>().GetWorldState().GetData <BloodAndBileEngine.WorldState.WorldStateData.WorldEntityFactory>();
     EntityFactory.RegisterOnEntityCreatedCallback(OnEntitySpawned);
     SpawnPlayers();
 }
Ejemplo n.º 4
0
    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);
        }
    }
Ejemplo n.º 5
0
    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();
    }
Ejemplo n.º 6
0
    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é !");
            }
        }
    }
Ejemplo n.º 7
0
 BloodAndBileEngine.WorldState.WorldState GetWorldState()
 {
     return(ModuleMatch.GetModule <MapStateModule>().GetWorldState());
 }
Ejemplo n.º 8
0
 void SendStateConstruction()
 {
     ModuleMatch.SendMessageToPlayers(StateConstructionMessage, 5);
 }
Ejemplo n.º 9
0
 /// <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);
 }
Ejemplo n.º 10
0
 protected virtual void OnDefeatedPlayer(int connectionID)
 {
     ModuleMatch.SendCommandToPlayer(connectionID, "Log", "Vous avez été défait...");
 }
Ejemplo n.º 11
0
 protected virtual void OnVictoriousPlayer(int connectionID)
 {
     ModuleMatch.SendCommandToPlayer(connectionID, "Log", "Vous êtes victorieux !");
 }