Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.leveluplabs.tdrpg;
- import firetongue.Replace;
- import flixel.addons.ui.FlxUIButton;
- import flixel.addons.ui.FlxUISprite;
- import flixel.addons.ui.FlxUITypedButton;
- import flixel.addons.ui.FlxUIText;
- import flixel.addons.ui.FlxUITypedButton;
- import flixel.addons.ui.FontDef;
- import flixel.addons.ui.U;
- import flixel.FlxG;
- import flixel.FlxObject;
- import flixel.FlxSprite;
- import flixel.addons.ui.interfaces.IFlxUIButton;
- import flixel.addons.ui.interfaces.IFlxUIWidget;
- import flixel.group.FlxGroup;
- import flixel.group.FlxSpriteGroup;
- import flixel.input.actions.FlxAction.FlxActionDigital;
- import flixel.text.FlxText;
- import flixel.ui.FlxButton;
- import flixel.util.FlxArrayUtil;
- import flixel.util.FlxColor;
- import flixel.util.FlxDestroyUtil;
- import haxe.xml.Fast;
- import openfl.display.BitmapData;
- import openfl.net.URLRequest;
- import openfl.geom.Point;
- import openfl.Lib;
- /**
- * ...
- * @author Lars A. Doucet
- */
- class State_Credits extends TDRPGState
- {
- private static inline var SCREEN_TIME:Float = 15;
- private static inline var SPEED:Float = (600/SCREEN_TIME);
- private var time:Float = 0;
- private var YY:Float = 0;
- private var max_time:Float = 0;
- private var dorkscroll:FlxObject;
- private var group:FlxSpriteGroup;
- private var group_fade:FlxSpriteGroup;
- private var btn_exit:FlxUIButton;
- private var web_color:FlxColor= 0x0088ff;
- private var web_color_2:FlxColor = 0x0ffff;
- private var flip_mouse:Bool = false;
- private var list_fade_params:Array<StructStringPoint> = [];
- private var list_fadeout_params:Array<StructStringPoint> = [];
- private var fade_finished:Bool = false;
- private var endingMusic:Bool = true;
- private var specificMusic:String = "m29_credits";
- private var _specialCase:Bool = false;
- private var _specialCode:String = "";
- public function new (ending_music:Bool=false,specific_music:String="")
- {
- endingMusic = ending_music;
- specificMusic = specific_music;
- super();
- actionSet = "MenuControls";
- }
- public function setSpecialCase(specialCase:Bool, specialCode:String) {
- _specialCase = specialCase;
- _specialCode = specialCode;
- }
- public override function create():Void
- {
- _xml_id = "ui/state_credits";
- super.create();
- setup();
- }
- override public function onActionDigital(action:FlxActionDigital):Void
- {
- super.onActionDigital(action);
- if (action.name == "menu_cancel")
- {
- onExit();
- }
- }
- private function onClick():Void {
- //Main.OMNI.gameProgress.watchedCutscene(_scene);
- //FlxG.switchState(new State_Transition());
- //TODO: do better ending wrap-up stuff
- FlxG.switchState(new State_Title());
- }
- override public function destroy():Void
- {
- dorkscroll = null;
- group = null;
- group_fade = null;
- btn_exit = null;
- FlxArrayUtil.clearArray(list_fade_params);
- FlxArrayUtil.clearArray(list_fadeout_params);
- list_fade_params = null;
- list_fadeout_params = null;
- super.destroy();
- }
- private function setup():Void
- {
- _bakeCredits();
- var music:String = specificMusic;
- var black:FlxUISprite = cast _ui.getAsset("black");
- var skip:IFlxUIWidget = _ui.getAsset("skip");
- var ww:Int = Std.int((FlxG.width - skip.x) + UU.pt600(2));
- var hh:Int = Std.int((FlxG.height - skip.y) + UU.pt600(2));
- black.scale.set(ww, hh);
- black.updateHitbox();
- black.x = FlxG.width - black.width;
- black.y = FlxG.height - black.height;
- if (endingMusic && specificMusic == "")
- {
- music = "m29_credits";
- }
- trace("State_Credits music = " + music);
- if (music != "")
- {
- Main.sound_mgr.prepareMusic(music, true, null);
- }
- Main.refreshMouse();
- }
- override public function getEvent(id:String, sender:Dynamic, data:Dynamic, ?params:Array<Dynamic>):Void
- {
- super.getEvent(id, sender, data, params);
- if (id == FlxUITypedButton.CLICK_EVENT)
- {
- if (params != null && params.indexOf("skip") != -1)
- {
- onExit();
- }
- }
- }
- private function onExit():Void {
- /*
- if (Main.SHOW_EPILOGUE_NEXT)
- {
- //Main.SHOW_EPILOGUE_NEXT = false;
- //Main.showCutscene("epilogue");
- }
- else
- */
- if (_specialCase == true) {
- Main.doSpecialCode(_specialCode);
- }
- else
- {
- FlxG.switchState(new State_Title());
- }
- }
- public override function update(elapsed:Float):Void
- {
- super.update(elapsed);
- time += elapsed;
- group.y = Std.int(dorkscroll.y);
- if (time > 0.25 && !flip_mouse)
- {
- flip_mouse = true;
- Main.refreshMouse();
- }
- if (!fade_finished)
- {
- if (time > max_time)
- {
- var fade_time:Float = time - max_time;
- var diff_time:Float = 0;
- var alph:Float = 0;
- var i = 0;
- var count_pass = 0;
- for (spt in list_fade_params)
- {
- if (fade_time >= spt.pt.x)
- {
- //"wait" time
- if (fade_time <= spt.pt.x + spt.pt.y + 1)
- {
- diff_time = (fade_time - spt.pt.x) / spt.pt.y; //get progress
- if (diff_time > 1) diff_time = 1;
- if (diff_time < 0) diff_time = 0;
- alph = diff_time;
- var fo:FlxObject = group_fade.members[i] ;
- (group_fade.members[i]).visible = true;
- (group_fade.members[i]).alpha = alph;
- }
- else
- {
- count_pass++;
- }
- }
- var fspt = list_fadeout_params[i];
- if (fspt != null)
- {
- var wait_before_fade:Float = spt.pt.x + spt.pt.y + fspt.pt.x;
- var time_after_fade:Float = wait_before_fade + fspt.pt.y;
- if (fade_time >= wait_before_fade) { //wait time
- if (fade_time <= time_after_fade + 1) {
- diff_time = (fade_time - wait_before_fade) / fspt.pt.y; //get progress
- if (diff_time > 1) diff_time = 1;
- if (diff_time < 0) diff_time = 0;
- alph = 1 - diff_time;
- var fo = group_fade.members[i];
- fo.alpha = alph;
- if (alph <= 0)
- {
- fo.visible = false;
- }
- }
- }else {
- count_pass++;
- }
- }else {
- count_pass++;
- }
- i++;
- }
- if (count_pass >= list_fade_params.length+list_fadeout_params.length) {
- fade_finished = true;
- }
- }
- }
- }
- private function onButt(str:String):Void {
- /*
- //CONFIG::swfstats
- {
- if (UI_InGameMenu.TRACKING)
- {
- Link.Open(f.id, "ClickedCreditsLink", "Misc", false, "_blank", false);
- }
- }
- */
- //if (CONFIG::swfstats == false || UI_InGameMenu.TRACKING == false)
- //{
- var url:URLRequest = new URLRequest(str);
- Lib.getURL(url, "_blank");
- //}
- }
- private var _pt:Float = FlxG.height / 600;
- private function pt(x:Float):Int
- {
- return Std.int(x * _pt);
- }
- private function _bakeCredits():Void
- {
- var text_heading:FlxUIText = cast _ui.getAsset("text_heading");
- var text_regular:FlxUIText = cast _ui.getAsset("text_regular");
- //var text_small:FlxUIText = cast _ui.getAsset("text_small");
- var headDef:FontDef = FontDef.copyFromFlxText(text_heading);
- var regDef:FontDef = FontDef.copyFromFlxText(text_regular);
- var btnDef:FontDef = regDef.clone();
- //var smallDef:FontDef = FontDef.copyFromFlxText(text_small);
- _ui.removeAsset("text_heading");
- _ui.removeAsset("text_regular");
- var flags:Array<String> = ["$N"];
- var values:Array<String> = ["\n"];
- group = new FlxSpriteGroup();
- add(group);
- group_fade = new FlxSpriteGroup();
- add(group_fade);
- trace("State_Credits._bakeCredits()");
- var xml:Fast = U.xml("credits");
- trace("xml = " + xml);
- var text:FlxText;
- var Y_TITLE:Float = pt(35);
- var Y_TEXT:Float = pt(22);
- var Y_SPACE:Float = pt(45);
- var YY_ALT:Float = 0;
- var Y_OFF:Float = 0;
- YY = FlxG.height;
- dorkscroll = new FlxObject();
- add(dorkscroll);
- dorkscroll.velocity.y = pt(SPEED) * -1;
- for (xx in xml.nodes.credit)
- {
- var title:String = "";
- var txt:String = "";
- if (xx.hasNode.title)
- {
- title = U.xml_str(xx.node.title.x, "value");// xx.title.@value;
- }
- var size:String = U.xml_str(xx.x, "size");// xx.attribute("size");
- var columns:Bool = U.xml_bool(xx.x, "columnview"); // xx.attribute("columnview") == "true";
- var twoColumns:Bool = U.xml_bool(xx.x, "twocolumnview"); // xx.attribute("twocolumnview") == "true";
- var size_title:Int;
- var size_text:Int;
- var titlestr:String="";
- var textstr:String="";
- switch(size)
- {
- case "tiny": headDef.size = pt(18);
- regDef.size = pt(12);
- Y_TEXT = pt(16);
- case "small": headDef.size = pt(20);
- regDef.size = pt(14);
- Y_TEXT = pt(18);
- case "medium": headDef.size = pt(22);
- regDef.size = pt(16);
- Y_TEXT = pt(20);
- case "large": headDef.size = pt(32);
- regDef.size = pt(20);
- Y_TEXT = pt(30);
- case "huge": headDef.size = pt(40);
- regDef.size = pt(24);
- Y_TEXT = pt(38);
- default: headDef.size = pt(24);
- regDef.size = pt(18);
- }
- title = UU.replaceFlags(title, flags, values);
- text = new FlxUIText(0, YY, FlxG.width, title);
- headDef.apply(text);
- var is_fade:Bool = U.xml_bool(xx.x, "end_fade");// xx.attribute("end_fade") == "true";
- Y_OFF = 0;
- if (xx.hasNode.title)
- {
- Y_OFF = pt(U.xml_i(xx.node.title.x, "y_off"));// xx.title.attribute("y_off");
- }
- if (!is_fade)
- {
- group.add(text);
- YY += Y_TITLE;
- }
- else
- {
- text.y = YY_ALT + Y_OFF;
- var spt = new StructStringPoint("",new Point());
- spt.pt.x = U.xml_f(xx.x, "wait");// xx.attribute("wait");
- spt.pt.y = U.xml_f(xx.x, "time");// xx.attribute("time");
- var fold:String="";
- var img:String = "";
- if (xx.hasNode.img)
- {
- fold = U.xml_str(xx.node.img.x, "folder");// xx.img.@folder;
- img = U.xml_str(xx.node.img.x, "value");// xx.img.@value;
- }
- list_fade_params.push(spt);
- if (fold != "" && img != "")
- {
- var fs:FlxSprite=null;
- try
- {
- var gfx = U.loadMonoScaledImage(U.gfx(img, fold), (FlxG.height / 1200), true);
- fs = new FlxSprite(gfx);
- }
- catch (msg:String)
- {
- //whatevs
- }
- if (fs != null)
- {
- fs.x = (FlxG.width - fs.width) / 2;
- Y_OFF = pt(U.xml_i(xx.node.img.x, "y_off"));// xx.img.attribute("y_off");
- fs.y = YY_ALT + Y_OFF;
- group_fade.add(fs);
- fs.visible = false;
- }
- }
- else
- {
- group_fade.add(text);
- text.visible = false;
- }
- spt = new StructStringPoint("", new Point());
- var str:String = U.xml_str(xx.x, "wait_out");// xx.attribute("wait_out");
- if (str != "")
- {
- spt.pt.x = U.xml_i(xx.x, "wait_out");// xx.attribute("wait_out");
- spt.pt.y = U.xml_i(xx.x, "time_out");// xx.attribute("time_out");
- list_fadeout_params.push(spt);
- }
- else
- {
- list_fadeout_params.push(null);
- }
- }
- if (columns) // Parse into 3 columns. We currently do not support websites in column mode.
- {
- var lx = Std.int(FlxG.width - pt(800)) / 2;
- var textleft:FlxUIText = new FlxUIText(lx, YY, pt(250), txt);
- if (is_fade)
- {
- textleft.y = YY_ALT + Y_OFF;
- }
- regDef.apply(textleft);
- group.add(textleft);
- var textcenter:FlxUIText = new FlxUIText(lx+pt(250), YY, pt(300), txt);
- if (is_fade)
- {
- textcenter.y = YY_ALT + Y_OFF;
- }
- regDef.apply(textcenter);
- group.add(textcenter);
- var textright:FlxUIText = new FlxUIText(lx+pt(550), YY, pt(250), txt);
- if (is_fade)
- {
- textright.y = YY_ALT + Y_OFF;
- }
- regDef.apply(textright);
- group.add(textright);
- var columncounter:Int = Std.int(pt(2));
- for (xxx in xx.nodes.text)
- {
- columncounter = (columncounter + 1) % 3;
- if (columncounter == 0)
- {
- var txtleft:String = U.xml_str(xxx.x, "value");// xxx.@value;
- textleft.text += txtleft + "\n";
- YY += Y_TEXT;
- }
- if (columncounter == 1)
- {
- var txtcenter:String = U.xml_str(xxx.x, "value");// xxx.@value;
- textcenter.text += txtcenter + "\n";
- }
- if (columncounter == 2)
- {
- var txtright:String = U.xml_str(xxx.x, "value");// xxx.@value;
- textright.text += txtright + "\n";
- }
- }
- if (!is_fade)
- {
- YY += Y_SPACE;
- }
- }
- else if (twoColumns)
- {
- var lx = Std.int(FlxG.width - pt(800)) / 2;
- var textleft:FlxUIText = new FlxUIText(lx, YY, pt(400), txt);
- if (is_fade)
- {
- textleft.y = YY_ALT + Y_OFF;
- }
- regDef.apply(textleft);
- group.add(textleft);
- var textright:FlxUIText = new FlxUIText(lx+pt(400), YY, pt(400), txt);
- if (is_fade)
- {
- textright.y = YY_ALT + Y_OFF;
- }
- regDef.apply(textright);
- group.add(textright);
- var columncounter:Int = Std.int(pt(1));
- for (xxx in xx.nodes.text)
- {
- columncounter = (columncounter + 1) % 2;
- if (columncounter == 0)
- {
- var txtleft:String = U.xml_str(xxx.x, "value");// xxx.@value;
- textleft.text += txtleft + "\n";
- YY += Y_TEXT;
- }
- if (columncounter == 1)
- {
- var txtright:String = U.xml_str(xxx.x, "value");// xxx.@value;
- textright.text += txtright + "\n";
- }
- }
- if (!is_fade)
- {
- YY += Y_SPACE;
- }
- }
- else
- {
- text = new FlxUIText(0, YY, FlxG.width, txt);
- if (is_fade)
- {
- text.y = YY_ALT + Y_OFF;
- }
- regDef.apply(text);
- group.add(text);
- for (xxx in xx.nodes.text)
- {
- txt = "";
- var website:String = U.xml_str(xxx.x, "website");// xxx.@website;
- if (website == "")
- {
- txt = U.xml_str(xxx.x, "value");// xxx.@value;
- text.text += txt + "\n";
- }
- else
- {
- var url:String = U.xml_str(xxx.x, "url");// xxx.@url;
- if (FlxG.bitmap.checkCache("black_bkg") == false)
- {
- FlxG.bitmap.add(new BitmapData(pt(350), pt(18), false, 0x000000),true,"black_bkg");
- }
- var butt:FlxUIButton = new FlxUIButton(0, YY-pt(2), website, onButt.bind(url), false);
- butt.loadGraphic("black_bkg");
- if (is_fade)
- {
- butt.y = YY_ALT + Y_OFF;
- }
- var ft:FlxText = cast butt.label;
- btnDef.size = pt(18);
- btnDef.format.color = web_color;
- btnDef.apply(ft);
- butt.setCenterLabelOffset(0, 0);
- butt.over_color = web_color_2;
- butt.up_color = web_color;
- butt.down_color = web_color;
- butt.x = Std.int((FlxG.width - butt.width) / 2);
- group.add(butt);
- butt.name = url;
- text.text += "\n";
- }
- if (!is_fade)
- {
- YY += Y_TEXT;
- }
- }
- if (!is_fade)
- {
- YY += Y_SPACE;
- }
- }
- }
- max_time = YY / SPEED;
- remove(_ui, true);
- add(_ui);
- }
- public function cx(width:Float):Int
- {
- return Std.int((FlxG.width - (width)) / 2);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment