Basic mouse hover support and sprite auto work more properly
This commit is contained in:
+60
-36
@@ -12,28 +12,22 @@ def WIDTH = 640;
|
||||
def HEIGHT = 480;
|
||||
|
||||
export fn main() void = {
|
||||
sdl3::Init(sdl3::InitFlags::VIDEO)!;
|
||||
sdl3::Init(sdl3::InitFlags::VIDEO | sdl3::InitFlags::EVENTS)!;
|
||||
defer sdl3::Quit();
|
||||
|
||||
const win = sdl3::CreateWindow(
|
||||
c::nulstr("Meadow\0"),
|
||||
WIDTH, HEIGHT, sdl3::WindowFlags::RESIZABLE)!;
|
||||
WIDTH, HEIGHT, sdl3::WindowFlags::RESIZABLE |
|
||||
sdl3::WindowFlags::MOUSE_CAPTURE |
|
||||
sdl3::WindowFlags::INPUT_FOCUS |
|
||||
sdl3::WindowFlags::MOUSE_FOCUS
|
||||
)!;
|
||||
defer sdl3::DestroyWindow(win);
|
||||
|
||||
const render = sdl3::CreateRenderer(win, null)!;
|
||||
defer sdl3::DestroyRenderer(render);
|
||||
sdl3::SetRenderDrawColor(render, 0, 0, 128, 255)!;
|
||||
sdl3::SetRenderVSync(render,1)!;
|
||||
// const img = image::LoadTexture(render, c::nulstr("./assets/mascot.jpg\0"))!;
|
||||
// defer sdl3::DestroyTexture(img);
|
||||
|
||||
// let w = 0.0f32, h = 0.0f32;
|
||||
// sdl3::GetTextureSize(img, &w, &h)!;
|
||||
// sdl3::get_error()!;
|
||||
// const w = w: int, h = h: int;
|
||||
|
||||
// let x = 0, y = 0;
|
||||
// let xd = 1, yd = 1;
|
||||
|
||||
|
||||
const screen_w = WIDTH;
|
||||
@@ -124,6 +118,7 @@ export fn main() void = {
|
||||
next_refresh = now + frame_interval;
|
||||
|
||||
if(state.screen_vector != 0){
|
||||
fmt::println("Executing screen vector")!;
|
||||
uxn::uxn_eval(state.screen_vector, state)!;
|
||||
};
|
||||
};
|
||||
@@ -178,34 +173,62 @@ export fn main() void = {
|
||||
|
||||
//Render stuff
|
||||
for (sdl3::PollEvent(&ev)) {
|
||||
if (ev.event_type == sdl3::EventType::QUIT) {
|
||||
run = false;
|
||||
}else if(ev.event_type == 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)){
|
||||
// fmt::println("Dimensions not allowed!")!;
|
||||
//TODO handle this maybe
|
||||
uxn::set_window_size(w: u16,h: u16,state);
|
||||
sdl3::DestroyTexture(meadow_texture);
|
||||
free(pixeldata);
|
||||
pixeldata = alloc([0...])!; //TODO figure out actual size
|
||||
let old_w: int = dims.width: int;
|
||||
let old_h: int = dims.height: int;
|
||||
// fmt::println("Handling event")!;
|
||||
switch (ev.event_type) {
|
||||
case sdl3::EventType::QUIT =>
|
||||
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)){
|
||||
// fmt::println("Dimensions not allowed!")!;
|
||||
//TODO handle this maybe
|
||||
uxn::set_window_size(w: u16,h: u16,state);
|
||||
sdl3::DestroyTexture(meadow_texture);
|
||||
free(pixeldata);
|
||||
pixeldata = alloc([0...])!; //TODO figure out actual size
|
||||
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,h)!;
|
||||
|
||||
meadow_texture = sdl3::CreateTexture(render,
|
||||
sdl3::PixelFormat::XRGB4444,
|
||||
sdl3::TextureAccess::STATIC,
|
||||
w,
|
||||
h)!;
|
||||
meadow_texture = sdl3::CreateTexture(render,
|
||||
sdl3::PixelFormat::XRGB4444,
|
||||
sdl3::TextureAccess::STATIC,
|
||||
w,
|
||||
h)!;
|
||||
|
||||
state.screen_update = true;
|
||||
};
|
||||
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);
|
||||
uxn::uxn_eval(state.mouse_vector,state)!;
|
||||
case sdl3::EventType::WINDOW_EXPOSED =>
|
||||
sdl3::RenderClear(render)!;
|
||||
sdl3::RenderTexture(render, meadow_texture, null, null)!;
|
||||
sdl3::RenderPresent(render)!;
|
||||
case sdl3::EventType::WINDOW_SHOWN =>
|
||||
sdl3::RenderClear(render)!;
|
||||
sdl3::RenderTexture(render, meadow_texture, null, null)!;
|
||||
sdl3::RenderPresent(render)!;
|
||||
case sdl3::EventType::WINDOW_PIXEL_SIZE_CHANGED =>
|
||||
sdl3::RenderClear(render)!;
|
||||
sdl3::RenderTexture(render, meadow_texture, null, null)!;
|
||||
sdl3::RenderPresent(render)!;
|
||||
case sdl3::EventType::WINDOW_MOUSE_ENTER =>
|
||||
sdl3::RenderClear(render)!;
|
||||
sdl3::RenderTexture(render, meadow_texture, null, null)!;
|
||||
sdl3::HideCursor()!;
|
||||
case sdl3::EventType::WINDOW_MOUSE_LEAVE =>
|
||||
sdl3::RenderClear(render)!;
|
||||
sdl3::RenderTexture(render, meadow_texture, null, null)!;
|
||||
sdl3::ShowCursor()!;
|
||||
case =>
|
||||
fmt::printfln("Unhandled SDL event: 0x{:x} , {}", ev.event_type, ev.event_type )!;
|
||||
};
|
||||
};
|
||||
|
||||
@@ -220,3 +243,4 @@ export fn main() void = {
|
||||
sdl3::get_error()!;
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user