zongors-universe-machine/old/idea.zl1

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