Skip to content

Commit 522829e

Browse files
committed
Update Assets fields on project build
1 parent 4354057 commit 522829e

2 files changed

Lines changed: 46 additions & 14 deletions

File tree

Sources/kha/internal/AssetsBuilder.hx

Lines changed: 28 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,17 @@ import haxe.macro.Context;
66
import haxe.macro.Expr;
77
#if macro
88
import sys.io.File;
9+
import sys.FileSystem;
910
#end
1011

1112
using StringTools;
1213

1314
class AssetsBuilder {
1415
#if macro
15-
public static var files: Array<Dynamic>;
16+
@:persistent static var cache: Map<String, {time: Float, fields: Array<Field>}> = [];
17+
@:persistent static var files: Array<Dynamic>;
18+
@:persistent static var filesTime: Float = 0.0;
19+
static var debug = false;
1620
#end
1721

1822
public static function findResources(): String {
@@ -51,18 +55,31 @@ class AssetsBuilder {
5155
}
5256

5357
macro static public function build(type: String): Array<Field> {
54-
var fields = Context.getBuildFields();
55-
if (files == null) {
56-
var content = Json.parse(File.getContent(findResources() + "files.json"));
58+
final fields = Context.getBuildFields();
59+
final resPath = findResources() + "files.json";
60+
Context.registerModuleDependency(Context.getLocalModule(), resPath);
61+
62+
final time = FileSystem.stat(resPath).mtime.getTime();
63+
if (cache[type] != null && cache[type].time == time) {
64+
return cache[type].fields;
65+
}
66+
67+
if (files == null || filesTime != time) {
68+
final content = Json.parse(File.getContent(resPath));
5769
files = content.files;
70+
filesTime = time;
71+
if (debug)
72+
trace("reparse files.json (Assets)");
5873
}
74+
if (debug)
75+
trace('invalidate Assets.$type');
5976

60-
var names = new Array<Expr>();
77+
final names = new Array<Expr>();
6178

6279
for (file in files) {
63-
var name = file.name;
80+
final name = file.name;
6481
final pos = Context.currentPos();
65-
var filesize: Int = file.file_sizes[0];
82+
final filesize: Int = file.file_sizes[0];
6683

6784
if (file.type == type) {
6885
names.push(macro $v{name});
@@ -210,6 +227,10 @@ class AssetsBuilder {
210227
kind: FVar(macro : Array<String>, macro $a{names}),
211228
pos: Context.currentPos()
212229
});
230+
cache[type] = {
231+
fields: fields,
232+
time: time,
233+
};
213234

214235
return fields;
215236
}

Sources/kha/internal/ShadersBuilder.hx

Lines changed: 18 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -6,25 +6,32 @@ import haxe.macro.Expr.Field;
66
import haxe.Serializer;
77
#if macro
88
import sys.io.File;
9+
import sys.FileSystem;
910
#end
1011

1112
using StringTools;
1213

1314
class ShadersBuilder {
1415
#if macro
15-
public static var files: Array<Dynamic>;
16+
@:persistent static var cache: {time: Float, fields: Array<Field>} = null;
17+
static var debug = false;
1618
#end
1719

1820
macro static public function build(): Array<Field> {
19-
var fields = Context.getBuildFields();
20-
21-
var manifestPath = AssetsBuilder.findResources() + "files.json";
22-
var content = Json.parse(File.getContent(manifestPath));
23-
21+
final fields = Context.getBuildFields();
22+
final manifestPath = AssetsBuilder.findResources() + "files.json";
2423
// rebuild Shaders module whenever manifest file is changed
2524
Context.registerModuleDependency(Context.getLocalModule(), manifestPath);
2625

27-
files = content.files;
26+
final time = FileSystem.stat(manifestPath).mtime.getTime();
27+
if (cache != null && time == cache.time) {
28+
return cache.fields;
29+
}
30+
31+
final content = Json.parse(File.getContent(manifestPath));
32+
final files: Array<Dynamic> = content.files;
33+
if (debug)
34+
trace("invalidate Shaders");
2835

2936
var init = macro {};
3037

@@ -204,6 +211,10 @@ class ShadersBuilder {
204211
}),
205212
pos: Context.currentPos()
206213
});
214+
cache = {
215+
fields: fields,
216+
time: time,
217+
};
207218

208219
return fields;
209220
}

0 commit comments

Comments
 (0)