Exemplo n.º 1
0
        public MeleeCommand(Entity entity, Cell target)
            : base(entity)
        {
            this.target = target;

            SpeciesDefinition species = Entity.GetComponent <Species>().SpeciesDef;

            foreach (BodyPart part in species.Parts)
            {
                if (part.Melee == null)
                {
                    continue;
                }

                if (part.Melee.Attacks == null)
                {
                    continue;
                }

                foreach (Attack atk in part.Melee.Attacks)
                {
                    if (atk.Time > Cost)
                    {
                        Cost = atk.Time;
                    }
                }
            }
        }
Exemplo n.º 2
0
        public void GetObjectData(object obj, SerializationInfo info,
                                  StreamingContext context)
        {
            SpeciesDefinition species = (SpeciesDefinition)obj;

            info.AddValue("id", species.ID);
        }
Exemplo n.º 3
0
        private static void GenerateSampleSpecies()
        {
            SpeciesDefinition species = new SpeciesDefinition(
                "DEFAULT_SPECIES_ID", "DEFAULT_SPECIES_NAME",
                null, BodyPattern.Avian, new BodyPart("BODYPART_TEST_BEAK"));

            string path = Application.dataPath + $"/Sample/sample_species.json";

            if (File.Exists(path))
            {
                File.Delete(path);
            }

            JsonSerializerSettings settings = new JsonSerializerSettings()
            {
                TypeNameHandling    = TypeNameHandling.Auto,
                SerializationBinder = Binders._entity,
                Formatting          = Formatting.Indented,
                Converters          = new List <JsonConverter>()
                {
                    new SpriteConverter(),
                    new BodyPartConverter()
                }
            };

            File.AppendAllText(path, JsonConvert.SerializeObject(species, settings));
            AssetDatabase.Refresh();
            Debug.Log($"Wrote sample body part to {path}.");
        }
Exemplo n.º 4
0
        public object SetObjectData(object obj, SerializationInfo info,
                                    StreamingContext context, ISurrogateSelector selector)
        {
            SpeciesDefinition species = (SpeciesDefinition)obj;

            species = Assets.Species[info.GetString("id")];
            obj     = species;
            return(obj);
        }
Exemplo n.º 5
0
        public static List <SpeciesDefinition> LoadSpecies(string xmlfile)
        {
            List <SpeciesDefinition> species = new List <SpeciesDefinition>();
            XPathDocument            doc     = new XPathDocument(xmlfile);
            XPathNavigator           nav     = doc.CreateNavigator();

            foreach (XPathNavigator n in nav.Select("/battle/speciess/species"))
            {
                string            name  = n.GetAttribute("name", "");
                string            descr = n.GetAttribute("description", "");
                SpeciesDefinition d     = new SpeciesDefinition();
                d.Name        = name;
                d.Description = descr;

                /*
                 * foreach (XPathNavigator n1 in n.Select("origin"))
                 * {
                 *      string oriname = n.GetAttribute("name", "");
                 *
                 *      //d.AddOrigin(n.GetAttribute("name",""));
                 * }
                 */
                foreach (XPathNavigator n2 in n.Select("provides"))
                {
                    d.Provide(n2.GetAttribute("value", ""));
                }
                foreach (XPathNavigator n3 in n.Select("requires"))
                {
                    d.Require(n3.GetAttribute("value", ""));
                }
                foreach (XPathNavigator n4 in n.Select("modifier"))
                {
                    string             modname     = n4.GetAttribute("name", "");
                    string             description = n4.GetAttribute("description", "");
                    string             val         = n4.GetAttribute("value", "");
                    string             target      = n4.GetAttribute("target", "");
                    string             type        = n4.GetAttribute("type", "");
                    ModifierDefinition mod         = new ModifierDefinition();
                    mod.Name        = modname;
                    mod.Description = description;
                    mod.ModValue    = double.Parse(val);
                    mod.EntityType  = BattleEntity.ParseEntity(type);
                    mod.TargetName  = target;
                    d.AddModifier(mod);
                }
                species.Add(d);
            }

            return(species);
        }
Exemplo n.º 6
0
        public override CommandResult Execute()
        {
            Entity defender;

            if (target.Actor != null)
            {
                defender = target.Actor;
            }
            else
            {
                defender = null;
            }

            SpeciesDefinition species = Entity.GetComponent <Species>().SpeciesDef;

            foreach (BodyPart part in species.Parts)
            {
                if (part.Melee == null)
                {
                    continue;
                }

                if (part.Melee.Attacks == null)
                {
                    continue;
                }

                foreach (Attack atk in part.Melee.Attacks)
                {
                    if (atk.Accuracy < Random.Range(0, 101))
                    {
                        Locator.Log.Send(
                            Verbs.Miss(Entity, defender), Color.grey);
                        continue;
                    }

                    if (defender != null)
                    {
                        Hit hit = new Hit(atk.Damages);
                        Locator.Log.Send(
                            Verbs.Hit(Entity, defender, hit), Color.white);
                        defender.TakeHit(Entity, hit);
                    }
                }
            }

            return(CommandResult.Succeeded);
        }
Exemplo n.º 7
0
 public Species(SpeciesDefinition def)
 {
     SpeciesDef = def;
 }
Exemplo n.º 8
0
        public static void LoadAssets()
#pragma warning restore IDE0051
        {
            bundleMain = AssetBundle.LoadFromFile(Path.Combine(
                                                      Application.streamingAssetsPath, "pantheon"));
            bundleTemplates = AssetBundle.LoadFromFile(Path.Combine(
                                                           Application.streamingAssetsPath, "pantheon_templates"));
            bundleTalents = AssetBundle.LoadFromFile(Path.Combine(
                                                         Application.streamingAssetsPath, "pantheon_talents"));
            bundleSpecies = AssetBundle.LoadFromFile(Path.Combine
                                                         (Application.streamingAssetsPath, "pantheon_species"));
            bundleBody = AssetBundle.LoadFromFile(Path.Combine(
                                                      Application.streamingAssetsPath, "pantheon_body"));
            bundleBuilders = AssetBundle.LoadFromFile(Path.Combine(
                                                          Application.streamingAssetsPath, "pantheon_builders"));
            bundleProfessions = AssetBundle.LoadFromFile(Path.Combine(
                                                             Application.streamingAssetsPath, "pantheon_professions"));

            Object[] objs          = bundleMain.LoadAllAssets();
            Object[] templateFiles = bundleTemplates.LoadAllAssets();
            Object[] profFiles     = bundleProfessions.LoadAllAssets();
            Object[] talentFiles   = bundleTalents.LoadAllAssets();
            Object[] speciesFiles  = bundleSpecies.LoadAllAssets();
            Object[] bodyFiles     = bundleBody.LoadAllAssets();
            Object[] builderFiles  = bundleBuilders.LoadAllAssets();

            _prefabs     = new Dictionary <string, GameObject>();
            Prefabs      = new ReadOnlyDictionary <string, GameObject>(_prefabs);
            _templates   = new Dictionary <string, EntityTemplate>(templateFiles.Length);
            _professions = new Dictionary <string, Profession>(profFiles.Length);
            _sprites     = new Dictionary <string, Sprite>();
            Sprites      = new ReadOnlyDictionary <string, Sprite>(_sprites);
            _tiles       = new Dictionary <string, TileBase>();
            _audio       = new Dictionary <string, AudioClip>();
            Audio        = new ReadOnlyDictionary <string, AudioClip>(_audio);
            _talents     = new Dictionary <string, Talent>(talentFiles.Length);
            Talents      = new ReadOnlyDictionary <string, Talent>(_talents);
            _species     = new Dictionary <string, SpeciesDefinition>(speciesFiles.Length);
            Species      = new ReadOnlyDictionary <string, SpeciesDefinition>(_species);
            _vaults      = new Dictionary <string, Vault>();
            Vaults       = new ReadOnlyDictionary <string, Vault>(_vaults);
            _bodyParts   = new Dictionary <string, BodyPart>(bodyFiles.Length);
            BodyParts    = new ReadOnlyDictionary <string, BodyPart>(_bodyParts);
            _builders    = new Dictionary <string, Builder>(builderFiles.Length);
            Builders     = new ReadOnlyDictionary <string, Builder>(_builders);
            _dialogue    = new Dictionary <string, TextAsset>();
            Dialogue     = new ReadOnlyDictionary <string, TextAsset>(_dialogue);

            int t = 1; // 0 represents no terrain

            TextAsset worldPlanFile = null;

            foreach (Object obj in objs)
            {
                if (obj is Sprite sprite)
                {
                    _sprites.Add(sprite.name, sprite);
                    continue;
                }

                if (obj is TileBase tile)
                {
                    _tiles.Add(tile.name, tile);
                    continue;
                }

                if (obj is AudioClip audio)
                {
                    _audio.Add(audio.name, audio);
                    continue;
                }

                if (obj is TerrainDefinition td)
                {
                    TerrainIDs[t] = td.name;
                    Terrains[t++] = td;
                    continue;
                }

                if (obj is Vault vault)
                {
                    _vaults.Add(vault.name, vault);
                    continue;
                }

                if (obj is GameObject prefab)
                {
                    switch (prefab.name)
                    {
                    default:
                        _prefabs.Add(prefab.name, prefab);
                        continue;

                    case "FX_Toss":
                        TossFXPrefab = prefab;
                        continue;
                    }
                }

                if (obj is TextAsset ta)
                {
                    switch (ta.name)
                    {
                    case "WorldPlan":
                        worldPlanFile = ta;
                        continue;

                    case "CharacterNames":
                        CharacterNames = ta;
                        continue;

                    case "RelicNames":
                        RelicNames = ta;
                        continue;

                    default:
                        break;
                    }

                    string[] tokens = ta.name.Split('_');

                    switch (tokens[0])
                    {
                    case "Dialogue":
                        _dialogue.Add(tokens[1], ta);
                        break;

                    default:
                        throw new System.Exception(
                                  $"Unrecognized TextAsset \"{ta.name}\"");
                    }
                }
            }

            foreach (TextAsset ta in talentFiles)
            {
                Talent talent =
                    JsonConvert.DeserializeObject <Talent>(
                        ta.text, _talentSettings);
                _talents.Add(talent.ID, talent);
            }

            foreach (TextAsset ta in bodyFiles)
            {
                BodyPart part = JsonConvert.DeserializeObject <BodyPart>(
                    ta.text, _partSettings);
                _bodyParts.Add(part.ID, part);
            }

            foreach (TextAsset ta in speciesFiles)
            {
                SpeciesDefinition s =
                    JsonConvert.DeserializeObject <SpeciesDefinition>(
                        ta.text, _speciesSettings);
                _species.Add(s.ID, s);
            }

            foreach (TextAsset ta in builderFiles)
            {
                Builder builder = JsonConvert.DeserializeObject <Builder>(
                    ta.text, _builderSettings);
                _builders.Add(builder.ID, builder);
            }

            WorldPlan = JsonConvert.DeserializeObject <WorldPlan>(
                worldPlanFile.text,
                _builderSettings);

            // Template, profession data is lazy-initialized
        }