Skip to content

Commit cd1405b

Browse files
committed
incorporating the new "Stage" class into PlayState
StageEditor still uses the vanilla Stage
1 parent 429ca60 commit cd1405b

3 files changed

Lines changed: 40 additions & 11 deletions

File tree

source/funkin/game/PlayState.hx

Lines changed: 31 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ import funkin.backend.FunkinText;
1616
import funkin.backend.chart.Chart;
1717
import funkin.backend.chart.ChartData;
1818
import funkin.backend.chart.EventsData;
19+
import funkin.backend.utils.XMLUtil.XMLImportedScriptInfo;
1920
import funkin.backend.scripting.DummyScript;
2021
import funkin.backend.scripting.Script;
2122
import funkin.backend.scripting.ScriptPack;
@@ -31,6 +32,7 @@ import funkin.game.SplashHandler;
3132
import funkin.game.cutscenes.*;
3233
import funkin.game.scoring.*;
3334
import funkin.game.scoring.RatingManager.Rating;
35+
import funkin.game.stage.Stage;
3436
import funkin.menus.*;
3537
import funkin.backend.week.WeekData;
3638
import funkin.savedata.FunkinSave;
@@ -42,7 +44,7 @@ using StringTools;
4244
@:access(funkin.game.StrumLine)
4345
class PlayState extends MusicBeatState
4446
{
45-
public static final __instanceFields = Type.getInstanceFields(PlayState);
47+
public static final __instanceFields:Map<String, Bool> = [for(f in Type.getInstanceFields(PlayState)) f => true];
4648
/**
4749
* Current PlayState instance.
4850
*/
@@ -744,7 +746,7 @@ class PlayState extends MusicBeatState
744746
cameraFocusOffset = FlxPoint.get();
745747

746748
if (SONG.stage == null || SONG.stage.trim() == "") SONG.stage = Flags.DEFAULT_STAGE;
747-
add(stage = new Stage(SONG.stage));
749+
add(stage = new Stage(SONG.stage, setupStage));
748750

749751
if (!chartingMode || Options.charterEnablePlaytestScripts) {
750752
switch(SONG.meta.name) {
@@ -2309,6 +2311,33 @@ class PlayState extends MusicBeatState
23092311
return campaignAccuracyCount == 0 ? 0 : campaignAccuracyTotal / campaignAccuracyCount;
23102312
#end
23112313

2314+
//region INITIAL SETUP
2315+
private function setupStage(stage:Stage):Bool {
2316+
stage.prepareInfos = (node) -> {
2317+
return XMLImportedScriptInfo.prepareInfos(node, scripts, (infos) -> stage.xmlImportedScripts.push(infos));
2318+
};
2319+
stage.onStageScriptLoad = (stageScript) -> scripts.add(stageScript);
2320+
stage.onStartCamSet = (startCam, defaultZoom) -> {
2321+
camFollow.x = startCam.x; camFollow.y = startCam.y;
2322+
defaultCamZoom = defaultZoom;
2323+
};
2324+
stage.onXMLLoaded = (event) -> return gameAndCharsEvent("onStageXMLParsed", event).value3; // temporary
2325+
stage.onRatingSet = (x, y) -> {
2326+
comboGroup.setPosition(x, y);
2327+
add(comboGroup); // unnecessary since it's getting added later
2328+
return comboGroup;
2329+
};
2330+
stage.onNodeLoaded = (node, sprite) -> {
2331+
return gameAndCharsEvent("onStageNodeParsed", EventManager.get(DynamicEvent).recycle(stage, node, sprite, node.name)).value3; // temporary
2332+
};
2333+
stage.onPostStageCreation = (event) -> gameAndCharsEvent("onPostStageCreation", event);
2334+
stage.removeInfo = (scriptInfo) -> scripts.remove(scriptInfo);
2335+
stage.onStageDestroy = (_) -> gameAndCharsCall("onStageDestroy", [_]);
2336+
stage.onSilentDestroy = (stageScript) -> scripts.remove(stageScript);
2337+
return true;
2338+
}
2339+
//endregion
2340+
23122341
/**
23132342
* Load a week into PlayState.
23142343
* @param weekData Week Data

source/funkin/game/stage/Layer.hx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import hscript.IHScriptCustomBehaviour;
1717
* @author Jamextreme140 & ItsLJcool
1818
*/
1919
class Layer extends FlxTypedSpriteGroup<FlxSprite> implements IBeatReceiver implements IHScriptCustomBehaviour {
20-
private static final __instanceFields:Array<String> = Type.getInstanceFields(Layer);
20+
private static final __instanceFields:Map<String, Bool> = [for(f in Type.getInstanceFields(Layer)) f => true];
2121

2222
/**
2323
* The Layer Name
@@ -160,15 +160,15 @@ class Layer extends FlxTypedSpriteGroup<FlxSprite> implements IBeatReceiver impl
160160

161161
//region IHScriptCustomBehaviour implementation
162162
public function hget(name:String):Dynamic {
163-
if (__instanceFields.contains(name) || __instanceFields.contains('get_$name'))
163+
if (__instanceFields.exists(name) || __instanceFields.exists('get_$name'))
164164
return Reflect.getProperty(this, name);
165165
if (stageSprites.exists(name)) return stageSprites[name];
166166
if (stageLayers.exists(name)) return stageLayers[name];
167167
return null;
168168
}
169169

170170
public function hset(name:String, val:Dynamic):Dynamic {
171-
if (__instanceFields.contains(name) || __instanceFields.contains('set_$name')) {
171+
if (__instanceFields.exists(name) || __instanceFields.exists('set_$name')) {
172172
Reflect.setProperty(this, name, val);
173173
return val;
174174
}

source/funkin/game/stage/Stage.hx

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ using funkin.backend.utils.XMLUtil.XMLImportedScriptInfo;
5858
* @author Jamextreme140 & ItsLJcool
5959
**/
6060
class Stage extends Layer {
61-
private static final __instanceFields = Type.getInstanceFields(Stage);
61+
private static final __instanceFields:Map<String, Bool> = [for(f in Type.getInstanceFields(Stage)) f => true];
6262

6363
private static final DEFAULT_ATTRIBUTES:Array<String> = ["name", "startCamPosX", "startCamPosY", "zoom", "folder"];
6464

@@ -503,29 +503,29 @@ class Stage extends Layer {
503503
//region IHScriptCustomBehaviour implementation
504504
override function hget(name:String):Dynamic {
505505
// TODO: optimize this since "Type.getInstanceFields(Stage)" also gets the inherited fields from "Layer"
506-
if (__instanceFields.contains(name) || __instanceFields.contains('get_$name'))
506+
if (__instanceFields.exists(name) || __instanceFields.exists('get_$name'))
507507
return Reflect.getProperty(this, name);
508508

509509
// We should check PlayState last, and check sub-layers before.
510510
var og_val:Dynamic = super.hget(name);
511511
if (og_val != null) return og_val;
512512

513-
if (PlayState.instance != null && (PlayState.__instanceFields.contains(name) || PlayState.__instanceFields.contains('get_$name')))
513+
if (PlayState.instance != null && (PlayState.__instanceFields.exists(name) || PlayState.__instanceFields.exists('get_$name')))
514514
return Reflect.getProperty(PlayState.instance, name);
515515

516516
return null;
517517
}
518518

519519
override function hset(name:String, val:Dynamic):Dynamic {
520-
if (__instanceFields.contains(name) || __instanceFields.contains('set_$name')) {
520+
if (__instanceFields.exists(name) || __instanceFields.exists('set_$name')) {
521521
Reflect.setProperty(this, name, val);
522522
return val;
523523
}
524524

525525
var og_val:Dynamic = super.hget(name);
526526
if (og_val != null) return og_val;
527527

528-
if (PlayState.instance != null && (PlayState.__instanceFields.contains(name) || PlayState.__instanceFields.contains('set_$name'))) {
528+
if (PlayState.instance != null && (PlayState.__instanceFields.exists(name) || PlayState.__instanceFields.exists('set_$name'))) {
529529
Reflect.setProperty(PlayState.instance, name, val);
530530
return val;
531531
}
@@ -546,6 +546,6 @@ class Stage extends Layer {
546546
function get_stageName():String { return this.name; }
547547
function set_stageName(name:String):String { return this.name = name; }
548548
function get_characterPoses():Map<String, StageCharPos> { return this.characterPosLookup; }
549-
inline function applyCharStuff(char:Character, posName:String, id:Float = 0) { applyCharPos(char, posName, id); }
549+
public inline function applyCharStuff(char:Character, posName:String, id:Float = 0) { applyCharPos(char, posName, id); }
550550
//endregion
551551
}

0 commit comments

Comments
 (0)