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); } }
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); } } } } }
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)); } } } }