예제 #1
0
        public override void MouseDown(TileMouseState e)
        {
            if (_wvm.SelectedSprite == null)
            {
                return;
            }

            Vector2Short[,] tiles = _wvm.SelectedSprite.GetTiles();
            for (int x = 0; x < _wvm.SelectedSprite.Size.X; x++)
            {
                int tilex = x + e.Location.X;
                for (int y = 0; y < _wvm.SelectedSprite.Size.Y; y++)
                {
                    int tiley = y + e.Location.Y;

                    _wvm.UndoManager.SaveTile(tilex, tiley);
                    Tile curtile = _wvm.CurrentWorld.Tiles[tilex, tiley];
                    curtile.IsActive = true;
                    curtile.Type     = _wvm.SelectedSprite.Tile;
                    curtile.U        = tiles[x, y].X;
                    curtile.V        = tiles[x, y].Y;
                    _wvm.UpdateRenderPixel(tilex, tiley);
                }
            }

            _wvm.UndoManager.SaveUndo();

            /* Heathtech */
            BlendRules.ResetUVCache(_wvm, e.Location.X, e.Location.Y, _wvm.SelectedSprite.Size.X, _wvm.SelectedSprite.Size.Y);
        }
예제 #2
0
        public void Place(int destinationX, int destinationY, WorldViewModel wvm)
        {
            ErrorLogging.TelemetryClient?.TrackEvent("PlaceSprite", new Dictionary <string, string> {
                ["Tile"] = Tile.ToString(), ["UV"] = UV.ToString()
            });

            if (Tile == (ushort)TileType.ChristmasTree)
            {
                for (int x = 0; x < SizeTiles.X; x++)
                {
                    int tilex = x + destinationX;
                    for (int y = 0; y < SizeTiles.Y; y++)
                    {
                        int tiley = y + destinationY;
                        wvm.UndoManager.SaveTile(tilex, tiley);
                        Tile curtile = wvm.CurrentWorld.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = Tile;
                        if (x == 0 && y == 0)
                        {
                            curtile.U = 10;
                        }
                        else
                        {
                            curtile.U = (short)x;
                        }
                        curtile.V = (short)y;

                        wvm.UpdateRenderPixel(tilex, tiley);
                        BlendRules.ResetUVCache(wvm, tilex, tiley, SizeTiles.X, SizeTiles.Y);
                    }
                }
            }
            else
            {
                for (int x = 0; x < SizeTiles.X; x++)
                {
                    Vector2Short[,] tiles = GetTiles();
                    int tilex = x + destinationX;
                    for (int y = 0; y < SizeTiles.Y; y++)
                    {
                        int tiley = y + destinationY;
                        wvm.UndoManager.SaveTile(tilex, tiley);
                        Tile curtile = wvm.CurrentWorld.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = Tile;
                        curtile.U        = tiles[x, y].X;
                        curtile.V        = tiles[x, y].Y;

                        wvm.UpdateRenderPixel(tilex, tiley);
                        BlendRules.ResetUVCache(wvm, tilex, tiley, SizeTiles.X, SizeTiles.Y);
                    }
                }
            }
        }
예제 #3
0
        public static void PlaceSprite(int destinationX, int destinationY, Sprite sprite, WorldViewModel wvm)
        {
            if (sprite.Tile == (ushort)TileType.ChristmasTree)
            {
                for (int x = 0; x < sprite.Size.X; x++)
                {
                    int tilex = x + destinationX;
                    for (int y = 0; y < sprite.Size.Y; y++)
                    {
                        int tiley = y + destinationY;
                        wvm.UndoManager.SaveTile(tilex, tiley);
                        Tile curtile = wvm.CurrentWorld.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = sprite.Tile;
                        if (x == 0 && y == 0)
                        {
                            curtile.U = 10;
                        }
                        else
                        {
                            curtile.U = (short)x;
                        }
                        curtile.V = (short)y;

                        wvm.UpdateRenderPixel(tilex, tiley);
                        BlendRules.ResetUVCache(wvm, tilex, tiley, sprite.Size.X, sprite.Size.Y);
                    }
                }
            }
            else
            {
                for (int x = 0; x < sprite.Size.X; x++)
                {
                    Vector2Short[,] tiles = sprite.GetTiles();
                    int tilex = x + destinationX;
                    for (int y = 0; y < sprite.Size.Y; y++)
                    {
                        int tiley = y + destinationY;
                        wvm.UndoManager.SaveTile(tilex, tiley);
                        Tile curtile = wvm.CurrentWorld.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = sprite.Tile;
                        curtile.U        = tiles[x, y].X;
                        curtile.V        = tiles[x, y].Y;

                        wvm.UpdateRenderPixel(tilex, tiley);
                        BlendRules.ResetUVCache(wvm, tilex, tiley, sprite.Size.X, sprite.Size.Y);
                    }
                }
            }
        }
예제 #4
0
        public void Place(int destinationX, int destinationY, ITileData world)
        {
            ErrorLogging.TelemetryClient?.TrackEvent("PlaceSprite", new Dictionary <string, string> {
                ["Tile"] = Tile.ToString(), ["UV"] = UV.ToString()
            });

            if (Tile == (ushort)TileType.ChristmasTree)
            {
                for (int x = 0; x < SizeTiles.X; x++)
                {
                    int tilex = x + destinationX;
                    for (int y = 0; y < SizeTiles.Y; y++)
                    {
                        int  tiley   = y + destinationY;
                        Tile curtile = world.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = Tile;
                        if (x == 0 && y == 0)
                        {
                            curtile.U = 10;
                        }
                        else
                        {
                            curtile.U = (short)x;
                        }
                        curtile.V = (short)y;
                    }
                }
            }
            else
            {
                for (int x = 0; x < SizeTiles.X; x++)
                {
                    Vector2Short[,] tiles = GetTiles();
                    int tilex = x + destinationX;
                    for (int y = 0; y < SizeTiles.Y; y++)
                    {
                        int  tiley   = y + destinationY;
                        Tile curtile = world.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = Tile;
                        curtile.U        = tiles[x, y].X;
                        curtile.V        = tiles[x, y].Y;
                    }
                }
            }
        }
예제 #5
0
        public static void PlaceSprite(int destinationX, int destinationY, Sprite sprite, World world)
        {
            if (sprite.Tile == (ushort)TileType.ChristmasTree)
            {
                for (int x = 0; x < sprite.Size.X; x++)
                {
                    int tilex = x + destinationX;
                    for (int y = 0; y < sprite.Size.Y; y++)
                    {
                        int tiley = y + destinationY;

                        Tile curtile = world.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = sprite.Tile;
                        if (x == 0 && y == 0)
                        {
                            curtile.U = 10;
                        }
                        else
                        {
                            curtile.U = (short)x;
                        }
                        curtile.V = (short)y;
                    }
                }
            }
            else
            {
                for (int x = 0; x < sprite.Size.X; x++)
                {
                    Vector2Short[,] tiles = sprite.GetTiles();
                    int tilex = x + destinationX;
                    for (int y = 0; y < sprite.Size.Y; y++)
                    {
                        int  tiley   = y + destinationY;
                        Tile curtile = world.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = sprite.Tile;
                        curtile.U        = tiles[x, y].X;
                        curtile.V        = tiles[x, y].Y;
                    }
                }
            }
        }
 public void Place(int destinationX, int destinationY, ITileData world)
 {
     if (Tile == (ushort)TileType.ChristmasTree)
     {
         for (int x = 0; x < SizeTiles.X; x++)
         {
             int tilex = x + destinationX;
             for (int y = 0; y < SizeTiles.Y; y++)
             {
                 int  tiley   = y + destinationY;
                 Tile curtile = world.Tiles[tilex, tiley];
                 curtile.IsActive = true;
                 curtile.Type     = Tile;
                 if (x == 0 && y == 0)
                 {
                     curtile.U = 10;
                 }
                 else
                 {
                     curtile.U = (short)x;
                 }
                 curtile.V = (short)y;
             }
         }
     }
     else
     {
         for (int x = 0; x < SizeTiles.X; x++)
         {
             Vector2Short[,] tiles = GetTiles();
             int tilex = x + destinationX;
             for (int y = 0; y < SizeTiles.Y; y++)
             {
                 int  tiley   = y + destinationY;
                 Tile curtile = world.Tiles[tilex, tiley];
                 curtile.IsActive = true;
                 curtile.Type     = Tile;
                 curtile.U        = tiles[x, y].X;
                 curtile.V        = tiles[x, y].Y;
             }
         }
     }
 }
예제 #7
0
 private void DrawLineP2P(Vector2Int32 endPoint)
 {
     foreach (Vector2Int32 pixel in Shape.DrawLineTool(_startPoint, _endPoint))
     {
         if (!_wvm.CurrentWorld.ValidTileLocation(pixel))
         {
             continue;
         }
         int index = pixel.X + pixel.Y * _wvm.CurrentWorld.TilesWide;
         if (!_wvm.CheckTiles[index])
         {
             _wvm.CheckTiles[index] = true;
             if (_wvm.Selection.IsValid(pixel))
             {
                 if (_wvm.SelectedSprite == null)
                 {
                     return;
                 }
                 tiles = _wvm.SelectedSprite.GetTiles();
                 for (int x = 0; x < _wvm.SelectedSprite.Size.X; x++)
                 {
                     tilex = x + pixel.X;
                     for (int y = 0; y < _wvm.SelectedSprite.Size.Y; y++)
                     {
                         tiley = y + pixel.Y;
                         _wvm.UndoManager.SaveTile(tilex, tiley);
                         Tile curtile = _wvm.CurrentWorld.Tiles[tilex, tiley];
                         curtile.IsActive = true;
                         curtile.Type     = _wvm.SelectedSprite.Tile;
                         curtile.U        = tiles[x, y].X;
                         curtile.V        = tiles[x, y].Y;
                         _wvm.UpdateRenderPixel(tilex, tiley);
                     }
                 }
                 // Heathtech
                 BlendRules.ResetUVCache(_wvm, pixel.X, pixel.Y, _wvm.SelectedSprite.Size.X, _wvm.SelectedSprite.Size.Y);
             }
         }
     }
 }
예제 #8
0
        public override void MouseDown(TileMouseState e)
        {
            if (_wvm.SelectedSprite == null)
            {
                return;
            }
            if (_wvm.SelectedSprite.Size.X > 1 || _wvm.SelectedSprite.Size.Y > 1)
            {
                Vector2Short[,] tiles = _wvm.SelectedSprite.GetTiles();
                for (int x = 0; x < _wvm.SelectedSprite.Size.X; x++)
                {
                    int tilex = x + e.Location.X;
                    for (int y = 0; y < _wvm.SelectedSprite.Size.Y; y++)
                    {
                        int tiley = y + e.Location.Y;
                        _wvm.UndoManager.SaveTile(tilex, tiley);
                        Tile curtile = _wvm.CurrentWorld.Tiles[tilex, tiley];
                        curtile.IsActive = true;
                        curtile.Type     = _wvm.SelectedSprite.Tile;
                        curtile.U        = tiles[x, y].X;
                        curtile.V        = tiles[x, y].Y;
                        _wvm.UpdateRenderPixel(tilex, tiley);
                    }
                }
            }
            if (!_isRightDown && !_isLeftDown)
            {
                _startPoint     = e.Location;
                _wvm.CheckTiles = new bool[_wvm.CurrentWorld.TilesWide * _wvm.CurrentWorld.TilesHigh];
            }

            _isLeftDown  = (e.LeftButton == MouseButtonState.Pressed);
            _isRightDown = (e.RightButton == MouseButtonState.Pressed);

            if (_wvm.SelectedSprite.Size.X == 1 && _wvm.SelectedSprite.Size.Y == 1)
            {
                CheckDirectionandDraw(e.Location);
            }
        }
예제 #9
0
 private void DrawLineP2P(Vector2Int32 endPoint)
 {
     foreach (Vector2Int32 pixel in Shape.DrawLineTool(_startPoint, _endPoint))
     {
         if (!_wvm.CurrentWorld.ValidTileLocation(pixel)) continue;
         int index = pixel.X + pixel.Y * _wvm.CurrentWorld.TilesWide;
         if (!_wvm.CheckTiles[index])
         {
             _wvm.CheckTiles[index] = true;
             if (_wvm.Selection.IsValid(pixel))
             {
                 if (_wvm.SelectedSprite == null)
                     return;
                 tiles = _wvm.SelectedSprite.GetTiles();
                 for (int x = 0; x < _wvm.SelectedSprite.Size.X; x++)
                 {
                     tilex = x + pixel.X;
                     for (int y = 0; y < _wvm.SelectedSprite.Size.Y; y++)
                     {
                         tiley = y + pixel.Y;
                         _wvm.UndoManager.SaveTile(tilex, tiley);
                         Tile curtile = _wvm.CurrentWorld.Tiles[tilex, tiley];
                         curtile.IsActive = true;
                         curtile.Type = _wvm.SelectedSprite.Tile;
                         curtile.U = tiles[x, y].X;
                         curtile.V = tiles[x, y].Y;
                         _wvm.UpdateRenderPixel(tilex, tiley);
                     }
                 }
                 // Heathtech
                 BlendRules.ResetUVCache(_wvm, pixel.X, pixel.Y, _wvm.SelectedSprite.Size.X, _wvm.SelectedSprite.Size.Y);
             }
         }
     }
 }