public void InsertEast(IsometricTileData tile) { List <List <IsometricTileData> > data = GetTileData(); for (int i = 0; i < data.Count; i++) { data[i].Add(tile); } SetTileData(data); }
public void InsertSouth(IsometricTileData tile) { List <List <IsometricTileData> > data = GetTileData(); List <IsometricTileData> newRow = new List <IsometricTileData>(); for (int i = 0; i < Columns; i++) { newRow.Add(tile); } data.Add(newRow); SetTileData(data); }
private void CreateNewWorld(String name) { WorldData = new IsometricWorldData(); WorldData.WorldName = name; IsometricTilePrefabController initialBlock = TileSetsData.EmptyTile; List <IsometricTileData> line = new List <IsometricTileData>(); List <List <IsometricTileData> > row = new List <List <IsometricTileData> >(); IsometricTileData tile = new IsometricTileData(initialBlock, 0); line.Add(tile); row.Add((line)); WorldData.SetTileData(row); AssetDatabase.CreateAsset(WorldData, WorldDataPath + name + ".asset"); SaveWorld(); }
private void DrawAddRemoveButtons() { int buttonSize = 23; if (GUI.Button(new Rect(LeftWidth + Offset, Offset, buttonSize, buttonSize), "+")) { IsometricTileData tile = new IsometricTileData(TileSetsData.EmptyTile, 0); WorldData.InsertWest(tile); StartDrawWorldPosition -= DrawTileOffset; } if (GUI.Button(new Rect(LeftWidth + Offset + buttonSize + Offset, Offset, buttonSize, buttonSize), "-")) { WorldData.DeleteWest(); StartDrawWorldPosition += DrawTileOffset; } if (GUI.Button(new Rect(position.width - RightWidth - Offset * 2 - buttonSize * 2, Offset, buttonSize, buttonSize), "+")) { IsometricTileData tile = new IsometricTileData(TileSetsData.EmptyTile, 0); WorldData.InsertNorth(tile); StartDrawWorldPosition += new Vector2(DrawTileOffset.x, -DrawTileOffset.y); } if (GUI.Button(new Rect(position.width - RightWidth - Offset - buttonSize, Offset, buttonSize, buttonSize), "-")) { WorldData.DeleteNorth(); StartDrawWorldPosition -= new Vector2(DrawTileOffset.x, -DrawTileOffset.y); } if (GUI.Button(new Rect(LeftWidth + Offset, position.height - buttonSize - Offset, buttonSize, buttonSize), "+")) { IsometricTileData tile = new IsometricTileData(TileSetsData.EmptyTile, 0); WorldData.InsertSouth(tile); } if (GUI.Button(new Rect(LeftWidth + Offset + buttonSize + Offset, position.height - buttonSize - Offset, buttonSize, buttonSize), "-")) { WorldData.DeleteSouth(); } if (GUI.Button(new Rect(position.width - RightWidth - Offset * 2 - buttonSize * 2, position.height - buttonSize - Offset, buttonSize, buttonSize), "+")) { IsometricTileData tile = new IsometricTileData(TileSetsData.EmptyTile, 0); WorldData.InsertEast(tile); } if (GUI.Button(new Rect(position.width - RightWidth - Offset - buttonSize, position.height - buttonSize - Offset, buttonSize, buttonSize), "-")) { WorldData.DeleteEast(); } }
private void HandleTouch() { Event e = Event.current; if (e == null) { return; } if (e.type == EventType.MouseUp && e.button == 1) { IsRightClick = false; } else if (e.type == EventType.MouseDown && e.button == 1) { IsRightClick = true; PrevMousePosition = GUIUtility.GUIToScreenPoint(e.mousePosition); } if (e.type == EventType.MouseUp && e.button == 0) { IsLeftClick = false; } else if (e.type == EventType.MouseDown && e.button == 0) { IsLeftClick = true; PrevMousePosition = GUIUtility.GUIToScreenPoint(e.mousePosition); } // stop clicking if mouse exits window if (e.type == EventType.MouseLeaveWindow) { IsRightClick = false; IsLeftClick = false; } // handle move map if (IsRightClick) { Vector2 mousePosition = GUIUtility.GUIToScreenPoint(e.mousePosition); Vector2 mouseDelta = mousePosition - PrevMousePosition; StartDrawWorldPosition += mouseDelta; PrevMousePosition = mousePosition; Repaint(); } // handle rotate map if (e.type == EventType.KeyDown && e.keyCode == KeyCode.R) { if (e.shift) { WorldData.Rotate(); } else { Rotation = (Rotation + 1) % 4; } Repaint(); } //dont process click if you click outside main window if (e.mousePosition.x < LeftWidth || e.mousePosition.y < 0 || e.mousePosition.x > position.width - RightWidth || e.mousePosition.y > position.height) { IsRightClick = false; IsLeftClick = false; return; } // handle edit tyles if (SelectedEdit == EditType.Tiles) { if (e.type == EventType.MouseDown && e.button == 0) { if (SelectedTile != null) { Vector2 mousePosition = e.mousePosition; int closestX = 0; int closestY = 0; float minDist = (mousePosition - TileCenterPositions[0][0]).magnitude; for (int i = 0; i < TileCenterPositions.Count; i++) { for (int j = 0; j < TileCenterPositions[i].Count; j++) { float dist = (mousePosition - TileCenterPositions[i][j]).magnitude; if (dist < minDist) { minDist = dist; closestX = j; closestY = i; } } } if (minDist < DrawTileOffset.magnitude) { IsometricTileData tile = new IsometricTileData(SelectedTile, Rotation); WorldData.SetTile(closestX, closestY, tile); Repaint(); } } } } // handle edit track if (SelectedEdit == EditType.Track) { if (e.type == EventType.MouseDown && e.button == 0) { Vector2 mousePosition = e.mousePosition - StartDrawWorldPosition; int keyFrameIndex = -1; if (WorldData.TrackData == null) { WorldData.TrackData = new IsometricTrackData(); } if (WorldData.TrackData.Keyframes.Count > 0) { int closestIndex = 0; float minDist = (mousePosition - WorldData.TrackData.Keyframes[0].Position).magnitude; for (int i = 1; i < WorldData.TrackData.Keyframes.Count; i++) { float dist = (mousePosition - WorldData.TrackData.Keyframes[i].Position).magnitude; if (dist < minDist) { minDist = dist; closestIndex = i; } } if (minDist < 30) { keyFrameIndex = closestIndex; } } if (keyFrameIndex < 0) { WorldData.TrackData.Keyframes.Add(new IsometricTrackKeyframeData(mousePosition, 0, 50, 0)); SelectedKeyframeIndex = WorldData.TrackData.Keyframes.Count - 1; } else { SelectedKeyframeIndex = keyFrameIndex; } Repaint(); } if (e.type == EventType.KeyDown && e.keyCode == KeyCode.Escape) { SelectedKeyframeIndex = -1; Repaint(); } if (IsLeftClick && SelectedKeyframeIndex >= 0) { Vector2 mousePosition = GUIUtility.GUIToScreenPoint(e.mousePosition); Vector2 mouseDelta = mousePosition - PrevMousePosition; WorldData.TrackData.Keyframes[SelectedKeyframeIndex].Position += mouseDelta; PrevMousePosition = mousePosition; Repaint(); } } }
public void SetTile(int column, int row, IsometricTileData tile) { TilePrefabs[row * Columns + column] = tile.TilePrefab; Rotations[row * Columns + column] = tile.Rotation; }