PageRenderTime 53ms CodeModel.GetById 21ms RepoModel.GetById 0ms app.codeStats 0ms

/dev/Ultima/UI/WorldGumps/StatusGump.cs

https://gitlab.com/swak/UltimaXNA
C# | 212 lines | 164 code | 36 blank | 12 comment | 5 complexity | a582d6d0302aa1c7a9c298fe1adeda53 MD5 | raw file
  1. /***************************************************************************
  2. * StatusGump.cs
  3. * Based on code by surcouf94
  4. *
  5. * This program is free software; you can redistribute it and/or modify
  6. * it under the terms of the GNU General Public License as published by
  7. * the Free Software Foundation; either version 3 of the License, or
  8. * (at your option) any later version.
  9. *
  10. ***************************************************************************/
  11. #region usings
  12. using Microsoft.Xna.Framework;
  13. using UltimaXNA.Core.Graphics;
  14. using UltimaXNA.Core.UI;
  15. using UltimaXNA.Ultima.UI.Controls;
  16. using UltimaXNA.Ultima.World;
  17. using UltimaXNA.Ultima.World.Entities.Mobiles;
  18. using UltimaXNA.Core.Network;
  19. using UltimaXNA.Ultima.Network.Client;
  20. #endregion
  21. namespace UltimaXNA.Ultima.UI.WorldGumps
  22. {
  23. class StatusGump : Gump
  24. {
  25. public static void Toggle(Serial serial)
  26. {
  27. UserInterfaceService ui = ServiceRegistry.GetService<UserInterfaceService>();
  28. if (ui.GetControl<StatusGump>() == null)
  29. {
  30. INetworkClient client = ServiceRegistry.GetService<INetworkClient>();
  31. client.Send(new MobileQueryPacket(MobileQueryPacket.StatusType.BasicStatus, serial));
  32. ui.AddControl(new StatusGump(), 200, 400);
  33. }
  34. else
  35. ui.RemoveControl<StatusGump>();
  36. }
  37. private Mobile m_Mobile = WorldModel.Entities.GetPlayerEntity();
  38. double m_RefreshTime = 0d;
  39. private TextLabelAscii[] m_Labels = new TextLabelAscii[(int)MobileStats.Max];
  40. private enum MobileStats
  41. {
  42. Name,
  43. Strength,
  44. Dexterity,
  45. Intelligence,
  46. HealthCurrent,
  47. HealthMax,
  48. StaminaCurrent,
  49. StaminaMax,
  50. ManaCurrent,
  51. ManaMax,
  52. Followers,
  53. WeightCurrent,
  54. WeightMax,
  55. StatCap,
  56. Luck,
  57. Gold,
  58. AR,
  59. RF,
  60. RC,
  61. RP,
  62. RE,
  63. Damage,
  64. Sex,
  65. Max
  66. }
  67. public StatusGump()
  68. : base(0, 0)
  69. {
  70. IsMoveable = true;
  71. if (UltimaXNA.Ultima.Data.Features.EnableAOS)
  72. {
  73. AddControl(new GumpPic(this, 0, 0, 0x2A6C, 0));
  74. m_Labels[(int)MobileStats.Name] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 54, 48, 1, 997, string.Format("<center>{0}", m_Mobile.Name))); // center doesn't work because textlabelascii shrinks to fit.
  75. m_Labels[(int)MobileStats.Strength] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 88, 76, 1, 997, m_Mobile.Strength.ToString()));
  76. m_Labels[(int)MobileStats.Dexterity] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 88, 104, 1, 997, m_Mobile.Dexterity.ToString()));
  77. m_Labels[(int)MobileStats.Intelligence] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 88, 132, 1, 997, m_Mobile.Intelligence.ToString()));
  78. m_Labels[(int)MobileStats.HealthCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 147, 71, 1, 997, m_Mobile.Health.Current.ToString()));
  79. m_Labels[(int)MobileStats.HealthMax] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 147, 82, 1, 997, m_Mobile.Health.Max.ToString()));
  80. m_Labels[(int)MobileStats.StaminaCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 147, 99, 1, 997, m_Mobile.Stamina.Current.ToString()));
  81. m_Labels[(int)MobileStats.StaminaMax] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 147, 110, 1, 997, m_Mobile.Stamina.Max.ToString()));
  82. m_Labels[(int)MobileStats.ManaCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 148, 127, 1, 997, m_Mobile.Mana.Current.ToString()));
  83. m_Labels[(int)MobileStats.ManaMax] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 148, 138, 1, 997, m_Mobile.Mana.Max.ToString()));
  84. m_Labels[(int)MobileStats.Followers] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 289, 132, 1, 997, ConcatCurrentMax(m_Mobile.Followers.Current, m_Mobile.Followers.Max)));
  85. m_Labels[(int)MobileStats.WeightCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 212, 127, 1, 997, m_Mobile.Weight.Current.ToString()));
  86. m_Labels[(int)MobileStats.WeightMax] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 212, 138, 1, 997, m_Mobile.Weight.Max.ToString()));
  87. m_Labels[(int)MobileStats.StatCap] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 219, 74, 1, 997, m_Mobile.StatCap.ToString()));
  88. m_Labels[(int)MobileStats.Luck] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 218, 102, 1, 997, m_Mobile.Luck.ToString()));
  89. m_Labels[(int)MobileStats.Gold] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 282, 102, 1, 997, m_Mobile.Gold.ToString()));
  90. m_Labels[(int)MobileStats.AR] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 352, 73, 1, 997, m_Mobile.ArmorRating.ToString()));
  91. m_Labels[(int)MobileStats.RF] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 352, 90, 1, 997, m_Mobile.ResistFire.ToString()));
  92. m_Labels[(int)MobileStats.RC] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 352, 105, 1, 997, m_Mobile.ResistCold.ToString()));
  93. m_Labels[(int)MobileStats.RP] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 352, 119, 1, 997, m_Mobile.ResistPoison.ToString()));
  94. m_Labels[(int)MobileStats.RE] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 352, 135, 1, 997, m_Mobile.ResistEnergy.ToString()));
  95. m_Labels[(int)MobileStats.Damage] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 277, 75, 1, 997, ConcatCurrentMax(m_Mobile.DamageMin, m_Mobile.DamageMax)));
  96. }
  97. else
  98. {
  99. AddControl(new GumpPic(this, 0, 0, 0x802, 0));
  100. m_Labels[(int)MobileStats.Name] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 84, 37, 6, 0, m_Mobile.Name));
  101. m_Labels[(int)MobileStats.Strength] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 84, 57, 6, 0, m_Mobile.Strength.ToString()));
  102. m_Labels[(int)MobileStats.Dexterity] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 84, 69, 6, 0, m_Mobile.Dexterity.ToString()));
  103. m_Labels[(int)MobileStats.Intelligence] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 84, 81, 6, 0, m_Mobile.Intelligence.ToString()));
  104. m_Labels[(int)MobileStats.Sex] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 84, 93, 6, 0, m_Mobile.Flags.IsFemale ? "F" : "M"));
  105. m_Labels[(int)MobileStats.AR] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 84, 105, 6, 0, m_Mobile.ArmorRating.ToString()));
  106. m_Labels[(int)MobileStats.HealthCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 172, 57, 6, 0, m_Mobile.Health.Current.ToString() + '/' + m_Mobile.Health.Max.ToString()));
  107. m_Labels[(int)MobileStats.ManaCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 172, 69, 6, 0, m_Mobile.Mana.Current.ToString() + '/' + m_Mobile.Mana.Max.ToString()));
  108. m_Labels[(int)MobileStats.StaminaCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 172, 81, 6, 0, m_Mobile.Stamina.Current.ToString() + '/' + m_Mobile.Stamina.Max.ToString()));
  109. m_Labels[(int)MobileStats.Gold] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 172, 93, 6, 0, m_Mobile.Gold.ToString()));
  110. m_Labels[(int)MobileStats.WeightCurrent] = (TextLabelAscii)AddControl(new TextLabelAscii(this, 172, 105, 6, 0, m_Mobile.Weight.Current.ToString() + '/' + m_Mobile.Weight.Max.ToString()));
  111. }
  112. }
  113. protected override void OnInitialize()
  114. {
  115. SetSavePositionName("status");
  116. base.OnInitialize();
  117. }
  118. public override void Update(double totalMS, double frameMS)
  119. {
  120. if (m_RefreshTime + 0.5d < totalMS) //need to update
  121. {
  122. m_RefreshTime = totalMS;
  123. // we can just set these without checking if they've changed.
  124. // The label will only update if the value has changed.
  125. if (UltimaXNA.Ultima.Data.Features.EnableAOS)
  126. {
  127. m_Labels[(int)MobileStats.Name].Text = string.Format("<center>{0}", m_Mobile.Name);
  128. m_Labels[(int)MobileStats.Strength].Text = m_Mobile.Strength.ToString();
  129. m_Labels[(int)MobileStats.Dexterity].Text = m_Mobile.Dexterity.ToString();
  130. m_Labels[(int)MobileStats.Intelligence].Text = m_Mobile.Intelligence.ToString();
  131. m_Labels[(int)MobileStats.HealthCurrent].Text = m_Mobile.Health.Current.ToString();
  132. m_Labels[(int)MobileStats.HealthMax].Text = m_Mobile.Health.Max.ToString();
  133. m_Labels[(int)MobileStats.StaminaCurrent].Text = m_Mobile.Stamina.Current.ToString();
  134. m_Labels[(int)MobileStats.StaminaMax].Text = m_Mobile.Stamina.Max.ToString();
  135. m_Labels[(int)MobileStats.ManaCurrent].Text = m_Mobile.Mana.Current.ToString();
  136. m_Labels[(int)MobileStats.ManaMax].Text = m_Mobile.Mana.Max.ToString();
  137. m_Labels[(int)MobileStats.Followers].Text = ConcatCurrentMax(m_Mobile.Followers.Current, m_Mobile.Followers.Max);
  138. m_Labels[(int)MobileStats.WeightCurrent].Text = m_Mobile.Weight.Current.ToString();
  139. m_Labels[(int)MobileStats.WeightMax].Text = m_Mobile.Weight.Max.ToString();
  140. m_Labels[(int)MobileStats.StatCap].Text = m_Mobile.StatCap.ToString();
  141. m_Labels[(int)MobileStats.Luck].Text = m_Mobile.Luck.ToString();
  142. m_Labels[(int)MobileStats.Gold].Text = m_Mobile.Gold.ToString();
  143. m_Labels[(int)MobileStats.AR].Text = m_Mobile.ArmorRating.ToString();
  144. m_Labels[(int)MobileStats.RF].Text = m_Mobile.ResistFire.ToString();
  145. m_Labels[(int)MobileStats.RC].Text = m_Mobile.ResistCold.ToString();
  146. m_Labels[(int)MobileStats.RP].Text = m_Mobile.ResistPoison.ToString();
  147. m_Labels[(int)MobileStats.RE].Text = m_Mobile.ResistEnergy.ToString();
  148. m_Labels[(int)MobileStats.Damage].Text = ConcatCurrentMax(m_Mobile.DamageMin, m_Mobile.DamageMax);
  149. }
  150. else
  151. {
  152. m_Labels[(int)MobileStats.Name].Text = m_Mobile.Name;
  153. m_Labels[(int)MobileStats.Strength].Text = m_Mobile.Strength.ToString();
  154. m_Labels[(int)MobileStats.Dexterity].Text = m_Mobile.Dexterity.ToString();
  155. m_Labels[(int)MobileStats.Intelligence].Text = m_Mobile.Intelligence.ToString();
  156. m_Labels[(int)MobileStats.HealthCurrent].Text = ConcatCurrentMax(m_Mobile.Health.Current, m_Mobile.Health.Max);
  157. m_Labels[(int)MobileStats.StaminaCurrent].Text = ConcatCurrentMax(m_Mobile.Stamina.Current, m_Mobile.Stamina.Max);
  158. m_Labels[(int)MobileStats.ManaCurrent].Text = ConcatCurrentMax(m_Mobile.Mana.Current, m_Mobile.Mana.Max);
  159. m_Labels[(int)MobileStats.WeightCurrent].Text = m_Mobile.Weight.Current.ToString();
  160. m_Labels[(int)MobileStats.Gold].Text = m_Mobile.Gold.ToString();
  161. m_Labels[(int)MobileStats.AR].Text = m_Mobile.ArmorRating.ToString();
  162. m_Labels[(int)MobileStats.Sex].Text = m_Mobile.Flags.IsFemale ? "F" : "M";
  163. }
  164. }
  165. base.Update(totalMS, frameMS);
  166. }
  167. public override void Draw(SpriteBatchUI spriteBatch, Point position)
  168. {
  169. base.Draw(spriteBatch, position);
  170. }
  171. private string ConcatCurrentMax(int min, int max)
  172. {
  173. return string.Format("{0}/{1}", min, max);
  174. }
  175. }
  176. }