Esempio n. 1
0
    void Start()
    {
        if (!AssetsLoaded)
        {
            // Sprites
            XmlDocument spritesDoc = new XmlDocument();
            spritesDoc.PreserveWhitespace = false;

            try
            {
                spritesDoc.Load("Assets/Battle/Data/sprites.xml");
                XmlElement root = spritesDoc["sprites"];

                foreach (XmlElement spriteInfo in root.ChildNodes)
                {
                    try
                    {
                        string spriteName = spriteInfo.GetAttribute("name");
                        Dictionary <string, Material> images = new Dictionary <string, Material>();

                        string[] imageGUIDs = AssetDatabase.FindAssets(
                            spriteName, new string[] { "Assets/Battle/Objects/2D/Sprites/Materials" });
                        string imagesPath = "Assets/Battle/Objects/2D/Sprites/Materials/" + spriteName + " ";

                        foreach (string imageGUID in imageGUIDs)
                        {
                            string path = AssetDatabase.GUIDToAssetPath(imageGUID);

                            if (path.StartsWith(imagesPath))
                            {
                                string   imageName = path.Substring(imagesPath.Length, path.Length - imagesPath.Length - 4);
                                Material image     = AssetDatabase.LoadAssetAtPath <Material>(path);

                                if (image != null)
                                {
                                    images[imageName] = image;
                                }
                            }
                        }

                        /*
                         * foreach (XmlElement imageInfo in spriteInfo["images"].ChildNodes)
                         *  images[imageInfo.GetAttribute("name")] = AssetDatabase.LoadAssetAtPath<Material>(
                         *      "Assets/Battle/Objects/2D/Sprites/Materials/"
                         + spriteName + " "
                         + imageInfo.GetAttribute("name")
                         + ".mat"
                         +      );
                         */

                        BattleSprite sprite = new BattleSprite();
                        sprite.Portrait = AssetDatabase.LoadAssetAtPath <Sprite>("Assets/Battle/Portraits/" + (spriteInfo.HasAttribute("portrait") ? spriteInfo.GetAttribute("portrait") : spriteName) + ".png");

                        foreach (XmlElement animationInfo in spriteInfo.SelectNodes("animations/animation"))
                        {
                            BattleSpriteAnimation animation = new BattleSpriteAnimation();

                            foreach (XmlElement frameInfo in animationInfo.ChildNodes)
                            {
                                animation.Add(images[frameInfo.InnerText.Trim()], float.Parse(frameInfo.GetAttribute("duration")));
                            }

                            sprite.Add(
                                animationInfo.GetAttribute("direction").CompareTo("front") == 0,
                                animationInfo.GetAttribute("name"),
                                animation
                                );
                        }

                        Sprites.Add(spriteName, sprite);
                    }
                    catch (Exception e)
                    {
                        string id = spriteInfo.HasAttribute("name") ? spriteInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load sprite \"" + id + "\".\n" + e);
                    }
                }
            }
            catch (Exception e)
            {
                Error("[AssetHolder] Unable to load sprites from \"Assets/Battle/Data/sprites.xml\".\n" + e);
            }

            // Effect animations (for skills and stuff)
            XmlDocument animationsDoc = new XmlDocument();
            animationsDoc.PreserveWhitespace = false;

            try
            {
                animationsDoc.Load("Assets/Battle/Data/animations.xml");
                XmlElement root = animationsDoc["animations"];

                foreach (XmlElement animationInfo in root.SelectNodes("animation"))
                {
                    try
                    {
                        string animationName = animationInfo.GetAttribute("name");
                        Dictionary <string, Material> images = new Dictionary <string, Material>();

                        string[] imageGUIDs = AssetDatabase.FindAssets(
                            animationName, new string[] { "Assets/Battle/Effects/Sprites/Materials" });
                        string imagesPath = "Assets/Battle/Effects/Sprites/Materials/effect " + animationName + " ";

                        foreach (string imageGUID in imageGUIDs)
                        {
                            string path = AssetDatabase.GUIDToAssetPath(imageGUID);

                            if (path.StartsWith(imagesPath))
                            {
                                string   imageName = path.Substring(imagesPath.Length, path.Length - imagesPath.Length - 4);
                                Material image     = AssetDatabase.LoadAssetAtPath <Material>(path);

                                if (image != null)
                                {
                                    images[imageName] = image;
                                }
                            }
                        }

                        BattleSpriteAnimation animation = new BattleSpriteAnimation();
                        float animationSpeed;
                        if (!float.TryParse(animationInfo.GetAttribute("speed"), out animationSpeed))
                        {
                            animationSpeed = 0.035f;
                        }

                        int frame = 1;
                        while (images.ContainsKey(frame.ToString()))
                        {
                            animation.Add(images[(frame++).ToString()], animationSpeed); // TODO variable frame length
                        }

                        SpecialEffects.Add(animationName, animation);
                    }
                    catch (Exception e)
                    {
                        string id = animationInfo.HasAttribute("name") ? animationInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load animation \"" + id + "\".\n" + e);
                    }
                }
            }
            catch (Exception e)
            {
                Error("[AssetHolder] Unable to load animations from \"Assets/Battle/Data/animations.xml\".\n" + e);
            }

            // Tiles
            string[] tileGUIDs = AssetDatabase.FindAssets("t:Material", new string[] { "Assets/Battle/Tiles/Sprites/Materials" });
            foreach (string tileGUID in tileGUIDs)
            {
                string   tileAssetPath = AssetDatabase.GUIDToAssetPath(tileGUID);
                Material tileMaterial  = AssetDatabase.LoadAssetAtPath <Material>(tileAssetPath);

                if (tileMaterial != null)
                {
                    Tiles[tileMaterial.name.Substring(5)] = tileMaterial;
                }
            }

            /*
             * string[] spriteGUIDs = AssetDatabase.FindAssets("t:Sprite");
             * foreach (string spriteGUID in spriteGUIDs)
             * {
             *  Sprite sprite = AssetDatabase.LoadAssetAtPath<Sprite>(AssetDatabase.GUIDToAssetPath(spriteGUID));
             *
             *  if (sprite != null)
             *  {
             *      if (sprite.name.StartsWith("tile_"))
             *      {
             *          Tiles[sprite.name.Remove(0, 5)] = sprite;
             *      }
             *  }
             * }
             */

            // Objects
            string[] objectGUIDs = AssetDatabase.FindAssets("object");
            foreach (string objectGUID in objectGUIDs)
            {
                BattleObject obj = AssetDatabase.LoadAssetAtPath <BattleObject>(AssetDatabase.GUIDToAssetPath(objectGUID));

                if (obj != null && obj.name.StartsWith("object "))
                {
                    Objects[obj.name.Remove(0, 7)] = obj;
                }
            }

            // Commands
            XmlDocument commandsDoc = new XmlDocument();
            commandsDoc.PreserveWhitespace = false;

            try
            {
                commandsDoc.Load("Assets/Battle/Data/commands.xml");
                XmlNode root = commandsDoc["commands"];

                foreach (XmlElement commandInfo in root.SelectNodes("command"))
                {
                    try
                    {
                        Commands.Add(commandInfo.GetAttribute("name"), new BattleCommand(commandInfo));
                    }
                    catch (Exception e)
                    {
                        string id = commandInfo.HasAttribute("name") ? commandInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load command \"" + id + "\".\n" + e);
                    }
                }
            }
            catch (Exception e)
            {
                Error("[AssetHolder] Unable to load commands from \"Assets/Battle/Data/commands.xml\".\n" + e);
            }

            // Status effects
            XmlDocument effectsDoc = new XmlDocument();
            effectsDoc.PreserveWhitespace = false;

            try
            {
                effectsDoc.Load("Assets/Battle/Data/effects.xml");
                XmlElement root = effectsDoc["effects"];

                foreach (XmlElement statusInfo in root.SelectNodes("effect"))
                {
                    try
                    {
                        StatusEffects.Add(statusInfo.GetAttribute("name"), new Status(statusInfo));
                    }
                    catch (Exception e)
                    {
                        string id = statusInfo.HasAttribute("name") ? statusInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load status effect \"" + id + "\".\n" + e);
                    }
                }
            }
            catch (Exception e)
            {
                Error("[AssetHolder] Unable to load status effects from \"Assets/Battle/Data/effects.xml\".\n" + e);
            }

            // Skills
            XmlDocument skillsDoc = new XmlDocument();
            skillsDoc.PreserveWhitespace = false;

            try
            {
                skillsDoc.Load("Assets/Battle/Data/skills.xml");
                XmlElement root = skillsDoc["skills"];

                int index = 1;

                foreach (XmlElement skillInfo in root.SelectNodes("skill"))
                {
                    try
                    {
                        Skills.Add(skillInfo.GetAttribute("name"), new Skill(skillInfo, index++));
                    }
                    catch (Exception e)
                    {
                        string id = skillInfo.HasAttribute("name") ? skillInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load skill \"" + id + "\".\n" + e);
                    }
                }
            }
            catch (Exception e)
            {
                Error("[AssetHolder] Unable to load skills from \"Assets/Battle/Data/skills.xml\".\n" + e);
            }

            // Items
            XmlDocument itemsDoc = new XmlDocument();
            itemsDoc.PreserveWhitespace = false;

            try
            {
                itemsDoc.Load("Assets/Battle/Data/items.xml");
                XmlElement root = itemsDoc["items"];

                foreach (XmlElement weaponInfo in root.SelectNodes("weapon"))
                {
                    try
                    {
                        string name = weaponInfo.GetAttribute("name");
                        Weapons[name] = new Weapon(weaponInfo);
                    }
                    catch (Exception e)
                    {
                        string id = weaponInfo.HasAttribute("name") ? weaponInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load weapon \"" + id + "\".\n" + e);
                    }
                }

                foreach (XmlElement bodyInfo in root.SelectNodes("body"))
                {
                    try
                    {
                        string name = bodyInfo.GetAttribute("name");
                        Equipment[name] = new Equipment(bodyInfo, global::Equipment.Location.Body);
                    }
                    catch (Exception e)
                    {
                        string id = bodyInfo.HasAttribute("name") ? bodyInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load body equipment \"" + id + "\".\n" + e);
                    }
                }

                foreach (XmlElement headInfo in root.SelectNodes("head"))
                {
                    try
                    {
                        string name = headInfo.GetAttribute("name");
                        Equipment[name] = new Equipment(headInfo, global::Equipment.Location.Head);
                    }
                    catch (Exception e)
                    {
                        string id = headInfo.HasAttribute("name") ? headInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load head equipment \"" + id + "\".\n" + e);
                    }
                }

                foreach (XmlElement accessoryInfo in root.SelectNodes("accessory"))
                {
                    try
                    {
                        string name = accessoryInfo.GetAttribute("name");
                        Equipment[name] = new Equipment(accessoryInfo, global::Equipment.Location.Accessory);
                    }
                    catch (Exception e)
                    {
                        string id = accessoryInfo.HasAttribute("name") ? accessoryInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load accessory \"" + id + "\".\n" + e);
                    }
                }
            }
            catch (Exception e)
            {
                Error("[AssetHolder] Unable to load items from \"Assets/Battle/Data/items.xml\".\n" + e);
            }

            // Characters
            XmlDocument characterDoc = new XmlDocument();
            characterDoc.PreserveWhitespace = false;

            try
            {
                characterDoc.Load("Assets/Battle/Data/characters.xml");
                XmlElement root = characterDoc["characters"];

                foreach (XmlElement characterInfo in root.SelectNodes("character"))
                {
                    try
                    {
                        Characters[characterInfo.GetAttribute("name")] = Character.Parse(characterInfo);
                    }
                    catch (Exception e)
                    {
                        string id = characterInfo.HasAttribute("name") ? characterInfo.GetAttribute("name") : "UNKNOWN_NAME";
                        Error("[AssetHolder] Unable to load character \"" + id + "\".\n" + e);
                    }
                }
            }
            catch (Exception e)
            {
                Error("\n[AssetHolder] Unable to load characters from \"Assets/Battle/Data/characters.xml\".\n" + e);
            }
        }
    }
Esempio n. 2
0
    public Character(XmlElement characterInfo)
    {
        Name   = characterInfo.GetAttribute("name");
        Title  = characterInfo.GetAttribute("title");
        Sprite = AssetHolder.Sprites[characterInfo.GetAttribute("sprite")];

        // Load profile
        Profile["name"]        = Name;
        Profile["species"]     = "Unknown";
        Profile["occupation"]  = "Unknown";
        Profile["description"] = "???";
        foreach (XmlElement profileInfo in characterInfo.SelectNodes("profile/*"))
        {
            Profile[profileInfo.Name] = profileInfo.InnerText.Trim();
        }

        // Load stats
        foreach (XmlElement statInfo in characterInfo.SelectNodes("stats/stat"))
        {
            int statValue;
            if (!int.TryParse(statInfo.InnerText.Trim(), out statValue))
            {
                statValue = 0;
            }
            m_Stats[statInfo.GetAttribute("name")] = statValue;
        }

        /*
         * XmlElement statsInfo = characterInfo.SelectSingleNode("stats") as XmlElement;
         * if (statsInfo != null)
         * {
         *  foreach (XmlElement statInfo in statsInfo.SelectNodes("stat"))
         *  {
         *      int statValue;
         *      if (!int.TryParse(statInfo.InnerText.Trim(), out statValue)) statValue = 0;
         *      m_Stats[statInfo.GetAttribute("name")] = statValue;
         *  }
         * }
         */

        // Load skills
        foreach (XmlElement skillInfo in characterInfo.SelectNodes("skills/active/skill"))
        {
            string skillName = skillInfo.InnerText.Trim();

            Skill skill;
            if (AssetHolder.Skills.TryGetValue(skillName, out skill))
            {
                ActiveSkills.Add(skill);
            }
        }

        /*
         * XmlNode skillsInfo = characterInfo.SelectSingleNode("skills");
         * if (skillsInfo != null)
         * {
         *  // Load active skills
         *  XmlNode activeSkillsInfo = skillsInfo.SelectSingleNode("active");
         *  if (activeSkillsInfo != null)
         *  {
         *      foreach (XmlElement skillInfo in activeSkillsInfo.SelectNodes("skill"))
         *      {
         *          string skillName = skillInfo.InnerText.Trim();
         *
         *          Skill skill;
         *          if (AssetHolder.Skills.TryGetValue(skillName, out skill))
         *              ActiveSkills.Add(skill);
         *      }
         *  }
         * }
         */

        // Load equipment
        foreach (XmlElement equipInfo in characterInfo.SelectNodes("equipment/*"))
        {
            if (equipInfo.Name.Equals("weapon"))
            {
                Weapon temp;

                if (AssetHolder.Weapons.TryGetValue(equipInfo.InnerText.Trim(), out temp))
                {
                    if (equipInfo.HasAttribute("slot") && equipInfo.GetAttribute("slot").Equals("secondary"))
                    {
                        SecondaryWeapon = temp;
                    }
                    else if (PrimaryWeapon != null)
                    {
                        SecondaryWeapon = temp;
                    }
                    else
                    {
                        PrimaryWeapon = temp;
                    }
                }
            }
            else
            {
                Equipment temp;

                if (AssetHolder.Equipment.TryGetValue(equipInfo.InnerText.Trim(), out temp))
                {
                    if (equipInfo.Name.Equals("body"))
                    {
                        Body = temp;
                    }
                    if (equipInfo.Name.Equals("head"))
                    {
                        Head = temp;
                    }
                    if (equipInfo.Name.Equals("accessory"))
                    {
                        Accessory = temp;
                    }
                }
            }
        }

        /*
         * XmlNode equipmentInfo = characterInfo.SelectSingleNode("equipment");
         * if (equipmentInfo != null)
         * {
         *  foreach (XmlElement equipInfo in equipmentInfo.ChildNodes)
         *  {
         *      if (equipInfo.Name.Equals("weapon"))
         *      {
         *          Weapon temp;
         *
         *          if (AssetHolder.Weapons.TryGetValue(equipInfo.InnerText.Trim(), out temp))
         *          {
         *              if (equipInfo.HasAttribute("slot") && equipInfo.GetAttribute("slot").Equals("secondary"))
         *                  SecondaryWeapon = temp;
         *              else if (PrimaryWeapon != null)
         *                  SecondaryWeapon = temp;
         *              else
         *                  PrimaryWeapon = temp;
         *          }
         *      }
         *      else
         *      {
         *          Equipment temp;
         *
         *          if (AssetHolder.Equipment.TryGetValue(equipInfo.InnerText.Trim(), out temp))
         *          {
         *              if (equipInfo.Name.Equals("body"))
         *                  Body = temp;
         *              if (equipInfo.Name.Equals("head"))
         *                  Head = temp;
         *              if (equipInfo.Name.Equals("accessory"))
         *                  Accessory = temp;
         *          }
         *      }
         *  }
         * }
         */

        // Load commands
        foreach (XmlElement commandInfo in characterInfo.SelectNodes("commands/command"))
        {
            BattleCommand command;
            if (AssetHolder.Commands.TryGetValue(commandInfo.InnerText.Trim(), out command))
            {
                Commands.Add(command);
            }
        }

        /*
         * XmlNode commandsInfo = characterInfo.SelectSingleNode("commands");
         * if (commandsInfo != null)
         * {
         *  foreach (XmlElement commandInfo in commandsInfo.SelectNodes("command"))
         *  {
         *      BattleCommand command;
         *      if (AssetHolder.Commands.TryGetValue(commandInfo.InnerText.Trim(), out command))
         *          Commands.Add(command);
         *  }
         * }
         */
    }
Esempio n. 3
0
 public BattleSprite(BattleSprite other)
 {
     m_Animations[true]  = other.m_Animations[true];
     m_Animations[false] = other.m_Animations[false];
 }
Esempio n. 4
0
 void Start()
 {
     m_GridTransform = GameObject.FindObjectOfType <BattleGrid>().transform;
     m_Renderer      = GetComponent <MeshRenderer>();
     Sprite          = new BattleSprite(Agent.BaseCharacter.Sprite);
 }