zongors-universe-machine/docs/old/ideas/idea.zl2c

116 lines
2.3 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 (Player str -> bool) {
set p to pop; /* getting the player from the stack */
set password to pop; /* get the string from the stack */
return true; /* return back from function and push value on stack */
};
Color :purple {255 255 0};
fn :main (i32 str[] -> i32) {
set :argc to pop; // to is a noop but makes it more readable
set :argv to pop;
set :screen_width to i32 800;
set :screen_height to i32 450;
set :username to argv[0];
set :password to argv[1];
set :me to Player { // the brackets are for readablity, the ';' is neccisarry
username,
vec {0.0 1.0 2.0},
purple,
};
set :players to Player[] { login me password; };
set :camera to Camera3D {
vec {0.0 1.0 0.0},
i32 45.0,
atom :CAMERA_PERSPECTIVE,
vec {
add me.pos.x 10.0,
add 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 ) {
if (is_key_down :KEY_RIGHT) {
set me.pos.x to {add me.pos.x 0.2};
set :player_updated true;
}
if (is_key_down :KEY_LEFT) {
set me.pos.x to {sub me.pos.x 0.2};
set :player_updated true;
}
if (is_key_down :KEY_DOWN) {
set me.pos.z to {add me.pos.z 0.2};
set :player_updated true;
}
if (is_key_down :KEY_UP) {
set me.pos.z to {sub 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 me.pos 0.5 0.5 0.5 me.apperance;
map :player players {
draw_cube player.pos 0.5 0.5 0.5 player.apperance;
}
end_mode_3d;
end_drawing;
}
/* Detect window close button or ESC key */
set :players to logout me;
close_window; /*Close window and OpenGL context */
}
main;