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)); }
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 }); }
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()); }
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); }
private PropContainerPurpose RollPurpose(IResourceDepositData resourceDepositData) { return(_staticObjectsGeneratorRandomSource.RollPurpose(resourceDepositData)); }