:vec { :x :y :z } type :color { :r :g :b } type :player { :username :pos :color } type :login { 0 check 1 check (* do the login here *) } sub 255 255 0 new :purple set :main { 800 new :screen_width set 450 new :screen_height set argv split new :username set new :password set username (0.0 1.0 2.0) purple new :me set password me login <(player)> new :players set () me (:pos :x) acc push me (:pos :y) acc 10.0 add push me (:pos :z) acc 10.0 add push (* Camera pos *) () me (:pos :x) acc push me (:pos :y) acc push me (:pos :z) acc push (* Camera looking at point *) (0.0 1.0 0.0) (* Camera up vector(rotation towards target) *) 45.0 (* Camera field - of - view Y *) :CAMERA_PERSPECTIVE (* Camera projection type *) new :camera set screen_width screen_height "zwl client : raylib" init_window 60 set_target_fps (* Main game loop *) { :KEY_RIGHT is_key_down { 0.2 me (:pos :x) acc inc me (:pos :x) mut :me set true :player_updated set } ifyes :KEY_LEFT is_key_down { 0.2 me (:pos :x) acc dec me (:pos :x) mut :me set true :player_updated set } ifyes :KEY_DOWN is_key_down { 0.2 me (:pos :z) acc inc me (:z :pos) mut :me set true :player_updated set } ifyes :KEY_UP is_key_down { 0.2 me (:pos :z) acc dec me (:z :pos) mut :me set true :player_updated set } ifyes camera me sync_camera player_updated choose { me move :players set } ifyes { me ping :players set } isubo begin_drawing RAYWHITE clear_background camera begin_mode_3d (* Draw floor *) 30 1.0 draw_grid me .pos 0.5 0.5 0.5 me .apperance draw_cube players { .pos 0.5 0.5 0.5 .apperance draw_cube } map end_mode_3d end_drawing } { window_should_close not } while (* Detect window close button or ESC key *) :players me logout set close_window() (*Close window and OpenGL context *) } sub main