From 6d766d6dd9177ececb14ebfe2ac68cc581eeeb44 Mon Sep 17 00:00:00 2001 From: ubq323 Date: Fri, 22 Mar 2024 23:52:56 +0000 Subject: movement, multiple surfaces (sort of) --- main.ha | 66 ++++++++++++++++++++++++++++++++++------------------------------- 1 file changed, 35 insertions(+), 31 deletions(-) (limited to 'main.ha') diff --git a/main.ha b/main.ha index ca0c68e..9035053 100644 --- a/main.ha +++ b/main.ha @@ -1,37 +1,32 @@ use fmt; use sdl2; +use math; export fn main() void = { sdl2::SDL_Init(sdl2::SDL_INIT_VIDEO)!; defer sdl2::SDL_Quit(); - fmt::println(size(i32), size(i64), size(int), size(size))!; - - const win = sdl2::SDL_CreateWindow("hi", sdl2::SDL_WINDOWPOS_UNDEFINED, sdl2::SDL_WINDOWPOS_UNDEFINED, 640, 480, sdl2::SDL_WindowFlags::NONE)!; defer sdl2::SDL_DestroyWindow(win); const wsurf = sdl2::SDL_GetWindowSurface(win)!; - const format = wsurf.format; - assert(format.bytesperpixel == 4, "can only work with u32 pixels"); - fmt::printfln("got format {}. bytes per pixel {}. r{:x} g{:x} b{:x} a{:x}", - format.format, format.bytesperpixel, format.rmask, format.gmask, format.bmask, format.amask)!; - fmt::printfln("red: {:x} green {:x} blue {:x}", - sdl2::SDL_MapRGB(format, 255, 0, 0), - sdl2::SDL_MapRGB(format, 0, 255, 0), - sdl2::SDL_MapRGB(format, 0, 0, 255))!; - fmt::println(wsurf.w * wsurf.h)!; - fmt::println(sdl2::SDL_GetPixelFormatName(format.format))!; + + const xsurf = sdl2::SDL_CreateRGBSurface(0, + 512, 512, 32, 0xff0000, 0xff00, 0xff, 0)!; let dstate = drawing_state { drawing = false, pos = (0,0), - picture = picture_from_surface(wsurf) + picture = &picture_from_surface(xsurf) }; + let camera_pos: pos = (25, 50); + + clear_picture(dstate.picture, 0xffffff); + outline_picture(dstate.picture); let quit = false; - let n = 0z; + let n = 0; let lasttime = sdl2::SDL_GetTicks(); for (!quit) { let ev = sdl2::event { ... }; @@ -52,28 +47,37 @@ export fn main() void = { case => void; }; - do_drawing(&dstate); - - - // if (drawing) { - // circle(pic, mousex, mousey, 5, 0x00ffff); - // }; + movement(&camera_pos); - // circle(pic, 100, 100, n:int, 0xff0000); + do_drawing(&dstate); + + sdl2::SDL_BlitSurface(xsurf, null, wsurf, &sdl2::SDL_Rect { + x = camera_pos.0, y = camera_pos.1, ... + })!; sdl2::SDL_UpdateWindowSurface(win)!; n += 1; sdl2::SDL_Delay(1000/60); - - // if (n % 100 == 0) { - // const thistime = sdl2::SDL_GetTicks(); - // const dt = (thistime - lasttime): f64; - // lasttime = thistime; - // const dt = dt / 100.0; - // const fps = 1000.0/dt; - // fmt::printfln("fps: {}",fps)!; - // }; }; }; +def SPEED = 17; +def DIAG_SPEED = 12; // thereabouts + +fn movement(pos: *pos) void = { + const kb = sdl2::SDL_GetKeyboardState(); + let dx = 0; + let dy = 0; + if (kb[sdl2::SDL_Scancode::W]) dy -= 1; + if (kb[sdl2::SDL_Scancode::S]) dy += 1; + if (kb[sdl2::SDL_Scancode::A]) dx -= 1; + if (kb[sdl2::SDL_Scancode::D]) dx += 1; + + let speed = SPEED; + if (dx != 0 && dy != 0) speed = DIAG_SPEED; + + pos.0 += dx * speed; + pos.1 += dy * speed; +}; + -- cgit v1.2.3