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

105 lines
1.9 KiB
Plaintext

type Vec {
f32[x, y, z];
}
type Color {
i8[r, g, b];
}
type Player {
str username;
Vec pos;
Color color;
}
void login(Player p, str password) {
(* do the login here *)
}
(* Color purple = [255, 255, 0]; *)
Color purple(r=255, g=255, b=0);
void main(int argc, str[] argv) {
i32 screen_width = 800;
i32 screen_height = 450;
str username = argv[0];
str password = argv[1];
Player me(
username=username,
pos=[0.0, 1.0, 2.0],
color=purple
);
Player[] players = login(me, password);
Camera3D camera(
up=[0.0, 1.0, 0.0]
fov=45.0,
mode=:CAMERA_PERSPECTIVE,
pos=[
me.pos.x + 10.0,
me.pos.y + 10.0,
me.pos.z
]
point_at=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)) {
me.pos.x = me.pos.x + 0.2;
player_updated = true;
}
if (is_key_down(:KEY_LEFT)) {
me.pos.x = me.pos.x - 0.2;
player_updated = true;
}
if (is_key_down(:KEY_DOWN)) {
me.pos.z = me.pos.z + 0.2;
player_updated = true;
}
if (is_key_down(:KEY_UP)) {
me.pos.z = me.pos.z - 0.2;
player_updated = true;
}
sync_camera(camera, me);
if (player_updated) {
players = move(me);
} else {
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);
for (player in players) {
draw_cube(player.pos, 0.5, 0.5, 0.5, player.apperance);
}
end_mode_3d();
end_drawing();
}
logout(me);
close_window(); (*Close window and OpenGL context *)
}