local events better ui >:D

This commit is contained in:
lunarcleint
2025-03-09 02:02:10 -07:00
parent d15e100b53
commit 62d639655c
5 changed files with 93 additions and 56 deletions
+53 -38
View File
@@ -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<Dynamic> = 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<Dynamic> = 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<Dynamic> = 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<Dynamic> = 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<Dynamic> = 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<CharterEvent> = localEventsGroup.members.concat(globalEventsGroup.members);
events.sort(globalEventsGroup.sortEventsFilter.bind(FlxSort.ASCENDING));
var events:Array<CharterEvent> = 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;
}
+23 -9
View File
@@ -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<ChartEvent>;
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) {
@@ -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);
}
@@ -5,6 +5,7 @@ import funkin.editors.charter.CharterBackdropGroup.EventBackdrop;
class CharterEventGroup extends FlxTypedGroup<CharterEvent> {
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<CharterEvent> {
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);
}
@@ -49,14 +49,20 @@ class CharterStrumLineGroup extends FlxTypedGroup<CharterStrumline> {
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<CharterStrumline> {
}
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<EventParamInfo> = EventsData.getEventParams(j.name);