source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Graphics/RenderHelper.cs @ 4535

Revision 4535, 3.7 KB checked in by dezhidki, 7 years ago (diff)

Uusi versio:

  • Tason luonti valmis
  • Piirtojärjestys toimii
  • Palikoiden lisääminen ja muokkaus toimii
  • Esivalmistelut liikkumista varten
Line 
1using Microsoft.Xna.Framework;
2using Microsoft.Xna.Framework.Graphics;
3using System.Collections.Generic;
4
5namespace CastleMaster.Graphics
6{
7    public class RenderHelper
8    {
9        private List<SpriteSheet> registeredSpriteSheets;
10        private SpriteBatch renderer;
11        private bool isRendering = false;
12        private Point renderOffset = Point.Zero;
13
14        public RenderHelper(SpriteBatch batch)
15        {
16            registeredSpriteSheets = new List<SpriteSheet>();
17            renderer = batch;
18        }
19
20        public int RegisterSpriteSheet(SpriteSheet spriteSheet)
21        {
22            registeredSpriteSheets.Add(spriteSheet);
23            return registeredSpriteSheets.Count - 1;
24        }
25
26        public void SetOffset(int x = 0, int y = 0)
27        {
28            renderOffset.X = x;
29            renderOffset.Y = y;
30        }
31
32        public void SetOffset(Camera camera)
33        {
34            renderOffset.X = camera.XLeft;
35            renderOffset.Y = camera.YTop;
36        }
37
38        public void BeginRender()
39        {
40            if (isRendering) return;
41            isRendering = true;
42            renderer.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.None, RasterizerState.CullCounterClockwise);
43        }
44
45        public void EndRender()
46        {
47            if (!isRendering) return;
48            isRendering = false;
49            renderer.End();
50        }
51
52        public void Render(float xPos, float yPos, int spriteX, int spriteY, int spriteSheet, Color color, float scale = 1.0F)
53        {
54            xPos = (int)xPos - renderOffset.X;
55            yPos = (int)yPos - renderOffset.Y;
56
57            SpriteSheet sp = registeredSpriteSheets[spriteSheet];
58            renderer.Draw(sp.SheetTexture, new Vector2(xPos, yPos), sp[spriteX, spriteY], color, 0.0F, Vector2.Zero, scale, SpriteEffects.None, 1.0F);
59        }
60
61        public void Render(Vector2 vec, int spriteX, int spriteY, int spriteSheet, Color color, float scale = 1.0F)
62        {
63            vec.X = (int)vec.X - renderOffset.X;
64            vec.Y = (int)vec.Y - renderOffset.Y;
65
66            SpriteSheet sp = registeredSpriteSheets[spriteSheet];
67            renderer.Draw(sp.SheetTexture, vec, sp[spriteX, spriteY], color, 0.0F, Vector2.Zero, scale, SpriteEffects.None, 1.0F);
68        }
69
70        public void Render(Vector2 vec, int spriteX, int spriteY, int spriteSheet, float scale = 1.0F)
71        {
72            vec.X = (int)vec.X - renderOffset.X;
73            vec.Y = (int)vec.Y - renderOffset.Y;
74
75            SpriteSheet sp = registeredSpriteSheets[spriteSheet];
76            renderer.Draw(sp.SheetTexture, vec, sp[spriteX, spriteY], Color.White, 0.0F, Vector2.Zero, scale, SpriteEffects.None, 1.0F);
77        }
78
79        public void RenderModalRect(Vector2 screenPos, Point texturePos, int width, int height, Texture2D tex, float scale = 1.0F)
80        {
81            screenPos.X = (int)screenPos.X - renderOffset.X;
82            screenPos.Y = (int)screenPos.Y - renderOffset.Y;
83
84            renderer.Draw(tex, new Rectangle((int)(texturePos.X * scale), (int)(texturePos.Y * scale), width, height), Color.White);
85        }
86
87        public void RenderModalRect(Vector2 screenPos, Point texturePos, int width, int height, int spriteX, int spriteY, int spriteSheet, float scale = 1.0F)
88        {
89            screenPos.X = (int)screenPos.X - renderOffset.X;
90            screenPos.Y = (int)screenPos.Y - renderOffset.Y;
91
92            SpriteSheet sp = registeredSpriteSheets[spriteSheet];
93            renderer.Draw(sp.SheetTexture, new Rectangle((int)(texturePos.X * scale), (int)(texturePos.Y * scale), width, height), sp[spriteX, spriteY], Color.White);
94        }
95
96    }
97}
Note: See TracBrowser for help on using the repository browser.