use "common.ztl" fn login(s: 9p, p: Player, password: str): []Player { s.auth(p.username, password) return s.read("players") } fn main(argc: i32, argv: []str): i32 { const screen_width = 800; const screen_height = 450; let username = argv[0]; let password = argv[1]; let s = tunnel("localhost:25565"); s.attach(); let me = Player( username, Vec(0.0, 1.0, 2.0), purple ); let players = login(s, me, password); let camera = Camera3D( Vec(0.0, 1.0, 0.0), 45.0, :CAMERA_PERSPECTIVE, Vec( me.pos.x + 10.0, me.pos.y + 10.0, me.pos.z ), me.pos ); init_window("zwl client : raylib", screen_width, screen_height); set_target_fps(60); (* Main game loop *) while ( not window_should_close() ) { let player_updated = false; 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(s, me, camera); if (player_updated) { players = move(s, me); } else { players = ping(s, 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 *) }