From 2f7692d863f51818914870dc9fb926a23c928493 Mon Sep 17 00:00:00 2001 From: CrushedPixel Date: Sun, 14 Jun 2015 10:42:51 +0200 Subject: [PATCH] The Position Keyframe Button now turns into a Spectator Keyframe Button when Spectator Keyframe is selected or no Position Keyframe Selected and spectating an Entity --- .../gui/elements/GuiKeyframeTimeline.java | 4 +- .../gui/overlay/GuiReplayOverlay.java | 37 +++++++++++++++++- .../assets/replaymod/lang/en_US.lang | 2 + .../resources/assets/replaymod/replay_gui.png | Bin 6694 -> 6640 bytes 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java index 0bdb1ddf..d0279c79 100644 --- a/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/elements/GuiKeyframeTimeline.java @@ -21,8 +21,8 @@ public class GuiKeyframeTimeline extends GuiTimeline { private static final int KEYFRAME_TIME_Y = 25; private static final int KEYFRAME_SPEC_X = 74; private static final int KEYFRAME_SPEC_Y = 30; - private static final int KEYFRAME_MARKER_X = 40; - private static final int KEYFRAME_MARKER_Y = 39; + private static final int KEYFRAME_MARKER_X = 109; + private static final int KEYFRAME_MARKER_Y = 20; private Keyframe clickedKeyFrame; private long clickTime; diff --git a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java index 270c49c9..74ac6e73 100755 --- a/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java +++ b/src/main/java/eu/crushedpixel/replaymod/gui/overlay/GuiReplayOverlay.java @@ -154,9 +154,44 @@ public class GuiReplayOverlay extends Gui { } }, "replaymod.gui.ingame.menu.removeposkeyframe"); + private final GuiElement buttonSpectatorNotSelected = texturedButton(BUTTON_PLACE_X, BOTTOM_ROW, 40, 40, 20, new Runnable() { + @Override + public void run() { + Entity cam = mc.getRenderViewEntity(); + if (cam != null) { + Position position = new Position(cam.posX, cam.posY, cam.posZ, cam.rotationPitch, + cam.rotationYaw % 360, ReplayHandler.getCameraTilt()); + + if (ReplayHandler.isCamera()) + ReplayHandler.addKeyframe(new PositionKeyframe(ReplayHandler.getRealTimelineCursor(), position)); + else + ReplayHandler.addKeyframe(new PositionKeyframe(ReplayHandler.getRealTimelineCursor(), cam.getEntityId())); + } + } + }, "replaymod.gui.ingame.menu.addspeckeyframe"); + + private final GuiElement buttonSpectatorSelected = texturedButton(BUTTON_PLACE_X, BOTTOM_ROW, 40, 60, 20, new Runnable() { + @Override + public void run() { + ReplayHandler.removeKeyframe(ReplayHandler.getSelectedKeyframe()); + } + }, "replaymod.gui.ingame.menu.removespeckeyframe"); + @Override public GuiElement delegate() { - return ReplayHandler.getSelectedKeyframe() instanceof PositionKeyframe ? buttonSelected : buttonNotSelected; + boolean selected = ReplayHandler.getSelectedKeyframe() instanceof PositionKeyframe; + boolean camera = true; + if(selected) { + camera = ((PositionKeyframe)ReplayHandler.getSelectedKeyframe()).getSpectatedEntityID() == null; + } else { + camera = ReplayHandler.isCamera(); + } + + if(camera) { + return selected ? buttonSelected : buttonNotSelected; + } else { + return selected ? buttonSpectatorSelected : buttonSpectatorNotSelected; + } } }; diff --git a/src/main/resources/assets/replaymod/lang/en_US.lang b/src/main/resources/assets/replaymod/lang/en_US.lang index 8060d102..4ab7d841 100644 --- a/src/main/resources/assets/replaymod/lang/en_US.lang +++ b/src/main/resources/assets/replaymod/lang/en_US.lang @@ -298,6 +298,8 @@ replaymod.gui.rendering.timeleft=Time Left #Ingame Menu replaymod.gui.ingame.menu.addposkeyframe=Add Position Keyframe replaymod.gui.ingame.menu.removeposkeyframe=Remove Position Keyframe +replaymod.gui.ingame.menu.addspeckeyframe=Add Spectator Keyframe +replaymod.gui.ingame.menu.removespeckeyframe=Remove Spectator Keyframe replaymod.gui.ingame.menu.addtimekeyframe=Add Time Keyframe replaymod.gui.ingame.menu.removetimekeyframe=Remove Time Keyframe replaymod.gui.ingame.menu.pause=Pause Replay diff --git a/src/main/resources/assets/replaymod/replay_gui.png b/src/main/resources/assets/replaymod/replay_gui.png index 864fbc85b4ea0dd133d065037be56e8970b766c1..526925d95a2dfdc311c9deb17d236f2cfcb26f58 100755 GIT binary patch literal 6640 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 literal 6694 zcmY*ec|25K*uOIdV=2p6M)oWjOO3KcF-_L7Q?g_)l6@x(W66^2MAlzSsO$<6V=rVc z3^lT3-$Dk1cY5Ey-p}Wpd(J(dbD#U1=lP!R^PGF*jSRHTF(mjrdog zbku97s(nATp>xpHQU@MTdqC#S<3H4f!Asl17XX-G|0)Q0nFps1();P?YtWPE7}(?# z>Lb`J0Dz}XNB!2FAmWDgS=D_l|FeOC{E)zdFj*JrZ@&y@CoYPXXuALtag^Wa6ceoW zH#zX*<8E&k$0&Yw8iiZ&j+ZjH!1%kI?0qOUA<)w~{n{u$gM+N&3;`JT!RS_jlg4LY3QqM7^JgI+sNd3vk({#hi?S zf&jZjd568DwW@i_;Vux-?5-mJOsMLzz5* zk5PTv2wH@g(o)>~q@R*7B+r*Q_O_@_WCIDS5=iQ=YPr*Ci1U4_#ATNV1|-C`!=7T* z)ZvVj&A>KI8bZ+#tS0by3_?BCi;U;* zhsR{}`CS%XaV|Cn4>@j!ne};6pB@%KVO%r^(hXG^0COv=sHNZ(6E0=zWMza{2U49C zVuZ19HxYw?Iz`U1KYlTFt|IJ8q^WZ$-@I#cG$o-oyyg>YD^9}ezIc6vqpBQI5z5_m zc34ghqg)x{T(AnFDaznd9o}6e5-*fwu%ZdOE%&E|poCx|Pu}i81;~Af}bH5gH`f0JoqO85;_LG$RhaJeS zM{;jY?Cs%6!J4qe+@~ZvR_=dVZr`}VZSi6xhKU;hV$bt~@#6y(M>e^8vvKo}v8Bo3 z5WtJF$F$v&Sh&T#WM-v$bAvgyGoCTs#2~}d68rGaMw~PXW1-C1xVJZE$a{NuGbdv~ zAFUnq^8wb`06PFjEAvyaXsL?lpsMh;sx^TnZ230+M)=WK;Y*Yu;;t0w9a*Lxl%erO z|D3(MyUfzXu^GPYmKCzgZ6*J|7+j%DVFtS~2MDkU*?4bRpd9or-II&L^%JOnsJH_> z%%2Muh!py)F@<^PGA@@vXD;14lr>~#4x1AHqA1gL^)R4|0|m{Ie1F|#0TIO(hKS)ds&+)WVSV2L->sJTu-f>u- zlJ~1&4<)_}QRV5L*C?wCR^~Lro9_*Flub%AUQMj!3~3e{w~LurZh>0K-?;S&FU)pp z+2r9}Vw5uP6>q*`($;M#PE==j>wt+eucXjcYS8+1TPodC3y!krD~W2M+>p@|?((m) zD7srPx*|06T9oazJD;wRWn!)S;m;>)GR$-|>c-JZNwRQejFy{)aJgRV%Hc+}G)k(L zs>MmF$;*z!&B@wvi6pT(b2CZR`BK)W3>kgO9})|*wr1O-$n7lHh)V@Q9idKbRX)3S z|D5cTPE=Zt$DKX0Nod}P0Cy7%pK9pj!gN4Ip=_2F?=ao)+CCD_oaa+<`gXg!sukK} zf<J!B(|6> z(x5bp6!5|`HGWl2JALce+}c`RL^FiOdS`9_Nz>r)#yUbYq4wYwtKGw)g2z~0-E(Aj z&qJ;psHOI#^pRK1O~Pf9jN_NDWy&8FzvCVU`od27P04j{f@<4cPX+AQWO3=Ors>_W zO8hJUxu$csa&@Evn7zJ#QT3MUOHco58Vb_dz%0tdSWWv0Ie6+|;;wDJp5x^Lr(a0i z(omryV)fhGd%A7ABe9!ZHR%YSGDvf2AIH{(E^7;`v7MoEZewI*RDK>?ia^|j16BE_zi{W!WLw4drwkqTyA@z^(OE(BX3%PB8 z_K?JC)cjev4W3df4{sQ>3#$D} zuQU=YZiKjN4l9c^lW&JS-gf>8+*wh+#VNi`#STNIb+gmygobd4dduGNf+f2VG?9(!a|*e=hV$8!`moi&$P&S(29EOq%hM97^R=mp*r z%S{W+l*=t*v!^+Vw1PS3G!ZdMNxEZQI@u@$=hM#NU-Z%Tb3riUc!to`@>22Bl&U=P za*L_c;sekdQKqt8Am&vrFYvLi%19}v2{dWka-Qx|)0LrJMxzaB%!?Dja@-nUouMzk6w7*FZ96@I*q=9&tsjy7+T??~Mnx{{CJQr%nS#n*HA zY9ZQ9k`=*mub*lOt0&M`lgoKN&0I7TIa=rI>+wifl5CjesU33mprzHbo1$Sy$D!}r zIf7S_fxHHEML#|<@vwAujYIDb{9u;CJ+3Pz%^csRS=$kT(-zB7BgvxUnE3>53j)fiZxor`~M;v{Di#dBQr8to|Z@w31WizfsA#r~_A+D=bpm)l)`iBeIO7$K%UhNZyu_jUkGbyrgl@=VG19Us zl_N?i3hxc=)`&~)z{70RG;GqUTff<`s0Xro6NJChR5AB*9X2_dR|i;6jfpht9inOk z1bby)Nn9P%3b1x$PU(b5W@>?(-ych`!+uWNH+aY`ZsrXU?h^nDXru5Zs{fbAR$!e#K##!PgryVg&tY{R} zINtBQEbaswm)^Tswh(wk)?)1iqd)W4(Ql!7B9i9zPt~4iNn2S|juv2#TzpxKk{I+3 z*+S=2+p<4z4SY$?u^U;O7|lCJU9Ccr5U&F`*MwHQ8lNjmJDH6-S@^oUpvI)Q>`G0D zt|I0|^@^|@?~?u{3_?kZNz<{O_RK}YDwFar zp35@Aq86uhj<;nJL56HdyCj3q`?srcq2YRLSmvZ@M7F z>E5b}ip2t_oPa`AF=-Kf-la0GG`w0uh=qygPPaC(!6oNmfh*x(@4^Gjz1?t&7v&gFh z>2*Lc`ZC$NP*;0LAD6ru-FsH6JTW2=!T#@?0LeGw;O*|WA zr79eqdgY*cR(w&H-F~4?@OrZ+;~^Ijc!R_ZWz7^-xzoYSd#ldFmiwH!O8Q2XL}*;4 z3*UNWz;T1;11>mu3nOv4Q@uupF#QD>T47czK-8&*3l?Pf<=hd`35oNkP|3ml@MYsK zQJo9@6AwiCMN?JS>y+52Q{rnqATaYDPfI;JShaTPn2WS6ENXS1oYW<)&;j}Bh;Ze~ zM&;U?>dn@R3}(5ch3Ye7Xe{0=OtaBd=gZ2>!ff!-`wEn|uV z_5++f74?c_1ce{WP4)cMG}T|o_50v$$zHIvBV*+RO!LDg9k`aLF8W_j{6>cacu|Y) z*uk$kdYn7`mVqTy&rVmdou)p!`G*cu6oZ>f65X)FX22oGtiz_rPtQufMJG_#%t*O_d6fTVJREyBYW$!uPJW^&wIEGno_x|E|9L=x=0yaKk8Ye}I39FJrVL zffx9<380Zc!IFH>jK8wY%D*A%CRp}s@m?Tp!WzY7BYI|B*7H=^E2TN>WdAC2?%k;3 z@a=_bG|by`FdDrCOFg5Q5VV!^Srau^*lHD-yu5ejG-!bd(y`jQ#T1i}wP)NbsJ$F| zwiK?@7pk4A)`F2lnZy?`ZugcX7jUBzShx1Y{;se5zUd$b-c?D_yXDcft$eCJbuleM zLl&+?pvFB;Ys<))$~%VavM_5P~BWv;2ssH?%>|*7emzE$LsN&G&sSXQl7~!KVS`TNKlQ z4DFU485ADJr9&_}$UdP5VZ*v%f}_`O>PH2PHum4P#MuBBAwKd7pF}b&rUFt-JX>+09oMn<;}~ zi}O}bn|7o2Lhwd(&Hym-d37&s1m9yS%+ff|27&k27C#SE9JW}E$b9#y+u^>bqZ~Kj zTlMjLN6(PtD7)OXVh&>m{=JQ^@y-$GMYcmYiZ?=4W%Bu`6ir+W(@VbqFH>yZ*gw1I z7c4-$T+oN@<*U3=rbm%Ok}x?A27DE*0uzH(ycv%U*JalVUPp z%^GAC*%Y$>?OsjbmQ9&DF6gb;<+dmmT6uP>OQgxcoNMnPV=-Tx`hB0eNH4Bd`22S}?fD#g zB{1*q)_&wpS=Cv-iG)}0@nm0eG>R`~yNA)x!9Jt#g6(Tc5qCx@u9?SoV!@oqkLiOG z0@PH3e)`Q4a7RKT^sk_H0zzr43TU(NRvy)W5TWqo{MT1mjB0PVez|k}=nichrRb5Erc#^*-3)>8)g77GN?$pSkDVIAwBy@%j-s2-4I`h|3pM!&) z{c@fuS~w9j2vyEQW9&rOmwh75!Jy(E=-z(#Ny8aBL^3KVDfo4wO)M&@Az!=Lo0fr= zA^w|y)THxw&B4UvX#v22VYk(7#z%8@#GCS8#3otiwau)(2z$($6XPRUoMQt?kq9VF7EP&YT<>U`(cZGV-avinWr`A7qE9M zBJTpix^$R%`q7z2k~z%NU9iS<$Aa)3&iVt5B24omPCCyNyf> z%zjlQL4f$Fc`xDiGX!BgbKkw3CBXZF5w{|w#Lrz~r!_5C^6DF8pgjC&^u2pxG=P2A?| z{q3t5R=_FP{OM=6Owzm`XS#2+JybaQ%Xr@-e}B%kwKX8(pzZ90+$ngP5)7y$Ote#z zKcZC)7$I&{1tE@U@Q52}krl*;zitSg9&x6#6TL}admsVL)}dP=q>$E1eOAC88pNkP z_y3@5J+~k95}TD7y&q`In5VRZKOq_g+!Qxz4*ewXr?dgopFd7h;VJR%G8+o7k%dec zduXe%?O{8YmDy6t*jV@hG|aN7M{eBMuf0YS6Co|Fp^HaCaS^b+P&x!>B@1nq3gkcF ziNII=Y5Xx{b;DdRWW5IMoUaxxz{|^Py3u(lI+~S{g&)xischrE$eb=i&FDz2VLfH< zM*%zkc$6e9YYZ|8cqMe#^5u`_Re0S+3*OKFpi}xDRMJO}@rHsf%`zhlj6wY%{!%>O zMC`=|vLYMI{6oXmb31T9*8^q5-_SK)#*C7_^!dYh)2D=8p?4k3&I1w* zK;#ZImsYUhrU*y-q|>B%SYk=|aq(VAhq>^q>eF9H`HY&>Xk$0#u`aILT5&nL2%T{c|92nZL=6Z}%NeX$XT6(3I;&*9yis2lx5J5-z5f%ZR9u-e;P z=|Jdr`2yqXob5HYR#rYy)1aXeJ|B$UtSHthhGF3DVl=?pIpJZ=V8ZRzeD7(;dt`!a z9OskyguK&GGpaBX{2EBe#ftyZ@(90|APS->aifrPj={>dSpa6PiT>htnJ&@fNF+0N z+F$7JW=J2zCm`2i=ga$hD@Uh~CvL;LQ!sc&0s5#PMbGTB4GN3ZBc)tg5Aye+{rqWT z?#~$H1p3i5umo(jzsXQBRAbeWX48=}AO#UEF_}ELgku=YQt1j+Wm5GBVTg|aZ6(c% ztuk{|Q2dm2OXW6CB(_!S=qDQP!do6xlvPMRltl|tN%o@rsulH+;i9tFg zAYzcb*NdKmPQ6-5x~m^Q*)XqqgEb{6LIf{4xpv1vAr75+Mqxe4kE+Yu_h_inu3G*Y zQ2z>M-|`SGiZ0?Mi${#&xSXXo9;6L+{#&5;v@V|Y*|--KaHox_&x0_dD;f=JvFx2l z^z3f^dE+_R8+Ly`PyRddcgQ68HCr3KT%0&b?I<|k>7(@$c%J4rzM_4D3%nNP_aMd| zoZ}J~_q!}>ypmF%%iK7q6#dOcBECRtL=fRc2m3WGV)bTc{Pq|DX&`E* z)M=OUv)J@!A9~oMq}>ic*#B|Kx3v|Fmkt-d@a#pB_Vs{`Td@noZSThl|4g25Eln>c z56?$izFq2JDt~7wk&>Br@7_HtnzC2O1UB*v#DeNZrb<6C0|}S=9)v&qg4I)0+t7bc zSN&n|)Aih(9P4`Ws6UOnkO#9d6l^7V0e3Uf?Laa^U2&PqvsTjMX!jpjCQKp5;?IVA zM(15pno9eT+7B*ok0q3T$MIHx#)pqI&C(l|9P(Y;jtlx;SX4Ak4|Y3u^ggb7j@iAx zx!{;YB?+ZlYI*EZ5Y?exsG0C**SqFacCbYuxxSjpRG8 z-@7W~y4bF+K+up7|uQ&H*ujy(GgtTPh5;sSpL_uirPx7QBL z=u!KqUFgy9%=Yxpi>AoYzCK2}sP+MJ<7eSd_dV~)Zk&;@$L_v{_D^_uW4x6rRs#=$ c8O~VF4_sc`XLzMX{i6fuXc(whqU|F82a4sUEdT%j