type Vec { f32[x, y, z]; } type Color { i8[r, g, b]; } type Player { str username; Vec pos; Color color; } void login(Player p, str password) { (* do the login here *) } (* Color purple = [255, 255, 0]; *) Color purple(r=255, g=255, b=0); void main(int argc, str[] argv) { i32 screen_width = 800; i32 screen_height = 450; str username = argv[0]; str password = argv[1]; Player me( username=username, pos=[0.0, 1.0, 2.0], color=purple ); Player[] players = login(me, password); Camera3D camera( up=[0.0, 1.0, 0.0] fov=45.0, mode=:CAMERA_PERSPECTIVE, pos=[ me.pos.x + 10.0, me.pos.y + 10.0, me.pos.z ] point_at=me.pos ); init_window("zwl client : raylib", screen_width, screen_height); set_target_fps(60) (* Main game loop *) while ( .not. window_should_close ) { if (is_key_down(:KEY_RIGHT)) { me.pos.x = me.pos.x + 0.2; player_updated = true; } if (is_key_down(:KEY_LEFT)) { me.pos.x = me.pos.x - 0.2; player_updated = true; } if (is_key_down(:KEY_DOWN)) { me.pos.z = me.pos.z + 0.2; player_updated = true; } if (is_key_down(:KEY_UP)) { me.pos.z = me.pos.z - 0.2; player_updated = true; } sync_camera(camera, me); if (player_updated) { players = move(me); } else { players = ping(me); } begin_drawing(); clear_background(:RAYWHITE); begin_mode_3d(camera); (* Draw floor *) draw_grid(30, 1.0); draw_cube(me.pos, 0.5, 0.5, 0.5, me.apperance); for (player in players) { draw_cube(player.pos, 0.5, 0.5, 0.5, player.apperance); } end_mode_3d(); end_drawing(); } logout(me); close_window(); (*Close window and OpenGL context *) }