playerstatbase.c 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. class PlayerStatBase
  2. {
  3. protected Man m_Player;
  4. int m_Type;
  5. void OnStoreSave( ParamsWriteContext ctx );
  6. bool OnStoreLoad( ParamsReadContext ctx);
  7. void OnRPC(ParamsReadContext ctx);
  8. void OnAfterStoreLoad();
  9. float Get();
  10. string GetLabel();
  11. void SetByFloat(float value);
  12. void SetByFloatEx(float value, string system = "" );
  13. bool IsSynced();
  14. array<PlayerStatRecord> GetRecords();
  15. void Init(int id);
  16. void SerializeValue(array<ref StatDebugObject> objects, int flags);
  17. float GetNormalized();
  18. float GetMax();
  19. float GetMin();
  20. int GetType()
  21. {
  22. return m_Type;
  23. }
  24. void SetPlayer(Man player)
  25. {
  26. m_Player = player;
  27. }
  28. }
  29. class PlayerStat<Class T> extends PlayerStatBase
  30. {
  31. protected T m_MinValue;
  32. protected T m_MaxValue;
  33. protected T m_Value;
  34. protected T m_ValueLastSynced;
  35. protected string m_ValueLabel;
  36. protected int m_Flags;
  37. ref array<PlayerStatRecord> m_Records;
  38. void PlayerStat(T min, T max, T init, string label, int flags)
  39. {
  40. m_MinValue = min;
  41. m_MaxValue = max;
  42. m_Value = init;
  43. m_ValueLabel = label;
  44. m_Flags = flags;
  45. m_Records = new array<PlayerStatRecord>;
  46. }
  47. override void Init(int id)
  48. {
  49. m_Type = id;
  50. }
  51. override void SerializeValue(array<ref StatDebugObject> objects, int flags)
  52. {
  53. objects.Insert(new StatDebugObject(GetLabel(), Get(), eRemoteStatType.PLAYER_STATS));
  54. }
  55. override bool IsSynced()
  56. {
  57. return m_Flags & EPSstatsFlags.SYNCED == EPSstatsFlags.SYNCED;
  58. }
  59. override void OnRPC(ParamsReadContext ctx)
  60. {
  61. super.OnRPC(ctx);
  62. if (IsSynced())
  63. {
  64. ctx.Read(CachedObjectsParams.PARAM2_INT_FLOAT);
  65. int type = CachedObjectsParams.PARAM2_INT_FLOAT.param1;
  66. T value = CachedObjectsParams.PARAM2_INT_FLOAT.param2;
  67. if (m_Type == type)
  68. Set(value);
  69. }
  70. }
  71. void Set(T value, string system = "")
  72. {
  73. if (value > m_MaxValue)
  74. {
  75. m_Value = m_MaxValue;
  76. }
  77. else if (value < m_MinValue)
  78. {
  79. m_Value = m_MinValue;
  80. }
  81. else
  82. {
  83. m_Value = value;
  84. }
  85. #ifdef SERVER
  86. if (IsSynced())
  87. {
  88. if (m_ValueLastSynced != m_Value)
  89. {
  90. //! limits the sync for bigger changes of float stats
  91. if (T == float && Math.AbsFloat(m_ValueLastSynced - m_Value) < 0.05)
  92. return;
  93. CachedObjectsParams.PARAM2_INT_FLOAT.param1 = m_Type;
  94. CachedObjectsParams.PARAM2_INT_FLOAT.param2 = m_Value;
  95. m_Player.RPCSingleParam(ERPCs.RPC_PLAYER_STAT, CachedObjectsParams.PARAM2_INT_FLOAT, true, m_Player.GetIdentity());
  96. m_ValueLastSynced = m_Value;
  97. }
  98. }
  99. #endif
  100. }
  101. void SetByFloat(float value, string system = "")
  102. {
  103. T f = value;
  104. Set(f, system);
  105. }
  106. override void SetByFloatEx(float value, string system = "")
  107. {
  108. SetByFloat(value, system);
  109. }
  110. void Add( T value, string system = "" )
  111. {
  112. Set(m_Value+value, system);
  113. }
  114. override float Get()
  115. {
  116. return m_Value;
  117. }
  118. override string GetLabel()
  119. {
  120. return m_ValueLabel;
  121. }
  122. override float GetMax()
  123. {
  124. return m_MaxValue;
  125. }
  126. override float GetMin()
  127. {
  128. return m_MinValue;
  129. }
  130. override float GetNormalized()
  131. {
  132. return Math.InverseLerp(GetMin(), GetMax(), Get());
  133. }
  134. override array<PlayerStatRecord> GetRecords()
  135. {
  136. return m_Records;
  137. }
  138. void CreateRecord(float value, string system)
  139. {
  140. m_Records.Insert( new PlayerStatRecord(value, GetGame().GetTime(), system ) );
  141. }
  142. override void OnStoreSave(ParamsWriteContext ctx)
  143. {
  144. ctx.Write(m_Value);
  145. }
  146. override bool OnStoreLoad( ParamsReadContext ctx)
  147. {
  148. T value;
  149. if (ctx.Read(value))
  150. {
  151. m_Value = value;
  152. }
  153. else
  154. {
  155. return false;
  156. }
  157. return true;
  158. }
  159. override void OnAfterStoreLoad()
  160. {
  161. // forces the sync
  162. Set(Get());
  163. }
  164. //! DEPRECATED
  165. PlayerStats m_Manager;
  166. PlayerStats GetManager()
  167. {
  168. return m_Manager;
  169. }
  170. }