public Feature Generate2(int size) { var featureObject = Instantiate(featurePrefab.gameObject); var feature = featureObject.GetComponent <Feature> (); List <Vector2Int> openList = new List <Vector2Int> (); openList.Add(Vector2Int.zero); BlockMap closeList = new BlockMap(); var count = size; while (count > 0) { if (openList.Count == 0) { throw(new System.Exception("unexpected running out of open list")); } var position = openList [Random.Range(0, openList.Count)]; openList.Remove(position); var block = blockGenerator.GenerateBlock(); block.X = position.x; block.Y = position.y; feature.AddBlock(block); closeList.Add(block); ExplorePosition(position.x + 1, position.y, closeList, openList); ExplorePosition(position.x - 1, position.y, closeList, openList); ExplorePosition(position.x, position.y + 1, closeList, openList); ExplorePosition(position.x, position.y - 1, closeList, openList); count--; } feature.Income = 0; for (int i = 1; i <= size; i++) { feature.Income += size; } feature.SLAEffect = 100; Add(feature); return(feature); }
/// <inheritdoc /> public override object?ReadJson(JsonReader reader, Type objectType, object?existingValue, JsonSerializer serializer) { BlockMap result = new BlockMap(); var ob = JToken.Load(reader); if (ob is JObject obj) { foreach (var item in obj) { if (item.Value == null) { continue; } var key = item.Key; if (result.ContainsKey(key)) { continue; } BlockMappingEntry a = new BlockMappingEntry(); a.BedrockStates = new Dictionary <string, string>(); JObject itemValue = (JObject)item.Value; foreach (var itemKey in itemValue) { if (itemKey.Key == "bedrock_identifier") { a.BedrockIdentifier = itemKey.Value.ToObject <string>(); } else if (itemKey.Key == "bedrock_states") { if (itemKey.Value.Type == JTokenType.Object) { foreach (var state in (JObject)itemKey.Value) { switch (state.Value.Type) { case JTokenType.Boolean: a.BedrockStates.TryAdd(state.Key, state.Value.ToObject <bool>() ? "1" : "0"); break; default: a.BedrockStates.TryAdd(state.Key, state.Value.ToObject <string>()); break; } } } } } //var a = item.Value.ToObject<BlockMappingEntry>(serializer); //var match = Regex.Match(key); result.Add(key, a); } } return(result); }