Merge branch 'main' into translations-system
This commit is contained in:
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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 */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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(_) {
|
||||||
|
|||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user