public void Draw(SpriteBatch spriteBatch, Tileset tileSet) { for (int x = 0; x < mapSize.X; x++) { for (int y = 0; y < mapSize.Y; y++) { if (map[x, y] != -1) spriteBatch.Draw(tileSet.Tilesheet, new Vector2(x * tileSet.TileSize, y * tileSet.TileSize), new Rectangle(tileSet.tileCells[map[x, y]].X, tileSet.tileCells[map[x, y]].Y, tileSet.TileSize, tileSet.TileSize), Color.White, 0, Vector2.Zero, 1, SpriteEffects.None, (Order/1000) + 0.01f); } } }
public void Update(Tileset tileset) { prevMouse = mouse; mouse = Mouse.GetState(); foreach (Walker w in walkersToAdd) walkers.Add(w); walkersToAdd.Clear(); for (int i = walkers.Count() - 1; i >= 0; i--) { if (walkers[i].destroy) walkers.RemoveAt(i); } foreach (Walker w in walkers) { w.Update(map); if (map[w.Position.X, w.Position.Y] == targetTile) map[w.Position.X, w.Position.Y] = tileset.PickedTile; else { w.destroy = true; } if (!w.destroy) { if (w.addWalker[0]) { walkersToAdd.Add(new Walker(new Point(w.Position.X - 1, w.Position.Y), (byte)targetTile)); } if (w.addWalker[1]) { walkersToAdd.Add(new Walker(new Point(w.Position.X + 1, w.Position.Y), (byte)targetTile)); } if (w.addWalker[2]) { walkersToAdd.Add(new Walker(new Point(w.Position.X, w.Position.Y - 1), (byte)targetTile)); } if (w.addWalker[3]) { walkersToAdd.Add(new Walker(new Point(w.Position.X, w.Position.Y + 1), (byte)targetTile)); } } w.destroy = true; } if (mouse.LeftButton == ButtonState.Released && boxStart != new Point(-1, -1)) { int boxSize = (int)Globals.DistanceTo(new Vector2(boxStart.X, boxStart.Y), new Vector2(mouse.X, mouse.Y))/tileset.TileSize; for (int x = 0; x < boxSize; x++) { for (int y = 0; y < boxSize; y++) { map[x, y] = tileset.PickedTile; } } } if (mouse.LeftButton == ButtonState.Pressed) { for (int x = 0; x < mapSize.X; x++) { for (int y = 0; y < mapSize.Y; y++) { Rectangle hitbox = new Rectangle(x * tileset.TileSize, y * tileset.TileSize, tileset.TileSize, tileset.TileSize); Rectangle mouseHitbox = new Rectangle((int)Game1.camera.OffsetedMouse.X, (int)Game1.camera.OffsetedMouse.Y, 1, 1); if (mouse.LeftButton == ButtonState.Pressed) { if (hitbox.Intersects(mouseHitbox)) { if (Globals.currentTool == Tools.Pen && tileset.PickedTile != -1) map[x, y] = tileset.PickedTile; if (Globals.currentTool == Tools.Eraser) map[x, y] = -1; if (Globals.currentTool == Tools.Box) { if (prevMouse.LeftButton != ButtonState.Pressed) boxStart = new Point(x, y); } if (prevMouse.LeftButton != ButtonState.Pressed && Globals.currentTool == Tools.Fill && tileset.PickedTile != -1) { targetTile = (sbyte)map[x, y]; if (targetTile != tileset.PickedTile) { map[x, y] = targetTile; walkers.Add(new Walker(new Point(x, y), (byte)targetTile)); } } } } } } } }
public void Update(Tileset tileset) { prevMouse = mouse; mouse = Mouse.GetState(); foreach (Walker w in walkersToAdd) { walkers.Add(w); } walkersToAdd.Clear(); for (int i = walkers.Count() - 1; i >= 0; i--) { if (walkers[i].destroy) { walkers.RemoveAt(i); } } foreach (Walker w in walkers) { w.Update(map); if (map[w.Position.X, w.Position.Y] == targetTile) { map[w.Position.X, w.Position.Y] = tileset.PickedTile; } else { w.destroy = true; } if (!w.destroy) { if (w.addWalker[0]) { walkersToAdd.Add(new Walker(new Point(w.Position.X - 1, w.Position.Y), (byte)targetTile)); } if (w.addWalker[1]) { walkersToAdd.Add(new Walker(new Point(w.Position.X + 1, w.Position.Y), (byte)targetTile)); } if (w.addWalker[2]) { walkersToAdd.Add(new Walker(new Point(w.Position.X, w.Position.Y - 1), (byte)targetTile)); } if (w.addWalker[3]) { walkersToAdd.Add(new Walker(new Point(w.Position.X, w.Position.Y + 1), (byte)targetTile)); } } w.destroy = true; } if (mouse.LeftButton == ButtonState.Released && boxStart != new Point(-1, -1)) { int boxSize = (int)Globals.DistanceTo(new Vector2(boxStart.X, boxStart.Y), new Vector2(mouse.X, mouse.Y)) / tileset.TileSize; for (int x = 0; x < boxSize; x++) { for (int y = 0; y < boxSize; y++) { map[x, y] = tileset.PickedTile; } } } if (mouse.LeftButton == ButtonState.Pressed) { for (int x = 0; x < mapSize.X; x++) { for (int y = 0; y < mapSize.Y; y++) { Rectangle hitbox = new Rectangle(x * tileset.TileSize, y * tileset.TileSize, tileset.TileSize, tileset.TileSize); Rectangle mouseHitbox = new Rectangle((int)Game1.camera.OffsetedMouse.X, (int)Game1.camera.OffsetedMouse.Y, 1, 1); if (mouse.LeftButton == ButtonState.Pressed) { if (hitbox.Intersects(mouseHitbox)) { if (Globals.currentTool == Tools.Pen && tileset.PickedTile != -1) { map[x, y] = tileset.PickedTile; } if (Globals.currentTool == Tools.Eraser) { map[x, y] = -1; } if (Globals.currentTool == Tools.Box) { if (prevMouse.LeftButton != ButtonState.Pressed) { boxStart = new Point(x, y); } } if (prevMouse.LeftButton != ButtonState.Pressed && Globals.currentTool == Tools.Fill && tileset.PickedTile != -1) { targetTile = (sbyte)map[x, y]; if (targetTile != tileset.PickedTile) { map[x, y] = targetTile; walkers.Add(new Walker(new Point(x, y), (byte)targetTile)); } } } } } } } }