From 85c38b266af0f369c09d57cdbffa42ae43468a72 Mon Sep 17 00:00:00 2001 From: Ne_Eo Date: Sat, 12 Oct 2024 23:06:55 +0200 Subject: [PATCH] Made the time signature event icon dynamic --- assets/fonts/timeSig.ttf | Bin 6927 -> 0 bytes .../event-icons/Time Signature Change.png | Bin 222 -> 164 bytes .../event-icons/components/eventNums.png | Bin 0 -> 168 bytes source/funkin/editors/charter/CharterEvent.hx | 88 ++++++++++++++++-- 4 files changed, 81 insertions(+), 7 deletions(-) delete mode 100644 assets/fonts/timeSig.ttf create mode 100644 assets/images/editors/charter/event-icons/components/eventNums.png diff --git a/assets/fonts/timeSig.ttf b/assets/fonts/timeSig.ttf deleted file mode 100644 index 9729308fcb613c44fb13cff7b9d9aace314d2469..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6927 zcmeHLOK%%h6#i!Hq)v*{f?I-$L`OVIRUma9O%nlXp;fCuQBa&l4M@*6ZckYdAsY~>I!D}?nj&3{FNBuUhC-cSH(oN@t>srcLbUigDC z>;SI3_{(!EWvtbofE|no#>CKMNUXtIBNp_i5n)RPkx5MBV9;lW9#L%jmh}O;5Vx5Y zXf|4s`Y;qax)uq)D`#K2Fo4sneq7hkDoU+InnR`0x-3dnC2MR+vDc9dQKhKR1H7w@ zZ?TM5C=>iszNDJBsg|y^bhFvK-TbL}vsD6nH)`9LY0WIwS1dbC%=nyiliNfd=sn8^ z^BWd=8R+{{JzrcEagM14#;}J^?LMT?k4JHsPtDVK2FHp0Nj#5JID_+e6_X@(yIa6a zvq63usv1HWNb(fOJ7Q}oaU>(~|E=T1?$jUV*Lh@q$)m_;buv4Z2)nVvesli)YCfAR zMsm1i?gSH&f|YO;+8V7W`;Nw(8!13dY{_rRj=3eLRZ;vkX#gZ(1UyI?E(Mz9xK z{1R_#uEZ9``e9|JpTd?P0Yj=4x;vha3oyF{*&>NPo%`lSs9go z4TplAiLGf%oJiAe+7c(y^qaQCrPMRh!Fy}VC*R7KUWlr(BLwBpug?uZJ<1=o!({xL zQ&rcohP8I+35uQiHyaQ2o3A6jCXv~JUm7G)xM?S4M+q10xRdc=yykkxcVIj2Hp`9V zGo_i&v?U&Rumf(lXCG>;g@bTE=zSoZ$bOMH;U+x&bRIKK>@bhcEAvRc$os@#l3tI1{{+`x*s9)E5 zFJ8x|T2EpCe5iw#!U5}9{e8wl(mJhm8+)wRv>s#swASM|Xt`SN!d`1p>)q7f)p`&0 z_qE=Oqt=I7Pom%YQtK)7THo`3bSvJ&o=f>qmL@*Q8PFgB>L$vb8CK?J%eS&)=^>Hk)S#ci@3UU7~%8E^4o)thtX z%f3^~dyb?ixwX3QIoZ5h%6ZO2wp^;tmg`R5UG##uisu&#Rh2kBI5a$RV)W$Lc!=&U gznkKhCxd!PsWz{^hp*eLb$fR^cM;e{pdAAL05Fqxl>h($ diff --git a/assets/images/editors/charter/event-icons/Time Signature Change.png b/assets/images/editors/charter/event-icons/Time Signature Change.png index f7cc46c7805274d13ea1e4b09a9c678fe0285633..aaf5b721e06bd62d3e9de47203babd967983eea3 100644 GIT binary patch delta 89 zcmcb|xP)zopr0I0Vb-T(jq delta 145 zcmV;C0B--J0p0*}=F#@Bw^m zkgf%+1ElO%Y9m=@j1>6a5n$f}tP+{wpEJ5Yw{ihZXA|jW00000NkvXXu0mjfkt8;D diff --git a/assets/images/editors/charter/event-icons/components/eventNums.png b/assets/images/editors/charter/event-icons/components/eventNums.png new file mode 100644 index 0000000000000000000000000000000000000000..53e7437d22595840590e6f15b29ef6976451dff5 GIT binary patch literal 168 zcmeAS@N?(olHy`uVBq!ia0vp^HbBhI1SA-&XJsY=DW;MjzhDMN#wmZ-0eOj@E{-7; zjH2FK8JP`vrZCUl9scctzJQ;ofqssJN9l{B1q}OgYVX~<@FV95Tl*WeW#0-fyXP%1 z4Bmc)Cv|4nf9_8UKPH-6|9SD>p<2XK-b9B(EhXfDd_ Q_kx_@>FVdQ&MBb@0CY(_LjV8( literal 0 HcmV?d00001 diff --git a/source/funkin/editors/charter/CharterEvent.hx b/source/funkin/editors/charter/CharterEvent.hx index b624ee24..e83b6a04 100644 --- a/source/funkin/editors/charter/CharterEvent.hx +++ b/source/funkin/editors/charter/CharterEvent.hx @@ -1,5 +1,6 @@ package funkin.editors.charter; +import flixel.group.FlxSpriteGroup; import funkin.editors.charter.Charter.ICharterSelectable; import flixel.math.FlxPoint; import funkin.game.Character; @@ -57,10 +58,26 @@ class CharterEvent extends UISliceSprite implements ICharterSelectable { return spr; } - public static function generateEventIcon(event:ChartEvent) { - return switch(event.name) { - default: - generateDefaultIcon(event.name); + public static function generateEventIcon(event:ChartEvent):FlxSprite { + switch(event.name) { + case "Time Signature Change": + if(event.params[0] >= 0 || event.params[1] >= 0) { + var group = new FlxSpriteGroup(); + group.add(generateDefaultIcon(event.name)); + group.add({ // top + var num = new EventNumber(9, -1, event.params[0], EventNumber.ALIGN_CENTER); + num.scrollFactor.set(1, 1); + num.active = false; + num; + }); + group.add({ // bottom + var num = new EventNumber(9, 10, event.params[1], EventNumber.ALIGN_CENTER); + num.scrollFactor.set(1, 1); + num.active = false; + num; + }); + return group; + } case "Camera Movement": // custom icon for camera movement var state = cast(FlxG.state, Charter); @@ -71,10 +88,10 @@ class CharterEvent extends UISliceSprite implements ICharterSelectable { healthIcon.setUnstretchedGraphicSize(32, 32, false); healthIcon.scrollFactor.set(1, 1); healthIcon.active = false; - healthIcon; - } else - generateDefaultIcon(event.name); + return healthIcon; + } } + return generateDefaultIcon(event.name); } public override function onHovered() { @@ -116,4 +133,61 @@ class CharterEvent extends UISliceSprite implements ICharterSelectable { x = (snappedToGrid && eventsBackdrop != null ? eventsBackdrop.x : 0) - (bWidth = 37 + (icons.length * 22)); } +} + +class EventNumber extends FlxSprite { + public static inline final ALIGN_NORMAL:Int = 0; + public static inline final ALIGN_CENTER:Int = 1; + + public var digits:Array = []; + + public var align:Int = ALIGN_NORMAL; + + public function new(x:Float, y:Float, number:Int, ?align:Int = ALIGN_NORMAL) { + super(x, y); + this.digits = []; + this.align = align; + while (number > 0) { + this.digits.insert(0, number % 10); + number = Std.int(number / 10); + } + loadGraphic(Paths.image('editors/charter/event-icons/components/eventNums'), true, 6, 7); + } + + override function update(elapsed:Float) { + super.update(elapsed); + } + + override function draw() { + var baseX = x; + var offsetX = 0.0; + if(align == ALIGN_CENTER) offsetX = -(digits.length - 1) * frameWidth * Math.abs(scale.x) / 2; + + x = baseX + offsetX; + for (i in 0...digits.length) { + frame = frames.frames[digits[i]]; + super.draw(); + x += frameWidth * Math.abs(scale.x); + } + x = baseX; + } + + public var numWidth(get, never):Float; + private function get_numWidth():Float { + return Math.abs(scale.x) * frameWidth * digits.length; + } + public var numHeight(get, never):Float; + private function get_numHeight():Float { + return Math.abs(scale.y) * frameHeight; + } + + public override function updateHitbox():Void + { + var numWidth = this.numWidth; + var numHeight = this.numHeight; + width = numWidth; + height = numHeight; + offset.set(-0.5 * (numWidth - frameWidth * digits.length), -0.5 * (numHeight - frameHeight)); + centerOrigin(); + } } \ No newline at end of file