type :vec { :x :y :z } type :color { :r :g :b } type :player { :username :pos :color } fn :login { check 0 check 1 (* do the login here *) } set :purple new [255 255 0] fn :main { set :screen_width new 800 set :screen_height new 450 split argv set :username new set :password new set :me new [ username new [0.0 1.0 2.0] purple ] set :players <()> login me password set :camera new [ new [0.0 1.0 0.0] new 45.0 :CAMERA_PERSPECTIVE new [add [acc me (:pos :x)] 10.0] [add [acc me (:pos :y)] 10.0] [acc me (:pos :z)] new [acc me :pos] ] init_window screen_width screen_height "zwl client : raylib" set_target_fps 60 (* Main game loop *) while { not window_should_close } { if is_key_down :KEY_RIGHT { mut :me (:pos :x) add [acc me :pos :x] 0.2 set :player_updated true } if is_key_down :KEY_LEFT { mut :me (:pos :x) sub [acc me :pos :x] 0.2 set :player_updated true } if is_key_down :KEY_DOWN { mut :me (:pos :z) add [acc me :pos :z] 0.2 set :player_updated true } if is_key_down :KEY_UP { mut :me (:pos :z) sub [acc me :pos :z] 0.2 set :player_updated true } sync_camera camera me if player_updated { set :players move me } else { set :players ping me } begin_drawing clear_background RAYWHITE begin_mode_3d camera (* Draw floor *) draw_grid 30 1.0 draw_cube [acc me :pos] 0.5 0.5 0.5 [acc me :apperance] map players { draw_cube [acc @this :pos] 0.5 0.5 0.5 [acc @this apperance] } end_mode_3d end_drawing } (* Detect window close button or ESC key *) players = me.logout() close_window() (*Close window and OpenGL context *) } main