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

Revision 4756, 3.9 KB checked in by dezhidki, 8 years ago (diff)
  • Nimi muutettu (Sound2D -> Audio)
  • Lisätty perusäänet
  • Muokattu Ctrl + RMouse kombinaatiota
    • Nyt voi myös klikata sen sijaan että valitsee laatikolla
Line 
1using CastleMaster.Input;
2using CastleMaster.World;
3using Microsoft.Xna.Framework;
4using Microsoft.Xna.Framework.Audio;
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        private AudioListener listener;
15
16        public Camera(Level level)
17        {
18            this.level = level;
19            mouseWorldPos = Vector2.Zero;
20            selectorPos = Vector2.Zero;
21            selectorPosZoomed = Vector2.Zero;
22            mouseTilePos = Point.Zero;
23            listener = new AudioListener();
24            listener.Position = new Vector3(xOffs + Game.WIDTH / 2, yOffs + Game.HEIGHT / 2, 0.0F);
25        }
26
27        #region Properties
28        public int XLeft
29        {
30            get { return xOffs; }
31            set { xOffs = value; }
32        }
33
34        public int YTop
35        {
36            get { return yOffs; }
37            set { yOffs = value; }
38        }
39
40        public int XRight
41        {
42            get { return xOffs + Game.WIDTH; }
43            set { xOffs = value - Game.WIDTH; }
44        }
45
46        public int YBottom
47        {
48            get { return yOffs + Game.HEIGHT; }
49            set { yOffs = value - Game.HEIGHT; }
50        }
51
52        public Vector2 MouseWorldPos { get { return mouseWorldPos; } }
53
54        public Point MouseTilePos { get { return mouseTilePos; } }
55
56        public AudioListener AudioListener { get { return listener; } }
57        #endregion
58
59        public void Update()
60        {
61            mouseWorldPos = Viewport.ScreenToWorld(InputHandler.MouseX + xOffs, InputHandler.MouseY + yOffs);
62            int xTile = (int)(mouseWorldPos.X / Viewport.TILESIZE);
63            int zTile = (int)(mouseWorldPos.Y / Viewport.TILESIZE);
64            if (xTile < 0) xTile = 0;
65            else if (xTile >= level.Width) xTile = level.Width - 1;
66            if (zTile < 0) zTile = 0;
67            else if (zTile >= level.Height) zTile = level.Height - 1;
68
69            if (xTile != mouseTilePos.X || zTile != mouseTilePos.Y)
70            {
71                mouseTilePos.X = xTile;
72                mouseTilePos.Y = zTile;
73                selectorPos.X = (xTile - zTile) * Viewport.X_STEP;
74                selectorPos.Y = (xTile + zTile) * Viewport.Y_STEP + Viewport.Y_STEP;
75                selectorPosZoomed = selectorPos * Viewport.ZOOM;
76            }
77        }
78
79        public void Zoom(float factor)
80        {
81            Viewport.ZOOM += factor;
82
83            xOffs = (int)((mouseWorldPos.X - mouseWorldPos.Y + Viewport.TILESIZE) * Viewport.X_SCALE_ZOOMED) - InputHandler.MouseX;
84            yOffs = (int)((mouseWorldPos.X + mouseWorldPos.Y + Viewport.TILESIZE) * Viewport.Y_SCALE_ZOOMED) - InputHandler.MouseY;
85            selectorPosZoomed = selectorPos * Viewport.ZOOM;
86        }
87
88        public void CenterOn(float x, float z)
89        {
90            xOffs = (int)((x - z + Viewport.TILESIZE) * Viewport.X_SCALE_ZOOMED) - Game.WIDTH / 2;
91            yOffs = (int)((x + z + Viewport.TILESIZE) * Viewport.Y_SCALE_ZOOMED) - Game.HEIGHT / 2;
92        }
93
94        public void RenderSelelctor(RenderHelper renderer)
95        {
96            renderer.SetOffset(this);
97            renderer.Render(selectorPosZoomed, 3, 1, Resources.SPRITESHEET_TILES, Viewport.ZOOM);
98            renderer.SetOffset();
99        }
100
101        public void RenderCursor(RenderHelper renderer)
102        {
103            renderer.Render(InputHandler.MouseX, InputHandler.MouseY, 0, 0, Resources.SPRITESHEET_ICONS, Color.White, 3.0F);
104        }
105
106        public void UpdateAudioListener()
107        {
108            listener.Position = new Vector3((xOffs + Game.WIDTH / 2), 0.0F, yOffs + Game.HEIGHT / 2);
109            listener.Position /= Viewport.ZOOM;
110        }
111    }
112}
Note: See TracBrowser for help on using the repository browser.