Пример #1
0
        static void SetEntityPosition(object[] args)
        {
            if (args.Length < 4)
            {
                Debugger.Log("ERREUR : Pas assez de paramètres dans l'appel de la commande SetEntityPosition !", UnityEngine.Color.red);
                return;
            }

            uint  ID;
            float posX;
            float posY;
            float posZ;

            // On vérifie que chaque argument soit du bon type. S'ils ne le sont pas, on les converti.
            if (args[0] is uint)
            {
                ID = (uint)args[0];
            }
            else
            {
                if (!(args[0] is string) || !uint.TryParse((string)args[0], out ID))
                {
                    Debugger.Log("ERREUR : Commande SetEntityPosition - L'ID de l'entité doit être un entier ou une chaine de caractères !");
                    return;
                }
            }

            if (args[1] is float)
            {
                posX = (float)args[1];
            }
            else
            {
                if (!(args[1] is string) || !float.TryParse((string)args[1], out posX))
                {
                    Debugger.Log("ERREUR : Commande SetEntityPosition - La position X de l'entité doit être un entier ou une chaine de caractères !");
                    return;
                }
            }


            if (args[2] is float)
            {
                posY = (float)args[2];
            }
            else
            {
                if (!(args[2] is string) || !float.TryParse((string)args[2], out posY))
                {
                    Debugger.Log("ERREUR : Commande SetEntityPosition - La position Y de l'entité doit être un entier ou une chaine de caractères !");
                    return;
                }
            }

            if (args[3] is float)
            {
                posZ = (float)args[3];
            }
            else
            {
                if (!(args[3] is string) || !float.TryParse((string)args[3], out posZ))
                {
                    Debugger.Log("ERREUR : Commande SetEntityPosition - La position Z de l'entité doit être un entier ou une chaine de caractères !");
                    return;
                }
            }

            // Tout est bon ! La position de l'entité peut être changée. Si l'entité est détruite, affichage d'un warning.

            Entity e = GetEntityFromID(ID);

            if (e == null || e.Destroyed)
            {
                Debugger.Log("WARNING : Tentative de modifier la position de l'entité " + ID + " qui n'existe pas ou est détruite !", UnityEngine.Color.yellow);
            }

            if (e != null)
            {
                SerializableVector3 newPos = new SerializableVector3(posX, posY, posZ);
                if (e.GetComponent(typeof(EntityMover)) != null)
                {
                    e.GetComponent <EntityMover>().Teleport(newPos.z, newPos.x);
                }
                else
                {
                    e.Position = newPos;
                }
            }
        }
Пример #2
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