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);
    }
示例#2
0
        /// <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);
        }