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; } } } }
public void GetObjectData(object obj, SerializationInfo info, StreamingContext context) { SpeciesDefinition species = (SpeciesDefinition)obj; info.AddValue("id", species.ID); }
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}."); }
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); }
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); }
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); }
public Species(SpeciesDefinition def) { SpeciesDef = def; }
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 }