From 1762e9f622c7a9045e6ea23a92a81d7dfa5dadda Mon Sep 17 00:00:00 2001 From: ubq323 Date: Thu, 28 Mar 2024 18:50:23 +0000 Subject: reörganize MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.ha | 101 ---------------------------------------------------------------- 1 file changed, 101 deletions(-) delete mode 100644 main.ha (limited to 'main.ha') diff --git a/main.ha b/main.ha deleted file mode 100644 index 09fd30f..0000000 --- a/main.ha +++ /dev/null @@ -1,101 +0,0 @@ -use fmt; -use sdl2; -use math; - -def CHUNKSIZE = 512; -def NCHUNKS = 4; - -export fn main() void = { - sdl2::SDL_Init(sdl2::SDL_INIT_VIDEO)!; - defer sdl2::SDL_Quit(); - - 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 offs: [_]pos = [ - (0,0), (0,CHUNKSIZE), (CHUNKSIZE,0), (CHUNKSIZE,CHUNKSIZE), - ]; - - let pictures: []picture = alloc([],NCHUNKS); - for (let i = 0z; i < NCHUNKS; i +=1){ - const surf = sdl2::SDL_CreateRGBSurface(0, - CHUNKSIZE, CHUNKSIZE, 32, 0xff0000, 0xff00, 0xff, 0)!; - append(pictures, picture_from_surface(surf, offs[i])); - }; - - let dstate = drawing_state { - drawing = false, - pos = (0,0), - pictures = pictures, - }; - - let camera_pos: pos = (25, 50); - - for (let i = 0z; i < 4; i += 1) { - const p = &dstate.pictures[i]; - clear_picture(p, 0xffffff); - outline_picture(p); - }; - - let quit = false; - let n = 0; - let lasttime = sdl2::SDL_GetTicks(); - for (!quit) { - let ev = sdl2::event { ... }; - for (sdl2::SDL_PollEvent(&ev)! == 1) switch (ev.event_type) { - case sdl2::SDL_EventType::QUIT => quit = true; - case sdl2::SDL_EventType::KEYDOWN => - const keysym = ev.key.keysym.sym; - if (keysym == sdl2::SDL_Keycode::ESCAPE) quit = true; - case sdl2::SDL_EventType::MOUSEBUTTONDOWN, - sdl2::SDL_EventType::MOUSEBUTTONUP => - const edata = ev.button; - dstate.pos = (edata.x + camera_pos.0, edata.y + camera_pos.1); - if (edata.button == 1) - dstate.drawing = (edata.state == 1); - case sdl2::SDL_EventType::MOUSEMOTION => - const edata = ev.motion; - dstate.pos = (edata.x + camera_pos.0, edata.y + camera_pos.1); - case => void; - }; - - movement(&camera_pos); - do_drawing(&dstate); - - for (let i = 0z; i < len(dstate.pictures); i+=1) - render_picture(&dstate.pictures[i], wsurf, camera_pos); - - sdl2::SDL_UpdateWindowSurface(win)!; - n += 1; - sdl2::SDL_Delay(1000/60); - }; -}; - -fn render_picture(pic: *picture, winsurf: *sdl2::SDL_Surface, camera_pos: pos) void = { - sdl2::SDL_BlitSurface(pic.surf, null, winsurf, &sdl2::SDL_Rect{ - x = pic.pos.0 - camera_pos.0, y = pic.pos.1 - camera_pos.1, ... - })!; -}; - - -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