local events better ui >:D
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user