110 lines
2.1 KiB
Plaintext
110 lines
2.1 KiB
Plaintext
type :vec {
|
|
<f32> :x
|
|
<f32> :y
|
|
<f32> :z
|
|
}
|
|
|
|
type :color {
|
|
<i8> :r
|
|
<i8> :g
|
|
<i8> :b
|
|
}
|
|
|
|
type :player {
|
|
<str> :username
|
|
<vec> :pos
|
|
<color> :color
|
|
}
|
|
|
|
fn :login {
|
|
check 0 <player>
|
|
check 1 <str>
|
|
|
|
(* do the login here *)
|
|
}
|
|
|
|
set :purple new <color> [255 255 0]
|
|
|
|
fn :main {
|
|
set :screen_width new <i32> 800
|
|
set :screen_height new <i32> 450
|
|
|
|
split argv
|
|
set :username new <str>
|
|
set :password new <str>
|
|
|
|
set :me new <player> [
|
|
username
|
|
new <vec> [0.0 1.0 2.0]
|
|
purple
|
|
]
|
|
set :players <(<player>)> login me password
|
|
|
|
set :camera new <Camera3D> [
|
|
new <vec> [0.0 1.0 0.0]
|
|
new <i32> 45.0
|
|
:CAMERA_PERSPECTIVE
|
|
new <vec> [add [acc me (:pos :x)] 10.0] [add [acc me (:pos :y)] 10.0] [acc me (:pos :z)]
|
|
new <vec> [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 |