From 3ea69268719109be29a1c9e0cee355cc7f53f570 Mon Sep 17 00:00:00 2001 From: RandomityGuy <31925790+RandomityGuy@users.noreply.github.com> Date: Wed, 28 Dec 2022 18:22:28 +0530 Subject: [PATCH] replay browser --- data/ui/common/cancel_d.png | Bin 0 -> 4947 bytes data/ui/common/cancel_h.png | Bin 0 -> 4982 bytes data/ui/common/cancel_n.png | Bin 0 -> 4923 bytes data/ui/replay/cancel_d.png | Bin 0 -> 2518 bytes data/ui/replay/cancel_h.png | Bin 0 -> 2437 bytes data/ui/replay/cancel_n.png | Bin 0 -> 2603 bytes data/ui/replay/home_d.png | Bin 0 -> 4509 bytes data/ui/replay/home_h.png | Bin 0 -> 4455 bytes data/ui/replay/home_n.png | Bin 0 -> 4398 bytes data/ui/replay/play_d.png | Bin 0 -> 4341 bytes data/ui/replay/play_h.png | Bin 0 -> 4330 bytes data/ui/replay/play_i.png | Bin 0 -> 3467 bytes data/ui/replay/play_n.png | Bin 0 -> 4308 bytes data/ui/replay/replayframe.png | Bin 0 -> 3084 bytes data/ui/replay/window.png | Bin 0 -> 14714 bytes src/Marble.hx | 51 +++++++----- src/MarbleGame.hx | 1 + src/MarbleWorld.hx | 29 ++++--- src/Replay.hx | 42 ++++++++-- src/gui/MainMenuGui.hx | 5 ++ src/gui/PlayMissionGui.hx | 3 +- src/gui/ReplayCenterGui.hx | 145 +++++++++++++++++++++++++++++++++ src/gui/ReplayNameDlg.hx | 93 +++++++++++++++++++++ 23 files changed, 329 insertions(+), 40 deletions(-) create mode 100644 data/ui/common/cancel_d.png create mode 100644 data/ui/common/cancel_h.png create mode 100644 data/ui/common/cancel_n.png create mode 100644 data/ui/replay/cancel_d.png create mode 100644 data/ui/replay/cancel_h.png create mode 100644 data/ui/replay/cancel_n.png create mode 100644 data/ui/replay/home_d.png create mode 100644 data/ui/replay/home_h.png create mode 100644 data/ui/replay/home_n.png create mode 100644 data/ui/replay/play_d.png create mode 100644 data/ui/replay/play_h.png create mode 100644 data/ui/replay/play_i.png create mode 100644 data/ui/replay/play_n.png create mode 100644 data/ui/replay/replayframe.png create mode 100644 data/ui/replay/window.png create mode 100644 src/gui/ReplayCenterGui.hx create mode 100644 src/gui/ReplayNameDlg.hx diff --git a/data/ui/common/cancel_d.png b/data/ui/common/cancel_d.png new file mode 100644 index 0000000000000000000000000000000000000000..4c6b3d0d3edb1b45ac888d809c9d91b5f1ebcf21 GIT binary patch literal 4947 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 R*?|B6002ovPDHLkV1nyij;a6v literal 0 HcmV?d00001 diff --git a/data/ui/common/cancel_h.png b/data/ui/common/cancel_h.png new file mode 100644 index 0000000000000000000000000000000000000000..0b379b225fb3940cbb4883e771c0319e56ee2692 GIT binary patch literal 4982 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 literal 0 HcmV?d00001 diff --git a/data/ui/replay/cancel_d.png b/data/ui/replay/cancel_d.png new file mode 100644 index 0000000000000000000000000000000000000000..5483acbfef433f196e168eac380b76133e83c83b GIT binary patch literal 2518 zcmV;{2`To8P)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00009 za7bBm000XU000XU0RWnu7ytkXOi4sRRA}Dqn)_2!M;6DUW}`f1%V-o8K}AV6Q89_e zByN(@7>&`ay1JquiXwvY5D*m^8HYEDh|KWN2{_Ea@CJE_1{DNljeOmwYOs&@Z? z{b6f2iFNjzw)=W#P$M(h%?|@rpX%<@r_a6popbv(_uiKP;H6>y_Y8~h{}%ce{zfA9 z$OL32G7njREJWV3F=)=-$ZW(FaY9~3Mm$%+7ZBPR@kBmC)*{=GP$a^J2}XR8FOd%s zFT{llK4hUsBa@NE$W|l!-o$ajzV5$V#|ack9@+nEIVnz_na{;y|G6Bhy-pTkuj62O7ftj z;5Z9@CO64uDZ(r+{wf2PkE5W=ONRWcc*s5)`}2{5A+(VgfdapRIC4xfn)ZOp5r3Z5 z+f|BvmzvHN!?`*mpx}7PoC0HECJSx}xtU6M_4iJ6Foq%~*y32$@@t#}Ege*zI;jFp z#$m`zJqQ`e`%iFj$0Fm935cCs=;?evxRK*iX2}1C5SrHKDr25im)qyd{wPgQ@LOH_ z;`pc4Nmj?oJ)wg1#283Cycbk);oqXLuE=C$3Nj6GF&BCTvP#fUWBBRZ*%BZgFB|!Q z+d7L8liRdml~hkqL|PTo+H?6eVrh=6K(T)h#Kj={_xuxu^^`H2vf5neWyoiO=7v%b z(5}OpJN1F+5NUGM_MG9y>Z?~S{Y`cb@^i74oUBARxGzKkh5dsWlb$BDL`!ou2+lW_ zOFIusShIRLo7lwHUS;iBo*t}CrSS3hT`$=Qd%IV_Sd?orK0R5%+HnWMnJu82u-$R^s>%t?@^PKVh2VG=0p95W_ASLoK3dJtS}u7&drKHPj1+eRU$0(4JJ3BeTh2}a|Qk(p!?KX8XYg0-7zMD5n;)occeKak} z#P@W*n#Hdu)tme{6kD8+uvs%F0UakTB|&1yLicvx06|aJbrihQVz&5gW)mCh?8MsB z+@`Yj@ndOHAC=U1I4;&iAo+NrK%38OqAmI;rg?1PLv`w#JLgRkyEStXR9BY5vGf#) zUlQ7bKfspg@9PFZUvC%m-nwBiZI_>1uJh*3VWs;tH`ce+-;cHb^yMmu2oII|gukv( zEBTBa>nz0-{bCHEjE|F!K|bPGWS1XD_**k4qNn>CsHrN4jH9U%DC|5LbLl@sxzJPj zGgXN@{XIY4x!ntl{vPP>?S|WZw=5=dZ@5XO>UD+8o}HCBXeUu$R|D?u(^#Fx1#I(w z`~#p(#Pgmvm$fO5=ofTcxy*d1Pi}W{8Eaw_=U^$_H?KoQnGsS`k{Ib}DgQ!Y7s!}z zF7$Z*n3Q;%-W2rQ>iXf{z#SO4OWelH?qQ`h6c_7Z`}P26YOFW0lg-1!ot4+Fb(r{5 zNw)dk-VhxX`OMgfiK?f@rZ(9%>THu(g#1{R(0chIrmLwk>$uTF0{$N;PlF6BL9ZNjXsvqXw-}Q`g(uv?(Ty2_AAiR@-?)!UIw(m z{rlg+g9rC*lDl|?x3#r`PN#b;a(EbohVFrokl;skb#?nt*tN)NF8I6jxKt9FJ)D00 z2K+U?jL<6?m(I@4-1hc%sI9F9y_88jVm=Qeu-76cj*eYAQrTL_lC*Ane$& z19t7&1uB)Q8Fl;%XFc)--*q^c3q68=nIztOjqdI3b*ZeZyhOpZS}my6YDi8_hUn;M z2*b<879mjs0s_F#&ky|l{lUk_hwOI-1_pMbj+>Eh7 z53oJ)mrTvc$@zCiMg}OA%3+~VXcF1i*Y`(EylT`a1PMg8A%4gjzT>{CzafZfC>;@#g>Stl)udRp?EewfrBGMSPicw&p{0`AyQ1-ymo5HQU>Ud6SDf gfo~i}K2O8{0;VgcGnn5oz5oCK07*qoM6N<$g2LwEYXATM literal 0 HcmV?d00001 diff --git a/data/ui/replay/cancel_h.png b/data/ui/replay/cancel_h.png new file mode 100644 index 0000000000000000000000000000000000000000..6956490369bc02653c7612fa4a0da467cc1fb83e GIT binary patch literal 2437 zcmV;033~R4P)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00009 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 DssEZa literal 0 HcmV?d00001 diff --git a/data/ui/replay/cancel_n.png b/data/ui/replay/cancel_n.png new file mode 100644 index 0000000000000000000000000000000000000000..010bcb06f4b1955a671ec064df82766597be7475 GIT binary patch literal 2603 zcmV+`3e@$9P)004R=004l4008;_004mL004C`008P>0026e000+nl3&F}00009 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 literal 0 HcmV?d00001 diff --git a/data/ui/replay/home_h.png b/data/ui/replay/home_h.png new file mode 100644 index 0000000000000000000000000000000000000000..105f114b9510caaf4ebff1bae5170d63e9b3d6c2 GIT binary patch literal 4455 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 literal 0 HcmV?d00001 diff --git a/data/ui/replay/home_n.png b/data/ui/replay/home_n.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ccdc5a1413892c28ba396ff7961b7202c04e14 GIT binary patch literal 4398 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 literal 0 HcmV?d00001 diff --git a/data/ui/replay/play_d.png b/data/ui/replay/play_d.png new file mode 100644 index 0000000000000000000000000000000000000000..10282a2681a29449095e86173312ea2418887585 GIT binary patch literal 4341 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 literal 0 HcmV?d00001 diff --git a/data/ui/replay/play_h.png b/data/ui/replay/play_h.png new file mode 100644 index 0000000000000000000000000000000000000000..b1ab00d69620bb30d36025ab65e732a2cc9f6674 GIT binary patch literal 4330 zcmV)zv`|C^MMW&YrL0m56c-RJmuIPu_dqE~sqgUu zF+q(=0fvkrB$;6*vu}6iZoMA=|MWTc_FOVaCUeVBgFW?6_wDZ6ea?6O|NED7F5{fT zzqfz=X3#&zST&wy%IB%QHbXG7Q9P6)iiIgJ8q*N;0*pEx&|~j|K?J?%XJ1n>rN(qHSwakejzNrz_*z~T@_q*T z4zg`Oy3+Zb1l^KUQwT+YuK=D>{beYxlhKTb5?il1ec@dXy!~UE#ze$oBgjL}A?USV zK=8Yf)9otqsr<($RXZW<)c`)Wg0!B*C+0`W^^px+-z~oM7r6ML_rmj%@4XPsP|y6z z1S%;tzD{boh*xj?^5&}yoj@mg$-%I90D7F~A>((8yNqcfEpYa!HGw{qjzi#UvfM`c zK_WiWu_g!Ml#B#NG_&~M3TQ|R0-A^hvF5YkPWWMEqIwGY@_&c# z9k>XV*S-lZpZ5*0`8eEr=q%9_O(&BNzjOnF zPHYjyy@lZ0Vc<zV5T0 zEp@_jv+%1IJ`4wkcLznHSTnfNjbyAN;1q(vqK4}%cuwRLi-C%0AaapNpz#5>!1)in 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 E0er0$9RL6T literal 0 HcmV?d00001 diff --git a/data/ui/replay/window.png b/data/ui/replay/window.png new file mode 100644 index 0000000000000000000000000000000000000000..18454ea423260ea3a0e2c218349f7bcfe664bf5b GIT binary patch literal 14714 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 literal 0 HcmV?d00001 diff --git a/src/Marble.hx b/src/Marble.hx index 92fc9444..e74b5c53 100644 --- a/src/Marble.hx +++ b/src/Marble.hx @@ -489,13 +489,12 @@ class Marble extends GameObject { } function getExternalForces(currentTime:Float, m:Move, dt:Float) { + if (this.mode == Finish) + return this.velocity.multiply(-16); var gWorkGravityDir = this.level.currentUp.multiply(-1); var A = new Vector(); - if (this.mode != Finish) - A = gWorkGravityDir.multiply(this._gravity); - if (this.mode == Finish) - A = this.velocity.multiply(-16); - if (currentTime - this.helicopterEnableTime < 5 && this.mode != Finish) { + A = gWorkGravityDir.multiply(this._gravity); + if (currentTime - this.helicopterEnableTime < 5) { A = A.multiply(0.25); } for (obj in level.forceObjects) { @@ -543,7 +542,7 @@ class Marble extends GameObject { } } } - if (contacts.length == 0) { + if (contacts.length == 0 && this.mode != Start) { var axes = this.getMarbleAxis(); var sideDir = axes[0]; var motionDir = axes[1]; @@ -775,7 +774,7 @@ class Marble extends GameObject { A = A.add(contacts[j].normal.multiply(normalForce2)); } } - if (bestSurface != -1) { + if (bestSurface != -1 && this.mode != Finish) { var vAtC = this.velocity.add(this.omega.cross(bestContact.normal.multiply(-this._radius))).sub(bestContact.velocity); var vAtCMag = vAtC.length(); var slipping = false; @@ -832,6 +831,9 @@ class Marble extends GameObject { lastContactNormal = bestContact.normal; } a = a.add(aControl); + if (this.mode == Finish) { + a.set(); // Zero it out + } return [A, a]; } @@ -988,7 +990,7 @@ class Marble extends GameObject { // for (iter in 0...10) { // var iterationFound = false; - for (obj in foundObjs.filter(x -> x.go is InteriorObject && !(x.go is PathedInterior))) { + for (obj in foundObjs.filter(x -> x.go is InteriorObject || (x.go is PathedInterior))) { // Its an MP so bruh var invMatrix = @:privateAccess obj.invTransform; @@ -1520,6 +1522,11 @@ class Marble extends GameObject { var a = retf[1]; this.velocity = this.velocity.add(A.multiply(timeStep)); this.omega = this.omega.add(a.multiply(timeStep)); + if (this.mode == Start) { + // Bruh... + this.velocity.y = 0; + this.velocity.x = 0; + } stoppedPaths = this.velocityCancel(timeState.currentAttemptTime, timeStep, isCentered, true, stoppedPaths, pathedInteriors); this._totalTime += timeStep; if (contacts.length != 0) { @@ -1593,20 +1600,20 @@ class Marble extends GameObject { } } - if (mode == Start) { - var upVec = this.level.currentUp; - var startpadNormal = startPad.getAbsPos().up(); - this.velocity = upVec.multiply(this.velocity.dot(upVec)); - // Apply contact forces in startPad up direction if upVec is not startpad up, fixes the weird startpad shit in pinball wizard - if (upVec.dot(startpadNormal) < 0.95) { - for (contact in contacts) { - var normF = contact.normal.multiply(contact.normalForce); - var startpadF = startpadNormal.multiply(normF.dot(startpadNormal)); - var upF = upVec.multiply(normF.dot(upVec)); - this.velocity = this.velocity.add(startpadF.multiply(timeStep / 4)); - } - } - } + // if (mode == Start) { + // var upVec = this.level.currentUp; + // var startpadNormal = startPad.getAbsPos().up(); + // this.velocity = upVec.multiply(this.velocity.dot(upVec)); + // // Apply contact forces in startPad up direction if upVec is not startpad up, fixes the weird startpad shit in pinball wizard + // if (upVec.dot(startpadNormal) < 0.95) { + // for (contact in contacts) { + // var normF = contact.normal.multiply(contact.normalForce); + // var startpadF = startpadNormal.multiply(normF.dot(startpadNormal)); + // var upF = upVec.multiply(normF.dot(upVec)); + // this.velocity = this.velocity.add(startpadF.multiply(timeStep / 4)); + // } + // } + // } // if (mode == Finish) { // this.velocity = this.velocity.multiply(0.925); diff --git a/src/MarbleGame.hx b/src/MarbleGame.hx index e89b0150..8439642d 100644 --- a/src/MarbleGame.hx +++ b/src/MarbleGame.hx @@ -34,6 +34,7 @@ class MarbleGame { var paused:Bool; var toRecord:Bool = false; + var recordingName:String; var exitGameDlg:ExitGameDlg; diff --git a/src/MarbleWorld.hx b/src/MarbleWorld.hx index 0479131a..ef45a7db 100644 --- a/src/MarbleWorld.hx +++ b/src/MarbleWorld.hx @@ -1954,18 +1954,27 @@ class MarbleWorld extends Scheduler { } public function saveReplay() { + this.replay.name = MarbleGame.instance.recordingName; var replayBytes = this.replay.write(); #if hl - hxd.File.saveAs(replayBytes, { - title: 'Save Replay', - fileTypes: [ - { - name: "Replay (*.mbr)", - extensions: ["mbr"] - } - ], - defaultPath: '${this.mission.title}${this.timeState.gameplayClock}.mbr' - }); + // hxd.File.saveAs(replayBytes, { + // title: 'Save Replay', + // fileTypes: [ + // { + // name: "Replay (*.mbr)", + // extensions: ["mbr"] + // } + // ], + // defaultPath: 'data/replay/${this.mission.title}${this.timeState.gameplayClock}.mbr' + // }); + sys.FileSystem.createDirectory(haxe.io.Path.join([Settings.settingsDir, "data", "replays"])); + var replayPath = haxe.io.Path.join([ + Settings.settingsDir, + "data", + "replays", + '${this.mission.title}${this.timeState.gameplayClock}.mbr' + ]); + sys.io.File.saveBytes(replayPath, replayBytes); #end #if js var blob = new js.html.Blob([replayBytes.getData()], { diff --git a/src/Replay.hx b/src/Replay.hx index a38c5c43..c5fc0664 100644 --- a/src/Replay.hx +++ b/src/Replay.hx @@ -1,5 +1,6 @@ package src; +import hxd.fs.FileEntry; import shapes.PowerUp; import haxe.io.BytesInput; import haxe.zip.Huffman; @@ -240,6 +241,7 @@ class ReplayInitialState { class Replay { public var mission:String; + public var name:String; var frames:Array; var initialState:ReplayInitialState; @@ -250,7 +252,8 @@ class Replay { var currentPlaybackFrameIdx:Int; var currentPlaybackTime:Float; - var version:Int = 4; + var version:Int = 5; + var readFullEntry:FileEntry; public function new(mission:String) { this.mission = mission; @@ -403,7 +406,6 @@ class Replay { public function write() { var bw = new BytesWriter(); - bw.writeStr(this.mission); this.initialState.write(bw); bw.writeInt32(this.frames.length); for (frame in this.frames) { @@ -416,13 +418,17 @@ class Replay { var compressed = haxe.zip.Compress.run(bw.getBuffer(), 9); #end #if js - var stream = zip.DeflateStream.create(zip.DeflateStream.CompressionLevel.GOOD, false); + var stream = zip.DeflateStream.create(zip.DeflateStream.CompressionLevel.GOOD, true); stream.write(new BytesInput(bw.getBuffer())); var compressed = stream.finalize(); #end var finalB = new BytesBuffer(); finalB.addByte(version); + finalB.addByte(this.name.length); + finalB.addString(this.name); + finalB.addByte(this.mission.length); + finalB.addString(this.mission); finalB.addInt32(bufsize); finalB.addBytes(compressed, 0, compressed.length); @@ -436,8 +442,12 @@ class Replay { Console.log("Replay loading failed: unknown version"); return false; } - var uncompressedLength = data.getInt32(1); - var compressedData = data.sub(5, data.length - 5); + var nameLength = data.get(1); + this.name = data.getString(2, nameLength); + var missionLength = data.get(2 + nameLength); + this.mission = data.getString(3 + nameLength, missionLength); + var uncompressedLength = data.getInt32(3 + nameLength + missionLength); + var compressedData = data.sub(7 + nameLength + missionLength, data.length - 7 - nameLength - missionLength); #if hl var uncompressed = haxe.zip.Uncompress.run(compressedData, uncompressedLength); @@ -446,7 +456,6 @@ class Replay { var uncompressed = haxe.zip.InflateImpl.run(new BytesInput(compressedData), uncompressedLength); #end var br = new BytesReader(uncompressed); - this.mission = br.readStr(); this.initialState.read(br); var frameCount = br.readInt32(); this.frames = []; @@ -457,4 +466,25 @@ class Replay { } return true; } + + public function readHeader(data:Bytes, fe:FileEntry) { + this.readFullEntry = fe; + Console.log("Loading replay"); + var replayVersion = data.get(0); + if (replayVersion > version) { + Console.log("Replay loading failed: unknown version"); + return false; + } + var nameLength = data.get(1); + this.name = data.getString(2, nameLength); + var missionLength = data.get(2 + nameLength); + this.mission = data.getString(3 + nameLength, missionLength); + return true; + } + + public function readFull() { + if (readFullEntry != null) + return read(readFullEntry.getBytes()); + return false; + } } diff --git a/src/gui/MainMenuGui.hx b/src/gui/MainMenuGui.hx index c9a42013..eb6cb89e 100644 --- a/src/gui/MainMenuGui.hx +++ b/src/gui/MainMenuGui.hx @@ -96,6 +96,10 @@ class MainMenuGui extends GuiImage { replButton.position = new Vector(552, 536); replButton.extent = new Vector(191, 141); replButton.pressedAction = (sender) -> { + #if hl + MarbleGame.canvas.setContent(new ReplayCenterGui()); + #end + #if js hxd.File.browse((replayToLoad) -> { replayToLoad.load((replayData) -> { var replay = new Replay(""); @@ -126,6 +130,7 @@ class MainMenuGui extends GuiImage { } ], }); + #end }; mainMenuContent.addChild(replButton); diff --git a/src/gui/PlayMissionGui.hx b/src/gui/PlayMissionGui.hx index 284d1e7e..b6deb686 100644 --- a/src/gui/PlayMissionGui.hx +++ b/src/gui/PlayMissionGui.hx @@ -667,8 +667,7 @@ class PlayMissionGui extends GuiImage { pmRecord.position = new Vector(247, 46); pmRecord.extent = new Vector(43, 43); pmRecord.pressedAction = (sender) -> { - cast(this.parent, Canvas).marbleGame.toRecord = true; - cast(this.parent, Canvas).pushDialog(new MessageBoxOkDlg("The next mission you play will be recorded.")); + cast(this.parent, Canvas).pushDialog(new ReplayNameDlg()); }; pmMorePopDlg.addChild(pmRecord); diff --git a/src/gui/ReplayCenterGui.hx b/src/gui/ReplayCenterGui.hx new file mode 100644 index 00000000..6ddae78f --- /dev/null +++ b/src/gui/ReplayCenterGui.hx @@ -0,0 +1,145 @@ +package gui; + +import src.Mission; +import hxd.BitmapData; +import hxd.res.BitmapFont; +import src.Replay; +import src.ResourceLoader; +import h3d.Vector; +import src.Util; +import src.MarbleGame; +import src.Settings; + +class ReplayCenterGui extends GuiImage { + public function new() { + function chooseBg() { + var rand = Math.random(); + if (rand >= 0 && rand <= 0.244) + return ResourceLoader.getImage('data/ui/backgrounds/gold/${cast (Math.floor(Util.lerp(1, 12, Math.random())), Int)}.jpg'); + if (rand > 0.244 && rand <= 0.816) + return ResourceLoader.getImage('data/ui/backgrounds/platinum/${cast (Math.floor(Util.lerp(1, 28, Math.random())), Int)}.jpg'); + return ResourceLoader.getImage('data/ui/backgrounds/ultra/${cast (Math.floor(Util.lerp(1, 9, Math.random())), Int)}.jpg'); + } + var img = chooseBg(); + super(img.resource.toTile()); + + this.horizSizing = Width; + this.vertSizing = Height; + this.position = new Vector(); + this.extent = new Vector(640, 480); + + var wnd = new GuiImage(ResourceLoader.getResource("data/ui/replay/window.png", ResourceLoader.getImage, this.imageResources).toTile()); + wnd.position = new Vector(0, 0); + wnd.extent = new Vector(640, 480); + wnd.horizSizing = Center; + wnd.vertSizing = Center; + this.addChild(wnd); + + function loadButtonImages(path:String, hasDisabled:Bool = false) { + var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile(); + var hover = ResourceLoader.getResource('${path}_h.png', ResourceLoader.getImage, this.imageResources).toTile(); + var pressed = ResourceLoader.getResource('${path}_d.png', ResourceLoader.getImage, this.imageResources).toTile(); + var disabled = hasDisabled ? ResourceLoader.getResource('${path}_i.png', ResourceLoader.getImage, this.imageResources).toTile() : null; + return [normal, hover, pressed, disabled]; + } + + var selectedIdx = -1; + + var replayList = []; + var replayPath = haxe.io.Path.join([Settings.settingsDir, "data", "replays",]); + var replayFiles = ResourceLoader.fileSystem.dir(replayPath); + for (replayFile in replayFiles) { + if (replayFile.extension == "mbr") { + var replayF = new Replay(null); + if (replayF.readHeader(replayFile.getBytes(), replayFile)) + replayList.push(replayF); + } + } + + var playButton = new GuiButton(loadButtonImages('data/ui/replay/play', true)); + playButton.position = new Vector(323, 386); + playButton.extent = new Vector(94, 46); + playButton.disabled = true; + playButton.pressedAction = (e) -> { + var repl = replayList[selectedIdx]; + if (repl.readFull()) { + var repmis = repl.mission; + if (!StringTools.contains(repmis, "data/")) + repmis = "data/" + repmis; + var mi = MissionList.missions.get(repmis); + MarbleGame.instance.watchMissionReplay(mi, repl); + } + } + wnd.addChild(playButton); + + var homeButton = new GuiButton(loadButtonImages('data/ui/replay/home')); + homeButton.position = new Vector(224, 386); + homeButton.extent = new Vector(94, 46); + homeButton.pressedAction = (e) -> { + MarbleGame.canvas.setContent(new MainMenuGui()); + } + wnd.addChild(homeButton); + + var temprev = new BitmapData(1, 1); + temprev.setPixel(0, 0, 0); + var tmpprevtile = h2d.Tile.fromBitmap(temprev); + + var pmPreview = new GuiImage(tmpprevtile); + pmPreview.position = new Vector(360, 29); + pmPreview.extent = new Vector(216, 150); + wnd.addChild(pmPreview); + + var scrollCtrl = new GuiScrollCtrl(ResourceLoader.getResource("data/ui/common/philscroll.png", ResourceLoader.getImage, this.imageResources).toTile()); + scrollCtrl.position = new Vector(30, 25); + scrollCtrl.extent = new Vector(283, 346); + wnd.addChild(scrollCtrl); + + var arial14fontdata = ResourceLoader.getFileEntry("data/font/arial.fnt"); + var arial14b = new BitmapFont(arial14fontdata.entry); + @:privateAccess arial14b.loader = ResourceLoader.loader; + var arial14 = arial14b.toSdfFont(cast 12 * Settings.uiScale, MultiChannel); + var markerFelt32fontdata = ResourceLoader.getFileEntry("data/font/MarkerFelt.fnt"); + var markerFelt32b = new BitmapFont(markerFelt32fontdata.entry); + @:privateAccess markerFelt32b.loader = ResourceLoader.loader; + var markerFelt32 = markerFelt32b.toSdfFont(cast 26 * Settings.uiScale, MultiChannel); + var markerFelt24 = markerFelt32b.toSdfFont(cast 18 * Settings.uiScale, MultiChannel); + var markerFelt18 = markerFelt32b.toSdfFont(cast 14 * Settings.uiScale, MultiChannel); + + var missionName = new GuiText(markerFelt24); + missionName.position = new Vector(327, 181); + missionName.extent = new Vector(278, 14); + missionName.text.textColor = 0; + missionName.justify = Center; + wnd.addChild(missionName); + + var replayListBox = new GuiTextListCtrl(markerFelt24, replayList.map(x -> x.name)); + replayListBox.position = new Vector(0, 0); + replayListBox.extent = new Vector(283, 346); + replayListBox.textYOffset = -6; + replayListBox.scrollable = true; + replayListBox.onSelectedFunc = (idx) -> { + if (idx < 0) + return; + selectedIdx = idx; + playButton.disabled = false; + var thisReplay = replayList[idx]; + var repmis = thisReplay.mission; + if (!StringTools.contains(repmis, "data/")) + repmis = "data/" + repmis; + if (MissionList.missions == null) + MissionList.buildMissionList(); + var m = MissionList.missions.get(repmis); + missionName.text.text = m.title; + m.getPreviewImage((t) -> { + pmPreview.bmp.tile = t; + }); + } + scrollCtrl.addChild(replayListBox); + scrollCtrl.setScrollMax(replayListBox.calculateFullHeight()); + + var replayFrame = new GuiImage(ResourceLoader.getResource("data/ui/replay/replayframe.png", ResourceLoader.getImage, this.imageResources).toTile()); + replayFrame.position = new Vector(351, 21); + replayFrame.extent = new Vector(234, 168); + wnd.addChild(replayFrame); + } +} diff --git a/src/gui/ReplayNameDlg.hx b/src/gui/ReplayNameDlg.hx new file mode 100644 index 00000000..49c421db --- /dev/null +++ b/src/gui/ReplayNameDlg.hx @@ -0,0 +1,93 @@ +package gui; + +import src.MarbleGame; +import hxd.res.BitmapFont; +import h3d.Vector; +import src.ResourceLoader; +import src.Settings; + +class ReplayNameDlg extends GuiControl { + public function new() { + super(); + var text = "Enter a name for the recording"; + this.horizSizing = Width; + this.vertSizing = Height; + this.position = new Vector(); + this.extent = new Vector(640, 480); + + var domcasual24fontdata = ResourceLoader.getFileEntry("data/font/DomCasualD.fnt"); + var domcasual24b = new BitmapFont(domcasual24fontdata.entry); + @:privateAccess domcasual24b.loader = ResourceLoader.loader; + var domcasual24 = domcasual24b.toSdfFont(cast 20 * Settings.uiScale, MultiChannel); + + function loadButtonImages(path:String) { + var normal = ResourceLoader.getResource('${path}_n.png', ResourceLoader.getImage, this.imageResources).toTile(); + var hover = ResourceLoader.getResource('${path}_h.png', ResourceLoader.getImage, this.imageResources).toTile(); + var pressed = ResourceLoader.getResource('${path}_d.png', ResourceLoader.getImage, this.imageResources).toTile(); + return [normal, hover, pressed]; + } + + var yesNoFrame = new GuiImage(ResourceLoader.getResource("data/ui/common/dialog.png", ResourceLoader.getImage, this.imageResources).toTile()); + yesNoFrame.horizSizing = Center; + yesNoFrame.vertSizing = Center; + yesNoFrame.position = new Vector(187, 156); + yesNoFrame.extent = new Vector(300, 191); + this.addChild(yesNoFrame); + + var yesNoText = new GuiMLText(domcasual24, null); + yesNoText.position = new Vector(33, 26); + yesNoText.horizSizing = Center; + yesNoText.extent = new Vector(198, 23); + yesNoText.text.text = text; + yesNoText.text.textColor = 0; + yesNoText.text.maxWidth = 198; + yesNoFrame.addChild(yesNoText); + + var textFrame = new GuiImage(ResourceLoader.getResource("data/ui/endgame/window.png", ResourceLoader.getImage, this.imageResources).toTile()); + textFrame.position = new Vector(33, 67); + textFrame.extent = new Vector(232, 40); + textFrame.horizSizing = Center; + yesNoFrame.addChild(textFrame); + + var textInput = new GuiTextInput(domcasual24); + textInput.position = new Vector(6, 5); + textInput.extent = new Vector(216, 40); + textInput.horizSizing = Width; + textInput.vertSizing = Height; + textInput.text.textColor = 0; + textInput.text.selectionColor.setColor(0xFFFFFFFF); + textInput.text.selectionTile = h2d.Tile.fromColor(0x808080, 0, hxd.Math.ceil(textInput.text.font.lineHeight)); + textFrame.addChild(textInput); + + var yesButton = new GuiButton(loadButtonImages("data/ui/common/ok")); + yesButton.position = new Vector(171, 124); + yesButton.extent = new Vector(95, 45); + yesButton.vertSizing = Top; + yesButton.accelerator = hxd.Key.ENTER; + yesButton.pressedAction = (sender) -> { + if (StringTools.trim(textInput.text.text) != "") { + MarbleGame.instance.toRecord = true; + MarbleGame.instance.recordingName = textInput.text.text; + MarbleGame.canvas.popDialog(this); + } + } + yesNoFrame.addChild(yesButton); + + var noButton = new GuiButton(loadButtonImages("data/ui/common/cancel")); + noButton.position = new Vector(44, 124); + noButton.extent = new Vector(88, 41); + noButton.vertSizing = Top; + noButton.accelerator = hxd.Key.ESCAPE; + noButton.pressedAction = (sender) -> { + MarbleGame.canvas.popDialog(this); + } + yesNoFrame.addChild(noButton); + + if (yesNoText.text.getBounds().yMax > yesNoText.extent.y) { + var diff = yesNoText.text.getBounds().yMax - yesNoText.extent.y; + yesNoFrame.extent.y += diff; + yesButton.position.y += diff; + noButton.position.y += diff; + } + } +}