huge progress

This commit is contained in:
Yoshman29
2023-04-25 16:22:19 +02:00
parent b95e97b5d4
commit 0033a8fae4
7 changed files with 140 additions and 23 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 214 B

+4 -2
View File
@@ -9,10 +9,12 @@ vec4 getColor(vec2 pos) {
else if (pos.x > 1.0 - (1.0 / openfl_TextureSize.x)) pos.x = 1.0 - (1.0 / openfl_TextureSize.x);
if (pos.y < 0) pos.y = 0;
else if (pos.y > 1.0 - (1.0 / openfl_TextureSize.y)) pos.y = 1.0 - (1.0 / openfl_TextureSize.y);
return textureCam(bitmap, pos);
// return textureCam(bitmap, pos);
return flixel_texture2D(bitmap, pos);
}
void main() {
vec2 camPos = getCamPos(openfl_TextureCoordv);
// vec2 camPos = getCamPos(openfl_TextureCoordv);
vec2 camPos = openfl_TextureCoordv;
if (camPos.x < 0 || camPos.x > 1 || camPos.y < 0 || camPos.y > 1)
return;
+6
View File
@@ -100,4 +100,10 @@ abstract ChartEventType(Int) from Int to Int {
* - Whenever its going to be toggled or not (Bool)
*/
var ALT_ANIM_TOGGLE = 3;
/**
* Returns all usable event types.
*/
public static inline function getChartEventTypes():Array<ChartEventType>
return [CUSTOM, CAM_MOVEMENT, BPM_CHANGE, ALT_ANIM_TOGGLE];
}
+25 -8
View File
@@ -1,11 +1,12 @@
package funkin.editors.charter;
import funkin.backend.system.Conductor;
import funkin.backend.chart.ChartData.ChartEventType;
import funkin.game.HealthIcon;
import funkin.backend.chart.ChartData.ChartEvent;
class CharterEvent extends UISliceSprite {
public static function getEventInfo(id:ChartEventType) {
public static function getEventInfo(id:ChartEventType):EventDefineInfo {
return switch(id) {
case CUSTOM:
// hscript
@@ -14,11 +15,13 @@ class CharterEvent extends UISliceSprite {
params: [
{
name: "Function name",
type: TString
type: TString,
defValue: "myFunc"
},
{
name: "Function parameters (string)",
type: TArrayOfString
type: TArrayOfString,
defValue: []
}
]
}
@@ -28,7 +31,8 @@ class CharterEvent extends UISliceSprite {
params: [
{
name: "Camera Target",
type: TStrumLine
type: TStrumLine,
defValue: 0
}
]
}
@@ -38,7 +42,8 @@ class CharterEvent extends UISliceSprite {
params: [
{
name: "Target BPM",
type: TFloat(1)
type: TFloat(1),
defValue: Conductor.bpm
}
]
}
@@ -48,11 +53,13 @@ class CharterEvent extends UISliceSprite {
params: [
{
name: "Strumline",
type: TStrumLine
type: TStrumLine,
defValue: 0
},
{
name: "Enable",
type: TBool
type: TBool,
defValue: true
}
]
}
@@ -108,6 +115,12 @@ class CharterEvent extends UISliceSprite {
}
}
public override function onHovered() {
super.onHovered();
if (FlxG.mouse.justReleased)
FlxG.state.openSubState(new CharterEventScreen(this));
}
public function refreshEventIcons() {
while(icons.length > 0) {
var i = icons.shift();
@@ -125,15 +138,19 @@ class CharterEvent extends UISliceSprite {
}
}
typedef EventInfo = {
typedef EventDefineInfo = {
var name:String;
var params:Array<EventParamInfo>;
}
typedef EventInfo = {
> EventDefineInfo,
var paramValues:Array<Dynamic>;
}
typedef EventParamInfo = {
var name:String;
var type:EventParamType;
var defValue:Dynamic;
}
enum EventParamType {
@@ -1,5 +1,6 @@
package funkin.editors.charter;
import funkin.backend.system.Conductor;
import flixel.group.FlxGroup;
class CharterEventScreen extends UISubstateWindow {
@@ -12,6 +13,10 @@ class CharterEventScreen extends UISubstateWindow {
public var paramsPanel:FlxGroup;
public var paramsFields:Array<FlxBasic> = [];
public var addButton:UIButton;
public var saveButton:UIButton;
public var deleteButton:UIButton;
public function new(chartEvent:CharterEvent) {
super();
@@ -34,9 +39,50 @@ class CharterEventScreen extends UISubstateWindow {
iconsPanel = new FlxGroup();
add(iconsPanel);
addButton = new UIButton(windowSpr.x + 1, windowSpr.y + 31, "", function() {
openSubState(new CharterEventTypeSelection(function(eventType) {
chartEvent.events.push({
time: Conductor.getTimeForStep(chartEvent.step),
params: [],
type: eventType
});
changeTab(chartEvent.events.length-1);
}));
});
addButton.bWidth = addButton.bHeight = 30;
add(addButton);
var addButtonIcon = new FlxSprite(addButton.x, addButton.y, Paths.image('editors/charter/add-button'));
addButtonIcon.x += (30 - addButtonIcon.width) / 2;
addButtonIcon.y += (30 - addButtonIcon.height) / 2;
add(addButtonIcon);
paramsPanel = new FlxGroup();
add(paramsPanel);
saveButton = new UIButton(windowSpr.x + windowSpr.bWidth - 10, windowSpr.y + windowSpr.bHeight - 10, "Save & Close", function() {
saveCurTab();
chartEvent.refreshEventIcons();
if (chartEvent.events.length <= 0) {
var state = cast(FlxG.state, Charter);
state.eventsGroup.remove(chartEvent, true);
}
close();
});
saveButton.x -= saveButton.bWidth;
saveButton.y -= saveButton.bHeight;
add(saveButton);
deleteButton = new UIButton(saveButton.x - 10, saveButton.y, "Delete", function() {
if (curEvent >= 0) {
chartEvent.events.splice(curEvent, 1);
changeTab(curEvent, false);
}
});
deleteButton.x -= deleteButton.bWidth;
add(deleteButton);
eventName = new UIText(windowSpr.x + 40, windowSpr.y + 41, 0, "", 24);
add(eventName);
@@ -45,8 +91,9 @@ class CharterEventScreen extends UISubstateWindow {
public var curEvent:Int = -1;
public function changeTab(id:Int) {
saveCurTab();
public function changeTab(id:Int, save:Bool = true) {
if (save)
saveCurTab();
// destroy old elements
paramsFields = [];
@@ -63,39 +110,40 @@ class CharterEventScreen extends UISubstateWindow {
// add new elements
var y:Float = eventName.y + eventName.height + 10;
for(k=>param in data.params) {
function addLabel() {
function addLabel() {
var label:UIText = new UIText(eventName.x, y, 0, param.name);
y += label.height + 4;
paramsPanel.add(label);
};
var value:Dynamic = CoolUtil.getDefault(curEvent.params[k], param.defValue);
switch(param.type) {
case TString:
addLabel();
var textBox:UITextBox = new UITextBox(eventName.x, y, cast curEvent.params[k]);
var textBox:UITextBox = new UITextBox(eventName.x, y, cast value);
y += textBox.height + 10;
paramsPanel.add(textBox);
paramsFields.push(textBox);
case TBool:
var checkbox = new UICheckbox(eventName.x, y, param.name, cast curEvent.params[k]);
var checkbox = new UICheckbox(eventName.x, y, param.name, cast value);
y += checkbox.height + 10;
paramsPanel.add(checkbox);
paramsFields.push(checkbox);
case TInt(min, max, step):
addLabel();
var numericStepper = new UINumericStepper(eventName.x, y, cast curEvent.params[k], step.getDefault(1), 0, min, max);
var numericStepper = new UINumericStepper(eventName.x, y, cast value, step.getDefault(1), 0, min, max);
y += numericStepper.height + 10;
paramsPanel.add(numericStepper);
paramsFields.push(numericStepper);
case TFloat(min, max, step, precision):
addLabel();
var numericStepper = new UINumericStepper(eventName.x, y, cast curEvent.params[k], step.getDefault(1), precision, min, max);
var numericStepper = new UINumericStepper(eventName.x, y, cast value, step.getDefault(1), precision, min, max);
y += numericStepper.height + 10;
paramsPanel.add(numericStepper);
paramsFields.push(numericStepper);
case TStrumLine:
addLabel();
var dropdown = new UIDropDown(eventName.x, y, 320, 32, [for(k=>s in cast(FlxG.state, Charter).strumLines.members) 'Strumline #${k+1} (${s.strumLine.characters[0]})'], cast curEvent.params[k]);
var dropdown = new UIDropDown(eventName.x, y, 320, 32, [for(k=>s in cast(FlxG.state, Charter).strumLines.members) 'Strumline #${k+1} (${s.strumLine.characters[0]})'], cast value);
y += dropdown.height + 10;
paramsPanel.add(dropdown);
paramsFields.push(dropdown);
@@ -104,8 +152,10 @@ class CharterEventScreen extends UISubstateWindow {
paramsFields.push(null);
}
}
} else
} else {
eventName.text = "No event";
curEvent = -1;
}
refreshIcons();
}
@@ -115,11 +165,15 @@ class CharterEventScreen extends UISubstateWindow {
iconsPanel.remove(iconsPanel.members[0], true).destroy();
for(k=>e in chartEvent.events) {
var butt = new UIButton(windowSpr.x + 1, windowSpr.y + 31 + (k*30), "", function() {
var butt = new UIButton(windowSpr.x + 1, windowSpr.y + 66 + (k*30), "", function() {
changeTab(k);
});
butt.bWidth = butt.bHeight = 30;
butt.visible = (k != curEvent);
if (k == curEvent) {
butt.framesOffset = 18;
butt.active = false;
}
iconsPanel.add(butt);
var icon = CharterEvent.generateEventIcon(e);
@@ -0,0 +1,35 @@
package funkin.editors.charter;
import funkin.backend.chart.ChartData.ChartEventType;
class CharterEventTypeSelection extends UISubstateWindow {
var callback:ChartEventType->Void;
public function new(callback:ChartEventType->Void) {
super();
this.callback = callback;
}
public override function create() {
winTitle = "Choose an event type...";
super.create();
var w:Int = winWidth - 20;
var lastIndex:Int = 0;
for(k=>eventType in ChartEventType.getChartEventTypes()) {
var type = CharterEvent.getEventInfo(eventType);
add(new UIButton(10, 41 + (32 * k), type.name, function() {
close();
callback(eventType);
}, w));
lastIndex = k;
}
add(new UIButton(10, 51 + (32 * (lastIndex+1)), "Cancel", function() {
close();
}, w));
windowSpr.bHeight = 61 + (32 * (lastIndex+2));
}
}
+5 -2
View File
@@ -40,8 +40,6 @@ class UISubstateWindow extends MusicBeatSubstate {
FlxG.cameras.add(subCam, false);
windowSpr = new UISliceSprite(0, 0, winWidth, winHeight, "editors/ui/warning-popup");
windowSpr.x = (FlxG.width - windowSpr.bWidth) / 2;
windowSpr.y = (FlxG.height - windowSpr.bHeight) / 2;
add(windowSpr);
add(titleSpr = new UIText(windowSpr.x + 25, windowSpr.y, windowSpr.bWidth - 50, winTitle, 15, -1));
@@ -59,4 +57,9 @@ class UISubstateWindow extends MusicBeatSubstate {
FlxTween.cancelTweensOf(subCam);
FlxG.cameras.remove(subCam);
}
public override function update(elapsed:Float) {
super.update(elapsed);
subCam.scroll.set(Std.int(-(FlxG.width - windowSpr.bWidth) / 2), Std.int(-(FlxG.height - windowSpr.bHeight) / 2));
}
}