From 22638048d87c68daa52cde6bee1de56c0e76002c Mon Sep 17 00:00:00 2001 From: lunarcleint <88809950+lunarcleint@users.noreply.github.com> Date: Sat, 26 Aug 2023 11:37:39 -0700 Subject: [PATCH] making dragging look a bit better (still need to add limits) --- assets/images/editors/warning.aseprite | Bin 0 -> 1970 bytes assets/images/editors/warning.png | Bin 0 -> 1929 bytes source/funkin/editors/charter/Charter.hx | 90 +++++++----------- .../funkin/editors/charter/CharterBackdrop.hx | 45 ++++++++- .../editors/charter/CharterNoteGroup.hx | 8 +- 5 files changed, 82 insertions(+), 61 deletions(-) create mode 100644 assets/images/editors/warning.aseprite create mode 100644 assets/images/editors/warning.png diff --git a/assets/images/editors/warning.aseprite b/assets/images/editors/warning.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..74aa0e65202489ef627499bd184f1c3f983a75e0 GIT binary patch literal 1970 zcmcJN`#)RvAIIa?)H;o{E-jI!l4WX!#3n`R(yk3^ZCz@N?}8M?cOj{iR#nGJu_O&z z)TLFd7q^-!UnW+UN?dA6r!!%R&}zOd(W%msz0>Z8{sa4*$9aA}kMlX_@p`__IX@v0 zh(9Ye5J%v^Av6#OnBN}+gogSeLLZKQV~`<#MXB>PRR;o$;6&oyM!pxf0PC$d!arB= z@9n%@st^cs+-JbO7F1w_0}06YcLGkbh``^kL;#<6UIM;eum=`S9|A@TZGn_LCUAe0 z4bW#l0Z67g09{<-fwm#3z#yg+$S6_)=>u|L-yd&)Di{bvQB4!@`_mb~sOV^5puZ3B z`0gxVHJJ?j{VN7=G^qv1&-Vmo#j4Zg<95J?8ntsw1fmRqFflPv9fxAt>hGa04dtL2 z)Phb>2--ju=m9050qBD}h=VmKgD=Q}DQK!4RVuIpHShu{FajNL0THkO1;~eRNQT&L z>QtQ8+n4$dAca68yh2ZevvH)e@P%}6|7>W!o7F$e5kz9~vyz|~1CqfRt-T)@b z(;qP6P4-4VU_49?Gi}*~sODQCa`&7#PMQGk(UGBpryc4Xg$J&rbGz@=*r%+7a4{YR zhneH;l9?hKC%OC8I2I$Rp>ru=RE(C#aTs%qeAP0m1mm`G8%3LMNj$;3x>c%3-+&6! zM4dC0uRq`_!O`N(yY$!u=Jzdbye{q*=6O8J{GzGcz4+YhI)_b0^>9arW~Uxo+b96` zZk=f%xlky1a`!}6iN#h?T_cIqc#!uYvI|Q5Hl-1svnEm)>r=d}3bZy4Cy4~+!IHS} zyPAa+yH-x>jOYz39ujD8I!3txRFPn4eW7pRL^*Mwaa>Eb&kHLT;esW)psdK4s|Xs0Wg{6$8}=BiCR}jD)`Hr@^z^^{>Wg@pdWw<7OYKGeof|a$&-5X6& zbGMg&tJ*lZ`s;LiJ0HnsMT9X}vE>7oUC_+M(z7827&yR1$jB&v@%mS*59UvSCI>NPRyF zWqoYzm~e>KB}5sgWz1ha5-J1MC+>Jqu+4w9VP=y)&FK`_QXKKCwfCvG z)qD4}(lYBz)21wXDu!0QEl?7wXMP-Zjp6S}!!h%O`HzE}jFD3G)SOtpr6G*0sUS>ihzefCn%1ja1JJLqC#-QZyPH$2xmN<7u?VAfnv8>@P{t0RGH zyin|R0bl$1;63eL&690q+v>g^WA)`NN{52>D1&`(DbLvI23<25@1tXBfrE_s`NFvw z8G2YS&#_z%%s&z@rP-g9@j{-(c7<)Xs}Db~<#Um9a4FEYIwtgatn1*e<1PJz1E>9(P#nV21YP*q zYf?_zigeg{M9}hVwbFxSbv30%$u=7+{q~!YqD0l^b+UcpJ+G8et@~#Sg}g@rhh#tY zmiOv;p2CthhY4KvV>t?$-6ekm Da2QNX literal 0 HcmV?d00001 diff --git a/assets/images/editors/warning.png b/assets/images/editors/warning.png new file mode 100644 index 0000000000000000000000000000000000000000..71c841547a2569029f922d172e5ffe4d2e711974 GIT binary patch literal 1929 zcmV;42X^?0P)Px+LrFwIRCt{2oXc+8Mi_<9h%_z9cH*K1637KAXj5-fxOtW!kCK&Fd6c4?uCgn- z>#oQHbY*y9d(lnn^rAo(JzWfkq9}4W_lxZV5Rf2VMswzyf35@`fEM#Jx|pBQ(CK&* zm>B>lfCpj9D0Bi$)MY^GrX+0$09;&t?EIXnk~Ks`LdujRYY5OyMCz0zX^0E~sZx@p zA%K{KlqpHh5S5ajA|=Tg0>}}NDkVu7qEq5iqa-Oq0JV~zA|=TfVp7smq9hqZfc_Hy z;ip&l^_TCIu8CDi7&27C$NRwXb7FLlSd@ezfS8W)m|#2x{{G{8rE6nU^oGdNar~TM zJWijI=nVnn=-_7DeR{2QkJuEoAvWody=Q1eZ3v)72Up6JL~Do(I%Mx1QqdX$=+VKI zDkV`G;*t*8XM|Feh5%-CaHU8|bcXn#L-tuA6rCY}9XhyDqa-Rre9|HNOy7#i5Wp@S zTq#i!jUgfEkbSmK<)IVMlnNd5(<|Y-*iO*VudZTjw(u^E1s9+gB8Z=+be0 zbJKbL$!w;ThKtLOcG1&NG*y-?9rM$xK{^0*o|i%_32ulE9oIKEy>!U@uA3Gg3T_A> zN5}E8outN2Nl-&n=n)P39{} zI|@ZfFhYjtIQ@3p4B7riTcYb?q{O=+CaVxt`xm z#JM34fetPolz1UTM8{WO5*!@FV@7C7oEkDzqNY>e=!oF(0NCGmnG$<)O^I_t`byT% zA70^LN-&)OMIol+haWGD)1h*Ykd!zxWT+(V?E#Z9u)j}`MX~lpUM?wdN{EP#$%Ms@ z$r#wn0YZGokP^TOge*IM4Mm9)LxxHaA&id6gy86Cge(gY&`S`)49T-=<*Qv$;*5}? zUioxN@a!mD%Zd;Qeu^mbm(AeR$J_Q z0Yd)iJl7W`Rt!mx4z6~!Rf1FEPO>1f=Y33cIGn$PnLj=CX^Tvl6LH9OTOn0xT8eNkcUPG z({{CG5=Q`iO0*|WL($O;(l%clu&c7_k7U*G{4O~z-VUK`NJu)Gf&JZiAsaER66K(7wsUrc z5xE5+ON_{}DvkP+LvEzjCjsoXxTFm++x=9Pwrb!mJ`=WOvrhu3wYZe3EEPKP?7FId zi+T}(?x0;;vb%BH@63`{71)tMw%W4Q;*v5%hmLzX!H6tz51{@Nh9wQym@%}w_GC80 z{ParGlufn8{!!Buy}k3Yu|&GcQlVpaHQ**d+K|jvXOr#Fz;3lAnkV715laRQF@5U- zLHD0&PoMJN^6a`k!phz}371SPks`!wUwO&e^k@h3<{xIJg*Txowb?{2Q%Zz}*w|N2 zs<_b=J2vzzdlx;2m48YG39^;>r5OL{woX7e3Y$Etp0DcpzA zR#*JsVi|macjsbL)Xd;RJ6#QrRikxuULM@EVo*lDu_- z)7ijS3}}mGa#5A|p_928!$!!cP03DBe^@I?WJCevpmdD;`@`XbPOBekArP>#^y7HRrEfAxnpH P00000NkvXXu0mjf7>|`# literal 0 HcmV?d00001 diff --git a/source/funkin/editors/charter/Charter.hx b/source/funkin/editors/charter/Charter.hx index 4e7b4f55..eae34370 100644 --- a/source/funkin/editors/charter/Charter.hx +++ b/source/funkin/editors/charter/Charter.hx @@ -48,12 +48,9 @@ class Charter extends UIState { public var gridBackdrop:CharterBackdrop; public var eventsBackdrop:FlxBackdrop; public var addEventSpr:CharterEventAdd; - public var beatSeparator:FlxBackdrop; - public var sectionSeparator:FlxBackdrop; + public var eventBeatSeparator:FlxBackdrop; + public var eventSecSeparator:FlxBackdrop; public var gridBackdropDummy:CharterBackdropDummy; - public var conductorFollowerSpr:FlxSprite; - public var topLimit:FlxSprite; - public var bottomLimit:FlxSprite; public var bottomSeparator:FlxSprite; public var strumlineInfoBG:FlxSprite; @@ -267,12 +264,12 @@ class Charter extends UIState { null, { label: 'Show Sections Separator', - onSelect: _view_showsectionseparator, + onSelect: _view_showeventSecSeparator, icon: Options.charterShowSections ? 1 : 0 }, { label: 'Show Beats Separator', - onSelect: _view_showbeatseparator, + onSelect: _view_showeventBeatSeparator, icon: Options.charterShowBeats ? 1 : 0 } ] @@ -353,15 +350,15 @@ class Charter extends UIState { add(eventsBackdrop); add(gridBackdropDummy = new CharterBackdropDummy(gridBackdrop)); - sectionSeparator = new FlxBackdrop(null, Y, 0, 0); - sectionSeparator.x = -20; - sectionSeparator.y = -2; - sectionSeparator.visible = Options.charterShowSections; - beatSeparator = new FlxBackdrop(null, Y, 0, 0); - beatSeparator.x = -10; - beatSeparator.y = -1; - sectionSeparator.visible = Options.charterShowBeats; - for(sep in [sectionSeparator, beatSeparator]) { + eventSecSeparator = new FlxBackdrop(null, Y, 0, 0); + eventSecSeparator.x = -20; + eventSecSeparator.y = -2; + eventSecSeparator.visible = Options.charterShowSections; + eventBeatSeparator = new FlxBackdrop(null, Y, 0, 0); + eventBeatSeparator.x = -10; + eventBeatSeparator.y = -1; + eventSecSeparator.visible = Options.charterShowBeats; + for(sep in [eventSecSeparator, eventBeatSeparator]) { sep.makeGraphic(1, 1, -1); sep.alpha = 0.5; sep.scrollFactor.set(1, 1); @@ -373,11 +370,7 @@ class Charter extends UIState { selectionBox.scrollFactor.set(1, 1); selectionBox.incorporeal = true; - conductorFollowerSpr = new FlxSprite(0, 0).makeGraphic(1, 1, -1); - conductorFollowerSpr.scale.set(gridBackdrop.strumlinesAmount * 4 * 40, 4); - conductorFollowerSpr.updateHitbox(); - - conductorFollowerSpr.cameras = selectionBox.cameras = notesGroup.cameras = gridBackdrop.cameras = [charterCamera]; + selectionBox.cameras = notesGroup.cameras = gridBackdrop.cameras = [charterCamera]; topMenuSpr = new UITopMenu(topMenu); topMenuSpr.cameras = uiGroup.cameras = [uiCamera]; @@ -394,16 +387,6 @@ class Charter extends UIState { songPosInfo.alignment = RIGHT; uiGroup.add(songPosInfo); - topLimit = new FlxSprite(); - topLimit.makeGraphic(1, 1, -1); - topLimit.color = 0xFF888888; - topLimit.blend = MULTIPLY; - - bottomLimit = new FlxSprite(); - bottomLimit.makeGraphic(1, 1, -1); - bottomLimit.color = 0xFF888888; - bottomLimit.blend = MULTIPLY; - bottomSeparator = new FlxSprite(); bottomSeparator.makeGraphic(1, 1, -1); bottomSeparator.alpha = 0.5; @@ -431,15 +414,14 @@ class Charter extends UIState { // adds grid and notes so that they're ALWAYS behind the UI add(gridBackdrop); - add(sectionSeparator); - add(beatSeparator); + add(eventSecSeparator); + add(eventBeatSeparator); add(addEventSpr); add(eventsGroup); add(notesGroup); add(topLimit); add(bottomLimit); add(bottomSeparator); - add(conductorFollowerSpr); add(selectionBox); add(strumlineInfoBG); add(strumlineAddButton); @@ -909,8 +891,8 @@ class Charter extends UIState { if (gridBackdrop.strumlinesAmount != strumLines.members.length) updateDisplaySprites(); - sectionSeparator.spacing.y = (10 * Conductor.beatsPerMesure * Conductor.stepsPerBeat) - 1; - beatSeparator.spacing.y = (20 * Conductor.stepsPerBeat) - 1; + eventSecSeparator.spacing.y = (10 * Conductor.beatsPerMesure * Conductor.stepsPerBeat) - 1; + eventBeatSeparator.spacing.y = (20 * Conductor.stepsPerBeat) - 1; // TODO: canTypeText in case an ui input element is focused if (true) { @@ -947,16 +929,19 @@ class Charter extends UIState { + '\nTime Signature: ${Conductor.beatsPerMesure}/${Conductor.stepsPerBeat}'; if (FlxG.sound.music.playing) { - conductorFollowerSpr.y = curStepFloat * 40; + gridBackdrop.conductorFollowerSpr.y = curStepFloat * 40; } else { - conductorFollowerSpr.y = lerp(conductorFollowerSpr.y, curStepFloat * 40, 1/3); - } - charterCamera.scroll.set(conductorFollowerSpr.x + ((conductorFollowerSpr.scale.x - FlxG.width) / 2), conductorFollowerSpr.y - (FlxG.height * 0.5)); - if (charterCamera.zoom != (charterCamera.zoom = lerp(charterCamera.zoom, __camZoom, 0.125))) { - updateDisplaySprites(); + gridBackdrop.conductorFollowerSpr.y = lerp(gridBackdrop.conductorFollowerSpr.y, curStepFloat * 40, 1/3); } + charterCamera.scroll.set( + (((gridBackdrop.conductorFollowerSpr.scale.x * gridBackdrop.strumlinesAmount) - FlxG.width) / 2), + gridBackdrop.conductorFollowerSpr.y - (FlxG.height * 0.5) + ); - WindowTitle.prefix = undos.unsaved ? "● " : ""; + if (charterCamera.zoom != (charterCamera.zoom = lerp(charterCamera.zoom, __camZoom, 0.125))) + updateDisplaySprites(); + + WindowTitle.prefix = undos.unsaved ? "* " : ""; strumLines.sort(function(o, a, b) return FlxSort.byValues(o, a.x - 80, b.x - 80), -1); for (it=>i in strumLines.members) if (!i.dragging) i.x = CoolUtil.fpsLerp(i.x, 160 * it, 0.3); @@ -968,14 +953,11 @@ class Charter extends UIState { function updateDisplaySprites() { gridBackdrop.strumlinesAmount = strumLines.members.length; - conductorFollowerSpr.scale.set(gridBackdrop.strumlinesAmount * 4 * 40, 4); - conductorFollowerSpr.updateHitbox(); + eventSecSeparator.scale.set(20, 4); + eventSecSeparator.updateHitbox(); - sectionSeparator.scale.set((gridBackdrop.strumlinesAmount * 4 * 40) + 20, 4); - sectionSeparator.updateHitbox(); - - beatSeparator.scale.set((gridBackdrop.strumlinesAmount * 4 * 40) + 10, 2); - beatSeparator.updateHitbox(); + eventBeatSeparator.scale.set(10, 2); + eventBeatSeparator.updateHitbox(); charterBG.scale.set(1 / charterCamera.zoom, 1 / charterCamera.zoom); topLimit.scale.set(gridBackdrop.strumlinesAmount * 4 * 40, Math.ceil(FlxG.height / charterCamera.zoom)); @@ -1260,13 +1242,13 @@ class Charter extends UIState { zoom = 0; __camZoom = Math.pow(2, zoom); } - function _view_showsectionseparator(t) { + function _view_showeventSecSeparator(t) { t.icon = (Options.charterShowSections = !Options.charterShowSections) ? 1 : 0; - sectionSeparator.visible = Options.charterShowSections; + eventSecSeparator.visible = gridBackdrop.sectionSeparator.visible = Options.charterShowSections; } - function _view_showbeatseparator(t) { + function _view_showeventBeatSeparator(t) { t.icon = (Options.charterShowBeats = !Options.charterShowBeats) ? 1 : 0; - beatSeparator.visible = Options.charterShowBeats; + eventBeatSeparator.visible = gridBackdrop.beatSeparator.visible = Options.charterShowBeats; } inline function _note_addsustain(t) diff --git a/source/funkin/editors/charter/CharterBackdrop.hx b/source/funkin/editors/charter/CharterBackdrop.hx index 0ac2ed7d..efd536da 100644 --- a/source/funkin/editors/charter/CharterBackdrop.hx +++ b/source/funkin/editors/charter/CharterBackdrop.hx @@ -1,11 +1,16 @@ package funkin.editors.charter; +import funkin.backend.system.Conductor; import openfl.geom.Rectangle; import flixel.addons.display.FlxBackdrop; class CharterBackdrop extends FlxBackdrop { public var strumlinesAmount:Int = 1; + public var conductorFollowerSpr:FlxSprite; + public var beatSeparator:FlxBackdrop; + public var sectionSeparator:FlxBackdrop; + public function new() { super(null, Y, 0, 0); @@ -21,7 +26,28 @@ class CharterBackdrop extends FlxBackdrop { pixels.fillRect(new Rectangle(0, 0, 1, 160), 0xFFDDDDDD); pixels.fillRect(new Rectangle(159, 0, 1, 160), 0xFFDDDDDD); pixels.unlock(); - // loadFrame(frame); + + // Seperators + sectionSeparator = new FlxBackdrop(null, Y, 0, 0); + sectionSeparator.y = -2; + sectionSeparator.visible = Options.charterShowSections; + + beatSeparator = new FlxBackdrop(null, Y, 0, 0); + beatSeparator.y = -1; + beatSeparator.visible = Options.charterShowBeats; + + for(sep in [sectionSeparator, beatSeparator]) { + sep.makeGraphic(1, 1, -1); + sep.alpha = 0.5; + sep.scrollFactor.set(1, 1); + sep.scale.set((4 * 40), sep == sectionSeparator ? 4 : 2); + sep.updateHitbox(); + } + + // Follower + conductorFollowerSpr = new FlxSprite(0, 0).makeGraphic(1, 1, -1); + conductorFollowerSpr.scale.set(4 * 40, 4); + conductorFollowerSpr.updateHitbox(); } public override function draw() { @@ -30,9 +56,22 @@ class CharterBackdrop extends FlxBackdrop { if (Charter.instance.strumLines.members[_] != null) { x = Charter.instance.strumLines.members[_].x; alpha = Charter.instance.strumLines.members[_].strumLine.visible ? 1 : 0.4; - } - else alpha = 0.9; + } else alpha = 0.9; + + sectionSeparator.spacing.y = (10 * Conductor.beatsPerMesure * Conductor.stepsPerBeat) - 1; + beatSeparator.spacing.y = (20 * Conductor.stepsPerBeat) - 1; + super.draw(); + + for (sep in [sectionSeparator, beatSeparator]) { + sep.x = this.x; + sep.cameras = this.cameras; + if (sep.visible) sep.draw(); + } + + conductorFollowerSpr.x = this.x; + conductorFollowerSpr.cameras = this.cameras; + if (conductorFollowerSpr.visible) conductorFollowerSpr.draw(); } x = ogX; } diff --git a/source/funkin/editors/charter/CharterNoteGroup.hx b/source/funkin/editors/charter/CharterNoteGroup.hx index 775601d0..8478daa9 100644 --- a/source/funkin/editors/charter/CharterNoteGroup.hx +++ b/source/funkin/editors/charter/CharterNoteGroup.hx @@ -17,18 +17,18 @@ class CharterNoteGroup extends FlxTypedGroup { __currentlyLooping = true; var curStep = Conductor.curStepFloat; - if (FlxG.state is Charter && !FlxG.sound.music.playing) - curStep = cast(FlxG.state, Charter).conductorFollowerSpr.y / 40; + if (!FlxG.sound.music.playing) + curStep = Charter.instance.gridBackdrop.conductorFollowerSpr.y / 40; var begin = SortedArrayUtil.binarySearch(members, curStep - max, getVarForEachAdd); var end = SortedArrayUtil.binarySearch(members, curStep + max, getVarForEachRemove); for(i in begin...end) { __loopSprite = members[i]; - if (!cast(FlxG.state, Charter).selection.contains(__loopSprite)) + if (!Charter.instance.selection.contains(__loopSprite)) noteFunc(__loopSprite); } - for(c in cast(FlxG.state, Charter).selection.copy()) + for(c in Charter.instance.selection.copy()) if (c is CharterNote) noteFunc(cast (c, CharterNote)); __currentlyLooping = oldCur;