source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Graphics/Camera.cs @ 4755

Revision 4755, 3.4 KB checked in by dezhidki, 8 years ago (diff)

Testailu äänien kanssa (täällä hetkellä pois päältä)

Line 
1using CastleMaster.Input;
2using CastleMaster.World;
3using Microsoft.Xna.Framework;
4
5namespace CastleMaster.Graphics
6{
7    public class Camera
8    {
9        private int xOffs = 0, yOffs = 0;
10        private Vector2 mouseWorldPos, selectorPos, selectorPosZoomed;
11        private Point mouseTilePos;
12        private Level level;
13
14        public Camera(Level level)
15        {
16            this.level = level;
17            mouseWorldPos = Vector2.Zero;
18            selectorPos = Vector2.Zero;
19            selectorPosZoomed = Vector2.Zero;
20            mouseTilePos = Point.Zero;
21        }
22
23        #region Properties
24        public int XLeft
25        {
26            get { return xOffs; }
27            set { xOffs = value; }
28        }
29
30        public int YTop
31        {
32            get { return yOffs; }
33            set { yOffs = value; }
34        }
35
36        public int XRight
37        {
38            get { return xOffs + Game.WIDTH; }
39            set { xOffs = value - Game.WIDTH; }
40        }
41
42        public int YBottom
43        {
44            get { return yOffs + Game.HEIGHT; }
45            set { yOffs = value - Game.HEIGHT; }
46        }
47
48        public Vector2 MouseWorldPos { get { return mouseWorldPos; } }
49
50        public Point MouseTilePos { get { return mouseTilePos; } }
51        #endregion
52
53        public void Update()
54        {
55            mouseWorldPos = Viewport.ScreenToWorld(InputHandler.MouseX + xOffs, InputHandler.MouseY + yOffs);
56            int xTile = (int)(mouseWorldPos.X / Viewport.TILESIZE);
57            int zTile = (int)(mouseWorldPos.Y / Viewport.TILESIZE);
58            if (xTile < 0) xTile = 0;
59            else if (xTile >= level.Width) xTile = level.Width - 1;
60            if (zTile < 0) zTile = 0;
61            else if (zTile >= level.Height) zTile = level.Height - 1;
62
63            if (xTile != mouseTilePos.X || zTile != mouseTilePos.Y)
64            {
65                mouseTilePos.X = xTile;
66                mouseTilePos.Y = zTile;
67                selectorPos.X = (xTile - zTile) * Viewport.X_STEP;
68                selectorPos.Y = (xTile + zTile) * Viewport.Y_STEP + Viewport.Y_STEP;
69                selectorPosZoomed = selectorPos * Viewport.ZOOM;
70            }
71
72
73        }
74
75        public void Zoom(float factor)
76        {
77            Viewport.ZOOM += factor;
78
79            xOffs = (int)((mouseWorldPos.X - mouseWorldPos.Y + Viewport.TILESIZE) * Viewport.X_SCALE_ZOOMED) - InputHandler.MouseX;
80            yOffs = (int)((mouseWorldPos.X + mouseWorldPos.Y + Viewport.TILESIZE) * Viewport.Y_SCALE_ZOOMED) - InputHandler.MouseY;
81            selectorPosZoomed = selectorPos * Viewport.ZOOM;
82        }
83
84        public void CenterOn(float x, float z)
85        {
86            xOffs = (int)((x - z + Viewport.TILESIZE) * Viewport.X_SCALE_ZOOMED) - Game.WIDTH / 2;
87            yOffs = (int)((x + z + Viewport.TILESIZE) * Viewport.Y_SCALE_ZOOMED) - Game.HEIGHT / 2;
88        }
89
90        public void RenderSelelctor(RenderHelper renderer)
91        {
92            renderer.SetOffset(this);
93            renderer.Render(selectorPosZoomed, 3, 1, Resources.SPRITESHEET_TILES, Viewport.ZOOM);
94            renderer.SetOffset();
95        }
96
97        public void RenderCursor(RenderHelper renderer)
98        {
99            renderer.Render(InputHandler.MouseX, InputHandler.MouseY, 0, 0, Resources.SPRITESHEET_ICONS, Color.White, 3.0F);
100        }
101    }
102}
Note: See TracBrowser for help on using the repository browser.