STATIC CHARTER SHIT :DDD

This commit is contained in:
lunarcleint
2024-02-05 15:43:11 -07:00
parent e9e7daafe0
commit f72a7682fd
9 changed files with 181 additions and 37 deletions
+1 -1
View File
@@ -39,7 +39,7 @@ class SaveWarning {
}
},
{
label: closingWindow ? "Save & Exit Game" : "Save&Exit To Menu",
label: closingWindow ? "Save & Exit Game" : "Save & Exit To Menu",
color: 0x969533,
onClick: function(_) {
if (saveFunc != null) saveFunc();
@@ -70,6 +70,6 @@ class ChartDataScreen extends UISubstateWindow {
PlayState.SONG.stage = stageTextBox.label.text;
PlayState.SONG.scrollSpeed = scrollSpeedStepper.value;
Charter.instance.undos.addToUndo(CEditChartData(oldData, {stage: stageTextBox.label.text, speed: scrollSpeedStepper.value}));
Charter.undos.addToUndo(CEditChartData(oldData, {stage: stageTextBox.label.text, speed: scrollSpeedStepper.value}));
}
}
+140 -15
View File
@@ -23,7 +23,6 @@ import openfl.net.FileReference;
class Charter extends UIState {
public static var __song:String;
public static var __lastPos:Float;
static var __diff:String;
static var __reload:Bool;
@@ -82,10 +81,12 @@ class Charter extends UIState {
public var uiCamera:FlxCamera;
public var selectionBox:UISliceSprite;
public var selection:Selection = new Selection();
public var undos:UndoList<CharterChange> = new UndoList<CharterChange>();
public static var selection:Selection;
public var clipboard:Array<CharterCopyboardObject> = [];
public static var playtestInfo:PlaytestInfo;
public static var undos:UndoList<CharterChange>;
public static var clipboard:Array<CharterCopyboardObject> = [];
public function new(song:String, diff:String, reload:Bool = true) {
super();
@@ -454,6 +455,8 @@ class Charter extends UIState {
}
override function destroy() {
__updatePlaytestInfo();
if(Framerate.isLoaded) {
Framerate.fpsCounter.alpha = 1;
Framerate.memoryCounter.alpha = 1;
@@ -464,13 +467,12 @@ class Charter extends UIState {
public function loadSong() {
if (__reload) {
EventsData.reloadEvents(); __lastPos = 0;
EventsData.reloadEvents();
PlayState.loadSong(__song, __diff, false, false);
__resetStatics();
}
Conductor.setupSong(PlayState.SONG);
Conductor.songPosition = __lastPos;
noteTypes = PlayState.SONG.noteTypes;
// noteTypes = ["Hurt Note", "Bullet Note", "Penis Note", "Boobs Note"];
FlxG.sound.setMusic(FlxG.sound.load(Paths.inst(__song, __diff)));
vocals = FlxG.sound.load(Paths.voices(__song, __diff));
@@ -500,6 +502,7 @@ class Charter extends UIState {
notesGroup.autoSort = true;
// create events
eventsGroup.autoSort = false;
var __last:CharterEvent = null;
var __lastTime:Float = Math.NaN;
for(e in PlayState.SONG.events) {
@@ -513,11 +516,20 @@ class Charter extends UIState {
}
}
eventsGroup.sortEvents();
eventsGroup.autoSort = true;
for(e in eventsGroup.members)
e.refreshEventIcons();
buildNoteTypesUI();
refreshBPMSensitive();
// Cool shit :DD
__relinkSelection();
__relinkUndos();
__applyPlaytestInfo();
}
public var __endStep:Float = 0;
@@ -667,7 +679,10 @@ class Charter extends UIState {
if (s is CharterNote) cast(s, CharterNote).snappedToStrumline = true;
if (s is UISprite) cast(s, UISprite).cursor = BUTTON;
}
if (!(verticalChange == 0 && horizontalChange == 0)) undos.addToUndo(CSelectionDrag(undoDrags));
if (!(verticalChange == 0 && horizontalChange == 0)) {
notesGroup.sortNotes(); eventsGroup.sortEvents();
undos.addToUndo(CSelectionDrag(undoDrags));
}
hoverOffset.put();
gridActionType = NONE;
@@ -779,11 +794,13 @@ class Charter extends UIState {
if (selected is CharterNote) {
var note:CharterNote = cast selected;
notesGroup.remove(note, true);
note.strumLineID = strumLines.members.indexOf(note.strumLine);
note.strumLine = null; // For static undos :D
notesGroup.remove(note);
note.kill();
} else if (selected is CharterEvent) {
var event:CharterEvent = cast selected;
eventsGroup.remove(event, true);
eventsGroup.remove(event);
event.kill();
}
@@ -798,11 +815,12 @@ class Charter extends UIState {
notesGroup.autoSort = false;
selection.loop(function (n:CharterNote) {
notesGroup.add(n);
n.strumLine = strumLines.members[n.strumLineID];
n.revive();
notesGroup.add(n);
}, function (e:CharterEvent) {
eventsGroup.add(e);
e.revive();
eventsGroup.add(e);
e.refreshEventIcons();
}, false);
notesGroup.sortNotes();
@@ -1023,7 +1041,6 @@ class Charter extends UIState {
vocals.pause();
for (strumLine in strumLines.members) strumLine.vocals.pause();
}
__lastPos = Conductor.songPosition;
songPosInfo.text = '${CoolUtil.timeToStr(Conductor.songPosition)} / ${CoolUtil.timeToStr(songLength)}'
+ '\nStep: ${curStep}'
@@ -1077,7 +1094,7 @@ class Charter extends UIState {
#if REGION
function _file_exit(_) {
if (undos.unsaved) SaveWarning.triggerWarning();
else FlxG.switchState(new CharterSelection());
else {undos = null; FlxG.switchState(new CharterSelection());}
}
function _file_save(_) {
@@ -1180,6 +1197,7 @@ class Charter extends UIState {
selection = [];
var undo = undos.undo();
trace(undo);
switch(undo) {
case null: // do nothing
case CDeleteStrumLine(strumLineID, strumLine):
@@ -1201,7 +1219,7 @@ class Charter extends UIState {
for (s in selectionDrags)
if (s.selectable.draggable) s.selectable.handleDrag(s.change * -1);
this.selection = [for (s in selectionDrags) s.selectable];
selection = [for (s in selectionDrags) s.selectable];
case CEditSustains(changes):
for(n in changes)
n.note.updatePos(n.note.step, n.note.id, n.before, n.note.type);
@@ -1527,6 +1545,7 @@ class Charter extends UIState {
s.strumLine.notes = [];
PlayState.SONG.strumLines.push(s.strumLine);
}
notesGroup.sortNotes();
for(n in notesGroup.members) {
if (PlayState.SONG.strumLines[n.strumLineID] != null)
PlayState.SONG.strumLines[n.strumLineID].notes.push(buildNote(n));
@@ -1556,6 +1575,101 @@ class Charter extends UIState {
public inline function hitsoundsEnabled(id:Int)
return strumLines.members[id] != null && strumLines.members[id].hitsounds;
// UH OH!!! DANGER ZONE APPOARCHING !!!! LUNARS SHITTY CODE !!!! -lunar
@:noCompletion public function __fixSingleSelection(selectable:ICharterSelectable):ICharterSelectable {
if (selectable is CharterNote)
return selectable.ID == -1 ? cast(selectable, CharterNote) : notesGroup.members[selectable.ID];
else if (selectable is CharterEvent)
return selectable.ID == -1 ? cast(selectable, CharterEvent) : eventsGroup.members[selectable.ID];
return null;
}
@:noCompletion public function __fixSelection(selection:Selection) @:privateAccess {
var newSelection:Selection = new Selection();
for (i => selectable in selection)
newSelection[i] = __fixSingleSelection(selectable);
return newSelection;
}
@:noCompletion public inline function __relinkSelection()
selection = __fixSelection(selection);
@:noCompletion public inline function __relinkUndos() {
for (list => changeList in [undos.undoList, undos.redoList]) {
var newChanges:Array<CharterChange> = [];
for (i => change in changeList) {
switch (change) {
case CCreateSelection(selection):
newChanges[i] = CCreateSelection(__fixSelection(selection));
case CDeleteSelection(selection):
newChanges[i] = CDeleteSelection(__fixSelection(selection));
case CSelectionDrag(selectionDrags):
newChanges[i] = CSelectionDrag([
for (selectionDrag in selectionDrags)
{
selectable: __fixSingleSelection(selectionDrag.selectable),
change: selectionDrag.change
}
]);
case CEditSustains(noteChanges):
newChanges[i] = CEditSustains([
for (noteChange in noteChanges)
{
note: cast(__fixSingleSelection(noteChange.note), CharterNote),
before: noteChange.before,
after: noteChange.after
}
]);
case CEditEvent(event, oldEvents, newEvents):
newChanges[i] = CEditEvent(cast(__fixSingleSelection(event), CharterEvent), oldEvents, newEvents);
case CEditSpecNotesType(notesChanged, oldNoteTypes, newNoteTypes):
newChanges[i] = CEditSpecNotesType([
for (noteChanged in notesChanged)
cast(__fixSingleSelection(noteChanged), CharterNote)
], oldNoteTypes, newNoteTypes);
default: newChanges[i] = change;
}
}
if (list == 0) undos.undoList = newChanges;
else undos.redoList = newChanges;
}
}
@:noCompletion public function __resetStatics() {
selection = new Selection();
undos = new UndoList<CharterChange>();
clipboard = []; playtestInfo = null;
}
@:noCompletion public function __updatePlaytestInfo() {
playtestInfo = {
songPosition: Conductor.songPosition,
playbackSpeed: playBackSlider.value,
quantSelected: quant,
noteTypeSelected: noteType,
strumlinesDraggable: strumLines.draggable,
hitSounds: [for (strumLine in strumLines.members) strumLine.hitsounds],
mutedVocals: [for (strumLine in strumLines.members) !(strumLine.vocals.volume > 0)],
}
}
@:noCompletion public function __applyPlaytestInfo() {
if (playtestInfo == null) return;
Conductor.songPosition = playtestInfo.songPosition;
playBackSlider.value = playtestInfo.playbackSpeed;
quant = playtestInfo.quantSelected;
noteType = playtestInfo.noteTypeSelected;
strumLines.draggable = playtestInfo.strumlinesDraggable;
for (i => strumLine in strumLines.members)
strumLine.hitsounds = playtestInfo.hitSounds[i];
for (i => strumLine in strumLines.members)
strumLine.vocals.volume = playtestInfo.mutedVocals[i] ? 0 : 1;
}
}
enum CharterChange {
@@ -1607,6 +1721,7 @@ typedef SelectionDragChange = {
interface ICharterSelectable {
public var x(default, set):Float;
public var y(default, set):Float;
public var ID:Int;
public var step:Float;
public var selected:Bool;
@@ -1623,3 +1738,13 @@ enum abstract CharterGridActionType(Int) {
var DRAG = 2;
var INVALID_DRAG = 3;
}
typedef PlaytestInfo = {
var songPosition:Float;
var playbackSpeed:Float;
var quantSelected:Int;
var noteTypeSelected:Int;
var strumlinesDraggable:Bool;
var hitSounds:Array<Bool>;
var mutedVocals:Array<Bool>;
}
@@ -5,16 +5,23 @@ import flixel.util.FlxSort;
class CharterEventGroup extends FlxTypedGroup<CharterEvent> {
public var eventsBackdrop:EventBackdrop;
public var autoSort:Bool = true;
var __lastSort:Int = 0;
public override function update(elapsed:Float) {
filterEvents();
if (length != __lastSort)
if (autoSort && members.length != __lastSort)
sortEvents();
super.update(elapsed);
}
public override function remove(v:CharterEvent, force:Bool = true):CharterEvent {
v.ID = -1;
return super.remove(v, force);
}
public override function draw() {
for (event in members) {
event.eventsBackdrop = eventsBackdrop;
@@ -24,12 +31,16 @@ class CharterEventGroup extends FlxTypedGroup<CharterEvent> {
}
public inline function sortEvents() {
__lastSort = length;
__lastSort = members.length;
this.sort(function(i, e1, e2) {
return FlxSort.byValues(FlxSort.ASCENDING, e1.step, e2.step);
});
updateEventsIDs();
}
public inline function updateEventsIDs()
for (i => n in members) n.ID = i;
public inline function filterEvents() {
for (event in members)
if (event.events.length == 0) {
@@ -80,7 +80,7 @@ class CharterEventScreen extends UISubstateWindow {
chartEvent.events = [for (i in eventsList.buttons.members) i.event];
chartEvent.refreshEventIcons();
Charter.instance.undos.addToUndo(CEditEvent(chartEvent, oldEvents, [for (event in events) Reflect.copy(event)]));
Charter.undos.addToUndo(CEditEvent(chartEvent, oldEvents, [for (event in events) Reflect.copy(event)]));
}
}
+4 -3
View File
@@ -27,7 +27,8 @@ class CharterNote extends UISprite implements ICharterSelectable {
public function new() {
super();
antialiasing = true;
antialiasing = true; ID = -1;
loadGraphic(Paths.image('editors/charter/note'), true, 157, 154);
animation.add("note", [for(i in 0...frames.frames.length) i], 0, true);
animation.play("note");
@@ -58,9 +59,9 @@ class CharterNote extends UISprite implements ICharterSelectable {
public var type:Int;
public var strumLine:CharterStrumline;
public var strumLineID(get, never):Int;
public var strumLineID(get, default):Int = -1;
public function get_strumLineID():Int
return strumLine == null ? -1 : Charter.instance.strumLines.members.indexOf(strumLine);
return strumLineID = (strumLine == null ? strumLineID : Charter.instance.strumLines.members.indexOf(strumLine));
public var snappedToStrumline:Bool = true;
@@ -29,10 +29,10 @@ class CharterNoteGroup extends FlxTypedGroup<CharterNote> {
for(i in begin...end) {
__loopSprite = members[i];
if (!Charter.instance.selection.contains(__loopSprite))
if (!Charter.selection.contains(__loopSprite))
noteFunc(__loopSprite);
}
for(c in Charter.instance.selection.copy())
for(c in Charter.selection.copy())
if (c is CharterNote) noteFunc(cast (c, CharterNote));
__currentlyLooping = oldCur;
@@ -43,8 +43,10 @@ class CharterNoteGroup extends FlxTypedGroup<CharterNote> {
return v;
}
public override function remove(v:CharterNote, force:Bool = true):CharterNote
public override function remove(v:CharterNote, force:Bool = true):CharterNote {
v.ID = -1;
return super.remove(v, true);
}
private static function getVar(n:CharterNote)
return n.step;
@@ -56,30 +58,36 @@ class CharterNoteGroup extends FlxTypedGroup<CharterNote> {
public override function draw() {}
public override function update(elapsed:Float) {
@:privateAccess var oldDefaultCameras = FlxCamera._defaultCameras;
@:privateAccess if (cameras != null) FlxCamera._defaultCameras = cameras;
public override function update(elapsed:Float) @:privateAccess {
var oldDefaultCameras = FlxCamera._defaultCameras;
if (cameras != null) FlxCamera._defaultCameras = cameras;
if (length != __lastSort && autoSort)
if (autoSort && members.length != __lastSort)
sortNotes();
forEach((n) -> {
if(n.exists && n.active)
if(n.exists && n.active) {
n.cameras = n.__lastDrawCameras = cameras;
n.update(elapsed);
}
});
@:privateAccess FlxCamera._defaultCameras = oldDefaultCameras;
FlxCamera._defaultCameras = oldDefaultCameras;
}
public function sortNotes() {
__lastSort = length;
__lastSort = members.length;
this.sort(function(i, n1, n2) {
if (n1.step == n2.step)
return FlxSort.byValues(FlxSort.ASCENDING, n1.fullID, n2.fullID);
return FlxSort.byValues(FlxSort.ASCENDING, n1.step, n2.step);
});
updateNoteIDs();
}
public inline function updateNoteIDs()
for (i => n in members) n.ID = i;
public inline function preallocate(len:Int) {
members = cast new haxe.ds.Vector<CharterNote>(len);
length = len;
@@ -57,15 +57,14 @@ class CharterNoteTypesList extends UISubstateWindow {
return list;
}
public function saveList()
{
public function saveList() {
var oldList:Array<String> = Charter.instance.noteTypes;
var newList:Array<String> = [for (note in noteTypesList.buttons.members) note.textBox.label.text];
Charter.instance.noteTypes = newList;
Charter.instance.changeNoteType(null, false);
Charter.instance.undos.addToUndo(CEditNoteTypes(oldList, newList));
Charter.undos.addToUndo(CEditNoteTypes(oldList, newList));
}
}
@@ -73,7 +73,7 @@ class CharterStrumLineGroup extends FlxTypedGroup<CharterStrumline> {
if (addToUndo) {
var oldID = __pastStrumlines.indexOf(draggingObj);
var newID = members.indexOf(draggingObj);
if (newID != oldID) Charter.instance.undos.addToUndo(COrderStrumLine(newID, oldID, newID));
if (newID != oldID) Charter.undos.addToUndo(COrderStrumLine(newID, oldID, newID));
}
draggingObj = null;