From 03df52c542ddba387d7518b0a7443aef7f349c12 Mon Sep 17 00:00:00 2001 From: Verwex <34553484+Verwex@users.noreply.github.com> Date: Fri, 8 Aug 2025 12:34:30 +0200 Subject: [PATCH] flipX and flipY for alphabet XMLs --- .../funkin/editors/alphabet/AlphabetEditor.hx | 3 ++ .../alphabet/AlphabetMainDataScreen.hx | 3 ++ .../editors/alphabet/GlyphInfoWindow.hx | 24 +++++++++++++++ source/funkin/menus/ui/Alphabet.hx | 30 +++++++++++++++++-- 4 files changed, 57 insertions(+), 3 deletions(-) diff --git a/source/funkin/editors/alphabet/AlphabetEditor.hx b/source/funkin/editors/alphabet/AlphabetEditor.hx index 630fada1..3015d7c8 100644 --- a/source/funkin/editors/alphabet/AlphabetEditor.hx +++ b/source/funkin/editors/alphabet/AlphabetEditor.hx @@ -209,6 +209,9 @@ class AlphabetEditor extends UIState { scaleX: 1, scaleY: 1, + flipX: false, + flipY: false, + hasColorMode: false, colorMode: bigLetter.colorMode }; diff --git a/source/funkin/editors/alphabet/AlphabetMainDataScreen.hx b/source/funkin/editors/alphabet/AlphabetMainDataScreen.hx index 2c4b08fa..17581a09 100644 --- a/source/funkin/editors/alphabet/AlphabetMainDataScreen.hx +++ b/source/funkin/editors/alphabet/AlphabetMainDataScreen.hx @@ -204,6 +204,9 @@ UPPERLETTER and LOWERLETTTER can be used in any backup prefix."; cos: 1.0, sin: 0.0, + flipX: false, + flipY: false, + hasColorMode: false, colorMode: 0 }], diff --git a/source/funkin/editors/alphabet/GlyphInfoWindow.hx b/source/funkin/editors/alphabet/GlyphInfoWindow.hx index 766c0bca..02326321 100644 --- a/source/funkin/editors/alphabet/GlyphInfoWindow.hx +++ b/source/funkin/editors/alphabet/GlyphInfoWindow.hx @@ -11,6 +11,9 @@ class GlyphInfoWindow extends UIWindow { public var angleBox:UINumericStepper; public var colorModeDrop:UIDropDown; + public var flipXBox:UICheckbox; + public var flipYBox:UICheckbox; + public var outlineTitle:UIText; public var outlineSep:UISprite; public var outlineCheck:UICheckbox; @@ -145,6 +148,9 @@ class GlyphInfoWindow extends UIWindow { cos: compon.cos, sin: compon.sin, + flipX: compon.flipX, + flipY: compon.flipY, + hasColorMode: compon.hasColorMode, colorMode: compon.colorMode }; @@ -159,6 +165,22 @@ class GlyphInfoWindow extends UIWindow { } members.push(outlineCheck); + flipXBox = new UICheckbox(outlineCheck.x, outlineCheck.y - outlineCheck.height - 8, "Flip X?"); + flipXBox.onChecked = function(check:Bool) { + compon.flipX = check; + if (outlineCheck.checked) + data.components[compon.outIndex].flipX = check; + } + members.push(flipXBox); + + flipYBox = new UICheckbox(flipXBox.x + flipXBox.width + itemMargin * 5, flipXBox.y, "Flip Y?"); + flipYBox.onChecked = function(check:Bool) { + compon.flipY = check; + if (outlineCheck.checked) + data.components[compon.outIndex].flipY = check; + } + members.push(flipYBox); + outlineTitle = new UIText(colorModeDrop.x, colorModeDrop.y + colorModeDrop.bHeight + itemMargin, 0, "Outline Data"); members.push(outlineTitle); outlineSep = new UISprite(x + itemMargin, colorModeDrop.y + colorModeDrop.bHeight + itemMargin + 19); @@ -239,6 +261,8 @@ class GlyphInfoWindow extends UIWindow { angleBox.value = com.angle; @:privateAccess colorModeDrop.index = com.hasColorMode ? com.colorMode : AlphabetEditor.instance.tape.colorMode; @:privateAccess colorModeDrop.label.text = colorModeDrop.options[colorModeDrop.index]; + flipXBox.checked = com.flipX; + flipYBox.checked = com.flipY; outlineCheck.checked = com.outIndex != null; outlineBox.label.text = ""; diff --git a/source/funkin/menus/ui/Alphabet.hx b/source/funkin/menus/ui/Alphabet.hx index fcc447a9..fd920642 100644 --- a/source/funkin/menus/ui/Alphabet.hx +++ b/source/funkin/menus/ui/Alphabet.hx @@ -37,6 +37,9 @@ final class AlphabetComponent { public var scaleX:Float; public var scaleY:Float; + public var flipX:Bool; + public var flipY:Bool; + public var hasColorMode:Bool; public var colorMode:ColorMode; } @@ -346,9 +349,9 @@ class Alphabet extends FlxSprite { _matrix.translate(_frame.frame.width * -0.5, _frame.frame.height * -0.5); if (__useDrawScale) - _matrix.scale(__drawScale.x, __drawScale.y); + _matrix.scale(__drawScale.x * (__component.flipX ? -1 : 1), __drawScale.y * (__component.flipY ? -1 : 1)); else - _matrix.scale(__component.scaleX, __component.scaleY); + _matrix.scale(__component.scaleX * (__component.flipX ? -1 : 1), __component.scaleY * (__component.flipY ? -1 : 1)); if(__component.shouldRotate) _matrix.rotateWithTrig(__component.cos, __component.sin); _matrix.translate(_frame.frame.width * 0.5, _frame.frame.height * 0.5); @@ -558,6 +561,9 @@ class Alphabet extends FlxSprite { cos: angleCos, sin: angleSin, + flipX: node.get("flipX") == "true", + flipY: node.get("flipY") == "true", + hasColorMode: false, colorMode: 0 }], @@ -593,6 +599,9 @@ class Alphabet extends FlxSprite { var colorMode = ["tint", "offsets", "none"].indexOf(component.get("colorMode")); + var xFlip = component.get("flipX") == "true"; + var yFlip = component.get("flipY") == "true"; + if (component.get("hasOutline") == "true") { components.insert(startIndex, { refIndex: componentsPushed, @@ -608,6 +617,9 @@ class Alphabet extends FlxSprite { cos: angleCos, sin: angleSin, + flipX: xFlip, + flipY: yFlip, + hasColorMode: colorMode >= 0, colorMode: colorMode, }); @@ -628,6 +640,9 @@ class Alphabet extends FlxSprite { cos: angleCos, sin: angleSin, + flipX: xFlip, + flipY: yFlip, + hasColorMode: colorMode >= 0, colorMode: colorMode, }); @@ -659,6 +674,9 @@ class Alphabet extends FlxSprite { var yScale:Float = Std.parseFloat(node.get("scaleY")).getDefaultFloat(1.0); var advance:Float = Std.parseFloat(node.get("advance")); + var xFlip = node.get("flipX") == "true"; + var yFlip = node.get("flipY") == "true"; + var colorMode = ["tint", "offsets", "none"].indexOf(node.get("colorMode")); var components:Array = []; @@ -677,6 +695,9 @@ class Alphabet extends FlxSprite { cos: angleCos, sin: angleSin, + flipX: xFlip, + flipY: yFlip, + hasColorMode: colorMode >= 0, colorMode: colorMode, }); @@ -696,6 +717,9 @@ class Alphabet extends FlxSprite { cos: angleCos, sin: angleSin, + flipX: xFlip, + flipY: yFlip, + hasColorMode: colorMode >= 0, colorMode: colorMode, }); @@ -758,7 +782,7 @@ class Alphabet extends FlxSprite { } private static var alphabetProperties:Array = ["fps", "advance", "lineGap", "forceCasing", "useColorOffsets", "antialiasing"]; - private static var componentProperties:Array = ["name", "anim", "x", "y", "scaleX", "scaleY", "angle", "offsetX", "offsetY"]; + private static var componentProperties:Array = ["name", "anim", "x", "y", "scaleX", "scaleY", "angle", "offsetX", "offsetY", "flipX", "flipY"]; public function buildXML():Xml { var xml = Xml.createElement("alphabet");