sir_pinski

Untitled

Jun 26th, 2024
283
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 14.71 KB | None | 0 0
  1. package com.leveluplabs.tdrpg;
  2.  
  3. import firetongue.Replace;
  4. import flixel.addons.ui.FlxUIButton;
  5. import flixel.addons.ui.FlxUISprite;
  6. import flixel.addons.ui.FlxUITypedButton;
  7. import flixel.addons.ui.FlxUIText;
  8. import flixel.addons.ui.FlxUITypedButton;
  9. import flixel.addons.ui.FontDef;
  10. import flixel.addons.ui.U;
  11. import flixel.FlxG;
  12. import flixel.FlxObject;
  13. import flixel.FlxSprite;
  14. import flixel.addons.ui.interfaces.IFlxUIButton;
  15. import flixel.addons.ui.interfaces.IFlxUIWidget;
  16. import flixel.group.FlxGroup;
  17. import flixel.group.FlxSpriteGroup;
  18. import flixel.input.actions.FlxAction.FlxActionDigital;
  19. import flixel.text.FlxText;
  20. import flixel.ui.FlxButton;
  21. import flixel.util.FlxArrayUtil;
  22. import flixel.util.FlxColor;
  23. import flixel.util.FlxDestroyUtil;
  24. import haxe.xml.Fast;
  25. import openfl.display.BitmapData;
  26. import openfl.net.URLRequest;
  27. import openfl.geom.Point;
  28. import openfl.Lib;
  29.  
  30. /**
  31. * ...
  32. * @author Lars A. Doucet
  33. */
  34.  
  35. class State_Credits extends TDRPGState
  36. {
  37. private static inline var SCREEN_TIME:Float = 15;
  38. private static inline var SPEED:Float = (600/SCREEN_TIME);
  39.  
  40. private var time:Float = 0;
  41. private var YY:Float = 0;
  42. private var max_time:Float = 0;
  43.  
  44. private var dorkscroll:FlxObject;
  45.  
  46. private var group:FlxSpriteGroup;
  47. private var group_fade:FlxSpriteGroup;
  48.  
  49. private var btn_exit:FlxUIButton;
  50.  
  51. private var web_color:FlxColor= 0x0088ff;
  52. private var web_color_2:FlxColor = 0x0ffff;
  53.  
  54. private var flip_mouse:Bool = false;
  55.  
  56. private var list_fade_params:Array<StructStringPoint> = [];
  57. private var list_fadeout_params:Array<StructStringPoint> = [];
  58.  
  59. private var fade_finished:Bool = false;
  60.  
  61. private var endingMusic:Bool = true;
  62. private var specificMusic:String = "m29_credits";
  63.  
  64. private var _specialCase:Bool = false;
  65. private var _specialCode:String = "";
  66.  
  67. public function new (ending_music:Bool=false,specific_music:String="")
  68. {
  69. endingMusic = ending_music;
  70. specificMusic = specific_music;
  71. super();
  72. actionSet = "MenuControls";
  73. }
  74.  
  75. public function setSpecialCase(specialCase:Bool, specialCode:String) {
  76. _specialCase = specialCase;
  77. _specialCode = specialCode;
  78. }
  79.  
  80. public override function create():Void
  81. {
  82. _xml_id = "ui/state_credits";
  83. super.create();
  84.  
  85. setup();
  86. }
  87.  
  88. override public function onActionDigital(action:FlxActionDigital):Void
  89. {
  90. super.onActionDigital(action);
  91. if (action.name == "menu_cancel")
  92. {
  93. onExit();
  94. }
  95. }
  96.  
  97. private function onClick():Void {
  98. //Main.OMNI.gameProgress.watchedCutscene(_scene);
  99. //FlxG.switchState(new State_Transition());
  100.  
  101. //TODO: do better ending wrap-up stuff
  102.  
  103. FlxG.switchState(new State_Title());
  104. }
  105.  
  106. override public function destroy():Void
  107. {
  108. dorkscroll = null;
  109. group = null;
  110. group_fade = null;
  111. btn_exit = null;
  112. FlxArrayUtil.clearArray(list_fade_params);
  113. FlxArrayUtil.clearArray(list_fadeout_params);
  114. list_fade_params = null;
  115. list_fadeout_params = null;
  116. super.destroy();
  117. }
  118.  
  119. private function setup():Void
  120. {
  121. _bakeCredits();
  122.  
  123. var music:String = specificMusic;
  124.  
  125. var black:FlxUISprite = cast _ui.getAsset("black");
  126. var skip:IFlxUIWidget = _ui.getAsset("skip");
  127. var ww:Int = Std.int((FlxG.width - skip.x) + UU.pt600(2));
  128. var hh:Int = Std.int((FlxG.height - skip.y) + UU.pt600(2));
  129. black.scale.set(ww, hh);
  130. black.updateHitbox();
  131. black.x = FlxG.width - black.width;
  132. black.y = FlxG.height - black.height;
  133.  
  134. if (endingMusic && specificMusic == "")
  135. {
  136. music = "m29_credits";
  137. }
  138.  
  139. trace("State_Credits music = " + music);
  140.  
  141. if (music != "")
  142. {
  143. Main.sound_mgr.prepareMusic(music, true, null);
  144. }
  145.  
  146. Main.refreshMouse();
  147. }
  148.  
  149. override public function getEvent(id:String, sender:Dynamic, data:Dynamic, ?params:Array<Dynamic>):Void
  150. {
  151. super.getEvent(id, sender, data, params);
  152. if (id == FlxUITypedButton.CLICK_EVENT)
  153. {
  154. if (params != null && params.indexOf("skip") != -1)
  155. {
  156. onExit();
  157. }
  158. }
  159. }
  160.  
  161. private function onExit():Void {
  162. /*
  163. if (Main.SHOW_EPILOGUE_NEXT)
  164. {
  165. //Main.SHOW_EPILOGUE_NEXT = false;
  166. //Main.showCutscene("epilogue");
  167. }
  168. else
  169. */
  170. if (_specialCase == true) {
  171. Main.doSpecialCode(_specialCode);
  172. }
  173. else
  174. {
  175. FlxG.switchState(new State_Title());
  176. }
  177. }
  178.  
  179. public override function update(elapsed:Float):Void
  180. {
  181. super.update(elapsed);
  182. time += elapsed;
  183.  
  184. group.y = Std.int(dorkscroll.y);
  185.  
  186. if (time > 0.25 && !flip_mouse)
  187. {
  188. flip_mouse = true;
  189. Main.refreshMouse();
  190. }
  191.  
  192. if (!fade_finished)
  193. {
  194. if (time > max_time)
  195. {
  196. var fade_time:Float = time - max_time;
  197.  
  198. var diff_time:Float = 0;
  199. var alph:Float = 0;
  200.  
  201. var i = 0;
  202. var count_pass = 0;
  203. for (spt in list_fade_params)
  204. {
  205. if (fade_time >= spt.pt.x)
  206. {
  207. //"wait" time
  208. if (fade_time <= spt.pt.x + spt.pt.y + 1)
  209. {
  210. diff_time = (fade_time - spt.pt.x) / spt.pt.y; //get progress
  211.  
  212. if (diff_time > 1) diff_time = 1;
  213. if (diff_time < 0) diff_time = 0;
  214.  
  215. alph = diff_time;
  216.  
  217. var fo:FlxObject = group_fade.members[i] ;
  218.  
  219. (group_fade.members[i]).visible = true;
  220. (group_fade.members[i]).alpha = alph;
  221. }
  222. else
  223. {
  224. count_pass++;
  225. }
  226. }
  227.  
  228. var fspt = list_fadeout_params[i];
  229. if (fspt != null)
  230. {
  231. var wait_before_fade:Float = spt.pt.x + spt.pt.y + fspt.pt.x;
  232. var time_after_fade:Float = wait_before_fade + fspt.pt.y;
  233. if (fade_time >= wait_before_fade) { //wait time
  234. if (fade_time <= time_after_fade + 1) {
  235. diff_time = (fade_time - wait_before_fade) / fspt.pt.y; //get progress
  236. if (diff_time > 1) diff_time = 1;
  237. if (diff_time < 0) diff_time = 0;
  238.  
  239. alph = 1 - diff_time;
  240.  
  241. var fo = group_fade.members[i];
  242.  
  243. fo.alpha = alph;
  244. if (alph <= 0)
  245. {
  246. fo.visible = false;
  247. }
  248. }
  249.  
  250. }else {
  251. count_pass++;
  252. }
  253. }else {
  254. count_pass++;
  255. }
  256.  
  257. i++;
  258. }
  259.  
  260. if (count_pass >= list_fade_params.length+list_fadeout_params.length) {
  261. fade_finished = true;
  262. }
  263. }
  264. }
  265. }
  266.  
  267.  
  268. private function onButt(str:String):Void {
  269. /*
  270. //CONFIG::swfstats
  271. {
  272. if (UI_InGameMenu.TRACKING)
  273. {
  274. Link.Open(f.id, "ClickedCreditsLink", "Misc", false, "_blank", false);
  275. }
  276. }
  277. */
  278.  
  279. //if (CONFIG::swfstats == false || UI_InGameMenu.TRACKING == false)
  280. //{
  281. var url:URLRequest = new URLRequest(str);
  282. Lib.getURL(url, "_blank");
  283. //}
  284.  
  285. }
  286.  
  287. private var _pt:Float = FlxG.height / 600;
  288. private function pt(x:Float):Int
  289. {
  290. return Std.int(x * _pt);
  291. }
  292.  
  293. private function _bakeCredits():Void
  294. {
  295. var text_heading:FlxUIText = cast _ui.getAsset("text_heading");
  296. var text_regular:FlxUIText = cast _ui.getAsset("text_regular");
  297. //var text_small:FlxUIText = cast _ui.getAsset("text_small");
  298.  
  299. var headDef:FontDef = FontDef.copyFromFlxText(text_heading);
  300. var regDef:FontDef = FontDef.copyFromFlxText(text_regular);
  301. var btnDef:FontDef = regDef.clone();
  302. //var smallDef:FontDef = FontDef.copyFromFlxText(text_small);
  303.  
  304. _ui.removeAsset("text_heading");
  305. _ui.removeAsset("text_regular");
  306.  
  307. var flags:Array<String> = ["$N"];
  308. var values:Array<String> = ["\n"];
  309.  
  310. group = new FlxSpriteGroup();
  311. add(group);
  312.  
  313. group_fade = new FlxSpriteGroup();
  314. add(group_fade);
  315.  
  316. trace("State_Credits._bakeCredits()");
  317. var xml:Fast = U.xml("credits");
  318. trace("xml = " + xml);
  319.  
  320. var text:FlxText;
  321.  
  322. var Y_TITLE:Float = pt(35);
  323. var Y_TEXT:Float = pt(22);
  324. var Y_SPACE:Float = pt(45);
  325.  
  326. var YY_ALT:Float = 0;
  327. var Y_OFF:Float = 0;
  328.  
  329. YY = FlxG.height;
  330.  
  331. dorkscroll = new FlxObject();
  332. add(dorkscroll);
  333. dorkscroll.velocity.y = pt(SPEED) * -1;
  334.  
  335. for (xx in xml.nodes.credit)
  336. {
  337. var title:String = "";
  338. var txt:String = "";
  339.  
  340. if (xx.hasNode.title)
  341. {
  342. title = U.xml_str(xx.node.title.x, "value");// xx.title.@value;
  343. }
  344.  
  345. var size:String = U.xml_str(xx.x, "size");// xx.attribute("size");
  346.  
  347. var columns:Bool = U.xml_bool(xx.x, "columnview"); // xx.attribute("columnview") == "true";
  348. var twoColumns:Bool = U.xml_bool(xx.x, "twocolumnview"); // xx.attribute("twocolumnview") == "true";
  349.  
  350. var size_title:Int;
  351. var size_text:Int;
  352.  
  353. var titlestr:String="";
  354. var textstr:String="";
  355.  
  356. switch(size)
  357. {
  358. case "tiny": headDef.size = pt(18);
  359. regDef.size = pt(12);
  360. Y_TEXT = pt(16);
  361. case "small": headDef.size = pt(20);
  362. regDef.size = pt(14);
  363. Y_TEXT = pt(18);
  364. case "medium": headDef.size = pt(22);
  365. regDef.size = pt(16);
  366. Y_TEXT = pt(20);
  367. case "large": headDef.size = pt(32);
  368. regDef.size = pt(20);
  369. Y_TEXT = pt(30);
  370. case "huge": headDef.size = pt(40);
  371. regDef.size = pt(24);
  372. Y_TEXT = pt(38);
  373. default: headDef.size = pt(24);
  374. regDef.size = pt(18);
  375. }
  376.  
  377. title = UU.replaceFlags(title, flags, values);
  378. text = new FlxUIText(0, YY, FlxG.width, title);
  379.  
  380. headDef.apply(text);
  381.  
  382. var is_fade:Bool = U.xml_bool(xx.x, "end_fade");// xx.attribute("end_fade") == "true";
  383.  
  384. Y_OFF = 0;
  385. if (xx.hasNode.title)
  386. {
  387. Y_OFF = pt(U.xml_i(xx.node.title.x, "y_off"));// xx.title.attribute("y_off");
  388. }
  389.  
  390. if (!is_fade)
  391. {
  392. group.add(text);
  393. YY += Y_TITLE;
  394. }
  395. else
  396. {
  397. text.y = YY_ALT + Y_OFF;
  398.  
  399. var spt = new StructStringPoint("",new Point());
  400. spt.pt.x = U.xml_f(xx.x, "wait");// xx.attribute("wait");
  401. spt.pt.y = U.xml_f(xx.x, "time");// xx.attribute("time");
  402. var fold:String="";
  403. var img:String = "";
  404. if (xx.hasNode.img)
  405. {
  406. fold = U.xml_str(xx.node.img.x, "folder");// xx.img.@folder;
  407. img = U.xml_str(xx.node.img.x, "value");// xx.img.@value;
  408. }
  409. list_fade_params.push(spt);
  410.  
  411. if (fold != "" && img != "")
  412. {
  413. var fs:FlxSprite=null;
  414. try
  415. {
  416. var gfx = U.loadMonoScaledImage(U.gfx(img, fold), (FlxG.height / 1200), true);
  417. fs = new FlxSprite(gfx);
  418. }
  419. catch (msg:String)
  420. {
  421. //whatevs
  422. }
  423.  
  424. if (fs != null)
  425. {
  426. fs.x = (FlxG.width - fs.width) / 2;
  427. Y_OFF = pt(U.xml_i(xx.node.img.x, "y_off"));// xx.img.attribute("y_off");
  428. fs.y = YY_ALT + Y_OFF;
  429. group_fade.add(fs);
  430. fs.visible = false;
  431. }
  432. }
  433. else
  434. {
  435. group_fade.add(text);
  436. text.visible = false;
  437. }
  438.  
  439. spt = new StructStringPoint("", new Point());
  440. var str:String = U.xml_str(xx.x, "wait_out");// xx.attribute("wait_out");
  441. if (str != "")
  442. {
  443. spt.pt.x = U.xml_i(xx.x, "wait_out");// xx.attribute("wait_out");
  444. spt.pt.y = U.xml_i(xx.x, "time_out");// xx.attribute("time_out");
  445. list_fadeout_params.push(spt);
  446. }
  447. else
  448. {
  449. list_fadeout_params.push(null);
  450. }
  451. }
  452.  
  453. if (columns) // Parse into 3 columns. We currently do not support websites in column mode.
  454. {
  455. var lx = Std.int(FlxG.width - pt(800)) / 2;
  456.  
  457. var textleft:FlxUIText = new FlxUIText(lx, YY, pt(250), txt);
  458. if (is_fade)
  459. {
  460. textleft.y = YY_ALT + Y_OFF;
  461. }
  462. regDef.apply(textleft);
  463. group.add(textleft);
  464.  
  465. var textcenter:FlxUIText = new FlxUIText(lx+pt(250), YY, pt(300), txt);
  466. if (is_fade)
  467. {
  468. textcenter.y = YY_ALT + Y_OFF;
  469. }
  470. regDef.apply(textcenter);
  471. group.add(textcenter);
  472.  
  473. var textright:FlxUIText = new FlxUIText(lx+pt(550), YY, pt(250), txt);
  474. if (is_fade)
  475. {
  476. textright.y = YY_ALT + Y_OFF;
  477. }
  478. regDef.apply(textright);
  479. group.add(textright);
  480.  
  481. var columncounter:Int = Std.int(pt(2));
  482.  
  483. for (xxx in xx.nodes.text)
  484. {
  485. columncounter = (columncounter + 1) % 3;
  486.  
  487. if (columncounter == 0)
  488. {
  489. var txtleft:String = U.xml_str(xxx.x, "value");// xxx.@value;
  490. textleft.text += txtleft + "\n";
  491. YY += Y_TEXT;
  492. }
  493.  
  494. if (columncounter == 1)
  495. {
  496. var txtcenter:String = U.xml_str(xxx.x, "value");// xxx.@value;
  497. textcenter.text += txtcenter + "\n";
  498. }
  499.  
  500. if (columncounter == 2)
  501. {
  502. var txtright:String = U.xml_str(xxx.x, "value");// xxx.@value;
  503. textright.text += txtright + "\n";
  504. }
  505.  
  506. }
  507.  
  508. if (!is_fade)
  509. {
  510. YY += Y_SPACE;
  511. }
  512. }
  513. else if (twoColumns)
  514. {
  515. var lx = Std.int(FlxG.width - pt(800)) / 2;
  516.  
  517. var textleft:FlxUIText = new FlxUIText(lx, YY, pt(400), txt);
  518. if (is_fade)
  519. {
  520. textleft.y = YY_ALT + Y_OFF;
  521. }
  522. regDef.apply(textleft);
  523. group.add(textleft);
  524.  
  525. var textright:FlxUIText = new FlxUIText(lx+pt(400), YY, pt(400), txt);
  526. if (is_fade)
  527. {
  528. textright.y = YY_ALT + Y_OFF;
  529. }
  530. regDef.apply(textright);
  531. group.add(textright);
  532.  
  533. var columncounter:Int = Std.int(pt(1));
  534.  
  535. for (xxx in xx.nodes.text)
  536. {
  537. columncounter = (columncounter + 1) % 2;
  538.  
  539. if (columncounter == 0)
  540. {
  541. var txtleft:String = U.xml_str(xxx.x, "value");// xxx.@value;
  542. textleft.text += txtleft + "\n";
  543. YY += Y_TEXT;
  544. }
  545.  
  546. if (columncounter == 1)
  547. {
  548. var txtright:String = U.xml_str(xxx.x, "value");// xxx.@value;
  549. textright.text += txtright + "\n";
  550. }
  551.  
  552. }
  553.  
  554. if (!is_fade)
  555. {
  556. YY += Y_SPACE;
  557. }
  558. }
  559. else
  560. {
  561. text = new FlxUIText(0, YY, FlxG.width, txt);
  562. if (is_fade)
  563. {
  564. text.y = YY_ALT + Y_OFF;
  565. }
  566. regDef.apply(text);
  567. group.add(text);
  568.  
  569. for (xxx in xx.nodes.text)
  570. {
  571. txt = "";
  572. var website:String = U.xml_str(xxx.x, "website");// xxx.@website;
  573. if (website == "")
  574. {
  575. txt = U.xml_str(xxx.x, "value");// xxx.@value;
  576. text.text += txt + "\n";
  577. }
  578. else
  579. {
  580. var url:String = U.xml_str(xxx.x, "url");// xxx.@url;
  581.  
  582. if (FlxG.bitmap.checkCache("black_bkg") == false)
  583. {
  584. FlxG.bitmap.add(new BitmapData(pt(350), pt(18), false, 0x000000),true,"black_bkg");
  585. }
  586.  
  587. var butt:FlxUIButton = new FlxUIButton(0, YY-pt(2), website, onButt.bind(url), false);
  588. butt.loadGraphic("black_bkg");
  589. if (is_fade)
  590. {
  591. butt.y = YY_ALT + Y_OFF;
  592. }
  593. var ft:FlxText = cast butt.label;
  594. btnDef.size = pt(18);
  595. btnDef.format.color = web_color;
  596.  
  597. btnDef.apply(ft);
  598.  
  599. butt.setCenterLabelOffset(0, 0);
  600. butt.over_color = web_color_2;
  601. butt.up_color = web_color;
  602. butt.down_color = web_color;
  603.  
  604. butt.x = Std.int((FlxG.width - butt.width) / 2);
  605. group.add(butt);
  606. butt.name = url;
  607. text.text += "\n";
  608. }
  609.  
  610. if (!is_fade)
  611. {
  612. YY += Y_TEXT;
  613. }
  614. }
  615.  
  616. if (!is_fade)
  617. {
  618. YY += Y_SPACE;
  619. }
  620. }
  621. }
  622.  
  623. max_time = YY / SPEED;
  624.  
  625. remove(_ui, true);
  626. add(_ui);
  627. }
  628.  
  629. public function cx(width:Float):Int
  630. {
  631. return Std.int((FlxG.width - (width)) / 2);
  632. }
  633. }
Advertisement
Add Comment
Please, Sign In to add comment