private void LoadPlayableSpeciesList() { var allSpecies = EntityTemplateLoader.GetAllEntityTemplateTypes().OrderBy(s => s).ToList(); foreach (var species in allSpecies) { if (!EntityTemplateLoader.GetEntityTemplate(species).Playable) { continue; } var option = Instantiate(SpeciesOptionPrefab, SpeciesOptionPrefab.transform.position, Quaternion.identity); option.transform.SetParent(SpeciesOptionParent); option.GetComponent <RectTransform>().localScale = new Vector3(1, 1, 1); option.transform.GetChild(0).GetComponent <TextMeshProUGUI>().text = species; if (species != allSpecies.First()) { continue; } SelectButton(option); } SelectSpeciesOption(EntityTemplateLoader.GetEntityTemplate(allSpecies.First())); }
public CreatureDeck(BiomeType biomeType, int size) { _availableCreatures = EntityTemplateLoader.GetWildTemplatesForBiome(biomeType); Size = size; CardIndex = 0; Build(); Shuffle(); }
public void DisplaySpeciesDescription() { var optionClicked = EntityTemplateLoader.GetEntityTemplate(transform.GetComponentInChildren <TextMeshProUGUI>().text); CharacterCreation.Instance.SelectButton(gameObject); CharacterCreation.Instance.SelectSpeciesOption(optionClicked); }
protected override async Task <int> Run() { var connection = _connectionFactory.Connect(_connection); var(url, _) = _connectionFactory.GetConnectionDetails(_connection); if (!_confirm.TryConfirm($"This will apply sample configuration items to the Seq server at {url}.")) { await Console.Error.WriteLineAsync("Canceled by user."); return(1); } var templateArgs = new Dictionary <string, JsonTemplate>(); templateArgs["ownerId"] = new JsonTemplateNull(); var templatesPath = Content.GetPath(Path.Combine("Sample", "Templates")); var templateFiles = Directory.GetFiles(templatesPath); var templates = new List <EntityTemplate>(); foreach (var templateFile in templateFiles) { if (!EntityTemplateLoader.Load(templateFile, out var template, out var error)) { await Console.Error.WriteLineAsync(error); return(1); } templates.Add(template); } var err = await TemplateSetImporter.ImportAsync(templates, connection, templateArgs, new TemplateImportState(), merge : false); if (err != null) { await Console.Error.WriteLineAsync(err); return(1); } return(0); }
public Faction(FactionTemplate factionTemplate) { Religions = new Dictionary <string, int>(); EntitiesWithFluff = new List <Entity>(); Type = factionTemplate.Type; var index = Random.Range(0, factionTemplate.EntityTypes.Count); EntityType = EntityTemplateLoader.GetEntityTemplate(factionTemplate.EntityTypes[index]); CreateLeader(); WorldData.Instance.FactionLeaders.Add(Leader); FactionReputation = new Reputation(EntityGroupType.Faction, Name); WorldData.Instance.EntityGroupRelationships.Add(Name, FactionReputation); }
protected override async Task <int> Run() { if (_inputDir == null) { Log.Error("An input directory must be specified"); return(1); } if (!Directory.Exists(_inputDir)) { Log.Error("The input directory `{InputDirectory}` does not exist", Path.GetFullPath(_inputDir)); return(1); } var templates = new List <EntityTemplate>(); foreach (var templateFile in Directory.GetFiles(_inputDir, "*." + TemplateWriter.TemplateFileExtension)) { if (!EntityTemplateLoader.Load(templateFile, out var template, out var error)) { Log.Error("Could not load template file {FilePath}: {Reason}", templateFile, error); return(1); } templates.Add(template); } var stateFile = _stateFile ?? Path.Combine(_inputDir, "import.state"); var state = File.Exists(stateFile) ? await TemplateImportState.LoadAsync(stateFile) : new TemplateImportState(); var args = _args.Properties.ToDictionary( v => v.Key, v => (JsonTemplate)(v.Value switch { string s => new JsonTemplateString(s), decimal n => new JsonTemplateNumber(n), bool b => new JsonTemplateBoolean(b), null => new JsonTemplateNull(), _ => throw new NotSupportedException("Unexpected property type.") }));
private void PlaceSettlementProps() { var propChance = 99; var roll = Random.Range(1, 101); while (roll <= propChance) { var propType = SettlementPrefabStore.GetRandomPropType(); var blueprintChance = 17; roll = Random.Range(1, 101); if (roll <= blueprintChance) { // todo not implemented while (propType == SettlementPrefabStore.SettlementPropType.Fence) { propType = SettlementPrefabStore.GetRandomPropType(); } var propBlueprint = SettlementPrefabStore.GetPropBlueprintByType(propType); var areaRow = Random.Range(0, Height); var startingAreaColumn = Random.Range(0, Width); var currentAreaColumn = startingAreaColumn; var blueprintHeight = propBlueprint.GetLength(0); var blueprintWidth = propBlueprint.GetLength(1); var propPrefabs = new Dictionary <char, List <GameObject> >(); for (var currentRow = 0; currentRow < blueprintHeight; currentRow++) { for (var currentColumn = 0; currentColumn < blueprintWidth; currentColumn++) { if (areaRow < 0 || areaRow >= Height || currentAreaColumn < 0 || currentAreaColumn >= Width) { continue; } var currentTile = AreaTiles[areaRow, currentAreaColumn]; //todo should probably make a tile type enum because this is trash if (currentTile.PresentWallTile != null || currentTile.GetPrefabTileTexture().name.Contains("floor") || currentTile.GetPrefabTileTexture().name.Contains("road") || currentTile.GetPrefabTileTexture().name.Contains("path") || currentTile.GetBlocksMovement()) { continue; } var currentKey = propBlueprint[currentRow, currentColumn]; if (!propPrefabs.ContainsKey(currentKey)) { var prefabsForCurrentKey = SettlementPrefabStore.GetPropPrefabsByKey(currentKey); propPrefabs.Add(currentKey, prefabsForCurrentKey); } if (propPrefabs[currentKey] == null || propPrefabs[currentKey].Count < 1) { continue; } GameObject prefab = null; if (currentKey != SettlementPrefabStore.TurretKey) { prefab = propPrefabs[currentKey][Random.Range(0, propPrefabs[currentKey].Count)]; } if (currentKey == SettlementPrefabStore.FieldKey) { //todo pick field type currentTile.PresentProp = new Field(FieldType.Wheat, currentKey.ToString(), prefab); } else if (currentKey == SettlementPrefabStore.GraveyardKey) { currentTile.PresentProp = new Grave(currentKey.ToString(), prefab); } else if (currentKey == SettlementPrefabStore.TurretKey) { continue; var template = EntityTemplateLoader.GetEntityTemplate("turret"); var turret = new Entity(template, Settlement.Faction); //todo need to implement var turretBarrel = new Weapon(ItemTemplateLoader.GetItemTemplate("TurretBarrel"), GlobalHelper.GetRandomEnumValue <ItemRarity>()); turret.EquipItem(turretBarrel, Entity.EquipmentSlot.Special); currentTile.SetPresentEntity(turret); } else { currentTile.PresentProp = new Prop(currentKey.ToString(), prefab); } currentAreaColumn++; } areaRow++; currentAreaColumn = startingAreaColumn; } } else { var prefabs = SettlementPrefabStore.GetPropPrefabByType(propType); if (prefabs == null) { continue; } var areaRow = Random.Range(0, Height); var areaColumn = Random.Range(0, Width); var currentTile = AreaTiles[areaRow, areaColumn]; //todo should probably make a tile type enum because this is trash if (currentTile.PresentWallTile != null || currentTile.GetPrefabTileTexture().name.Contains("floor") || currentTile.GetPrefabTileTexture().name.Contains("road") || currentTile.GetPrefabTileTexture().name.Contains("path") || currentTile.GetBlocksMovement()) { continue; } if (propType == SettlementPrefabStore.SettlementPropType.Field) { var index = Random.Range(0, prefabs.Count); currentTile.PresentProp = new Field(FieldType.Wheat, index.ToString(), prefabs[index]); } else if (propType == SettlementPrefabStore.SettlementPropType.Security) { continue; var template = EntityTemplateLoader.GetEntityTemplate("turret"); var turret = new Entity(template, Settlement.Faction); //todo need to implement var turretBarrel = new Weapon(ItemTemplateLoader.GetItemTemplate("TurretBarrel"), GlobalHelper.GetRandomEnumValue <ItemRarity>()); turret.EquipItem(turretBarrel, Entity.EquipmentSlot.Special); currentTile.SetPresentEntity(turret); //todo raise new entity event } else { var index = Random.Range(0, prefabs.Count); currentTile.PresentProp = new Prop(index.ToString(), prefabs[index]); } } propChance -= 23; if (propChance < 1) { propChance = 1; } roll = Random.Range(1, 101); } }
private void GeneratePopulation() { const int humanoidChance = 96; PickPopulationType(); Population = Random.Range(900, 2250); var availableEntityTypes = new List <string>(); if (PopType == PopulationType.MixedSpecies) { availableEntityTypes = new List <string>(EntityTemplateLoader.GetAllEntityTemplateTypes()); } else { var allTypes = EntityTemplateLoader.GetAllEntityTemplateTypes(); var index = Random.Range(0, allTypes.Length); var validPick = false; while (!validPick) { var typeTemplate = EntityTemplateLoader.GetEntityTemplate(allTypes[index]); var roll = Random.Range(0, 101); if (roll < humanoidChance) { if (typeTemplate.Classification == Entity.EntityClassification.Humanoid) { validPick = true; } } else { if (typeTemplate.Classification == Entity.EntityClassification.NonHumanoid) { validPick = true; } } index = Random.Range(0, allTypes.Length); } availableEntityTypes.Add(allTypes[index]); } Citizens = new List <Entity>(); EntityTemplate template = null; for (var i = 0; i < Population; i += CitizenPopulationValue) { if (PopType == PopulationType.MixedSpecies) { var index = Random.Range(0, availableEntityTypes.Count); var validPick = false; while (!validPick) { template = EntityTemplateLoader.GetEntityTemplate(availableEntityTypes[index]); var roll = Random.Range(0, 101); if (roll < humanoidChance) { if (template.Classification == Entity.EntityClassification.Humanoid) { validPick = true; } } else { if (template.Classification == Entity.EntityClassification.NonHumanoid) { validPick = true; } } index = Random.Range(0, availableEntityTypes.Count); } } else { template = EntityTemplateLoader.GetEntityTemplate(availableEntityTypes[0]); } var citizen = new Entity(template, this); citizen.GenerateStartingEquipment(); citizen.CreateFluff(template, Name); Citizens.Add(citizen); WorldData.Instance.Entities.Add(citizen.Id, citizen); } //Debug.Log($"Number of Citizens: {Citizens.Count}"); RemainingCitizensToPlace = new List <Entity>(Citizens); }