pluginremoteplayerdebugclient.c 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. enum eRemoteDebugType
  2. {
  3. NONE,
  4. DAMAGE_ONLY,
  5. ALL,
  6. }
  7. class PluginRemotePlayerDebugClient extends PluginBase
  8. {
  9. const int MAX_SIMULTANIOUS_PLAYERS = 10;
  10. ref array<ref RemotePlayerStatDebug> m_PlayerDebugStats = new array<ref RemotePlayerStatDebug>;
  11. ref map<PlayerBase, ref RemotePlayerDamageDebug> m_PlayerDebugDamage = new map<PlayerBase,ref RemotePlayerDamageDebug>;
  12. ref Widget m_RootWidget[MAX_SIMULTANIOUS_PLAYERS];
  13. ref Widget m_RootWidgetDamage[MAX_SIMULTANIOUS_PLAYERS];
  14. ref TextListboxWidget m_StatListWidgets[MAX_SIMULTANIOUS_PLAYERS];
  15. ref TextListboxWidget m_DamageListWidgets[MAX_SIMULTANIOUS_PLAYERS];
  16. ref TextWidget m_DistanceWidget[MAX_SIMULTANIOUS_PLAYERS];
  17. eRemoteDebugType m_DebugType;
  18. override void OnInit()
  19. {
  20. #ifndef NO_GUI
  21. InitWidgets();
  22. #endif
  23. }
  24. override void OnUpdate(float delta_time)
  25. {
  26. #ifndef NO_GUI
  27. if ( m_DebugType !=0 ) UpdateWidgetsStats();
  28. #endif
  29. }
  30. void InitWidgets()
  31. {
  32. for (int i = 0; i < MAX_SIMULTANIOUS_PLAYERS; ++i)
  33. {
  34. m_RootWidget[i] = GetGame().GetWorkspace().CreateWidgets("gui/layouts/debug/day_z_debug_remoteinfo.layout");
  35. m_RootWidgetDamage[i] = GetGame().GetWorkspace().CreateWidgets("gui/layouts/debug/day_z_debug_remoteinfo_damage.layout");
  36. m_DamageListWidgets[i] = TextListboxWidget.Cast(m_RootWidgetDamage[i].FindAnyWidget("TextListboxWidget1"));
  37. m_StatListWidgets[i] = TextListboxWidget.Cast(m_RootWidget[i].FindAnyWidget("TextListboxWidget0"));
  38. m_DistanceWidget[i] = TextWidget.Cast(m_RootWidget[i].FindAnyWidget("TextWidget0"));
  39. }
  40. }
  41. void EnableWidgets(bool enable)
  42. {
  43. for (int i = 0; i < MAX_SIMULTANIOUS_PLAYERS; ++i)
  44. {
  45. m_RootWidget[i].Show(enable);
  46. m_RootWidgetDamage[i].Show(enable);
  47. }
  48. }
  49. void UpdateWidgetsStats()
  50. {
  51. int i = 0;
  52. for (; i < m_PlayerDebugStats.Count(); ++i)
  53. {
  54. RemotePlayerStatDebug rpd = m_PlayerDebugStats.Get(i);
  55. PlayerBase player = rpd.GetPlayer();
  56. if (player)
  57. {
  58. vector pos = player.GetPosition();
  59. vector screen_pos_stats = GetGame().GetScreenPos(pos + "0 0 0");
  60. vector screen_pos_damage = GetGame().GetScreenPos(pos + "0 2 0");
  61. m_RootWidget[i].SetPos(screen_pos_stats[0], screen_pos_stats[1]);
  62. m_RootWidgetDamage[i].SetPos(screen_pos_damage[0], screen_pos_damage[1]);
  63. if (screen_pos_stats[2] > 0 && screen_pos_stats[0] > 0 && screen_pos_stats[1] > 0)
  64. {
  65. m_RootWidget[i].Show(true);
  66. m_RootWidgetDamage[i].Show(true);
  67. UpdateStatsWidget(i, rpd);
  68. UpdateDistanceWidget(i, player);
  69. UpdateDamageWidget(i, player);
  70. }
  71. else
  72. {
  73. m_RootWidget[i].Show(false);
  74. m_RootWidgetDamage[i].Show(false);
  75. }
  76. }
  77. }
  78. for (; i < MAX_SIMULTANIOUS_PLAYERS; ++i)
  79. {
  80. m_RootWidget[i].Show(false);
  81. m_RootWidgetDamage[i].Show(false);
  82. }
  83. }
  84. void UpdateDamageWidget(int index, PlayerBase player)
  85. {
  86. array<ref DamageData> damage_list = new array<ref DamageData>;
  87. if (m_PlayerDebugDamage.Contains(player))
  88. {
  89. RemotePlayerDamageDebug value = m_PlayerDebugDamage.Get(player);
  90. value.GetReversed(damage_list);
  91. m_DamageListWidgets[index].ClearItems();
  92. if (damage_list.Count() > 0)
  93. {
  94. m_DamageListWidgets[index].Show(true);
  95. for (int i = 0; i < damage_list.Count(); ++i)
  96. {
  97. DamageData data = damage_list[i];
  98. float value_global = data.GetValueGlobal();
  99. float value_blood = data.GetValueBlood();
  100. float value_shock = data.GetValueShock();
  101. m_DamageListWidgets[index].AddItem( value_global.ToString(), null, 0, i );
  102. m_DamageListWidgets[index].SetItem( i, value_blood.ToString(), null, 1 );
  103. m_DamageListWidgets[index].SetItem( i, value_shock.ToString(), null, 2 );
  104. }
  105. }
  106. else
  107. {
  108. m_DamageListWidgets[index].Show(false);
  109. }
  110. }
  111. }
  112. void UpdateDistanceWidget(int index, PlayerBase other_player)
  113. {
  114. float distance = vector.Distance(GetGame().GetCurrentCameraPosition(), other_player.GetPosition());
  115. m_DistanceWidget[index].SetText(distance.ToString() + "m");
  116. }
  117. void UpdateStatsWidget(int index, RemotePlayerStatDebug rpd)
  118. {
  119. array<string> names = new array<string>;
  120. array<string> values = new array<string>;
  121. rpd.SerializeNames(names, m_DebugType);
  122. rpd.SerializeValues(values,m_DebugType);
  123. m_StatListWidgets[index].ClearItems();
  124. for (int i = 0; i < names.Count(); ++i)
  125. {
  126. m_StatListWidgets[index].AddItem( names.Get(i), null, 0, i );
  127. m_StatListWidgets[index].SetItem( i, values.Get(i), null, 1 );
  128. }
  129. }
  130. void RequestPlayerInfo(PlayerBase player, int type)
  131. {
  132. #ifdef DIAG_DEVELOPER
  133. if (type == 0)
  134. {
  135. EnableWidgets(false);
  136. }
  137. /*
  138. else
  139. {
  140. EnableWidgets(true);
  141. }
  142. */
  143. ScriptRPC rpc = new ScriptRPC();
  144. m_DebugType = type;
  145. rpc.Write(type);
  146. rpc.Send( player, ERPCs.DEV_PLAYER_DEBUG_REQUEST, true, player.GetIdentity() );
  147. #endif
  148. }
  149. void MergeDamage( array<ref RemotePlayerDamageDebug> delta )
  150. {
  151. foreach (RemotePlayerDamageDebug valueDelta : delta)
  152. {
  153. PlayerBase playerDelta = valueDelta.GetPlayer();
  154. if ( m_PlayerDebugDamage.Contains(null) )
  155. {
  156. //cleans up garbage
  157. m_PlayerDebugDamage.Remove(null);
  158. }
  159. if ( m_PlayerDebugDamage.Contains(playerDelta) )
  160. {
  161. RemotePlayerDamageDebug valueLocal = m_PlayerDebugDamage.Get(playerDelta);
  162. array<ref DamageData> damageList = new array<ref DamageData>;
  163. valueDelta.GetReversed(damageList);
  164. foreach (DamageData data : damageList)
  165. {
  166. valueLocal.InsertDamageObject( data );
  167. }
  168. }
  169. else
  170. {
  171. m_PlayerDebugDamage.Insert(playerDelta, valueDelta);
  172. }
  173. }
  174. }
  175. void DebugDamage(PlayerBase player)
  176. {
  177. for (int i = 0; i < m_PlayerDebugStats.Count(); i++)
  178. {
  179. player = m_PlayerDebugStats.Get(i).GetPlayer();
  180. PrintString("player:" + player.ToString() );
  181. m_PlayerDebugStats.Get(i).Debug();
  182. PrintString("-------------------------------------");
  183. }
  184. for (i = 0; i < m_PlayerDebugDamage.Count(); i++)
  185. {
  186. PrintString("-------------------------------------");
  187. if( m_PlayerDebugDamage.GetElement(i) ) m_PlayerDebugDamage.GetElement(i).Debug();
  188. PrintString("-------------------------------------");
  189. }
  190. for (i = 0; i < m_PlayerDebugDamage.Count();i++)
  191. {
  192. PrintString("------------Debug Damage Start--------------");
  193. PlayerBase player2 = m_PlayerDebugDamage.GetKey(i);
  194. RemotePlayerDamageDebug obj = m_PlayerDebugDamage.Get(player2);
  195. obj.Debug();
  196. PrintString("-------------Debug Damage End-------------");
  197. }
  198. }
  199. void OnRPC(ParamsReadContext ctx)
  200. {
  201. ctx.Read(m_PlayerDebugStats);
  202. array<ref RemotePlayerDamageDebug> player_damage = new array<ref RemotePlayerDamageDebug>;
  203. ctx.Read(player_damage);
  204. PlayerBase player;
  205. for (int x = 0; x < player_damage.Count(); x++)
  206. {
  207. RemotePlayerDamageDebug value = player_damage.Get(x);
  208. if (value)
  209. {
  210. player = value.GetPlayer();
  211. PrintString("debug damage: "+x.ToString() + "," + player.ToString());
  212. value.Debug();
  213. int xs = 1 + 1;
  214. }
  215. }
  216. if (player_damage.Count() > 0 ) MergeDamage(player_damage);
  217. }
  218. }