예제 #1
0
 public Baddie(Vector2 position, float maxSpeed, Facing facing, Map map, TileSet tileSet)
     : base(position, maxSpeed, facing,map,tileSet)
 {
     this.map = map;
     this.tileSet = tileSet;
     direction = Direction.Stand;
     enemy = new Enemy(Position, Game.GetInstance().GetSprite("Wall"));
     Game.GetInstance().EManager.Add(enemy);
     nextChange = 0f;
     rand = new Random();
     blind = false;
 }
예제 #2
0
        public Randy(Vector2 position, float maxSpeed, Facing facing, Map map, TileSet tileSet)
            : base(position, maxSpeed, facing,map,tileSet)
        {
            this.direction = direction;
            this.map = map;
            this.tileSet = tileSet;
            renderPos = new Vector2(0, 0);

            walkingSound = Game.GetInstance().GetSound("Walk").CreateInstance();
            walkingSoundDuration = (float)Game.GetInstance().GetSound("Walk").Duration.TotalMilliseconds;
            walkingSound.Volume = 1f;
            moving = false;
            character = new Character(Position);
            Game.GetInstance().EManager.Add(character);
            nextLyre = -1;
            nextGlue = -1;
            nextFire = -1;
        }
예제 #3
0
        public void Draw(SpriteBatch spriteBatch, TileSet tileset, Vector2 position)
        {
            float randyRow = (float)position.Y / tileset.TileHeight;
            float randyCol = (float)position.X / tileset.TileWidth;
            float viewportRows = spriteBatch.GraphicsDevice.Viewport.Height / tileset.TileHeight;
            float viewportCols = spriteBatch.GraphicsDevice.Viewport.Width / tileset.TileWidth;
            float screenRows = Rows;
            float screenCols = Columns;

            float top = Math.Max(0, randyRow - viewportRows / 2);
            if (randyRow > screenRows - viewportRows / 2)
                top = screenRows - viewportRows;
            float left = Math.Max(0, randyCol - viewportCols / 2);
            if (randyCol > screenCols - viewportCols / 2)
                left = screenCols - viewportCols;

            int x = 0;
            int y = 0;

            int layer = 0;

            foreach (Terrain terrain in terrainList)
            {
                float depth = layer * 0.02f;

                if (layer < Map.ABOVE_PLAYER_LAYER_START)
                {
                    depth += 0.1f;
                }
                else
                {
                    depth += 0.5f;
                }
                layer++;
                y = 0;
                foreach (TileRow tileRow in terrain.TileRowList)
                {
                    x = 0;
                    /*
                    if (y < top - 1)
                    {
                        y++;
                        continue;
                    }

                    if (y > bottom)
                    {
                        break;
                    }
                    */
                    foreach (Tile tile in tileRow.TileList)
                    {
                        /*
                        if (x < left - 1)
                        {
                            x++;
                            continue;
                        }

                        if (x > right)
                        {
                            break;
                        }*/
                        if (randyRow < viewportRows / 2)
                        {

                        }
                        spriteBatch.Draw(
                            tileset.Texture,
                            new Rectangle(
                                (int)((x * tileset.TileWidth) + (tileset.TileWidth / 2) - (left * tileset.TileWidth)),
                                (int)((y * tileset.TileHeight) + (tileset.TileHeight / 2) - (top * tileset.TileHeight)),
                                tileset.TileWidth, tileset.TileHeight),
                                tileset.Rectangle(tile.Position),
                                Color.White,
                                MathHelper.ToRadians(tile.Rotation),
                                new Vector2(tileset.TileWidth / 2, tileset.TileHeight / 2),
                                SpriteEffects.None, depth);
                        x++;
                    }
                    y++;
                }
            }
        }
예제 #4
0
        public void CheckCollision(Sprite sprite, TileSet tileSet)
        {
            int leftTile, rightTile, topTile, bottomTile;
            leftTile = (int)MathHelper.Clamp(
                Utility.PixelToTile(
                    sprite.Position.X + sprite.Movement.X -
                    sprite.Animation.AnimationManager.Origin.X + 0.1f, tileSet.TileWidth
                ),
                1, columns
            );

            rightTile = (int)MathHelper.Clamp(
                Utility.PixelToTile(
                    sprite.Position.X + sprite.Movement.X +
                    sprite.Animation.AnimationManager.Origin.X - 0.1f, tileSet.TileWidth
                ),
                1, columns
            );

            topTile = (int)MathHelper.Clamp(
                Utility.PixelToTile(
                    sprite.Position.Y + sprite.Movement.Y -
                    sprite.Animation.AnimationManager.Origin.Y + 0.1f, tileSet.TileHeight
                ),
                1, rows
            );

            bottomTile = (int)MathHelper.Clamp(
                Utility.PixelToTile(
                    sprite.Position.Y + sprite.Movement.Y +
                    sprite.Animation.AnimationManager.Origin.Y - 0.1f, tileSet.TileHeight
                ),
                1, rows
            );

            if (sprite.Movement.X < 0)
            {
                for (int i = topTile; i <= bottomTile; i++)
                {
                    if (walkable[i - 1, leftTile - 1] == 0)
                    {
                        sprite.Movement = new Vector2(
                            Utility.TileToPixel(leftTile, tileSet.TileWidth) +
                            sprite.Animation.AnimationManager.Origin.X - sprite.Position.X, 0
                        );
                        break;
                    }
                }
            }

            else if (sprite.Movement.X > 0)
            {
                for (int i = topTile; i <= bottomTile; i++)
                {
                    if (walkable[i - 1, rightTile - 1] == 0)
                    {
                        sprite.Movement = new Vector2(
                            Utility.TileToPixel(rightTile-1, tileSet.TileWidth) -
                            sprite.Animation.AnimationManager.Origin.X - sprite.Position.X, 0
                        );
                        break;
                    }
                }
            }

            else if (sprite.Movement.Y < 0)
            {
                for (int i = leftTile; i <= rightTile; i++)
                {
                    if (walkable[topTile - 1, i - 1] == 0)
                    {
                        sprite.Movement = new Vector2(
                            0,
                            Utility.TileToPixel(topTile, tileSet.TileHeight) +
                            sprite.Animation.AnimationManager.Origin.Y - sprite.Position.Y
                        );
                        break;
                    }
                }
            }

            else if (sprite.Movement.Y > 0)
            {
                for (int i = leftTile; i <= rightTile; i++)
                {
                    if (walkable[bottomTile - 1, i - 1] == 0)
                    {
                        sprite.Movement = new Vector2(
                            0,
                            Utility.TileToPixel(bottomTile-1, tileSet.TileHeight) -
                            sprite.Animation.AnimationManager.Origin.Y - sprite.Position.Y
                        );
                        break;
                    }
                }
            }
        }