Exemple #1
0
 public HoleGroundGenerator(IWorldTile groundTile, List <Rect> holes, Vector2Int spawnPoint, List <CustomGenerator> customGenerators)
 {
     this.groundTile       = groundTile;
     this.holes            = holes;
     this.spawnPoint       = spawnPoint;
     this.customGenerators = customGenerators;
 }
 public void SetTileAt(IWorldTile tile, Vector2Int position)
 {
     if (tiles.ContainsKey(position))
     {
         DestroyTileAt(position);
     }
     if (tile)
     {
         tiles[position] = Instantiate(tile, GetRealPositionFor(position), Quaternion.identity, transform);
     }
 }
    public void GenerateTileAt(Vector2Int position, IGeneratorSpec generatorSpec)
    {
        if (GetTileAt(position))
        {
            DestroyTileAt(position);
        }
        IWorldTile prefab = generatorSpec.GenerateTileAt(0, position);

        if (prefab)
        {
            tiles[position] = Instantiate(prefab, GetRealPositionFor(position), Quaternion.identity, transform);
        }
    }
Exemple #4
0
        static void Main(string[] args)
        {
            bool isQuit = false;
            while (!isQuit)
            {
                var command = Console.ReadLine();
                if (command == "quit")
                    isQuit = true;
                else
                    isQuit = false;

                MapTileFactory factory = new MapTileFactory();
                IWorldTile tile = factory.CreateInstance(command);

                tile.SurveyArea();
            }
        }
Exemple #5
0
    private void AddAesthetic(IWorldTile tile, int num)
    {
        for (int i = 0; i < num; i++)
        {
            while (true)
            {
                int x = Random.Range(0, generatorInstance.GetWorldSize().x);
                int y = Random.Range(0, generatorInstance.GetWorldSize().y);

                // Dont spawn on top of the player or right next to them
                if (generatorInstance.IsValidMonsterSpawn(new Vector2Int(x, y)))
                {
                    generator.SetTileAt(tile, new Vector2Int(x, y));
                    break;
                }
            }
        }
    }
Exemple #6
0
    public IWorldTile GenerateTileAt(int seed, Vector2Int position)
    {
        foreach (CustomGenerator generator in customGenerators)
        {
            IWorldTile possibleTile = generator(seed, position);
            if (possibleTile != null)
            {
                return(possibleTile);
            }
        }

        foreach (Rect hole in holes)
        {
            if (hole.Contains(position))
            {
                return(null);
            }
        }

        return(groundTile);
    }
Exemple #7
0
    public override void ResolveSpriteVariant(Vector2Int p, WorldGenerator generator)
    {
        IWorldTile left       = generator.GetTileAt(new Vector2Int(p.x - 1, p.y));
        IWorldTile right      = generator.GetTileAt(new Vector2Int(p.x + 1, p.y));
        IWorldTile up         = generator.GetTileAt(new Vector2Int(p.x, p.y + 1));
        IWorldTile down       = generator.GetTileAt(new Vector2Int(p.x, p.y - 1));
        IWorldTile up_left    = generator.GetTileAt(new Vector2Int(p.x - 1, p.y + 1));
        IWorldTile up_right   = generator.GetTileAt(new Vector2Int(p.x + 1, p.y + 1));
        IWorldTile down_right = generator.GetTileAt(new Vector2Int(p.x + 1, p.y - 1));
        IWorldTile down_left  = generator.GetTileAt(new Vector2Int(p.x - 1, p.y - 1));

        SetSprite(SpriteVariant.TopLeft);

        if (!up && down)
        {
            if (!left && right)
            {
                SetSprite(SpriteVariant.TopLeft);
                return;
            }
            if (!right && left)
            {
                SetSprite(SpriteVariant.TopRight);
                return;
            }
        }
        if (up && down)
        {
            if (!left && right)
            {
                SetSprite(SpriteVariant.BottomLeft);
                return;
            }
            if (!right && left)
            {
                SetSprite(SpriteVariant.BottomRight);
                return;
            }
        }
    }
        static void Main(string[] args)
        {
            bool isQuit = false;

            while (!isQuit)
            {
                var command = Console.ReadLine();
                if (command == "quit")
                {
                    isQuit = true;
                }
                else
                {
                    isQuit = false;
                }

                IMapTileFactory factory = LoadFactory();
                IWorldTile      tile    = factory.CreateWorldTile();

                tile.SurveyArea();
            }
        }
Exemple #9
0
    public override void ResolveSpriteVariant(Vector2Int p, WorldGenerator generator)
    {
        IWorldTile left       = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x - 1, p.y)));
        IWorldTile right      = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x + 1, p.y)));
        IWorldTile up         = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x, p.y + 1)));
        IWorldTile down       = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x, p.y - 1)));
        IWorldTile up_left    = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x - 1, p.y + 1)));
        IWorldTile up_right   = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x + 1, p.y + 1)));
        IWorldTile down_right = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x + 1, p.y - 1)));
        IWorldTile down_left  = DoesConnectOrNull(generator.GetTileAt(new Vector2Int(p.x - 1, p.y - 1)));

        if (left && right && down && up)
        {
            if (up is TabletTile)
            {
                SetSprite(SpriteVariant.EdgeBg, 0);
            }
            return;
        }

        SetSprite(SpriteVariant.Center, 0);

        if (left && right)
        {
            if (up && !down)
            {
                SetSprite(SpriteVariant.Edge, 180);
                return;
            }
            else if (!up && down)
            {
                SetSprite(SpriteVariant.Edge, 0);
                return;
            }
        }
        else if (up && down)
        {
            if (left && !right)
            {
                SetSprite(SpriteVariant.Edge, 270);
                return;
            }
            else if (!left && right)
            {
                SetSprite(SpriteVariant.Edge, 90);
                return;
            }
        }
        else if (up)
        {
            if (left)
            {
                SetSprite(SpriteVariant.OuterCorner, 180);
                return;
            }
            else if (right)
            {
                SetSprite(SpriteVariant.OuterCorner, 90);
                return;
            }
        }
        else if (down)
        {
            if (left)
            {
                SetSprite(SpriteVariant.OuterCorner, 270);
                return;
            }
            else if (right)
            {
                SetSprite(SpriteVariant.OuterCorner, 0);
                return;
            }
        }

        if (!up_left)
        {
            SetSprite(SpriteVariant.InnerCorner, 0);
            return;
        }
        else if (!up_right)
        {
            SetSprite(SpriteVariant.InnerCorner, 270);
            return;
        }
        else if (!down_right)
        {
            SetSprite(SpriteVariant.InnerCorner, 180);
            return;
        }
        else if (!down_left)
        {
            SetSprite(SpriteVariant.InnerCorner, 90);
            return;
        }
    }
Exemple #10
0
 protected IWorldTile DoesConnectOrNull(IWorldTile tile)
 {
     return(tile ? (tile.DoesConnect() ? tile : null) : null);
 }
Exemple #11
0
    public override void ResolveSpriteVariant(Vector2Int p, WorldGenerator generator)
    {
        IWorldTile left  = generator.GetTileAt(new Vector2Int(p.x - 1, p.y));
        IWorldTile right = generator.GetTileAt(new Vector2Int(p.x + 1, p.y));
        IWorldTile up    = generator.GetTileAt(new Vector2Int(p.x, p.y + 1));
        IWorldTile down  = generator.GetTileAt(new Vector2Int(p.x, p.y - 1));

        IWorldTile up_left    = generator.GetTileAt(new Vector2Int(p.x - 1, p.y + 1));
        IWorldTile up_right   = generator.GetTileAt(new Vector2Int(p.x + 1, p.y + 1));
        IWorldTile down_right = generator.GetTileAt(new Vector2Int(p.x + 1, p.y - 1));
        IWorldTile down_left  = generator.GetTileAt(new Vector2Int(p.x - 1, p.y - 1));

        SetSprite(SpriteVariant.Center);

        if (left is WorldTile && right is LavaTile)
        {
            if (!up)
            {
                SetSprite(SpriteVariant.TopEdgeLeft);
                return;
            }
            if (down is LavaTile)
            {
                SetSprite(SpriteVariant.EdgeLeft);
                return;
            }
            if (down is WorldTile)
            {
                SetSprite(SpriteVariant.BottomEdgeLeft);
                return;
            }
        }

        if (right is WorldTile && left is LavaTile)
        {
            if (!up)
            {
                SetSprite(SpriteVariant.TopEdgeRight);
                return;
            }
            if (down is LavaTile)
            {
                SetSprite(SpriteVariant.EdgeRight);
                return;
            }
            if (down is WorldTile)
            {
                SetSprite(SpriteVariant.BottomEdgeRight);
                return;
            }
        }

        if (up is LavaTile && down is WorldTile)
        {
            SetSprite(SpriteVariant.Bottom);
            return;
        }

        if (down is LavaTile && !up)
        {
            SetSprite(SpriteVariant.Top);
            return;
        }
    }