import os import gg import gx import sokol.sapp const win_width = 768 const win_height = 768 struct Game { mut: gg &gg.Context = unsafe { nil } player Player bg_texture BgTexture } struct BgTexture { mut: image gg.Image pos_x f32 pos_y f32 } struct Player { mut: pos_x int pos_y int lives int image gg.Image } fn frame(mut game Game) { game.update() game.draw() } fn main() { print('Loading... ') mut game := &Game{} mut font_path := os.resource_abs_path(os.join_path('assets', 'monogram-extended.ttf')) game.gg = gg.new_context( bg_color: gx.hex(0x2A2A3AFF) width: win_width height: win_height create_window: true enable_dragndrop: false window_title: 'Runner' font_path: font_path user_data: game frame_fn: frame event_fn: on_event ) game.player = &Player{ pos_x: 50 pos_y: 50 lives: 3 } game.bg_texture = &BgTexture{ pos_x: 0 pos_y: 0 } game.bg_texture.image = game.gg.create_image(os.resource_abs_path(os.join_path('assets', 'tiled_bg.png'))) or { panic(err) } game.player.image = game.gg.create_image(os.resource_abs_path(os.join_path('assets', 'vlang.png'))) or { panic(err) } println('OK!\n') println('High DPI: ${gg.high_dpi()}') println('Window size: ${gg.window_size().width}x${gg.window_size().height}') println('Screen size: ${gg.screen_size().width}x${gg.screen_size().height}') println('Fullscreen: ${gg.is_fullscreen()}\n') game.gg.run() println('\nBye!') } fn (mut game Game) key_down(key gg.KeyCode) { match key { // vfmt off .escape { game.gg.quit() } // vfmt on .f11 { sapp.toggle_fullscreen() println('Set fullscreen: ${gg.is_fullscreen()}') } // vfmt off .left { game.player.pos_x -= 2 } .right { game.player.pos_x += 2 } .up { game.player.pos_y -= 2 } .down { game.player.pos_y += 2 } // vfmt on else {} } } fn on_event(e &gg.Event, mut game Game) { // println('code=$e.char_code') // println('code=$e.key_code') match e.typ { .key_down { game.key_down(e.key_code) } else {} } }