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); } }
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(); } }
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; } } } }
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); }
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(); } }
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; } }
protected IWorldTile DoesConnectOrNull(IWorldTile tile) { return(tile ? (tile.DoesConnect() ? tile : null) : null); }
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; } }