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

Revision 4550, 3.3 KB checked in by dezhidki, 7 years ago (diff)

Talletus.

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