assets : struct {
["./tests/player.png"]
+ [hb.graphics.ImageFilter.Nearest]
player: hb.graphics.Image;
["./assets/fonts/mononoki-Regular Nerd Font Complete Mono.ttf", 72]
asset_info := cast(^type_info.Type_Info_Struct) type_info.get_type_info(ptr_asset_info.to);
assert(asset_info.kind == .Struct, "Loading assets only works for pointers to strucutres.");
- asset_store := cast(^u8) *cast(^rawptr) assets.data;
+ set_member :: macro (a, T, m, v) => {
+ *cast(^T) ((cast(^u8) *cast(^rawptr) a.data) + m.offset) = v;
+ }
for ^asset: asset_info.members {
switch asset.type {
}
@TODO // Add settings like scaling, filters, etc.
+ filter_ptr := array.first(asset.tags, (t) => t.type == hb.graphics.ImageFilter);
+ if filter_ptr != null {
+ filter := *cast(^hb.graphics.ImageFilter) filter_ptr.data;
+ hb.graphics.setImageFilters(img, filter, filter);
+ }
+
+ wrapping_ptr := array.first(asset.tags, (t) => t.type == hb.graphics.ImageWrapping);
+ if wrapping_ptr != null {
+ wrapping := *cast(^hb.graphics.ImageWrapping) wrapping_ptr.data;
+ hb.graphics.setImageWrapping(img, wrapping, wrapping);
+ }
- *cast(^hb.graphics.Image) (asset_store + asset.offset) = img;
+ set_member(assets, hb.graphics.Image, asset, img);
}
case hb.graphics.Font {
path := *(cast(^str) array.first(asset.tags, (t) => t.type == str).data);
size := *(cast(^i32) array.first(asset.tags, (t) => t.type == i32).data);
-
font := hb.graphics.newFont(path, ~~size);
if font == 0 {
continue;
}
- *cast(^hb.graphics.Font) (asset_store + asset.offset) = font;
+ set_member(assets, hb.graphics.Font, asset, font);
+ }
+
+ case #default {
+ printf("Cannot load something of type '{}'.\n", asset.type);
}
}
}