-
Notifications
You must be signed in to change notification settings - Fork 61
Closed
Description
As Lua floats are f64 and as checkInteger returns c_longlong, I notice that code using ziglua ends up being a little annoying with @intCasts and @floatCasts:
fn sheetSprite(lua: *Lua) i32 {
const globals = lua_common.getZigObjects(lua);
const self = lua_common.checkUserdataWithMeta(lua, sprites.Renderer, 1);
const sheet_id: usize = @intCast(lua.checkInteger(2));
const x = lua.checkNumber(3);
const y = lua.checkNumber(4);
const frame_idx: usize = @intCast(lua.checkInteger(5) - 1);
const sheet: *const sprites.SpriteSheet = &globals.sprite_sheets.items[sheet_id];
const image_id = sheet.image_id;
const frame = sheet.frames[frame_idx % sheet.frames.len];
const src_x: f32 = frame.x;
const src_y: f32 = frame.y;
const src_xy = Vec2.T{ src_x, src_y };
const src_wh = Vec2.T{ frame.w, frame.h };
self.sprite(.{ @floatCast(x), @floatCast(y) }, .{ frame.w, frame.h }, sprites.RenderMode{ .image = .{ .image_id = @intCast(image_id) } }, src_xy, src_wh);
return 0;
}
I wonder if it'd be a good idea to add something like this into ziglua (written in browser, didn't check if it compiles):
pub fn checkNum(comptime T: type, lua: *Lua, arg: i32) Number {
const lv = c.luaL_checknumber(@ptrCast(lua), arg)
const v: T = @floatCast(lv);
return v;
}
And similarly for checkInteger and also for pushInteger, pushNumber.
I suppose I could add my own functions that do the same, but then the won't be usable as "methods" like lua.checkNumber(...) but rather myCheckNumber(lua, ...).
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels