From f1e4c8779eed27a1f0dab27238631b65ea432b6a Mon Sep 17 00:00:00 2001 From: Brendan Hansen Date: Thu, 25 Nov 2021 18:46:00 -0600 Subject: [PATCH] working on asset loader --- tests/snake.onyx | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/tests/snake.onyx b/tests/snake.onyx index f16e05c..1ca8c7b 100644 --- a/tests/snake.onyx +++ b/tests/snake.onyx @@ -4,6 +4,7 @@ use package core assets : struct { ["./tests/player.png"] + [hb.graphics.ImageFilter.Nearest] player: hb.graphics.Image; ["./assets/fonts/mononoki-Regular Nerd Font Complete Mono.ttf", 72] @@ -16,7 +17,9 @@ load_assets :: (assets: any) { 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 { @@ -30,14 +33,24 @@ load_assets :: (assets: any) { } @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 { @@ -45,7 +58,11 @@ load_assets :: (assets: any) { 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); } } } -- 2.25.1