protected override void Execute() { string levelFileName = StringHelper.ConvertToXMLCompatible(levelNameStatus.Name); LevelSaveData levelSaveData = SerializeHelper.Deserialize <LevelSaveData>(LevelDataPath.Path + levelFileName); List <Vector2> standardTileGridPositions = levelSaveData.StandardTileGridPositions; List <Vector2> nonStandardTileGridPositions = new List <Vector2>(); foreach (TileSaveData tileSaveData in levelSaveData.NonStandardTilesSaveData) { GenerateableTileNode generateableTileNode = GenerateableTileLibrary.GetGeneratableTileNode(tileSaveData.TileType); if (!generateableTileNode.UserGenerated) { continue; } nonStandardTileGridPositions.Add(tileSaveData.GridPosition); } List <Vector2> userGeneratedTileGridPositions = standardTileGridPositions.Concat(nonStandardTileGridPositions).ToList(); TileGenerator.SpawnTiles(userGeneratedTileGridPositions); List <LevelObjectSaveData> levelObjectsSaveData = levelSaveData.LevelObjectsSaveData; SpawnLevelObjects(levelObjectsSaveData); }
private GameObject InstantiateRectangleStandardTile(List <Vector2> rectangle, Transform parent) { Vector2 centerGridPosition = rectangle.Center(); Vector2 startGridPosition = rectangle.Lowest(); Vector2 endGridPosition = rectangle.Highest(); Vector2 centerWorldPosition = LevelEditorGridHelper.GridToNodePosition(centerGridPosition); Vector2 startWorldPosition = LevelEditorGridHelper.GridToNodePosition(startGridPosition); Vector2 endWorldPosition = LevelEditorGridHelper.GridToNodePosition(endGridPosition); Vector2 offset = VectorHelper.Abs(endWorldPosition - startWorldPosition); float nodeSize = LevelEditorGridNodeSizeLibrary.Instance.NodeSize; float width = offset.x + nodeSize; float height = offset.y + nodeSize; Vector2 scale = new Vector2(width, height); GenerateableTileNode generatableTileNode = GenerateableTileLibrary.GetGeneratableTileNode(TileType.Standard); GameObject standardTile = Object.Instantiate(generatableTileNode.Prefab, centerWorldPosition, new Quaternion(), parent); standardTile.transform.localScale = scale; return(standardTile); }
private static GenerateableTileNode GetGeneratableTileNode(Vector2 gridPosition) { GenerateableTileNode matchingTileGeneratorNode = null; List <GenerateableTileNode> tileEditorNodes = GenerateableTileLibrary.GenerateableTiles; for (int i = tileEditorNodes.Count - 1; i >= 0; i--) { GenerateableTileNode tileGeneratorNode = tileEditorNodes[i]; bool falseConditionFound = tileGeneratorNode.TileConditions.Exists(x => !x.Check(gridPosition)); if (!falseConditionFound) { matchingTileGeneratorNode = tileGeneratorNode; break; } } return(matchingTileGeneratorNode); }
private static void GenerateTile(Vector2 gridPosition) { GenerateableTileNode matchingTileGeneratorNode = GetGeneratableTileNode(gridPosition); Tile tile = GetTile(matchingTileGeneratorNode.Prefab, matchingTileGeneratorNode.TileType, gridPosition); if (tile.TileType == TileType.Empty) { if (TileGrid.Instance.ContainsTile(gridPosition)) { TileGrid.Instance.RemoveTile(gridPosition); } } else { TileGrid.Instance.SetTile(gridPosition, tile); foreach (TileAction tileAction in matchingTileGeneratorNode.TileActions) { tileAction.Do(gridPosition); } } }
private static bool CheckTileTypeUserGenerated(TileType tileType) { GenerateableTileNode generatableTile = GenerateableTileLibrary.GetGeneratableTileNode(tileType); return(generatableTile.UserGenerated); }