passing auto and flip sprite tests

This commit is contained in:
JJ Bliss
2026-04-26 16:00:08 -04:00
parent fc5f41910e
commit 56490a754f
2 changed files with 125 additions and 55 deletions
+40 -11
View File
@@ -10,20 +10,24 @@ use uxn;
def WIDTH = 640;
def HEIGHT = 480;
def DEFAULT_SCALE = 3;
export fn main() void = {
sdl3::Init(sdl3::InitFlags::VIDEO | sdl3::InitFlags::EVENTS)!;
defer sdl3::Quit();
let scale = DEFAULT_SCALE;
const win = sdl3::CreateWindow(
c::nulstr("Meadow\0"),
WIDTH, HEIGHT, sdl3::WindowFlags::RESIZABLE |
WIDTH*scale, HEIGHT*scale, sdl3::WindowFlags::RESIZABLE |
sdl3::WindowFlags::MOUSE_CAPTURE |
sdl3::WindowFlags::INPUT_FOCUS |
sdl3::WindowFlags::MOUSE_FOCUS
)!;
defer sdl3::DestroyWindow(win);
sdl3::SetWindowMinimumSize(win,0,0)!;
const render = sdl3::CreateRenderer(win, null)!;
defer sdl3::DestroyRenderer(render);
sdl3::SetRenderDrawColor(render, 0, 0, 128, 255)!;
@@ -39,6 +43,7 @@ export fn main() void = {
screen_w,
screen_h)!;
defer sdl3::DestroyTexture(meadow_texture);
sdl3::SetTextureScaleMode(meadow_texture, sdl3::ScaleMode::NEAREST)!;
// const pixeldata: [WIDTH * HEIGHT]u32 = [0...];
let pixeldata: *[uxn::MAXWIDTH * uxn::MAXHEIGHT]u16 = alloc([0...])!; //TODO figure out actual size
defer free (pixeldata);
@@ -118,7 +123,7 @@ export fn main() void = {
next_refresh = now + frame_interval;
if(state.screen_vector != 0){
fmt::println("Executing screen vector")!;
// fmt::println("Executing screen vector")!;
uxn::uxn_eval(state.screen_vector, state)!;
};
};
@@ -134,13 +139,14 @@ export fn main() void = {
let h: int = dims.height: int;
fmt::printfln("Setting window to width: {} height: {}", w, h)!;
sdl3::SetWindowSize(win,w,h)!;
sdl3::SetWindowSize(win,w*scale,h*scale)!;
meadow_texture = sdl3::CreateTexture(render,
sdl3::PixelFormat::XRGB4444,
sdl3::TextureAccess::STATIC,
w,
h)!;
sdl3::SetTextureScaleMode(meadow_texture, sdl3::ScaleMode::NEAREST)!;
state.screen_update = true;
};
@@ -179,9 +185,17 @@ export fn main() void = {
run = false;
case sdl3::EventType::WINDOW_RESIZED =>
let dims = uxn::get_window_size(state);
let w = ev.window.data1;
let h = ev.window.data2;
if((dims.width != w: u16) || (dims.height != h: u16)){
let w = ev.window.data1 / scale: i32;
let h = ev.window.data2 / scale: i32;
const wmod = w % scale: i32;
const hmod = h % scale: i32;
if((wmod !=0) || (hmod !=0)){
w = w-wmod;
h = h-hmod;
sdl3::SetWindowSize(win,w,h)!;
};
if((dims.width != w: u16 / scale: u16) || (dims.height != h: u16 / scale: u16)){
// fmt::println("Dimensions not allowed!")!;
//TODO handle this maybe
uxn::set_window_size(w: u16,h: u16,state);
@@ -191,22 +205,37 @@ export fn main() void = {
let old_w: int = dims.width: int;
let old_h: int = dims.height: int;
fmt::printfln("User setting window to width: {} height: {}", w, h)!;
sdl3::SetWindowSize(win,w,h)!;
// fmt::printfln("User setting window to width: {} height: {}", w, h)!;
sdl3::SetWindowSize(win,w*scale: i32,h*scale: i32)!;
meadow_texture = sdl3::CreateTexture(render,
sdl3::PixelFormat::XRGB4444,
sdl3::TextureAccess::STATIC,
w,
h)!;
sdl3::SetTextureScaleMode(meadow_texture, sdl3::ScaleMode::NEAREST)!;
state.screen_update = true;
};
case sdl3::EventType::MOUSE_MOTION =>
// fmt::printfln("Mouse Event x: {} y: {}", ev.motion.x, ev.motion.y)!;
uxn::set_mouse_motion(ev.motion.x: u16,ev.motion.y: u16,state);
const x = ev.motion.x / scale: f32;
const y = ev.motion.y / scale: f32;
uxn::set_mouse_motion(x: u16,y: u16,state);
uxn::uxn_eval(state.mouse_vector,state)!;
case sdl3::EventType::MOUSE_BUTTON_DOWN =>
// fmt::printfln("Mouse Down: 0x{:x}", ev.button.button: u8 )!;
const b = 1 << (ev.button.button: u8 - 1);
uxn::set_mouse_down(b,state);
uxn::uxn_eval(state.mouse_vector,state)!;
case sdl3::EventType::MOUSE_BUTTON_UP =>
// fmt::printfln("Mouse Up: 0x{:x}", ev.button.button: u8 )!;
const b = 1 << (ev.button.button: u8 - 1);
uxn::set_mouse_up(b,state);
uxn::uxn_eval(state.mouse_vector,state)!;
case sdl3::EventType::MOUSE_WHEEL =>
fmt::printfln("Mouse Wheel!")!;
case sdl3::EventType::WINDOW_EXPOSED =>
sdl3::RenderClear(render)!;
sdl3::RenderTexture(render, meadow_texture, null, null)!;
@@ -228,7 +257,8 @@ export fn main() void = {
sdl3::RenderTexture(render, meadow_texture, null, null)!;
sdl3::ShowCursor()!;
case =>
fmt::printfln("Unhandled SDL event: 0x{:x} , {}", ev.event_type, ev.event_type )!;
// fmt::printfln("Unhandled SDL event: 0x{:x} , {}", ev.event_type, ev.event_type )!;
yield;
};
};
@@ -243,4 +273,3 @@ export fn main() void = {
sdl3::get_error()!;
};
};