huddebugwincharmodifiers.c 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429
  1. class DebugModifierData
  2. {
  3. string m_Name;
  4. int m_ID;
  5. void DebugModifierData( 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. }
  19. class HudDebugWinCharModifiers extends HudDebugWinBase
  20. {
  21. protected Widget m_WgtModifiersContent;
  22. protected ref map<int, Widget> m_ModifierWidgets;
  23. protected ref map<Widget, ref DebugModifierData> m_ModifierWidgetData;
  24. protected PluginDeveloperSync m_PluginDeveloperSync;
  25. protected Widget m_WgtDetailedInfo;
  26. protected TextWidget m_WgtDetailedInfoText;
  27. protected int m_DetailedInfoIndex;
  28. //============================================
  29. // HudDebugWinCharModifiers
  30. //============================================
  31. void HudDebugWinCharModifiers( Widget widget_root )
  32. {
  33. m_WgtRoot = widget_root;
  34. m_WgtModifiersContent = Widget.Cast( m_WgtRoot.FindAnyWidget( "pnl_CharModifiers_Values" ) );
  35. m_ModifierWidgets = new map<int, Widget>();
  36. m_ModifierWidgetData = new map<Widget, ref DebugModifierData>;
  37. m_PluginDeveloperSync = PluginDeveloperSync.Cast( GetPlugin( PluginDeveloperSync ) );
  38. }
  39. void ~HudDebugWinCharModifiers()
  40. {
  41. SetUpdate( false );
  42. }
  43. //============================================
  44. // GetWinType
  45. //============================================
  46. override int GetType()
  47. {
  48. return HudDebug.HUD_WIN_CHAR_MODIFIERS;
  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. //if client, send RPC
  58. if ( GetGame().IsClient() )
  59. {
  60. ref Param1<bool> params = new Param1<bool>( state );
  61. if ( player )
  62. {
  63. player.RPCSingleParam( ERPCs.DEV_MODS_UPDATE, params, true );
  64. SetRPCSent();
  65. }
  66. }
  67. //else set directly
  68. else
  69. {
  70. if ( m_PluginDeveloperSync )
  71. {
  72. m_PluginDeveloperSync.EnableUpdate( state, ERPCs.DEV_MODS_UPDATE, player );
  73. }
  74. }
  75. }
  76. override void Update()
  77. {
  78. super.Update();
  79. Refresh();
  80. }
  81. //============================================
  82. // Show / Hide
  83. //============================================
  84. override void Show()
  85. {
  86. super.Show();
  87. //Print("Show()");
  88. SetUpdate( true );
  89. }
  90. override void Hide()
  91. {
  92. super.Hide();
  93. //Print("Hide()");
  94. SetUpdate( false );
  95. foreach (Widget widget : m_ModifierWidgets)
  96. {
  97. delete widget;
  98. }
  99. m_ModifierWidgets.Clear();
  100. }
  101. void Refresh()
  102. {
  103. SetModifiers();
  104. if(m_WgtDetailedInfo && m_WgtDetailedInfo.IsVisible())
  105. {
  106. if(!m_WgtDetailedInfoText)
  107. m_WgtDetailedInfoText = TextWidget.Cast(m_WgtDetailedInfo.FindAnyWidget( "TextWidget" ));
  108. m_WgtDetailedInfoText.SetText(m_PluginDeveloperSync.m_PlayerModsDetailedSynced);
  109. }
  110. }
  111. //============================================
  112. // FitWindow
  113. //============================================
  114. void FitWindow()
  115. {
  116. float title_size = 20;
  117. float spacing = 20;
  118. //get wgt content size values
  119. float wgt_content_size_x;
  120. float wgt_content_size_y;
  121. m_WgtModifiersContent.GetSize( wgt_content_size_x, wgt_content_size_y );
  122. //get wgt root size values
  123. float wgt_root_size_x;
  124. float wgt_root_size_y;
  125. m_WgtRoot.GetSize( wgt_root_size_x, wgt_root_size_y );
  126. //calculate new Y size
  127. float new_size_y = title_size + wgt_content_size_y + spacing;
  128. //set size
  129. m_WgtRoot.SetSize( wgt_root_size_x, new_size_y );
  130. }
  131. //============================================
  132. // Display Modifiers
  133. //============================================
  134. void SetModifiers()
  135. {
  136. //clear window
  137. ClearModifiers();
  138. if (m_PluginDeveloperSync.m_PlayerModsSynced.Count() > 0)
  139. {
  140. //set active mods
  141. foreach (SyncedValueModifier modifier : m_PluginDeveloperSync.m_PlayerModsSynced)
  142. {
  143. AddModifier(
  144. modifier.GetName(),
  145. modifier.GetID(),
  146. modifier.GetActive(),
  147. modifier.GetLocked(),
  148. );
  149. }
  150. }
  151. FitWindow();
  152. }
  153. void AddModifier( string name, int id, bool active, bool locked )
  154. {
  155. Widget widget = m_ModifierWidgets.Get(id);
  156. if (!widget)
  157. {
  158. //create widget
  159. widget = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/debug/day_z_hud_debug_modifier.layout", m_WgtModifiersContent );
  160. //add to widget array (for clearing purposes)
  161. m_ModifierWidgets.Insert( id, widget );
  162. }
  163. //set widget name
  164. ButtonWidget mod_name_text = ButtonWidget.Cast( widget.FindAnyWidget( "TextModifierName" ) );
  165. mod_name_text.SetText( name );
  166. if ( active )
  167. {
  168. mod_name_text.SetTextColor( ARGB( 255, 0, 255, 0 ) );
  169. }
  170. else
  171. {
  172. mod_name_text.SetTextColor( ARGB( 255, 255, 0, 0 ) );
  173. }
  174. //set set data for interactive parts (modifier ID should be enough)
  175. DebugModifierData data = new DebugModifierData( name, id );
  176. Widget modifier_button = widget.FindAnyWidget( "TextModifierName" );
  177. m_ModifierWidgetData.Insert( modifier_button, data );
  178. //Activate button
  179. Widget activate_button = widget.FindAnyWidget( "ButtonModifierActivate" );
  180. m_ModifierWidgetData.Insert( activate_button, data );
  181. //Deactivate button
  182. Widget deactivate_button = widget.FindAnyWidget( "ButtonModifierDeactivate" );
  183. m_ModifierWidgetData.Insert( deactivate_button, data );
  184. //Lock checkbox
  185. Widget checkbox_widget = widget.FindAnyWidget( "CheckBoxLock" );
  186. m_ModifierWidgetData.Insert( checkbox_widget, data );
  187. //set lock based on checkbox value
  188. CheckBoxWidget checkbox = CheckBoxWidget.Cast( checkbox_widget );
  189. checkbox.SetChecked( locked );
  190. AutoHeightSpacer WgtModifiersContent_panel_script;
  191. m_WgtModifiersContent.GetScript( WgtModifiersContent_panel_script );
  192. WgtModifiersContent_panel_script.Update();
  193. }
  194. void ClearModifiers()
  195. {
  196. //clear widget data
  197. m_ModifierWidgetData.Clear();
  198. }
  199. //============================================
  200. // OnClick
  201. //============================================
  202. bool OnClick( Widget w, int x, int y, int button )
  203. {
  204. if ( w )
  205. {
  206. if ( w.GetName() == "TextModifierName" )
  207. {
  208. //Print("clicked");
  209. DebugModifierData bc_data = m_ModifierWidgetData.Get( w );
  210. //Print( bc_data.GetID() );
  211. if(bc_data.GetID() == m_DetailedInfoIndex)//repeated request --> hide
  212. {
  213. if(m_WgtDetailedInfo && m_WgtDetailedInfo.IsVisible())
  214. {
  215. m_WgtDetailedInfo.Show(false);
  216. }
  217. m_DetailedInfoIndex = 0;
  218. }
  219. else
  220. {
  221. if(!m_WgtDetailedInfo)
  222. m_WgtDetailedInfo = GetGame().GetWorkspace().CreateWidgets( "gui/layouts/debug/day_z_hud_debug_modifier_detailed.layout");
  223. if(!m_WgtDetailedInfo.IsVisible())
  224. {
  225. m_WgtDetailedInfo.Show(true);
  226. }
  227. m_DetailedInfoIndex = bc_data.GetID();
  228. }
  229. if( m_WgtDetailedInfoText )
  230. m_WgtDetailedInfoText.SetText("");
  231. m_PluginDeveloperSync.m_PlayerModsDetailedSynced = "";
  232. RequestDetailedInfo( bc_data.GetID());
  233. return true;
  234. }
  235. //Button activate
  236. if ( w.GetName() == "ButtonModifierActivate" )
  237. {
  238. DebugModifierData ba_data = m_ModifierWidgetData.Get( w );
  239. //activate
  240. ActivateModifier( ba_data.GetID() );
  241. //force update
  242. m_PluginDeveloperSync.Update();
  243. return true;
  244. }
  245. //Button deactivate
  246. else if ( w.GetName() == "ButtonModifierDeactivate" )
  247. {
  248. DebugModifierData bd_data = m_ModifierWidgetData.Get( w );
  249. //deactivate
  250. DeactivateModifier( bd_data.GetID() );
  251. //force update
  252. m_PluginDeveloperSync.Update();
  253. return true;
  254. }
  255. //Lock checkbox
  256. else if ( w.GetName() == "CheckBoxLock" )
  257. {
  258. DebugModifierData lcb_data = m_ModifierWidgetData.Get( w );
  259. CheckBoxWidget checkbox = CheckBoxWidget.Cast( w );
  260. //set lock
  261. LockModifier( lcb_data.GetID(), checkbox.IsChecked() );
  262. //force update
  263. m_PluginDeveloperSync.Update();
  264. return true;
  265. }
  266. else if ( w.GetName() == "ResetModifiers" )
  267. {
  268. ResetModifiers();
  269. return true;
  270. }
  271. }
  272. return false;
  273. }
  274. //============================================
  275. // Actions
  276. //============================================
  277. void ResetModifiers()
  278. {
  279. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  280. //if client, send RPC
  281. ref Param1<bool> params = new Param1<bool>( false );
  282. if ( player )
  283. {
  284. player.RPCSingleParam( ERPCs.DEV_RPC_MODS_RESET, params, true );
  285. }
  286. }
  287. void RequestDetailedInfo( int id )
  288. {
  289. //Disable update on server (PluginDeveloperSync)
  290. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  291. //if client, send RPC
  292. if ( GetGame().IsClient() )
  293. {
  294. ref Param1<int> params = new Param1<int>( id );
  295. if ( player )
  296. {
  297. player.RPCSingleParam( ERPCs.DEV_RPC_MODS_DETAILED, params, true );
  298. }
  299. }
  300. //else set directly
  301. else
  302. {
  303. m_PluginDeveloperSync.RequestDetailedInfo( id , player);
  304. }
  305. }
  306. void ActivateModifier( int id )
  307. {
  308. //Disable update on server (PluginDeveloperSync)
  309. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  310. //if client, send RPC
  311. if ( GetGame().IsClient() )
  312. {
  313. ref Param1<int> params = new Param1<int>( id );
  314. if ( player )
  315. {
  316. player.RPCSingleParam( ERPCs.DEV_RPC_MODS_ACTIVATE, params, true );
  317. }
  318. }
  319. //else set directly
  320. else
  321. {
  322. m_PluginDeveloperSync.ActivateModifier( id );
  323. }
  324. }
  325. void DeactivateModifier( int id )
  326. {
  327. //Disable update on server (PluginDeveloperSync)
  328. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  329. //if client, send RPC
  330. if ( GetGame().IsClient() )
  331. {
  332. ref Param1<int> params = new Param1<int>( id );
  333. if ( player )
  334. {
  335. player.RPCSingleParam( ERPCs.DEV_RPC_MODS_DEACTIVATE, params, true );
  336. }
  337. }
  338. //else set directly
  339. else
  340. {
  341. m_PluginDeveloperSync.DeactivateModifier( id );
  342. }
  343. }
  344. void LockModifier( int id, bool state )
  345. {
  346. //Disable update on server (PluginDeveloperSync)
  347. PlayerBase player = PlayerBase.Cast( GetGame().GetPlayer() );
  348. //if client, send RPC
  349. if ( GetGame().IsClient() )
  350. {
  351. ref Param2<int, bool> params = new Param2<int, bool>( id, state );
  352. if ( player )
  353. {
  354. player.RPCSingleParam( ERPCs.DEV_RPC_MODS_LOCK, params, true );
  355. }
  356. }
  357. //else set directly
  358. else
  359. {
  360. m_PluginDeveloperSync.LockModifier( id, state );
  361. }
  362. }
  363. }