Exemple #1
0
    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);
    }
Exemple #4
0
        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);
        }
Exemple #5
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);
    }
Exemple #6
0
        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.")
            }));
Exemple #7
0
    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);
        }
    }
Exemple #8
0
    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);
    }