Merge branch 'main' into translations-system

This commit is contained in:
Ne_Eo
2024-11-09 01:05:26 +01:00
9 changed files with 70 additions and 60 deletions
+43 -50
View File
@@ -43,26 +43,12 @@ class HashLinkFixer {
var cl = clRef.get(); var cl = clRef.get();
if (cl.isAbstract || cl.isExtern || cl.isInterface) return fields; if (cl.isAbstract || cl.isExtern || cl.isInterface) return fields;
if (!cl.name.endsWith("_Impl_") && !cl.name.endsWith("_HSX") && !cl.name.endsWith("_HSC") && !cl.name.endsWith("_HLFHelper")) { if (!cl.name.endsWith("_Impl_") && !cl.name.endsWith("_HSX") && !cl.name.endsWith("_HSC")) {
var metas = cl.meta.get();
if(cl.params.length > 0) if(cl.params.length > 0)
return fields; return fields;
if(cl.module == "EReg") return fields; // private typedef in same class
if(cl.module == "hl.Format") return fields; // enum in same class
var definedFields = []; var definedFields = [];
var helperClass = macro class {
};
helperClass.pos = cl.pos;
var module = cl.module + "_HLFHelper";
var hcClassName = cl.name + "_HLFHelper";
for(f in fields.copy()) { for(f in fields.copy()) {
if (f == null) if (f == null)
continue; continue;
@@ -71,10 +57,12 @@ class HashLinkFixer {
if(definedFields.contains(f.name)) continue; // no duplicate fields if(definedFields.contains(f.name)) continue; // no duplicate fields
var hlNativeMeta = null;
var hasHlNative = false; var hasHlNative = false;
for(m in f.meta) for(m in f.meta)
if (m.name == ":hlNative") { if (m.name == ":hlNative") {
hasHlNative = true; hasHlNative = true;
hlNativeMeta = m;
break; break;
} }
@@ -93,16 +81,39 @@ class HashLinkFixer {
var overrideExpr:Expr; var overrideExpr:Expr;
var returns:Bool = !fun.ret.match(TPath({name: "Void"})); var returns:Bool = !fun.ret.match(TPath({name: "Void"}));
var printer = new haxe.macro.Printer();
if(cl.module == "hl.Gc" && fun.ret == null) returns = false; // fix since they dont explicitly set :Void
if(cl.module == "hl.Format" && fun.ret == null) returns = false; // fix since they dont explicitly set :Void
var name = 'hlf_${f.name}'; var name = 'hlf_${f.name}';
var arguments = fun.args == null ? [] : [for(a in fun.args) macro $i{a.name}]; var arguments = fun.args == null ? [] : [for(a in fun.args) macro $i{a.name}];
var funcExpr:Expr = returns ? { var funcExpr:Expr = macro @:privateAccess $i{name}($a{arguments});
//macro return $i{name}($a{arguments}); if(returns) funcExpr = macro return $funcExpr;
macro return @:privateAccess $i{hcClassName}.$name($a{arguments});
} : { var cleanMeta = f.meta.copy().filter(function(m) return m.name != ":hlNative");
macro @:privateAccess $i{hcClassName}.$name($a{arguments}); var hasBareMeta = hlNativeMeta.params.length == 0;
};
var meta = f.meta.copy();
switch hlNativeMeta {
case {params: []}:
meta = [{name: ":hlNative", params: [macro "std", macro $v{f.name}], pos: Context.currentPos()}].concat(cleanMeta);
case {params: [_.expr => EConst(CString(name))]}:
meta = [{name: ":hlNative", params: [macro "std", macro $v{name}], pos: Context.currentPos()}].concat(cleanMeta);
case {params: [_.expr => EConst(CFloat(version))]}:
var curVersion = Context.definedValue("hl_ver");
if(curVersion == null) curVersion = "";
if(version > curVersion) {
meta = cleanMeta;
if(f.meta.filter((m) -> m.name == ":noExpr").length > 0)
Context.error("Missing function body", f.pos);
funcExpr = fun.expr; // restore to default behaviour
} else {
meta = [{name: ":hlNative", params: [macro "std", macro $v{f.name}], pos: Context.currentPos()}].concat(cleanMeta);
}
default:
}
var fiel:Field = { var fiel:Field = {
name: name, name: name,
@@ -110,50 +121,32 @@ class HashLinkFixer {
kind: FFun({ kind: FFun({
ret: fun.ret, ret: fun.ret,
params: fun.params.copy(), params: fun.params.copy(),
expr: fun.expr, expr: funcExpr,
args: fun.args.copy() args: fun.args.copy()
}), }),
access: f.access.copy(), access: f.access.copy().filter(function(a) return a != APublic && a != APrivate).concat([APrivate]),
meta: f.meta.copy() meta: meta
}; };
helperClass.fields.push(fiel); fields.push(fiel);
definedFields.push(f.name); definedFields.push(f.name);
// Remove meta from original function
for(m in f.meta.copy()) for(m in f.meta.copy())
if (m.name == ":hlNative") { if (m.name == ":hlNative") {
f.meta.remove(m); f.meta.remove(m);
} }
fun.expr = funcExpr;
default: default:
} }
} }
helperClass.pack = cl.pack.copy(); /*if(definedFields.length > 0) {
helperClass.pos = cl.pos; trace(cl.module);
helperClass.name = hcClassName;
if(definedFields.length > 0) { var printer = new haxe.macro.Printer();
//trace(cl.module); for(field in fields) if(field.name.startsWith("hlf_"))
Sys.println(printer.printField(field));
/*for(m in metas.copy()) { }*/
trace(" " + m.name);
if(m.name == ":coreApi") {
metas.remove(m);
}
}*/
var imports = Context.getLocalImports().copy();
Context.defineModule(module, [helperClass], imports);
Context.getLocalImports().push({
path: [for(m in module.split(".")) {
name: m,
pos: Context.currentPos()
}],
mode: INormal
});
}
} }
return fields; return fields;
+1 -1
View File
@@ -134,7 +134,7 @@
<haxedef name="USE_ADAPTED_ASSETS" unless="web" /> <haxedef name="USE_ADAPTED_ASSETS" unless="web" />
<!-- Comment this out to disable support for custom ndlls. !--> <!-- Comment this out to disable support for custom ndlls. !-->
<haxedef name="NDLLS_SUPPORTED" unless="web || iphonesim" /> <haxedef name="NDLLS_SUPPORTED" unless="web || iphonesim || hl" />
<!-- Comment this out to disable support for Away3D Flixel Intergration (reduces compile times)--> <!-- Comment this out to disable support for Away3D Flixel Intergration (reduces compile times)-->
<define name="THREE_D_SUPPORT" /> <define name="THREE_D_SUPPORT" />
@@ -123,6 +123,13 @@ final class NoteHitEvent extends CancellableEvent {
@:dox(hide) @:dox(hide)
public function cancelDeletion() {preventDeletion();} public function cancelDeletion() {preventDeletion();}
/**
* Forces the note to be deleted.
**/
public function forceDeletion() {
deleteNote = true;
}
/** /**
* Prevents the vocals volume from being set to 1 after pressing the note. * Prevents the vocals volume from being set to 1 after pressing the note.
*/ */
@@ -1,5 +1,7 @@
package funkin.backend.system.framerate; package funkin.backend.system.framerate;
import funkin.backend.scripting.ModState;
class FlixelInfo extends FramerateCategory { class FlixelInfo extends FramerateCategory {
public function new() { public function new() {
super("Flixel Info"); super("Flixel Info");
@@ -14,7 +16,12 @@ class FlixelInfo extends FramerateCategory {
for(_ in FlxG.bitmap._cache.keys()) for(_ in FlxG.bitmap._cache.keys())
c++; c++;
_text = 'State: ${Type.getClassName(Type.getClass(FlxG.state))}'; if((FlxG.state is ModState)) {
var state:ModState = cast FlxG.state;
_text = "Mod State: " + state.scriptName;
} else {
_text = 'State: ${Type.getClassName(Type.getClass(FlxG.state))}';
}
_text += '\nObject Count: ${FlxG.state.members.length}'; _text += '\nObject Count: ${FlxG.state.members.length}';
_text += '\nCamera Count: ${FlxG.cameras.list.length}'; _text += '\nCamera Count: ${FlxG.cameras.list.length}';
_text += '\nBitmaps Count: ${c}'; _text += '\nBitmaps Count: ${c}';
@@ -22,9 +29,9 @@ class FlixelInfo extends FramerateCategory {
_text += '\nFlxG.game Childs Count: ${FlxG.game.numChildren}'; _text += '\nFlxG.game Childs Count: ${FlxG.game.numChildren}';
// _text += '\nCached objects count: ${cachedObjects}'; // _text += '\nCached objects count: ${cachedObjects}';
#if FLX_POINT_POOL #if FLX_POINT_POOL
var points = flixel.math.FlxPoint.FlxBasePoint.pool; //var points = flixel.math.FlxPoint.FlxBasePoint.pool;
//_text += '\nPoint Count: ${points._count} | +${points.made} | -${points.gotten} | ${points.balance} | >${points.putted}'; //_text += '\nPoint Count: ${points._count} | +${points.made} | -${points.gotten} | ${points.balance} | >${points.putted}';
_text += '\nPoint Count: ${points._count}'; //_text += '\nPoint Count: ${points._count}';
#end #end
} }
@@ -4,6 +4,7 @@ import haxe.Exception;
#if GITHUB_API #if GITHUB_API
import haxe.Json; import haxe.Json;
#end #end
import haxe.Exception;
// TODO: Document further and perhaps make this a Haxelib. // TODO: Document further and perhaps make this a Haxelib.
class GitHub { class GitHub {
@@ -99,7 +99,7 @@ class AsyncUpdater {
progress.files = files.length; progress.files = files.length;
progress.step = DOWNLOADING_ASSETS; progress.step = DOWNLOADING_ASSETS;
trace('starting assets download'); trace('starting assets download');
doFile([for(e in files) e], fileNames.copy(), function() { doFile(files.copy(), fileNames.copy(), function() {
progress.curFile = -1; progress.curFile = -1;
progress.curFileName = null; progress.curFileName = null;
progress.files = 1; progress.files = 1;
+1 -1
View File
@@ -525,7 +525,7 @@ typedef DPresence =
var ?button1Url:String; /* max 512 bytes */ var ?button1Url:String; /* max 512 bytes */
var ?button2Label:String; /* max 32 bytes */ var ?button2Label:String; /* max 32 bytes */
var ?button2Url:String; /* max 512 bytes */ var ?button2Url:String; /* max 512 bytes */
var ?activityType:ActivityType; var ?activityType:#if DISCORD_RPC ActivityType #else Dynamic #end;
var ?streamUrl:String; /* max 512 bytes */ var ?streamUrl:String; /* max 512 bytes */
} }
+1 -1
View File
@@ -1672,7 +1672,7 @@ class Charter extends UIState {
changeNoteSustain(-1); changeNoteSustain(-1);
function _note_selectall(_) { function _note_selectall(_) {
selection = [for (note in notesGroup.members) note]; selection = cast notesGroup.members.copy();
} }
function _note_selectmeasure(_) { function _note_selectmeasure(_) {
+5 -3
View File
@@ -1661,9 +1661,11 @@ class PlayState extends MusicBeatState
var event:NoteHitEvent; var event:NoteHitEvent;
if (strumLine != null && !strumLine.cpu) if (strumLine != null && !strumLine.cpu)
event = scripts.event("onPlayerHit", EventManager.get(NoteHitEvent).recycle(false, !note.isSustainNote, !note.isSustainNote, note, strumLine.characters, true, note.noteType, note.animSuffix.getDefault(note.strumID < strumLine.members.length ? strumLine.members[note.strumID].animSuffix : strumLine.animSuffix), "game/score/", "", note.strumID, score, note.isSustainNote ? null : accuracy, 0.023, daRating, Options.splashesEnabled && !note.isSustainNote && daRating == "sick")); event = EventManager.get(NoteHitEvent).recycle(false, !note.isSustainNote, !note.isSustainNote, note, strumLine.characters, true, note.noteType, note.animSuffix.getDefault(note.strumID < strumLine.members.length ? strumLine.members[note.strumID].animSuffix : strumLine.animSuffix), "game/score/", "", note.strumID, score, note.isSustainNote ? null : accuracy, 0.023, daRating, Options.splashesEnabled && !note.isSustainNote && daRating == "sick");
else else
event = scripts.event("onDadHit", EventManager.get(NoteHitEvent).recycle(false, false, false, note, strumLine.characters, false, note.noteType, note.animSuffix.getDefault(note.strumID < strumLine.members.length ? strumLine.members[note.strumID].animSuffix : strumLine.animSuffix), "game/score/", "", note.strumID, 0, null, 0, daRating, false)); event = EventManager.get(NoteHitEvent).recycle(false, false, false, note, strumLine.characters, false, note.noteType, note.animSuffix.getDefault(note.strumID < strumLine.members.length ? strumLine.members[note.strumID].animSuffix : strumLine.animSuffix), "game/score/", "", note.strumID, 0, null, 0, daRating, false);
event.deleteNote = !note.isSustainNote; // work around, to allow sustain notes to be deleted
event = scripts.event(strumLine != null && !strumLine.cpu ? "onPlayerHit" : "onDadHit", event);
strumLine.onHit.dispatch(event); strumLine.onHit.dispatch(event);
scripts.event("onNoteHit", event); scripts.event("onNoteHit", event);
@@ -1710,7 +1712,7 @@ class PlayState extends MusicBeatState
} }
} }
if (event.deleteNote && !note.isSustainNote) strumLine.deleteNote(note); if (event.deleteNote) strumLine.deleteNote(note);
} }
public function displayRating(myRating:String, ?evt:NoteHitEvent = null):Void { public function displayRating(myRating:String, ?evt:NoteHitEvent = null):Void {