Exemplo n.º 1
0
    public void InsertEast(IsometricTileData tile)
    {
        List <List <IsometricTileData> > data = GetTileData();

        for (int i = 0; i < data.Count; i++)
        {
            data[i].Add(tile);
        }
        SetTileData(data);
    }
Exemplo n.º 2
0
    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);
    }
Exemplo n.º 3
0
    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();
    }
Exemplo n.º 4
0
    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();
        }
    }
Exemplo n.º 5
0
    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();
            }
        }
    }
Exemplo n.º 6
0
 public void SetTile(int column, int row, IsometricTileData tile)
 {
     TilePrefabs[row * Columns + column] = tile.TilePrefab;
     Rotations[row * Columns + column]   = tile.Rotation;
 }