huddebugwincharagents.c 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. class DebugAgentData
  2. {
  3. string m_Name;
  4. int m_ID;
  5. void DebugAgentData( string name, int id )
  6. {
  7. m_Name = name;
  8. m_ID = id;
  9. }
  10. string GetName()
  11. {
  12. return m_Name;
  13. }
  14. int GetID()
  15. {
  16. return m_ID;
  17. }
  18. float GetTemporaryResistance()
  19. {
  20. }
  21. }
  22. class HudDebugWinCharAgents extends HudDebugWinBase
  23. {
  24. protected Widget m_WgtAgents;
  25. protected ref array<ref Widget> m_AgentWidgets = new array<ref Widget>;
  26. protected ref map<Widget, ref DebugAgentData> m_AgentWidgetData = new map<Widget, ref DebugAgentData>;
  27. private AutoHeightSpacer WgtModifiersContentPanelScript;
  28. //============================================
  29. // HudDebugWinCharAgents
  30. //============================================
  31. void HudDebugWinCharAgents( Widget widget_root )
  32. {
  33. m_WgtRoot = widget_root;
  34. //m_WgtAgents = TextListboxWidget.Cast( m_WgtRoot.FindAnyWidget( "txl_CharAgents_Values" ) );
  35. m_WgtAgents = m_WgtRoot.FindAnyWidget( "AgentList" );
  36. //FitWindowByContent( m_WgtAgents );
  37. m_WgtAgents.GetScript(WgtModifiersContentPanelScript);
  38. }
  39. void ~HudDebugWinCharAgents()
  40. {
  41. SetUpdate( false );
  42. }
  43. //============================================
  44. // GetWinType
  45. //============================================
  46. override int GetType()
  47. {
  48. return HudDebug.HUD_WIN_CHAR_AGENTS;
  49. }
  50. //============================================
  51. // Update
  52. //============================================
  53. override void SetUpdate( bool state )
  54. {
  55. //Disable update on server (PluginDeveloperSync)
  56. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  57. PluginDeveloperSync developer_sync = PluginDeveloperSync.Cast( GetPlugin( PluginDeveloperSync ) );
  58. //if client, send RPC
  59. if ( GetGame().IsClient() )
  60. {
  61. ref Param1<bool> params = new Param1<bool>( state );
  62. if ( player )
  63. {
  64. player.RPCSingleParam( ERPCs.DEV_AGENTS_UPDATE, params, true );
  65. SetRPCSent();
  66. }
  67. }
  68. //else set directly
  69. else
  70. {
  71. if ( developer_sync )
  72. {
  73. developer_sync.EnableUpdate( state, ERPCs.DEV_AGENTS_UPDATE, player );
  74. }
  75. }
  76. }
  77. override void Update()
  78. {
  79. super.Update();
  80. //Print("Update()");
  81. //refresh notifiers
  82. SetAgents();
  83. }
  84. //============================================
  85. // Show / Hide
  86. //============================================
  87. override void Show()
  88. {
  89. super.Show();
  90. //Print("Show()");
  91. SetUpdate( true );
  92. }
  93. override void Hide()
  94. {
  95. super.Hide();
  96. //Print("Hide()");
  97. SetUpdate( false );
  98. }
  99. void SetAgents()
  100. {
  101. PluginDeveloperSync developer_sync = PluginDeveloperSync.Cast( GetPlugin( PluginDeveloperSync ) );
  102. //clear window
  103. ClearAgents();
  104. //set agents
  105. if ( developer_sync.m_PlayerAgentsSynced.Count() > 0 )
  106. {
  107. for ( int i = 0; i < developer_sync.m_PlayerAgentsSynced.Count(); i++ )
  108. {
  109. SyncedValueAgent syncedValue = SyncedValueAgent.Cast(developer_sync.m_PlayerAgentsSynced.Get(i));
  110. AddAgent(
  111. syncedValue.GetName(),
  112. syncedValue.GetValue(),
  113. syncedValue.GetID(),
  114. syncedValue.GetTemporaryResistanceTime(),
  115. );
  116. }
  117. }
  118. }
  119. bool OnClick( Widget w, int x, int y, int button )
  120. {
  121. DebugAgentData data;
  122. if (w.GetName() == "ButtonAgentActivate")
  123. {
  124. data = m_AgentWidgetData.Get(w);
  125. DebugGrowAgentsRequest(data.GetID(), true);
  126. return true;
  127. }
  128. else if (w.GetName() == "ButtonAgentDeactivate")
  129. {
  130. data = m_AgentWidgetData.Get(w);
  131. DebugGrowAgentsRequest(data.GetID(), false);
  132. return true;
  133. }
  134. else if (w.GetName() == "ResetAgents")
  135. {
  136. DebugRemoveAgentsRequest();
  137. return true;
  138. }
  139. return false;
  140. }
  141. void DebugGrowAgentsRequest(int agent_id, bool should_grow)
  142. {
  143. if(!should_grow)//id is minus value to mark killing instead of growing
  144. {
  145. agent_id *= -1;
  146. }
  147. ref Param1<int> p1 = new Param1<int>( agent_id );
  148. Man man = GetGame().GetPlayer();
  149. man.RPCSingleParam(ERPCs.DEV_AGENT_GROW, p1, true, man.GetIdentity());
  150. }
  151. void DebugRemoveAgentsRequest()
  152. {
  153. ref Param1<bool> p1 = new Param1<bool>( false );
  154. Man man = GetGame().GetPlayer();
  155. man.RPCSingleParam(ERPCs.DEV_RPC_AGENT_RESET, p1, true, man.GetIdentity());
  156. }
  157. void AddAgent(string title, string value, int id, float temporaryResistance)
  158. {
  159. Widget widget = GetGame().GetWorkspace().CreateWidgets("gui/layouts/debug/day_z_hud_debug_agent.layout", m_WgtAgents);
  160. ButtonWidget btn = ButtonWidget.Cast( widget.FindAnyWidget( "TextAgentName" ) );
  161. TextWidget countWidget = TextWidget.Cast(widget.FindAnyWidget("TextWidgetAgentCount"));
  162. TextWidget tempResistanceWidget = TextWidget.Cast(widget.FindAnyWidget("TextWidgetAgentTempResistanceTime"));
  163. Widget activateButton = widget.FindAnyWidget("ButtonAgentActivate");
  164. Widget deactivateButton = widget.FindAnyWidget("ButtonAgentDeactivate");
  165. countWidget.SetText(value);
  166. btn.SetText(title);
  167. if (temporaryResistance > 0.0)
  168. tempResistanceWidget.SetText(string.Format("(R-%1s)", Math.Round(temporaryResistance).ToString()));
  169. else
  170. tempResistanceWidget.SetText("");
  171. DebugAgentData data = new DebugAgentData("", id);
  172. m_AgentWidgets.Insert(widget);
  173. m_AgentWidgetData.Insert(btn, data);
  174. m_AgentWidgetData.Insert(activateButton, data);
  175. m_AgentWidgetData.Insert(countWidget, data);
  176. m_AgentWidgetData.Insert(tempResistanceWidget, data);
  177. m_AgentWidgetData.Insert(deactivateButton, data);
  178. WgtModifiersContentPanelScript.Update();
  179. }
  180. void ClearAgents()
  181. {
  182. m_AgentWidgetData.Clear();
  183. for (int i = 0; i < m_AgentWidgets.Count(); i++)
  184. {
  185. delete m_AgentWidgets.Get(i);
  186. }
  187. m_AgentWidgets.Clear();
  188. }
  189. void FitWindow()
  190. {
  191. FitWindowByContent( TextListboxWidget.Cast(m_WgtAgents) );
  192. }
  193. }