source: 2013/30/DenisZ/CastleMaster/CastleMaster/CastleMaster/Guis/GuiPlayer.cs @ 4728

Revision 4728, 5.2 KB checked in by dezhidki, 6 years ago (diff)

Talletus.

Line 
1using CastleMaster.Players;
2using System;
3using System.Collections.Generic;
4using System.Linq;
5using System.Text;
6using Microsoft.Xna.Framework;
7using CastleMaster.Graphics;
8using Microsoft.Xna.Framework.Graphics;
9using CastleMaster.Units;
10
11namespace CastleMaster.Guis
12{
13    public class GuiPlayer : Gui
14    {
15        private class HealthMeter
16        {
17            private Unit unit;
18
19            private Rectangle unitHealthGreenRectangle, unitHealthRedRectangle;
20            private Vector2 unitHealthPos, unitRedHealthPos, unitTextPos;
21            private int oldUnitHealthBarWidth = HEALTH_BAR_WIDTH;
22            private string text;
23
24            public HealthMeter(Unit unit, Vector2 renderPos, string text)
25            {
26                this.text = text;
27                this.unit = unit;
28                unitHealthGreenRectangle = new Rectangle(0, 0, HEALTH_BAR_WIDTH, 4);
29                unitHealthRedRectangle = new Rectangle(HEALTH_BAR_WIDTH, 4, 0, 4);
30                unitHealthPos = renderPos;
31                unitRedHealthPos = new Vector2(unitHealthPos.X + HEALTH_BAR_WIDTH, unitHealthPos.Y);
32                unitTextPos = new Vector2(unitHealthPos.X - text.Length * 13, unitHealthPos.Y - 5);
33            }
34
35            public void Update()
36            {
37                unitHealthGreenRectangle.Width = (int)((unit.Health / (float)unit.MaxHealth) * HEALTH_BAR_WIDTH);
38                if (unitHealthGreenRectangle.Width != oldUnitHealthBarWidth)
39                {
40                    oldUnitHealthBarWidth = unitHealthGreenRectangle.Width;
41                    unitRedHealthPos.X = unitHealthPos.X + unitHealthGreenRectangle.Width * SCALE;
42                    unitHealthRedRectangle.X = unitHealthGreenRectangle.Width;
43                    unitHealthRedRectangle.Width = HEALTH_BAR_WIDTH - unitHealthGreenRectangle.Width;
44                }
45            }
46
47            public void Render(RenderHelper renderer)
48            {
49                renderer.SpriteBatch.DrawString(Resources.FONT, text, unitTextPos, Color.White);
50                if (unitHealthGreenRectangle.Width > 0)
51                    renderer.SpriteBatch.Draw(renderer.RegisteredSpriteSheets[Resources.SPRITESHEET_HEALTH].SheetTexture, unitHealthPos, unitHealthGreenRectangle, Color.White, 0.0F, Vector2.Zero, SCALE, SpriteEffects.None, 0);
52                if (unitHealthRedRectangle.Width > 0)
53                    renderer.SpriteBatch.Draw(renderer.RegisteredSpriteSheets[Resources.SPRITESHEET_HEALTH].SheetTexture, unitRedHealthPos, unitHealthRedRectangle, Color.White, 0.0F, Vector2.Zero, SCALE, SpriteEffects.None, 0);
54            }
55        }
56
57        private const string NEWLINE = "\n";
58        private const string ICON_COINS = "&";
59        private const string ICON_WOOD = "#";
60        private const string KING_TEXT = "KING HEALTH: ";
61        private const string STORE_TEXT = "STORE HEALTH: ";
62        private const string ARMORY_TEXT = "ARMORY HEALTH: ";
63        public const int GUI_BAR_HEIGHT = 100;
64        private const int HEALTH_BAR_WIDTH = 100;
65        private const int SCALE = 2;
66
67        private Player player;
68        private StringBuilder itemStats;
69        private Color guiCol;
70        private Rectangle screenRect;
71        private Vector2 itemStatsPos;
72
73        private HealthMeter kingHealthMeter, storeHealthMeter, armoryHealthMeter;
74
75        public GuiPlayer(GuiManager manager, Player player)
76            : base(manager)
77        {
78            this.player = player;
79            itemStats = new StringBuilder();
80            guiCol = new Color(165, 89, 38);
81            screenRect = new Rectangle(0, Game.HEIGHT - GUI_BAR_HEIGHT, Game.WIDTH, GUI_BAR_HEIGHT);
82            itemStatsPos = new Vector2(0, Game.HEIGHT - GUI_BAR_HEIGHT + 5);
83
84            kingHealthMeter = new HealthMeter(player.King, new Vector2(Game.WIDTH - HEALTH_BAR_WIDTH * SCALE - 10, Game.HEIGHT - GUI_BAR_HEIGHT + 20), KING_TEXT);
85            storeHealthMeter = new HealthMeter(player.Store, new Vector2(Game.WIDTH - HEALTH_BAR_WIDTH * SCALE - 10, Game.HEIGHT - GUI_BAR_HEIGHT + 40), STORE_TEXT);
86            armoryHealthMeter = new HealthMeter(player.Armory, new Vector2(Game.WIDTH - HEALTH_BAR_WIDTH * SCALE - 10, Game.HEIGHT - GUI_BAR_HEIGHT + 60), ARMORY_TEXT);
87        }
88
89        public override int Importance
90        {
91            get
92            {
93                return IMPORTANCE_HIGH;
94            }
95        }
96
97
98        public override void Update()
99        {
100            itemStats.Clear();
101            itemStats.Append(ICON_COINS).Append(player.CoinsAmount).Append(NEWLINE);
102            itemStats.Append(ICON_WOOD).Append(player.LumberAmount);
103            kingHealthMeter.Update();
104            storeHealthMeter.Update();
105            armoryHealthMeter.Update();
106        }
107
108        public override void Render(RenderHelper renderer)
109        {
110            renderer.SpriteBatch.Draw(RenderHelper.EmptyTexture, screenRect, guiCol);
111            renderer.SpriteBatch.DrawString(Resources.FONT, itemStats, itemStatsPos, Color.White, 0.0F, Vector2.Zero, 1.5F, SpriteEffects.None, 0);
112
113            kingHealthMeter.Render(renderer);
114
115            storeHealthMeter.Render(renderer);
116
117            armoryHealthMeter.Render(renderer);
118        }
119    }
120}
Note: See TracBrowser for help on using the repository browser.