charactercreationmenu.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832
  1. class CharacterCreationMenu extends UIScriptedMenu
  2. {
  3. #ifdef PLATFORM_CONSOLE
  4. DayZIntroSceneXbox m_Scene;
  5. protected bool m_CharacterSaved;
  6. #else
  7. DayZIntroScenePC m_Scene;
  8. #endif
  9. const int TOOLTIP_ID_SAVE = 1;
  10. const int TOOLTIP_ID_APPLY = 2;
  11. protected Widget m_CharacterRotationFrame;
  12. protected Widget m_Apply;
  13. protected Widget m_Save;
  14. protected Widget m_RandomizeCharacter;
  15. protected Widget m_BackButton;
  16. protected Widget m_PlayedCharacterInfo;
  17. protected TextWidget m_Version;
  18. protected Widget m_DetailsRoot; //tooltips
  19. protected TextWidget m_DetailsLabel;
  20. protected RichTextWidget m_DetailsText;
  21. protected TextWidget m_CharacterHeaderText;
  22. protected ref OptionSelectorEditbox m_NameSelector;
  23. protected ref OptionSelectorMultistateCharacterMenu m_GenderSelector;
  24. protected ref OptionSelectorMultistateCharacterMenu m_SkinSelector;
  25. protected ref OptionSelectorMultistateCharacterMenu m_TopSelector;
  26. protected ref OptionSelectorMultistateCharacterMenu m_BottomSelector;
  27. protected ref OptionSelectorMultistateCharacterMenu m_ShoesSelector;
  28. protected ref map<Widget, OptionSelectorMultistateCharacterMenu> m_MultiOptionSelectors;
  29. int m_OriginalCharacterID;
  30. void CharacterCreationMenu()
  31. {
  32. MissionMainMenu mission = MissionMainMenu.Cast(GetGame().GetMission());
  33. #ifdef PLATFORM_CONSOLE
  34. m_Scene = mission.GetIntroSceneXbox();
  35. #else
  36. m_Scene = mission.GetIntroScenePC();
  37. #endif
  38. m_Scene.ResetIntroCamera();
  39. }
  40. PlayerBase GetPlayerObj()
  41. {
  42. return m_Scene.GetIntroCharacter().GetCharacterObj();
  43. }
  44. protected void OnInputDeviceChanged(EInputDeviceType pInputDeviceType)
  45. {
  46. #ifdef PLATFORM_CONSOLE
  47. switch (pInputDeviceType)
  48. {
  49. case EInputDeviceType.CONTROLLER:
  50. if (GetGame().GetInput().IsEnabledMouseAndKeyboard())
  51. {
  52. GetGame().GetUIManager().ShowUICursor(false);
  53. }
  54. CheckNewOptions(); //TODO - pick only the 'focus' bit
  55. break;
  56. default:
  57. if (GetGame().GetInput().IsEnabledMouseAndKeyboard())
  58. {
  59. GetGame().GetUIManager().ShowUICursor(true);
  60. }
  61. break;
  62. }
  63. UpdateControlsElementVisibility();
  64. #endif
  65. }
  66. override Widget Init()
  67. {
  68. #ifdef PLATFORM_CONSOLE
  69. layoutRoot = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/character_creation/xbox/character_creation.layout");
  70. m_CharacterSaved = false;
  71. #else
  72. layoutRoot = GetGame().GetWorkspace().CreateWidgets("gui/layouts/new_ui/character_creation/pc/character_creation.layout");
  73. #endif
  74. m_CharacterRotationFrame = layoutRoot.FindAnyWidget("character_rotation_frame");
  75. m_Apply = layoutRoot.FindAnyWidget("apply");
  76. m_Save = layoutRoot.FindAnyWidget("save");
  77. m_RandomizeCharacter = layoutRoot.FindAnyWidget("randomize_character");
  78. m_BackButton = layoutRoot.FindAnyWidget("back");
  79. m_Version = TextWidget.Cast(layoutRoot.FindAnyWidget("version"));
  80. m_DetailsRoot = layoutRoot.FindAnyWidget("menu_details_tooltip");
  81. m_DetailsLabel = TextWidget.Cast(m_DetailsRoot.FindAnyWidget("menu_details_label"));
  82. m_DetailsText = RichTextWidget.Cast(m_DetailsRoot.FindAnyWidget("menu_details_tooltip_content"));
  83. m_CharacterHeaderText = TextWidget.Cast(layoutRoot.FindAnyWidget("char_header_text"));
  84. m_PlayedCharacterInfo = layoutRoot.FindAnyWidget("played_char_info");
  85. string version;
  86. GetGame().GetVersion(version);
  87. #ifdef PLATFORM_CONSOLE
  88. version = "#main_menu_version" + " " + version + " (" + g_Game.GetDatabaseID() + ")";
  89. #else
  90. version = "#main_menu_version" + " " + version;
  91. #endif
  92. m_Version.SetText(version);
  93. if (m_Scene && m_Scene.GetIntroCharacter())
  94. {
  95. m_OriginalCharacterID = m_Scene.GetIntroCharacter().GetCharacterID();
  96. }
  97. m_NameSelector = new OptionSelectorEditbox(layoutRoot.FindAnyWidget("character_name_setting_option"), m_Scene.GetIntroCharacter().GetCharacterName(), null, false);
  98. m_GenderSelector = new OptionSelectorMultistateCharacterMenu(layoutRoot.FindAnyWidget("character_gender_setting_option"), 0, null, false, m_Scene.GetIntroCharacter().GetCharGenderList());
  99. if (m_Scene.GetIntroCharacter().IsCharacterFemale())
  100. {
  101. m_GenderSelector.SetValue("Female");
  102. m_SkinSelector = new OptionSelectorMultistateCharacterMenu(layoutRoot.FindAnyWidget("character_head_setting_option"), 0, null, false, m_Scene.GetIntroCharacter().GetCharList(ECharGender.Female));
  103. }
  104. else
  105. {
  106. m_GenderSelector.SetValue("Male");
  107. m_SkinSelector = new OptionSelectorMultistateCharacterMenu(layoutRoot.FindAnyWidget("character_head_setting_option"), 0, null, false, m_Scene.GetIntroCharacter().GetCharList(ECharGender.Male));
  108. }
  109. m_TopSelector = new OptionSelectorMultistateCharacterMenu(layoutRoot.FindAnyWidget("character_top_setting_option"), 0, null, false, DefaultCharacterCreationMethods.GetConfigAttachmentTypes(InventorySlots.BODY));
  110. m_BottomSelector = new OptionSelectorMultistateCharacterMenu(layoutRoot.FindAnyWidget("character_bottom_setting_option"), 0, null, false, DefaultCharacterCreationMethods.GetConfigAttachmentTypes(InventorySlots.LEGS));
  111. m_ShoesSelector = new OptionSelectorMultistateCharacterMenu(layoutRoot.FindAnyWidget("character_shoes_setting_option"), 0, null, false, DefaultCharacterCreationMethods.GetConfigAttachmentTypes(InventorySlots.FEET));
  112. m_GenderSelector.ShowNavigationButtons(true);
  113. m_SkinSelector.ShowNavigationButtons(true);
  114. m_TopSelector.ShowNavigationButtons(true);
  115. m_BottomSelector.ShowNavigationButtons(true);
  116. m_ShoesSelector.ShowNavigationButtons(true);
  117. if (!m_MultiOptionSelectors)
  118. {
  119. m_MultiOptionSelectors = new map<Widget, OptionSelectorMultistateCharacterMenu>;
  120. m_MultiOptionSelectors.Insert(layoutRoot.FindAnyWidget("character_gender_button"), m_GenderSelector);
  121. m_MultiOptionSelectors.Insert(layoutRoot.FindAnyWidget("character_head_button"), m_SkinSelector);
  122. m_MultiOptionSelectors.Insert(layoutRoot.FindAnyWidget("character_top_button"), m_TopSelector);
  123. m_MultiOptionSelectors.Insert(layoutRoot.FindAnyWidget("character_bottom_button"), m_BottomSelector);
  124. m_MultiOptionSelectors.Insert(layoutRoot.FindAnyWidget("character_shoes_button"), m_ShoesSelector);
  125. }
  126. PlayerBase scene_char = GetPlayerObj();
  127. if (scene_char)
  128. {
  129. Object obj = scene_char.GetInventory().FindAttachment(InventorySlots.BODY);
  130. if (obj)
  131. m_TopSelector.SetValue(obj.GetType(), false);
  132. obj = scene_char.GetInventory().FindAttachment(InventorySlots.LEGS);
  133. if (obj)
  134. m_BottomSelector.SetValue(obj.GetType(), false);
  135. obj = scene_char.GetInventory().FindAttachment(InventorySlots.FEET);
  136. if (obj)
  137. m_ShoesSelector.SetValue(obj.GetType(), false);
  138. m_SkinSelector.SetValue(scene_char.GetType());
  139. }
  140. m_GenderSelector.m_OptionChanged.Insert(GenderChanged);
  141. m_SkinSelector.m_OptionChanged.Insert(SkinChanged);
  142. m_TopSelector.m_OptionChanged.Insert(TopChanged);
  143. m_BottomSelector.m_OptionChanged.Insert(BottomChanged);
  144. m_ShoesSelector.m_OptionChanged.Insert(ShoesChanged);
  145. Refresh();
  146. SetCharacter();
  147. CheckNewOptions();
  148. GetGame().GetMission().GetOnInputDeviceChanged().Insert(OnInputDeviceChanged);
  149. return layoutRoot;
  150. }
  151. void ~CharacterCreationMenu()
  152. {
  153. m_GenderSelector.m_OptionChanged.Remove(GenderChanged);
  154. m_SkinSelector.m_OptionChanged.Remove(SkinChanged);
  155. m_TopSelector.m_OptionChanged.Remove(TopChanged);
  156. m_BottomSelector.m_OptionChanged.Remove(BottomChanged);
  157. m_ShoesSelector.m_OptionChanged.Remove(ShoesChanged);
  158. }
  159. //Button Events
  160. //! renames character
  161. void Apply()
  162. {
  163. if (!m_Scene.GetIntroCharacter().IsDefaultCharacter())
  164. {
  165. string name = m_NameSelector.GetValue();
  166. if (name == "")
  167. name = GameConstants.DEFAULT_CHARACTER_NAME;
  168. m_Scene.GetIntroCharacter().SaveCharName(name);
  169. }
  170. MainMenu menu_main = MainMenu.Cast(GetGame().GetUIManager().FindMenu(MENU_MAIN));
  171. if (menu_main)
  172. {
  173. menu_main.OnChangeCharacter(false);
  174. }
  175. GetGame().GetUIManager().Back();
  176. }
  177. //! saves default character
  178. void Save()
  179. {
  180. if (m_Scene.GetIntroCharacter().IsDefaultCharacter())
  181. {
  182. string name = m_NameSelector.GetValue();
  183. if (name == "")
  184. name = GameConstants.DEFAULT_CHARACTER_NAME;
  185. m_Scene.GetIntroCharacter().SaveCharName(name);
  186. m_Scene.GetIntroCharacter().SaveDefaultCharacter();
  187. m_Scene.GetIntroCharacter().SetToDefaultCharacter();
  188. SetCharacterSaved(true);
  189. }
  190. }
  191. void Back()
  192. {
  193. //bring back DefaultCharacter, if it exists (it should), or a previously played one.
  194. GetGame().GetMenuData().RequestGetDefaultCharacterData();
  195. #ifdef PLATFORM_CONSOLE
  196. if (m_OriginalCharacterID != GameConstants.DEFAULT_CHARACTER_MENU_ID && m_CharacterSaved)
  197. {
  198. m_OriginalCharacterID = GameConstants.DEFAULT_CHARACTER_MENU_ID;
  199. }
  200. #endif
  201. m_Scene.GetIntroCharacter().SetCharacterID(m_OriginalCharacterID);
  202. m_Scene.GetIntroCharacter().CreateNewCharacterById(m_Scene.GetIntroCharacter().GetCharacterID());
  203. GetGame().GetUIManager().Back();
  204. }
  205. void SetCharacter()
  206. {
  207. if (m_Scene.GetIntroCharacter().IsDefaultCharacter())
  208. {
  209. GetGame().GetMenuDefaultCharacterData().EquipDefaultCharacter(m_Scene.GetIntroCharacter().GetCharacterObj());
  210. }
  211. }
  212. void RandomizeCharacter()
  213. {
  214. m_Scene.GetIntroCharacter().SetToDefaultCharacter();
  215. // make random selection
  216. m_Scene.GetIntroCharacter().SetCharacterGender(Math.RandomInt(0, 2));
  217. if (m_Scene.GetIntroCharacter().IsCharacterFemale())
  218. {
  219. m_GenderSelector.SetValue("Female");
  220. m_SkinSelector.LoadNewValues(m_Scene.GetIntroCharacter().GetCharList(ECharGender.Female), 0);
  221. m_SkinSelector.SetRandomValue();
  222. }
  223. else
  224. {
  225. m_GenderSelector.SetValue("Male");
  226. m_SkinSelector.LoadNewValues(m_Scene.GetIntroCharacter().GetCharList(ECharGender.Male), 0);
  227. m_SkinSelector.SetRandomValue();
  228. }
  229. GetGame().GetMenuDefaultCharacterData().GenerateRandomEquip();
  230. m_TopSelector.SetValue(GetGame().GetMenuDefaultCharacterData().GetAttachmentMap().Get(InventorySlots.BODY),false);
  231. m_BottomSelector.SetValue(GetGame().GetMenuDefaultCharacterData().GetAttachmentMap().Get(InventorySlots.LEGS),false);
  232. m_ShoesSelector.SetValue(GetGame().GetMenuDefaultCharacterData().GetAttachmentMap().Get(InventorySlots.FEET),false);
  233. Refresh();
  234. SetCharacter();
  235. CheckNewOptions();
  236. }
  237. //Selector Events
  238. void GenderChanged()
  239. {
  240. ECharGender gender = ECharGender.Male;
  241. if (m_GenderSelector.GetStringValue() == "Female")
  242. {
  243. gender = ECharGender.Female;
  244. }
  245. m_Scene.GetIntroCharacter().SetCharacterGender(gender);
  246. m_SkinSelector.LoadNewValues(m_Scene.GetIntroCharacter().GetCharList(gender) , 0);
  247. m_SkinSelector.SetRandomValue();
  248. SetCharacterSaved(false);
  249. }
  250. void SkinChanged()
  251. {
  252. m_Scene.GetIntroCharacter().CreateNewCharacterByName(m_SkinSelector.GetStringValue(), false);
  253. SetCharacterSaved(false);
  254. }
  255. void TopChanged()
  256. {
  257. GetGame().GetMenuDefaultCharacterData().SetDefaultAttachment(InventorySlots.BODY,m_TopSelector.GetStringValue());
  258. GetGame().GetMenuDefaultCharacterData().EquipDefaultCharacter(m_Scene.GetIntroCharacter().GetCharacterObj());
  259. SetCharacterSaved(false);
  260. }
  261. void BottomChanged()
  262. {
  263. GetGame().GetMenuDefaultCharacterData().SetDefaultAttachment(InventorySlots.LEGS,m_BottomSelector.GetStringValue());
  264. GetGame().GetMenuDefaultCharacterData().EquipDefaultCharacter(m_Scene.GetIntroCharacter().GetCharacterObj());
  265. SetCharacterSaved(false);
  266. }
  267. void ShoesChanged()
  268. {
  269. GetGame().GetMenuDefaultCharacterData().SetDefaultAttachment(InventorySlots.FEET,m_ShoesSelector.GetStringValue());
  270. GetGame().GetMenuDefaultCharacterData().EquipDefaultCharacter(m_Scene.GetIntroCharacter().GetCharacterObj());
  271. SetCharacterSaved(false);
  272. }
  273. override bool OnKeyPress(Widget w, int x, int y, int key)
  274. {
  275. super.OnKeyPress(w, x, y, key);
  276. return false;
  277. }
  278. override bool OnClick(Widget w, int x, int y, int button)
  279. {
  280. if (w == m_Apply)
  281. {
  282. Apply();
  283. return true;
  284. }
  285. else if (w == m_Save)
  286. {
  287. Save();
  288. GetGame().GetUIManager().Back();
  289. return true;
  290. }
  291. else if (w == m_RandomizeCharacter)
  292. {
  293. RandomizeCharacter();
  294. return true;
  295. }
  296. else if (w == m_BackButton)
  297. {
  298. Back();
  299. return true;
  300. }
  301. return false;
  302. }
  303. override bool OnMouseButtonDown(Widget w, int x, int y, int button)
  304. {
  305. #ifndef PLATFORM_CONSOLE
  306. if (w == m_CharacterRotationFrame)
  307. {
  308. if (m_Scene)
  309. DayZIntroScenePC.Cast(m_Scene).CharacterRotationStart();
  310. return true;
  311. }
  312. #endif
  313. return false;
  314. }
  315. override bool OnMouseButtonUp(Widget w, int x, int y, int button)
  316. {
  317. #ifndef PLATFORM_CONSOLE
  318. if (m_Scene)
  319. DayZIntroScenePC.Cast(m_Scene).CharacterRotationStop();
  320. #endif
  321. return false;
  322. }
  323. override bool OnMouseEnter(Widget w, int x, int y)
  324. {
  325. string tooltip_header = "";
  326. string tooltip_text = "";
  327. ColorHighlight(w);
  328. switch (w.GetUserID())
  329. {
  330. case TOOLTIP_ID_APPLY:
  331. tooltip_header = "#layout_main_menu_rename";
  332. tooltip_text = "#layout_character_creation_apply_tooltip";
  333. break;
  334. case TOOLTIP_ID_SAVE:
  335. tooltip_header = "#layout_character_creation_save_character_alt";
  336. tooltip_text = "#layout_character_creation_save_tooltip";
  337. break;
  338. }
  339. SetTooltipTexts(w, tooltip_header, tooltip_text);
  340. return true;
  341. }
  342. override bool OnMouseLeave(Widget w, Widget enterW, int x, int y)
  343. {
  344. ColorNormal(w);
  345. SetFocus(null);
  346. return true;
  347. }
  348. override bool OnFocus(Widget w, int x, int y)
  349. {
  350. string tooltip_header = "";
  351. string tooltip_text = "";
  352. if (IsFocusable(w))
  353. {
  354. ColorHighlight(w);
  355. switch (w.GetUserID())
  356. {
  357. case TOOLTIP_ID_APPLY:
  358. tooltip_header = "#layout_main_menu_rename";
  359. tooltip_text = "#layout_character_creation_apply_tooltip";
  360. break;
  361. case TOOLTIP_ID_SAVE:
  362. tooltip_header = "#layout_character_creation_save_character_alt";
  363. tooltip_text = "#layout_character_creation_save_tooltip";
  364. break;
  365. }
  366. SetTooltipTexts(w, tooltip_header, tooltip_text);
  367. return true;
  368. }
  369. SetTooltipTexts(w);
  370. return false;
  371. }
  372. override bool OnFocusLost(Widget w, int x, int y)
  373. {
  374. if (IsFocusable(w))
  375. {
  376. ColorNormal(w);
  377. return true;
  378. }
  379. return false;
  380. }
  381. bool IsFocusable(Widget w)
  382. {
  383. if (w)
  384. {
  385. return (w == m_Apply || w == m_Save || w == m_RandomizeCharacter || w == m_BackButton);
  386. }
  387. return false;
  388. }
  389. void SetTooltipTexts(Widget w, string header = "", string desc = "")
  390. {
  391. #ifndef PLATFORM_CONSOLE
  392. bool show = header != "" && desc != "";
  393. m_DetailsRoot.Show(show);
  394. m_DetailsLabel.SetText(header);
  395. m_DetailsText.SetText(desc);
  396. //moves the widget to parent, setting is relative to widget alignment, case-specific implementation (getter missing!!!)
  397. if (show)
  398. {
  399. float parent_pos_x, parent_pos_y;
  400. float parent_size_x, parent_size_y;
  401. float layout_size_x, layout_size_y;
  402. w.GetScreenPos(parent_pos_x,parent_pos_y);
  403. w.GetScreenSize(parent_size_x,parent_size_y);
  404. layoutRoot.GetScreenSize(layout_size_x,layout_size_y);
  405. float set_x = layout_size_x - parent_pos_x;
  406. float set_y = layout_size_y - parent_pos_y - parent_size_y;
  407. m_DetailsRoot.SetPos(set_x,set_y,true);
  408. }
  409. m_DetailsText.Update();
  410. m_DetailsLabel.Update();
  411. m_DetailsRoot.Update();
  412. #endif
  413. }
  414. void CheckNewOptions()
  415. {
  416. bool show_widgets = m_Scene.GetIntroCharacter().IsDefaultCharacter();
  417. layoutRoot.FindAnyWidget("character_gender_button").Show(show_widgets);
  418. layoutRoot.FindAnyWidget("character_head_button").Show(show_widgets);
  419. layoutRoot.FindAnyWidget("character_top_button").Show(show_widgets);
  420. layoutRoot.FindAnyWidget("character_bottom_button").Show(show_widgets);
  421. layoutRoot.FindAnyWidget("character_shoes_button").Show(show_widgets);
  422. if (show_widgets)
  423. {
  424. m_GenderSelector.Focus();
  425. }
  426. else
  427. {
  428. SetFocus(m_RandomizeCharacter);
  429. }
  430. }
  431. override void OnShow()
  432. {
  433. #ifdef PLATFORM_CONSOLE
  434. m_GenderSelector.Focus();
  435. OnInputDeviceChanged(GetGame().GetInput().GetCurrentInputDevice());
  436. #endif
  437. CheckNewOptions();
  438. }
  439. override void Refresh()
  440. {
  441. string name;
  442. #ifdef PLATFORM_CONSOLE
  443. if (GetGame().GetUserManager() && GetGame().GetUserManager().GetSelectedUser())
  444. {
  445. name = GetGame().GetUserManager().GetSelectedUser().GetName();
  446. if (name.LengthUtf8() > 16)
  447. {
  448. name = name.SubstringUtf8(0, 16);
  449. name += "...";
  450. }
  451. }
  452. #else
  453. name = m_Scene.GetIntroCharacter().GetCharacterName();
  454. if (name == "")
  455. name = GameConstants.DEFAULT_CHARACTER_NAME;
  456. #endif
  457. m_NameSelector.SetValue(name);
  458. string version;
  459. GetGame().GetVersion(version);
  460. #ifdef PLATFORM_CONSOLE
  461. version = "#main_menu_version" + " " + version + " (" + g_Game.GetDatabaseID() + ")";
  462. m_Apply.Show(m_CharacterSaved || !m_Scene.GetIntroCharacter().IsDefaultCharacter());
  463. m_Save.Show(!m_CharacterSaved && m_Scene.GetIntroCharacter().IsDefaultCharacter());
  464. #else
  465. version = "#main_menu_version" + " " + version;
  466. m_Apply.Show(!m_Scene.GetIntroCharacter().IsDefaultCharacter());
  467. m_Save.Show(m_Scene.GetIntroCharacter().IsDefaultCharacter());
  468. #endif
  469. m_PlayedCharacterInfo.Show(!m_Scene.GetIntroCharacter().IsDefaultCharacter());
  470. if (m_Scene.GetIntroCharacter().IsDefaultCharacter())
  471. {
  472. m_CharacterHeaderText.SetText("#character_menu_header");
  473. }
  474. else
  475. {
  476. m_CharacterHeaderText.SetText("#server_browser_prev_play_filter");
  477. }
  478. m_Version.SetText(version);
  479. #ifdef PLATFORM_CONSOLE
  480. UpdateControlsElements();
  481. UpdateControlsElementVisibility();
  482. #endif
  483. }
  484. override void Update(float timeslice)
  485. {
  486. if (GetUApi().GetInputByID(UAUIBack).LocalPress())
  487. {
  488. Back();
  489. }
  490. if (GetUApi().GetInputByID(UAUICtrlX).LocalPress())
  491. {
  492. RandomizeCharacter();
  493. }
  494. if (GetUApi().GetInputByID(UAUIRight).LocalPress())
  495. {
  496. NextOption();
  497. }
  498. if (GetUApi().GetInputByID(UAUILeft).LocalPress())
  499. {
  500. PreviousOption();
  501. }
  502. #ifdef PLATFORM_CONSOLE
  503. if (GetUApi().GetInputByID(UAUICtrlY).LocalPress())
  504. {
  505. if (m_Scene.GetIntroCharacter().IsDefaultCharacter() && !m_CharacterSaved)
  506. {
  507. Save();
  508. }
  509. }
  510. #endif
  511. }
  512. protected void NextOption()
  513. {
  514. Widget w = GetFocus();
  515. if (!w)
  516. return;
  517. OptionSelectorMultistateCharacterMenu optionSelector = m_MultiOptionSelectors[w];
  518. if (optionSelector)
  519. optionSelector.SetNextOption();
  520. }
  521. protected void PreviousOption()
  522. {
  523. Widget w = GetFocus();
  524. if (!w)
  525. return;
  526. OptionSelectorMultistateCharacterMenu optionSelector = m_MultiOptionSelectors[w];
  527. if (optionSelector)
  528. optionSelector.SetPrevOption();
  529. }
  530. override void OnHide()
  531. {
  532. }
  533. //Coloring functions (Until WidgetStyles are useful)
  534. void ColorHighlight(Widget w)
  535. {
  536. if (w.IsInherited(ButtonWidget))
  537. {
  538. ButtonWidget button = ButtonWidget.Cast(w);
  539. button.SetTextColor(ARGB(255, 200, 0, 0));
  540. }
  541. w.SetColor(ARGB(255, 0, 0, 0));
  542. TextWidget text1 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text"));
  543. TextWidget text2 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_label"));
  544. TextWidget text3 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text_1"));
  545. ImageWidget image = ImageWidget.Cast(w.FindAnyWidget(w.GetName() + "_image"));
  546. Widget option = Widget.Cast(w.FindAnyWidget(w.GetName() + "_option_wrapper"));
  547. Widget option_label = w.FindAnyWidget("option_label");
  548. if (text1)
  549. {
  550. text1.SetColor(ARGB(255, 255, 0, 0));
  551. }
  552. if (text2)
  553. {
  554. text2.SetColor(ARGB(255, 255, 0, 0));
  555. }
  556. if (text3)
  557. {
  558. text3.SetColor(ARGB(255, 255, 0, 0));
  559. w.SetAlpha(1);
  560. }
  561. if (image)
  562. {
  563. image.SetColor(ARGB(255, 200, 0, 0));
  564. }
  565. if (option)
  566. {
  567. option.SetColor(ARGB(255, 255, 0, 0));
  568. }
  569. #ifndef PLATFORM_CONSOLE
  570. if (option_label)
  571. {
  572. option_label.SetColor(ARGB(255, 255, 0, 0));
  573. }
  574. #endif
  575. }
  576. void ColorNormal(Widget w)
  577. {
  578. if (w.IsInherited(ButtonWidget))
  579. {
  580. ButtonWidget button = ButtonWidget.Cast(w);
  581. button.SetTextColor(ColorManager.COLOR_NORMAL_TEXT);
  582. }
  583. TextWidget text1 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text"));
  584. TextWidget text2 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text_1"));
  585. TextWidget text3 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_label"));
  586. ImageWidget image = ImageWidget.Cast(w.FindAnyWidget(w.GetName() + "_image"));
  587. Widget option = w.FindAnyWidget(w.GetName() + "_option_wrapper");
  588. Widget option_label = w.FindAnyWidget("option_label");
  589. if (text1)
  590. {
  591. text1.SetColor(ColorManager.COLOR_NORMAL_TEXT);
  592. }
  593. if (text2)
  594. {
  595. text2.SetColor(ColorManager.COLOR_NORMAL_TEXT);
  596. }
  597. if (text3)
  598. {
  599. text3.SetColor(ColorManager.COLOR_NORMAL_TEXT);
  600. w.SetAlpha(0);
  601. }
  602. if (image)
  603. {
  604. image.SetColor(ColorManager.COLOR_NORMAL_TEXT);
  605. }
  606. if (option)
  607. {
  608. option.SetColor(ARGB(150, 255, 255, 255));
  609. }
  610. #ifndef PLATFORM_CONSOLE
  611. if (option_label)
  612. {
  613. option_label.SetColor(ColorManager.COLOR_NORMAL_TEXT);
  614. }
  615. #endif
  616. }
  617. void ColorDisable(Widget w)
  618. {
  619. #ifndef PLATFORM_CONSOLE
  620. SetFocus(null);
  621. #endif
  622. if (w)
  623. {
  624. ButtonWidget button = ButtonWidget.Cast(w);
  625. if (button)
  626. {
  627. button.SetTextColor(ColorManager.COLOR_DISABLED_TEXT);
  628. }
  629. }
  630. TextWidget text1 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text"));
  631. TextWidget text2 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_label"));
  632. TextWidget text3 = TextWidget.Cast(w.FindAnyWidget(w.GetName() + "_text_1"));
  633. ImageWidget image = ImageWidget.Cast(w.FindAnyWidget(w.GetName() + "_image"));
  634. Widget option = Widget.Cast(w.FindAnyWidget(w.GetName() + "_option_wrapper"));
  635. Widget option_label = w.FindAnyWidget("option_label");
  636. if (text1)
  637. {
  638. text1.SetColor(ColorManager.COLOR_DISABLED_TEXT);
  639. }
  640. if (text2)
  641. {
  642. text2.SetColor(ColorManager.COLOR_DISABLED_TEXT);
  643. }
  644. if (text3)
  645. {
  646. text3.SetColor(ColorManager.COLOR_DISABLED_TEXT);
  647. w.SetAlpha(1);
  648. }
  649. if (image)
  650. {
  651. image.SetColor(ColorManager.COLOR_DISABLED_TEXT);
  652. }
  653. if (option)
  654. {
  655. option.SetColor(ColorManager.COLOR_DISABLED_TEXT);
  656. }
  657. #ifndef PLATFORM_CONSOLE
  658. if (option_label)
  659. {
  660. option_label.SetColor(ColorManager.COLOR_DISABLED_TEXT);
  661. }
  662. #endif
  663. }
  664. void SetCharacterSaved(bool state)
  665. {
  666. #ifdef PLATFORM_CONSOLE
  667. m_CharacterSaved = state;
  668. Refresh();
  669. #endif
  670. }
  671. protected void UpdateControlsElements()
  672. {
  673. #ifdef PLATFORM_CONSOLE
  674. RichTextWidget toolbar_text = RichTextWidget.Cast(layoutRoot.FindAnyWidget("ContextToolbarText"));
  675. string text = "";
  676. if (!m_CharacterSaved && m_Scene.GetIntroCharacter().IsDefaultCharacter()) //can be saved..
  677. {
  678. text += string.Format(" %1",InputUtils.GetRichtextButtonIconFromInputAction("UAUICtrlY", "#layout_character_creation_save_character_alt", EUAINPUT_DEVICE_CONTROLLER, InputUtils.ICON_SCALE_TOOLBAR));
  679. }
  680. text += string.Format(" %1",InputUtils.GetRichtextButtonIconFromInputAction("UAUICtrlX", "#layout_character_creation_toolbar_randomize", EUAINPUT_DEVICE_CONTROLLER, InputUtils.ICON_SCALE_TOOLBAR));
  681. if (m_Scene.GetIntroCharacter().IsDefaultCharacter()) //edit options available
  682. {
  683. #ifdef PLATFORM_PS4
  684. string result = string.Format("<image set=\"%1\" name=\"%2\" scale=\"%3\" />", "playstation_buttons", "DPAD_left_short", 1.92);
  685. string result2 = string.Format("<image set=\"%1\" name=\"%2\" scale=\"%3\" />", "playstation_buttons", "DPAD_right_short", 1.92);
  686. #else
  687. string result = string.Format("<image set=\"%1\" name=\"%2\" scale=\"%3\" />", "xbox_buttons", "DPAD_left_short", 1.92);
  688. string result2 = string.Format("<image set=\"%1\" name=\"%2\" scale=\"%3\" />", "xbox_buttons", "DPAD_right_short", 1.92);
  689. #endif
  690. text += string.Format(" %1%2 %3", result, result2, "#layout_character_creation_toolbar_select");
  691. }
  692. text += string.Format(" %1",InputUtils.GetRichtextButtonIconFromInputAction("UAUIBack", "#layout_character_creation_toolbar_back", EUAINPUT_DEVICE_CONTROLLER, InputUtils.ICON_SCALE_TOOLBAR));
  693. toolbar_text.SetText(text);
  694. RichTextWidget toolbar_b2 = RichTextWidget.Cast(layoutRoot.FindAnyWidget("BackIcon0"));
  695. RichTextWidget toolbar_x2 = RichTextWidget.Cast(layoutRoot.FindAnyWidget("RandomizeIcon0"));
  696. RichTextWidget toolbar_y2 = RichTextWidget.Cast(layoutRoot.FindAnyWidget("SaveIcon0"));
  697. RichTextWidget toolbar_y2_2 = RichTextWidget.Cast(layoutRoot.FindAnyWidget("ApplyIcon0"));
  698. string saveTextIcon = InputUtils.GetRichtextButtonIconFromInputAction("UAUICtrlY", "", EUAINPUT_DEVICE_CONTROLLER);
  699. toolbar_b2.SetText(InputUtils.GetRichtextButtonIconFromInputAction("UAUIBack", "", EUAINPUT_DEVICE_CONTROLLER));
  700. toolbar_x2.SetText(InputUtils.GetRichtextButtonIconFromInputAction("UAUICtrlX", "", EUAINPUT_DEVICE_CONTROLLER));
  701. toolbar_y2.SetText(saveTextIcon);
  702. toolbar_y2_2.SetText(saveTextIcon);
  703. #endif
  704. }
  705. protected void UpdateControlsElementVisibility()
  706. {
  707. #ifdef PLATFORM_CONSOLE
  708. bool toolbarShow = !GetGame().GetInput().IsEnabledMouseAndKeyboard() || GetGame().GetInput().GetCurrentInputDevice() == EInputDeviceType.CONTROLLER;
  709. layoutRoot.FindAnyWidget("toolbar_bg").Show(toolbarShow);
  710. layoutRoot.FindAnyWidget("play_panel_root").Show(!toolbarShow);
  711. #endif
  712. }
  713. }