public override void MouseDown(TileMouseState e)
        {
            if (_wvm.SelectedSprite == null)
            {
                return;
            }

            Sprite.PlaceSprite(e.Location.X, e.Location.Y, _wvm.SelectedSprite, _wvm);
            if (Tile.IsTileEntity(_wvm.SelectedSprite.Tile))
            {
                var te = TileEntity.CreateForTile(_wvm.CurrentWorld.Tiles[e.Location.X, e.Location.Y], e.Location.X, e.Location.Y, 0);
                TileEntity.PlaceEntity(te, _wvm);
            }

            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);
            }
        }
Beispiel #2
0
        private void PlaceSelectedSprite(int x, int y)
        {
            ushort tileId = _wvm.SelectedSprite2.Value.Tile;

            SpriteFull.PlaceSprite(x, y, _wvm.SelectedSpriteTile2, _wvm.SelectedSprite2.Key, _wvm);

            if (Tile.IsTileEntity(tileId))
            {
                // if the tile entity is not the same as it was, create a new TE.
                var existingTe = _wvm.CurrentWorld.GetTileEntityAtTile(x, y);
                if ((ushort)existingTe.TileType != _wvm.SelectedSpriteTile2.Tile)
                {
                    var te = TileEntity.CreateForTile(_wvm.CurrentWorld.Tiles[x, y], x, y, 0);
                    TileEntity.PlaceEntity(te, _wvm);
                }
            }
            else if (Tile.IsChest(tileId))
            {
                var existingChest = _wvm.CurrentWorld.GetChestAtTile(x, y);
                if (existingChest == null)
                {
                    _wvm.CurrentWorld.Chests.Add(new Chest(x, y));
                }
            }
            else if (Tile.IsSign(tileId))
            {
                var existingSign = _wvm.CurrentWorld.GetSignAtTile(x, y);
                if (existingSign == null)
                {
                    _wvm.CurrentWorld.Signs.Add(new Sign(x, y, string.Empty));
                }
            }
        }
        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;
                        }

                        Sprite.PlaceSprite(pixel.X, pixel.Y, _wvm.SelectedSprite, _wvm);
                        if (Tile.IsTileEntity(_wvm.SelectedSprite.Tile))
                        {
                            var te = TileEntity.CreateForTile(_wvm.CurrentWorld.Tiles[pixel.X, pixel.Y], pixel.X, pixel.Y, 0);
                            TileEntity.PlaceEntity(te, _wvm);
                        }
                    }
                }
            }
        }
Beispiel #4
0
        private void ValidateAndRemoveChests()
        {
            if (Buffer == null || Buffer.LastTile == null)
            {
                return;
            }


            var lastTile         = Buffer.LastTile;
            var existingLastTile = _wvm.CurrentWorld.Tiles[lastTile.Location.X, lastTile.Location.Y];

            // remove deleted chests or signs if required
            if (Tile.IsChest(lastTile.Tile.Type))
            {
                if (!Tile.IsChest(existingLastTile.Type) || !existingLastTile.IsActive)
                {
                    var curchest = _wvm.CurrentWorld.GetChestAtTile(lastTile.Location.X, lastTile.Location.Y);
                    if (curchest != null)
                    {
                        _wvm.CurrentWorld.Chests.Remove(curchest);
                    }
                }
            }
            else if (Tile.IsSign(lastTile.Tile.Type))
            {
                if (!Tile.IsSign(existingLastTile.Type) || !existingLastTile.IsActive)
                {
                    var cursign = _wvm.CurrentWorld.GetSignAtTile(lastTile.Location.X, lastTile.Location.Y);
                    if (cursign != null)
                    {
                        _wvm.CurrentWorld.Signs.Remove(cursign);
                    }
                }
            }
            else if (Tile.IsTileEntity(lastTile.Tile.Type))
            {
                if (!Tile.IsTileEntity(existingLastTile.Type) || !existingLastTile.IsActive)
                {
                    var curTe = _wvm.CurrentWorld.GetTileEntityAtTile(lastTile.Location.X, lastTile.Location.Y);
                    if (curTe != null)
                    {
                        _wvm.CurrentWorld.TileEntities.Remove(curTe);
                    }
                }
            }

            // Add new chests and signs if required
            if (_wvm.CurrentWorld.IsAnchor(lastTile.Location.X, lastTile.Location.Y))
            {
                if (Tile.IsChest(existingLastTile.Type))
                {
                    var curchest = _wvm.CurrentWorld.GetChestAtTile(lastTile.Location.X, lastTile.Location.Y);
                    if (curchest == null)
                    {
                        _wvm.CurrentWorld.Chests.Add(new Chest(lastTile.Location.X, lastTile.Location.Y));
                    }
                }
                else if (Tile.IsSign(existingLastTile.Type))
                {
                    var cursign = _wvm.CurrentWorld.GetSignAtTile(lastTile.Location.X, lastTile.Location.Y);
                    if (cursign == null)
                    {
                        _wvm.CurrentWorld.Signs.Add(new Sign(lastTile.Location.X, lastTile.Location.Y, string.Empty));
                    }
                }
                else if (Tile.IsTileEntity(existingLastTile.Type))
                {
                    var curTe = _wvm.CurrentWorld.GetTileEntityAtTile(lastTile.Location.X, lastTile.Location.Y);
                    if (curTe == null)
                    {
                        _wvm.CurrentWorld.TileEntities.Add(TileEntity.CreateForTile(existingLastTile, lastTile.Location.X, lastTile.Location.Y, _wvm.CurrentWorld.TileEntities.Count));
                    }
                }
            }
        }