diff --git a/source/funkin/editors/charter/Charter.hx b/source/funkin/editors/charter/Charter.hx index f7bcbf78..80a5f900 100644 --- a/source/funkin/editors/charter/Charter.hx +++ b/source/funkin/editors/charter/Charter.hx @@ -53,9 +53,9 @@ class Charter extends UIState { public var topMenuSpr:UITopMenu; public var gridBackdrops:CharterBackdropGroup; - public var localEventsBackdrop:EventBackdrop; + public var leftEventsBackdrop:EventBackdrop; public var localAddEventSpr:CharterEventAdd; - public var globalEventsBackdrop:EventBackdrop; + public var rightEventsBackdrop:EventBackdrop; public var globalAddEventSpr:CharterEventAdd; public var gridBackdropDummy:CameraHoverDummy; @@ -81,8 +81,10 @@ class Charter extends UIState { public var strumLines:CharterStrumLineGroup = new CharterStrumLineGroup(); public var notesGroup:CharterNoteGroup = new CharterNoteGroup(); - public var localEventsGroup:CharterEventGroup = new CharterEventGroup(); - public var globalEventsGroup:CharterEventGroup = new CharterEventGroup(); + public var leftEventRowText:UIText; + public var rightEventRowText:UIText; + public var leftEventsGroup:CharterEventGroup = new CharterEventGroup(); + public var rightEventsGroup:CharterEventGroup = new CharterEventGroup(); public var charterCamera:FlxCamera; public var uiCamera:FlxCamera; @@ -434,17 +436,28 @@ class Charter extends UIState { gridBackdrops = new CharterBackdropGroup(strumLines); gridBackdrops.notesGroup = this.notesGroup; - localEventsBackdrop = new EventBackdrop(false); - localEventsBackdrop.x = -localEventsBackdrop.width; - // thank you neo for pointing out im stupid -lunar - localEventsBackdrop.cameras = localEventsGroup.cameras = [charterCamera]; - localEventsGroup.eventsBackdrop = localEventsBackdrop; + leftEventRowText = new UIText(0, -40, 0, "Global Events\n(All Difficulties)", 12); + leftEventRowText.alignment = "center"; leftEventRowText.alpha = 0.75; + + leftEventsBackdrop = new EventBackdrop(false); + leftEventsBackdrop.x = -leftEventsBackdrop.width; + + leftEventRowText.cameras = leftEventsBackdrop.cameras = leftEventsGroup.cameras = [charterCamera]; + leftEventsGroup.eventsBackdrop = leftEventsBackdrop; + leftEventsGroup.eventsRowText = leftEventRowText; + + rightEventRowText = new UIText(0, -40, 0, "Local Events\n(Only This Difficulty)", 12); + rightEventRowText.alignment = "center"; rightEventRowText.alpha = 0.75; + + rightEventsBackdrop = new EventBackdrop(true); + rightEventsBackdrop.x = 0; + + rightEventsBackdrop.cameras = rightEventsGroup.cameras = [charterCamera]; + rightEventsGroup.eventsBackdrop = rightEventsBackdrop; + rightEventsGroup.eventsRowText = rightEventRowText; - globalEventsBackdrop = new EventBackdrop(true); - globalEventsBackdrop.x = 0; // thank you neo for pointing out im stupid -lunar - globalEventsBackdrop.cameras = globalEventsGroup.cameras = [charterCamera]; - globalEventsGroup.eventsBackdrop = globalEventsBackdrop; + // this is future lunar i completely forgot what neo pointed out but hes awesome go follow him on twitter add(gridBackdropDummy = new CameraHoverDummy(gridBackdrops, FlxPoint.weak(1, 0))); selectionBox = new UISliceSprite(0, 0, 2, 2, 'editors/ui/selection'); @@ -528,12 +541,14 @@ class Charter extends UIState { // adds grid and notes so that they're ALWAYS behind the UI add(gridBackdrops); - add(localEventsBackdrop); - add(globalEventsBackdrop); + add(leftEventsBackdrop); + add(rightEventsBackdrop); add(localAddEventSpr); add(globalAddEventSpr); - add(localEventsGroup); - add(globalEventsGroup); + add(leftEventsGroup); + add(rightEventsGroup); + add(leftEventRowText); + add(rightEventRowText); add(noteHoverer); add(noteDeleteAnims); @@ -622,7 +637,7 @@ class Charter extends UIState { notesGroup.autoSort = true; // create events - globalEventsGroup.autoSort = localEventsGroup.autoSort = false; + rightEventsGroup.autoSort = leftEventsGroup.autoSort = false; var __last:CharterEvent = null; var __lastTime:Float = Math.NaN; for (e in PlayState.SONG.events) { @@ -632,11 +647,11 @@ class Charter extends UIState { } else { __last = new CharterEvent(Conductor.getStepForTime(e.time), [e]); __lastTime = e.time; - (__last.global ? globalEventsGroup : localEventsGroup).add(__last); + (__last.global ? rightEventsGroup : leftEventsGroup).add(__last); } } - for (grp in [localEventsGroup, globalEventsGroup]) { + for (grp in [leftEventsGroup, rightEventsGroup]) { grp.sortEvents(); grp.autoSort = true; for (e in grp.members) e.refreshEventIcons(); @@ -659,7 +674,7 @@ class Charter extends UIState { scrollBar.length = __endStep = Conductor.getStepForTime(length); gridBackdrops.bottomLimitY = __endStep * 40; - localEventsBackdrop.bottomSeparator.y = globalEventsBackdrop.bottomSeparator.y = gridBackdrops.bottomLimitY-2; + leftEventsBackdrop.bottomSeparator.y = rightEventsBackdrop.bottomSeparator.y = gridBackdrops.bottomLimitY-2; updateWaveforms(); } @@ -741,7 +756,7 @@ class Charter extends UIState { else selection = [s]; } - for (group in [notesGroup, localEventsGroup, globalEventsGroup]) { + for (group in [notesGroup, leftEventsGroup, rightEventsGroup]) { var group:FlxTypedGroup = cast group; group.forEach(function(s) { s.selected = false; @@ -809,14 +824,14 @@ class Charter extends UIState { if (FlxG.mouse.justReleased) isSelecting = false; } else { if (FlxG.keys.pressed.SHIFT) { - for (group in [notesGroup, localEventsGroup, globalEventsGroup]) { + for (group in [notesGroup, leftEventsGroup, rightEventsGroup]) { var group:FlxTypedGroup = cast group; for(n in group) if (n.handleSelection(selectionBox) && selection.contains(n)) selection.remove(n); } } else if (FlxG.keys.pressed.CONTROL) { - for (group in [notesGroup, localEventsGroup, globalEventsGroup]) { + for (group in [notesGroup, leftEventsGroup, rightEventsGroup]) { var group:FlxTypedGroup = cast group; for(n in group) if (n.handleSelection(selectionBox) && !selection.contains(n)) @@ -824,7 +839,7 @@ class Charter extends UIState { } } else { selection = []; - for (group in [notesGroup, localEventsGroup, globalEventsGroup]) { + for (group in [notesGroup, leftEventsGroup, rightEventsGroup]) { var group:FlxTypedGroup = cast group; for(n in group) if (n.handleSelection(selectionBox)) @@ -1025,7 +1040,7 @@ class Charter extends UIState { addEventSpr.incorporeal = false; addEventSpr.sprAlpha = lerp(addEventSpr.sprAlpha, 0.75, 0.25); - var event = getHoveredEvent(mousePos.y, !addEventSpr.global ? localEventsGroup : globalEventsGroup); + var event = getHoveredEvent(mousePos.y, !addEventSpr.global ? leftEventsGroup : rightEventsGroup); if (event != null) addEventSpr.updateEdit(event); else addEventSpr.updatePos(FlxG.keys.pressed.SHIFT ? ((mousePos.y) / 40) : quantStepRounded(mousePos.y/40)); } else addEventSpr.sprAlpha = lerp(addEventSpr.sprAlpha, 0, 0.25); @@ -1070,7 +1085,7 @@ class Charter extends UIState { note.kill(); } else if (selected is CharterEvent) { var event:CharterEvent = cast selected; - (event.global ? globalEventsGroup : localEventsGroup).remove(event); + (event.global ? rightEventsGroup : leftEventsGroup).remove(event); event.kill(); } @@ -1090,7 +1105,7 @@ class Charter extends UIState { notesGroup.add(n); }, function (e:CharterEvent) { e.revive(); - (e.global ? globalEventsGroup : localEventsGroup).add(e); + (e.global ? rightEventsGroup : leftEventsGroup).add(e); e.refreshEventIcons(); }, false); notesGroup.sortNotes(); @@ -1111,7 +1126,7 @@ class Charter extends UIState { if (selection.length <= 0) return []; notesGroup.autoSort = false; - for (group in [notesGroup, localEventsGroup, globalEventsGroup]) { + for (group in [notesGroup, leftEventsGroup, rightEventsGroup]) { var group:FlxTypedGroup = cast group; var member:Int = 0; while(member < group.members.length) { @@ -1141,15 +1156,15 @@ class Charter extends UIState { selection.loop(function (n:CharterNote) {}, function (e:CharterEvent) { if (e.displayGlobal != e.global) { - (e.global ? globalEventsGroup : localEventsGroup).remove(e); - (e.displayGlobal ? globalEventsGroup : localEventsGroup).add(e); + (e.global ? rightEventsGroup : leftEventsGroup).remove(e); + (e.displayGlobal ? rightEventsGroup : leftEventsGroup).add(e); e.global = e.displayGlobal; eventsChanged.push(e); } }, true); - localEventsGroup.sortEvents(); globalEventsGroup.sortEvents(); + leftEventsGroup.sortEvents(); rightEventsGroup.sortEvents(); for (e in eventsChanged) e.update(0); // remove little stutter return CEditEventGroups(eventsChanged); @@ -1564,7 +1579,7 @@ class Charter extends UIState { case CEvent(step, events, global): var event = new CharterEvent(minStep + step, events, global); event.refreshEventIcons(); - (global ? globalEventsGroup : localEventsGroup).add(event); + (global ? rightEventsGroup : leftEventsGroup).add(event); sObjects.push(event); } } @@ -1793,11 +1808,11 @@ class Charter extends UIState { } function _view_showeventSecSeparator(t) { t.icon = (Options.charterShowSections = !Options.charterShowSections) ? 1 : 0; - localEventsBackdrop.eventSecSeparator.visible = globalEventsBackdrop.eventSecSeparator.visible = gridBackdrops.sectionsVisible = Options.charterShowSections; + leftEventsBackdrop.eventSecSeparator.visible = rightEventsBackdrop.eventSecSeparator.visible = gridBackdrops.sectionsVisible = Options.charterShowSections; } function _view_showeventBeatSeparator(t) { t.icon = (Options.charterShowBeats = !Options.charterShowBeats) ? 1 : 0; - localEventsBackdrop.eventBeatSeparator.visible = globalEventsBackdrop.eventBeatSeparator.visible = gridBackdrops.beatsVisible = Options.charterShowBeats; + leftEventsBackdrop.eventBeatSeparator.visible = rightEventsBackdrop.eventBeatSeparator.visible = gridBackdrops.beatsVisible = Options.charterShowBeats; } function _view_switchWaveformDetail(t) { t.icon = (Options.charterLowDetailWaveforms = !Options.charterLowDetailWaveforms) ? 1 : 0; @@ -1999,8 +2014,8 @@ class Charter extends UIState { public function buildEvents() { PlayState.SONG.events = []; - var events:Array = localEventsGroup.members.concat(globalEventsGroup.members); - events.sort(globalEventsGroup.sortEventsFilter.bind(FlxSort.ASCENDING)); + var events:Array = leftEventsGroup.members.concat(rightEventsGroup.members); + events.sort(rightEventsGroup.sortEventsFilter.bind(FlxSort.ASCENDING)); for (e in events) for (event in e.events) { event.time = Conductor.getTimeForStep(e.step); PlayState.SONG.events.push(event); @@ -2032,7 +2047,7 @@ class Charter extends UIState { return selectable.ID == -1 ? cast(selectable, CharterNote) : notesGroup.members[selectable.ID]; else if (selectable is CharterEvent) { var event:CharterEvent = cast(selectable, CharterEvent); - return selectable.ID == -1 ? event : (event.global ? globalEventsGroup : localEventsGroup).members[selectable.ID]; + return selectable.ID == -1 ? event : (event.global ? rightEventsGroup : leftEventsGroup).members[selectable.ID]; } return null; } diff --git a/source/funkin/editors/charter/CharterEvent.hx b/source/funkin/editors/charter/CharterEvent.hx index fdb324c3..c2816eb6 100644 --- a/source/funkin/editors/charter/CharterEvent.hx +++ b/source/funkin/editors/charter/CharterEvent.hx @@ -1,5 +1,6 @@ package funkin.editors.charter; +import openfl.geom.ColorTransform; import flixel.math.FlxPoint; import flixel.system.FlxAssets.FlxGraphicAsset; import funkin.backend.chart.ChartData.ChartEvent; @@ -8,6 +9,8 @@ import funkin.editors.charter.CharterBackdropGroup.EventBackdrop; import funkin.game.Character; import funkin.game.HealthIcon; +using flixel.util.FlxColorTransformUtil; + class CharterEvent extends UISliceSprite implements ICharterSelectable { public var events:Array; public var step:Float; @@ -32,12 +35,11 @@ class CharterEvent extends UISliceSprite implements ICharterSelectable { this.events = events.getDefault([]); this.global = displayGlobal = (global == null ? events[0] != null && events[0].global == true : global); - __redOffset = global ? 20 : 0; + this.color = displayGlobal ? 0xffc8bd23 : 0xFFFFFFFF; cursor = CLICK; } - var __redOffset:Float = 0; public override function update(elapsed:Float) { super.update(elapsed); @@ -50,16 +52,28 @@ class CharterEvent extends UISliceSprite implements ICharterSelectable { i.follow(this, (k * 22) + 30 - (i.width / 2), (bHeight - i.height) / 2); } - colorTransform.redMultiplier = colorTransform.greenMultiplier = colorTransform.blueMultiplier = selected ? 0.75 : 1; - colorTransform.redOffset = colorTransform.greenOffset = selected ? 96 : 0; - colorTransform.blueOffset = selected ? 168 : 0; + @:bypassAccessor color = CoolUtil.lerpColor(this.color, displayGlobal ? 0xffc8bd23 : 0xFFFFFFFF, 1/3); + colorTransform.setMultipliers(color.redFloat, color.greenFloat, color.blueFloat, alpha); + colorTransform.setOffsets(0, 0, 0, 0); + selectedColorTransform(colorTransform); + useColorTransform = true; - for (sprite in icons) - sprite.colorTransform = colorTransform; + for (sprite in icons) { + @:privateAccess sprite.colorTransform.__identity(); + selectedColorTransform(sprite.colorTransform); + } flipX = displayGlobal; - __redOffset = FlxMath.lerp(__redOffset, displayGlobal ? 200 : 0, elapsed*3); - colorTransform.greenOffset += __redOffset; + } + + @:noCompletion private inline function selectedColorTransform(transform:ColorTransform) { + transform.redMultiplier *= selected ? 0.75 : 1; + transform.greenMultiplier *= selected ? 0.75 : 1; + transform.blueMultiplier *= selected ? 0.75 : 1; + + transform.redOffset += selected ? 96 : 0; + transform.greenOffset += selected ? 96 : 0; + transform.blueOffset += selected ? 168 : 0; } private static function generateDefaultIcon(name:String) { diff --git a/source/funkin/editors/charter/CharterEventAdd.hx b/source/funkin/editors/charter/CharterEventAdd.hx index b5e4d5ce..a286edf7 100644 --- a/source/funkin/editors/charter/CharterEventAdd.hx +++ b/source/funkin/editors/charter/CharterEventAdd.hx @@ -33,7 +33,7 @@ class CharterEventAdd extends UISliceSprite { public override function update(elapsed:Float) { super.update(elapsed); - text.follow(this, global ? bWidth - text.width - 20 : 20, (bHeight - text.height) / 2); + text.follow(this, global ? bWidth - text.width - (text.text == "Add event" ? 15 : 20) : 20, (bHeight - text.height) / 2); alpha = sprAlpha * 0.75; text.alpha = sprAlpha; } @@ -42,7 +42,7 @@ class CharterEventAdd extends UISliceSprite { curCharterEvent = null; this.step = step; this.y = (step * 40) - (bHeight / 2); - text.text = "Add " + (global ? "global" : "local") + " event"; + text.text = "Add event"; framesOffset = 0; bWidth = 37 + Math.ceil(text.width); x = global ? Charter.instance.strumLines.members[Charter.instance.strumLines.members.length-1].x + (40*Charter.instance.strumLines.members[Charter.instance.strumLines.members.length-1].keyCount) : -(bWidth); } diff --git a/source/funkin/editors/charter/CharterEventGroup.hx b/source/funkin/editors/charter/CharterEventGroup.hx index d4e510b0..d7be0864 100644 --- a/source/funkin/editors/charter/CharterEventGroup.hx +++ b/source/funkin/editors/charter/CharterEventGroup.hx @@ -5,6 +5,7 @@ import funkin.editors.charter.CharterBackdropGroup.EventBackdrop; class CharterEventGroup extends FlxTypedGroup { public var eventsBackdrop:EventBackdrop; + public var eventsRowText:UIText; public var autoSort:Bool = true; var __lastSort:Int = 0; @@ -14,6 +15,7 @@ class CharterEventGroup extends FlxTypedGroup { if (autoSort && members.length != __lastSort) sortEvents(); + eventsRowText.y = FlxMath.lerp(eventsRowText.y, -40 + (members[0] != null ? Math.min(members[0].y, 0) : 0), 1/20); super.update(elapsed); } diff --git a/source/funkin/editors/charter/CharterStrumLineGroup.hx b/source/funkin/editors/charter/CharterStrumLineGroup.hx index e477d4e2..5b1633a6 100644 --- a/source/funkin/editors/charter/CharterStrumLineGroup.hx +++ b/source/funkin/editors/charter/CharterStrumLineGroup.hx @@ -49,14 +49,20 @@ class CharterStrumLineGroup extends FlxTypedGroup { for (i=>strum in members) if (strum != null && !strum.dragging) strum.x = CoolUtil.fpsLerp(strum.x, 40*strum.startingID, 0.225); - if (Charter.instance.localEventsBackdrop != null && members[0] != null) { - Charter.instance.localEventsBackdrop.x = members[0].button.x - Charter.instance.localEventsBackdrop.width; - Charter.instance.localEventsBackdrop.alpha = members[0].strumLine.visible ? 0.9 : 0.4; + if (Charter.instance.leftEventsBackdrop != null && members[0] != null) { + Charter.instance.leftEventsBackdrop.x = members[0].button.x - Charter.instance.leftEventsBackdrop.width; + Charter.instance.leftEventsBackdrop.alpha = members[0].strumLine.visible ? 0.9 : 0.4; + + if (Charter.instance.leftEventRowText != null) + Charter.instance.leftEventRowText.x = members[0].button.x - Charter.instance.leftEventRowText.width - 42; } - if (Charter.instance.globalEventsBackdrop != null && members[CoolUtil.maxInt(0, members.length-1)] != null) { - Charter.instance.globalEventsBackdrop.x = members[members.length-1].x + (40*members[members.length-1].keyCount); - Charter.instance.globalEventsBackdrop.alpha = members[CoolUtil.maxInt(0, members.length-1)].strumLine.visible ? 0.9 : 0.4; + if (Charter.instance.rightEventsBackdrop != null && members[CoolUtil.maxInt(0, members.length-1)] != null) { + Charter.instance.rightEventsBackdrop.x = members[members.length-1].x + (40*members[members.length-1].keyCount); + Charter.instance.rightEventsBackdrop.alpha = members[CoolUtil.maxInt(0, members.length-1)].strumLine.visible ? 0.9 : 0.4; + + if (Charter.instance.rightEventRowText != null) + Charter.instance.rightEventRowText.x = Charter.instance.rightEventsBackdrop.x + 42; } if (Charter.instance.strumlineLockButton != null && members[0] != null) @@ -102,7 +108,7 @@ class CharterStrumLineGroup extends FlxTypedGroup { } public inline function fixEvents() { - for (eventsGroup in [Charter.instance.localEventsGroup, Charter.instance.globalEventsGroup]) { + for (eventsGroup in [Charter.instance.leftEventsGroup, Charter.instance.rightEventsGroup]) { for (i in eventsGroup) { for (j in i.events) { var paramTypes:Array = EventsData.getEventParams(j.name);