Example #1
0
 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);
         }
     }
 }
Example #2
0
        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));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
Example #3
0
        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));
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }