Exemple #1
0
 public StaticObjectGenerationContext(ISector sector, ISectorSubScheme scheme,
                                      IResourceDepositData resourceDepositData)
 {
     Sector = sector ?? throw new ArgumentNullException(nameof(sector));
     Scheme = scheme ?? throw new ArgumentNullException(nameof(scheme));
     ResourceDepositData = resourceDepositData ?? throw new ArgumentNullException(nameof(resourceDepositData));
 }
Exemple #2
0
        private static string ResourceToString(IResourceDepositData currentResource)
        {
            if (currentResource.Items.Any())
            {
                var colorDict = new Dictionary <SectorResourceType, string> {
                    { SectorResourceType.Iron, "i" },
                    { SectorResourceType.Stones, "s" },
                    { SectorResourceType.WaterPuddles, "w" },
                    { SectorResourceType.CherryBrushes, "b" }
                };

                var sb = new StringBuilder();
                foreach (var item in currentResource.Items)
                {
                    var resColor = colorDict[item.ResourceType];

                    sb.Append($"{resColor}-{Math.Round(item.Share, 2).ToString(CultureInfo.InvariantCulture)} ");
                }

                return($"[{sb.ToString().Trim()}]");
            }
            else
            {
                return(string.Empty);
            }
        }
        private IStaticObject CreateStaticObject(ISector sector, HexNode node, IResourceDepositData resourceDepositData)
        {
            var staticObjectPurpose = RollPurpose(resourceDepositData);

            var factory = SelectStaticObjectFactory(staticObjectPurpose);

            var staticObject = factory.Create(sector, node, default);

            return(staticObject);
        }
 private static IEnumerable <NodeInfo> GetNotMaterializedNodeInfos(
     NodeInfo nextNode,
     IResourceDepositData nextResource,
     IEnumerable <SectorNode> sectorNodes)
 {
     return(from sectorNode in sectorNodes
            where sectorNode.State != SectorNodeState.SectorMaterialized
            select new NodeInfo
     {
         Current = sectorNode,
         Parent = nextNode.Current,
         ParentResource = nextResource
     });
 }
Exemple #5
0
        private IStaticObject CreateStaticObject(ISector sector, HexNode node, IResourceDepositData resourceDepositData)
        {
            var staticObjectPurpose = RollPurpose(resourceDepositData);

            var factory = _staticObjectfactoryCollector.SelectFactoryByStaticObjectPurpose(staticObjectPurpose);

            var id = default(int);

            if (MonsterIdentifierGenerator != null)
            {
                id = MonsterIdentifierGenerator.GetNewId();
            }

            var staticObject = factory.Create(sector, node, id);

            return(staticObject);
        }
        public PropContainerPurpose RollPurpose(IResourceDepositData resourceDepositData)
        {
            if (resourceDepositData is null)
            {
                throw new ArgumentNullException(nameof(resourceDepositData));
            }

            var purposeList = new List <PropContainerPurpose>(100);

            foreach (var resourceDepositDataItem in resourceDepositData.Items)
            {
                var count   = (int)Math.Round(resourceDepositDataItem.Share * 100);
                var purpose = GetPurposeByResourceType(resourceDepositDataItem.ResourceType);
                for (var i = 0; i < count; i++)
                {
                    purposeList.Add(purpose);
                }
            }

            if (purposeList.Count < 100)
            {
                var diff = 100 - purposeList.Count;
                var everywherePurpose = new[]
                { PropContainerPurpose.Puddle, PropContainerPurpose.Pit, PropContainerPurpose.TrashHeap };
                var diffShare = (int)Math.Ceiling(diff / 2f);
                foreach (var purpose in everywherePurpose)
                {
                    for (var i = 0; i < diffShare; i++)
                    {
                        purposeList.Add(purpose);
                    }
                }
            }
            else
            {
                purposeList.Add(PropContainerPurpose.TrashHeap);
                purposeList.Add(PropContainerPurpose.Puddle);
                purposeList.Add(PropContainerPurpose.Pit);
            }

            return(_dice.RollFromList(purposeList));
        }
        private static string GetVisualString(ISectorNode currentNode, ISectorNode nextNode,
                                              IResourceDepositData currentResource, IResourceDepositData nextResource)
        {
            var str = new StringBuilder(
                $"    {currentNode.GetHashCode()}{ResourceToString(currentResource)}-->{nextNode.GetHashCode()}{ResourceToString(nextResource)};");

            if (currentResource.Items.Any())
            {
                var currentResColor = ResourceToStyle(currentResource);
                str.AppendLine($"    style {currentNode.GetHashCode()} fill:{ColorTranslator.ToHtml(currentResColor)}");
            }

            if (nextResource.Items.Any())
            {
                var nextResColor = ResourceToStyle(nextResource);
                str.AppendLine($"    style {nextNode.GetHashCode()} fill:{ColorTranslator.ToHtml(nextResColor)}");
            }

            return(str.ToString());
        }
Exemple #8
0
        private static Color ResourceToStyle(IResourceDepositData currentResource)
        {
            var totalColor = new Color();
            var colorDict  = new Dictionary <SectorResourceType, Color> {
                { SectorResourceType.Iron, Color.Maroon },
                { SectorResourceType.Stones, Color.Silver },
                { SectorResourceType.WaterPuddles, Color.Aqua },
                { SectorResourceType.CherryBrushes, Color.Green }
            };

            foreach (var item in currentResource.Items)
            {
                var resColor = colorDict[item.ResourceType];
                var r        = MathUtils.Lerp(totalColor.R, resColor.R, item.Share);
                var g        = MathUtils.Lerp(totalColor.G, resColor.G, item.Share);
                var b        = MathUtils.Lerp(totalColor.B, resColor.B, item.Share);

                totalColor = Color.FromArgb((int)r, (int)g, (int)b);
            }

            return(totalColor);
        }
Exemple #9
0
 private PropContainerPurpose RollPurpose(IResourceDepositData resourceDepositData)
 {
     return(_staticObjectsGeneratorRandomSource.RollPurpose(resourceDepositData));
 }