Beispiel #1
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é !");
            }
        }
    }
Beispiel #2
0
 public void Teleport(float x, float y)
 {
     if (RootTime <= 0f)
     {
         SerializableVector3 newPos = new SerializableVector3();
         newPos.z = x;
         newPos.x = y;
         if (GetCellSystem() != null)
         {
             WorldState.Cell cell = GetCellSystem().GetCells()[LinkedEntity.CurrentCellID];
             if (cell == null)
             {
                 Debugger.Log("ERREUR : Pas de cellules trouvées !");
                 newPos.y = LinkedEntity.Position.y;
             }
             else
             {
                 float height = cell.GetHeightFrom2DCoordinates(newPos.z, newPos.x);
                 if (height > -500)
                 {
                     newPos.y = height;
                 }
                 else
                 {
                     newPos.y = LinkedEntity.Position.y;
                 }
             }
         }
         else
         {
             Debugger.Log("ERREUR : Pas de CellSystem !");
             newPos.y = LinkedEntity.Position.y;
         }
         LinkedEntity.Position = newPos;
     }
 }
Beispiel #3
0
 public BloodAndBileEngine.Entity SpawnPlayer(int playerConnectionID, BloodAndBileEngine.WorldState.Cell cell)
 {
     BloodAndBileEngine.Debugger.Log("SpawnPlayer aux coordonnées " + cell.GetPosition());
     BloodAndBileEngine.Entity player = EntityFactory.BuildPlayer(cell.GetPosition(), UnityEngine.Quaternion.identity, 0.5f, 2.0f);
     return(player);
 }
Beispiel #4
0
        static void BuildSpellArray()
        {
            Spells = new Spell[] // Rédiger ici la liste de tous les sorts et leur code de comportement. TODO : écrire les caractéristiques d'un sort dans un fichier config et leur code dans un fichier LUA.
            {
                new Spell(

                    "Warp",                                // Nom du sort
                    "Warps the caster to the target area", // Description
                    SpellFlags.TARGETS_POSITION,           // Flags du sort
                    0f,                                    // Durée (Duration)
                    0.5f,                                  // Temps de lancement (CastTime)
                    0f,                                    // Cooldown
                    0f,                                    // Coût Sang (Costs[0]) -OnCast
                    0f,                                    // Coût Phlegm (Costs[1]) -OnCast
                    20f,                                   // Coût Yellow Bile (Costs[2]) -OnCast
                    0f,                                    // Coût Black Bile (Costs[3]) -OnCast
                    0f,                                    // Coût Sang (Costs[0]) -OnCanalise
                    0f,                                    // Coût Phlegm (Costs[1]) -OnCanalise
                    0f,                                    // Coût Yellow Bile (Costs[2]) -OnCanalise
                    0f,                                    // Coût Black Bile (Costs[3]) -OnCanalise
                    (instance) =>                          // Quand le sort est lancé. Lancé après le CastTime.
                {
                    // Téléporter le lanceur
                    Debugger.Log("Warp se lance");
                    if (instance.GetTarget() is UnityEngine.Vector3 || instance.GetTarget() is SerializableVector3)
                    {
                        SerializableVector3 pos    = (SerializableVector3)instance.GetTarget();
                        WorldState.Cell targetCell = ((WorldState.CellSystem)instance.GetCaster().GetWorldState().GetData <WorldState.CellSystem>()).GetCellFromPosition(pos.z, pos.x);
                        if (targetCell != null)
                        {
                            pos.y = targetCell.GetHeightFrom2DCoordinates(pos.z, pos.x);
                        }
                        if (instance.GetCaster().GetComponent <EntityMover>() != null)
                        {
                            instance.GetCaster().GetComponent <EntityMover>().Teleport(pos.z, pos.x);
                            instance.GetCaster().GetComponent <EntityMover>().SetRootTime(1f);
                        }
                        else
                        {
                            instance.GetCaster().Position = pos;
                        }
                    }
                },

                    (instance) => // Quand le sort est en cours de canalisation (que le joueur n'a pas relâché la touche de lancement et que la durée de vie du sort n'a pas dépassé la variable Duration.
                {
                },

                    (instance) => // Quand le sort est terminé (durée atteinte)
                {
                },

                    (instance) => // Quand le sort est annulé.
                {
                }                 // NOTE : en pratique, le sort Warp n'est pas canalisable donc seule la fonction "OnCast" sera exécutée.
                      // Les autres fonctions sont toujours définies à titre d'exemple.
                    ),
                new Spell(
                    "BloodToPhlegm",                   // Nom du sort
                    "Convert 20 Blood into 15 Phlegm", // Description
                    SpellFlags.TARGETS_SELF,           // Flags du sort
                    0f,                                // Durée (Duration)
                    0.5f,                              // Temps de lancement (CastTime)
                    5f,                                // Cooldown
                    20f,                               // Coût Sang (Costs[0]) -OnCast
                    0f,                                // Coût Phlegm (Costs[1]) -OnCast
                    0f,                                // Coût Yellow Bile (Costs[2]) -OnCast
                    0f,                                // Coût Black Bile (Costs[3]) -OnCast
                    0f,                                // Coût Sang (Costs[0]) -OnCanalise
                    0f,                                // Coût Phlegm (Costs[1]) -OnCanalise
                    0f,                                // Coût Yellow Bile (Costs[2]) -OnCanalise
                    0f,                                // Coût Black Bile (Costs[3]) -OnCanalise
                    (instance) =>                      // Quand le sort est lancé. Lancé après le CastTime.
                {
                    ((HumorsComponent)instance.GetCaster().GetComponent(typeof(HumorsComponent))).ChangePhlegm(15);
                },

                    (instance) => // Quand le sort est en cours de canalisation (que le joueur n'a pas relâché la touche de lancement et que la durée de vie du sort n'a pas dépassé la variable Duration.
                {
                },

                    (instance) => // Quand le sort est terminé (durée atteinte)
                {
                },

                    (instance) => // Quand le sort est annulé.
                {
                }
                    ),
            };
            SpellsCount = Spells.Count();
        } // Fonction de construction des sorts