scriptconsoleenfscripttab.c 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324
  1. class ScriptConsoleEnfScriptTab : ScriptConsoleTabBase
  2. {
  3. protected static ScriptConsoleEnfScriptTab m_Instance;
  4. protected int m_EnscriptHistoryRow;
  5. protected int m_EnscriptHistoryRowServer;
  6. protected ref TStringArray m_EnscriptConsoleHistory;
  7. protected ref TStringArray m_EnscriptConsoleHistoryServer;
  8. protected PluginLocalEnscriptHistory m_ModuleLocalEnscriptHistory;
  9. protected PluginLocalEnscriptHistoryServer m_ModuleLocalEnscriptHistoryServer;
  10. protected MultilineEditBoxWidget m_EnfScriptEdit;
  11. protected ButtonWidget m_EnfScriptRun;
  12. protected ButtonWidget m_EnfScriptClear;
  13. protected TextListboxWidget m_ScriptOutputListbox;
  14. protected bool m_AllowScriptOutput;
  15. protected int m_RunColor;
  16. static ref TStringArray m_ScriptOutputHistory = new TStringArray();
  17. void ScriptConsoleEnfScriptTab(Widget root, ScriptConsole console, Widget button, ScriptConsoleTabBase parent = null)
  18. {
  19. m_Instance = this;
  20. m_ModuleLocalEnscriptHistory = PluginLocalEnscriptHistory.Cast(GetPlugin(PluginLocalEnscriptHistory));
  21. m_ModuleLocalEnscriptHistoryServer = PluginLocalEnscriptHistoryServer.Cast(GetPlugin(PluginLocalEnscriptHistoryServer));
  22. m_EnscriptConsoleHistory = m_ModuleLocalEnscriptHistory.GetAllLines();
  23. m_EnscriptConsoleHistoryServer = m_ModuleLocalEnscriptHistoryServer.GetAllLines();
  24. m_EnfScriptEdit = MultilineEditBoxWidget.Cast(root.FindAnyWidget("MultilineEditBoxWidget0"));
  25. m_EnfScriptRun = ButtonWidget.Cast(root.FindAnyWidget("RunButton"));
  26. m_EnfScriptClear = ButtonWidget.Cast(root.FindAnyWidget("ClearButton"));
  27. m_ScriptOutputListbox = TextListboxWidget.Cast(root.FindAnyWidget("ScriptOutputListbox"));
  28. m_RunColor = m_EnfScriptRun.GetColor();
  29. }
  30. void ~ScriptConsoleEnfScriptTab()
  31. {
  32. m_Instance = null;
  33. }
  34. override void OnSelected()
  35. {
  36. int index = m_EnscriptConsoleHistory.Count() - m_EnscriptHistoryRow - 1;
  37. if (m_EnscriptConsoleHistory.IsValidIndex(index))
  38. {
  39. string text = m_EnscriptConsoleHistory.Get(index);
  40. m_EnfScriptEdit.SetText(text);
  41. }
  42. ReloadScriptOutput();
  43. }
  44. static void PrintS(string message)
  45. {
  46. Print(message);
  47. if (m_Instance)
  48. m_Instance.Add(message);
  49. }
  50. static void PrintS(bool message)
  51. {
  52. PrintS(message.ToString());
  53. }
  54. static void PrintS(int message)
  55. {
  56. PrintS(message.ToString());
  57. }
  58. static void PrintS(float message)
  59. {
  60. PrintS(message.ToString());
  61. }
  62. static void PrintS(vector message)
  63. {
  64. PrintS(message.ToString());
  65. }
  66. static void PrintS(Object message)
  67. {
  68. PrintS(message.ToString());
  69. }
  70. void Add(string message, bool isReload = false)
  71. {
  72. if (message != string.Empty)
  73. {
  74. if (m_AllowScriptOutput && m_ScriptOutputListbox)
  75. {
  76. if (!isReload)
  77. m_ScriptOutputHistory.Insert(message);
  78. m_ScriptOutputListbox.AddItem(String(message), NULL, 0);
  79. m_ScriptOutputListbox.EnsureVisible(m_ScriptOutputListbox.GetNumItems());
  80. }
  81. }
  82. }
  83. protected void Clear(bool clearFile = false)
  84. {
  85. if(clearFile)
  86. Debug.ClearLogs();
  87. m_ScriptOutputListbox.ClearItems();
  88. }
  89. protected void ReloadScriptOutput()
  90. {
  91. m_ScriptOutputListbox.ClearItems();
  92. m_AllowScriptOutput = true;
  93. foreach ( string s: m_ScriptOutputHistory)
  94. {
  95. Add(s, true);
  96. }
  97. m_AllowScriptOutput = false;
  98. }
  99. void HistoryBack()
  100. {
  101. EnscriptHistoryBack();
  102. }
  103. void HistoryForward()
  104. {
  105. EnscriptHistoryForward();
  106. }
  107. protected void RunEnscript()
  108. {
  109. #ifdef DEVELOPER
  110. string code;
  111. m_EnfScriptEdit.GetText(code);
  112. string codeNoReplace = code;
  113. _player = PlayerBase.Cast(GetGame().GetPlayer());
  114. m_AllowScriptOutput = true;
  115. code.Replace("Print(","ScriptConsoleEnfScriptTab.PrintS(");
  116. code.Replace("Print (","ScriptConsoleEnfScriptTab.PrintS(");
  117. bool success = GetGame().ExecuteEnforceScript("void scConsMain() \n{\n" + code + "\n}\n", "scConsMain");
  118. m_AllowScriptOutput = false;
  119. ColorRunButton(success);
  120. m_EnscriptConsoleHistory.Insert(codeNoReplace);
  121. m_ModuleLocalEnscriptHistory.AddNewLine(codeNoReplace);
  122. #endif
  123. }
  124. protected void ColorRunButton(bool success)
  125. {
  126. if (success)
  127. {
  128. m_EnfScriptRun.SetColor(ARGB(255,0,255,0));
  129. }
  130. else
  131. {
  132. m_EnfScriptRun.SetColor(ARGB(255,255,0,0));
  133. }
  134. GetGame().GetCallQueue(CALL_CATEGORY_SYSTEM).CallLater(ResetRunButtonColor,600);
  135. }
  136. protected void ResetRunButtonColor()
  137. {
  138. m_EnfScriptRun.SetColor(m_RunColor);
  139. }
  140. protected void RunEnscriptServer()
  141. {
  142. string code;
  143. m_EnfScriptEdit.GetText(code);
  144. m_EnscriptConsoleHistoryServer.Insert(code);
  145. m_ModuleLocalEnscriptHistoryServer.AddNewLine(code);
  146. CachedObjectsParams.PARAM1_STRING.param1 = code;
  147. GetGame().RPCSingleParam(GetGame().GetPlayer(), ERPCs.DEV_RPC_SERVER_SCRIPT, CachedObjectsParams.PARAM1_STRING, true, GetGame().GetPlayer().GetIdentity());
  148. }
  149. protected void EnscriptHistoryBack()
  150. {
  151. int history_index;
  152. if (m_EnfScriptEdit)
  153. {
  154. m_EnscriptHistoryRow++;
  155. history_index = m_EnscriptConsoleHistory.Count() - m_EnscriptHistoryRow - 1;
  156. if (history_index > -1)
  157. {
  158. m_EnfScriptEdit.SetText(m_EnscriptConsoleHistory.Get(history_index));
  159. }
  160. else m_EnscriptHistoryRow--;
  161. }
  162. }
  163. protected void EnscriptHistoryForward()
  164. {
  165. if (m_EnfScriptEdit)
  166. {
  167. int history_index;
  168. m_EnscriptHistoryRow--;
  169. history_index = m_EnscriptConsoleHistory.Count() - m_EnscriptHistoryRow - 1;
  170. if (history_index < m_EnscriptConsoleHistory.Count())
  171. {
  172. m_EnfScriptEdit.SetText(m_EnscriptConsoleHistory.Get(history_index));
  173. }
  174. else m_EnscriptHistoryRow++;
  175. }
  176. }
  177. override void OnRPCEx(int rpc_type, ParamsReadContext ctx)
  178. {
  179. super.OnRPCEx(rpc_type, ctx);
  180. #ifdef DIAG_DEVELOPER
  181. switch (rpc_type)
  182. {
  183. case ERPCs.DEV_RPC_SERVER_SCRIPT_RESULT:
  184. {
  185. if (ctx.Read(CachedObjectsParams.PARAM1_BOOL))
  186. {
  187. ColorRunButton(CachedObjectsParams.PARAM1_BOOL.param1);
  188. }
  189. break;
  190. }
  191. }
  192. #endif
  193. }
  194. override bool OnClick(Widget w, int x, int y, int button)
  195. {
  196. super.OnClick(w,x,y,button);
  197. if (w == m_EnfScriptRun)
  198. {
  199. RunEnscript();
  200. return true;
  201. }
  202. else if (w == m_EnfScriptClear)
  203. {
  204. m_ScriptOutputListbox.ClearItems();
  205. m_ScriptOutputHistory.Clear();
  206. return true;
  207. }
  208. return false;
  209. }
  210. override bool OnChange(Widget w, int x, int y, bool finished)
  211. {
  212. super.OnChange(w, x, y, finished);
  213. return false;
  214. }
  215. override void Show(bool show, ScriptConsoleTabBase selectedHandler)
  216. {
  217. if (!show && (selectedHandler.Type() == ScriptConsoleEnfScriptTab || selectedHandler.Type() == ScriptConsoleEnfScriptServerTab))
  218. {
  219. //do nothing
  220. }
  221. else
  222. {
  223. m_Root.Show(show);
  224. m_Root.Enable(show);
  225. }
  226. }
  227. }
  228. class ScriptConsoleEnfScriptServerTab : ScriptConsoleEnfScriptTab
  229. {
  230. override void OnSelected()
  231. {
  232. int index = m_EnscriptConsoleHistoryServer.Count() - m_EnscriptHistoryRowServer - 1;
  233. if (m_EnscriptConsoleHistoryServer.IsValidIndex(index))
  234. {
  235. string text = m_EnscriptConsoleHistoryServer.Get(index);
  236. m_EnfScriptEdit.SetText(text);
  237. }
  238. ReloadScriptOutput();
  239. }
  240. override protected void EnscriptHistoryBack()
  241. {
  242. int history_index;
  243. if (m_EnfScriptEdit)
  244. {
  245. m_EnscriptHistoryRowServer++;
  246. history_index = m_EnscriptConsoleHistoryServer.Count() - m_EnscriptHistoryRowServer - 1;
  247. if (history_index > -1)
  248. {
  249. m_EnfScriptEdit.SetText(m_EnscriptConsoleHistoryServer.Get(history_index));
  250. }
  251. else m_EnscriptHistoryRowServer--;
  252. }
  253. }
  254. override protected void EnscriptHistoryForward()
  255. {
  256. if (m_EnfScriptEdit)
  257. {
  258. int history_index;
  259. m_EnscriptHistoryRowServer--;
  260. history_index = m_EnscriptConsoleHistoryServer.Count() - m_EnscriptHistoryRowServer - 1;
  261. if (history_index < m_EnscriptConsoleHistoryServer.Count())
  262. {
  263. m_EnfScriptEdit.SetText(m_EnscriptConsoleHistoryServer.Get(history_index));
  264. }
  265. else m_EnscriptHistoryRowServer++;
  266. }
  267. }
  268. override bool OnClick(Widget w, int x, int y, int button)
  269. {
  270. if (w == m_EnfScriptRun)
  271. {
  272. RunEnscriptServer();
  273. return true;
  274. }
  275. else if (w == m_EnfScriptClear)
  276. {
  277. m_ScriptOutputListbox.ClearItems();
  278. m_ScriptOutputHistory.Clear();
  279. return true;
  280. }
  281. return false;
  282. }
  283. }