gui example, server socket example

This commit is contained in:
zongor 2025-05-31 23:56:07 -04:00
parent 96785dcd22
commit a6e254a100
3 changed files with 49 additions and 39 deletions

View File

@ -1,4 +1,4 @@
use `common.ztl`; use "common.ztl";
fn main (argc real, argv str[]) { fn main (argc real, argv str[]) {
let screen_width = 800; let screen_width = 800;
@ -13,32 +13,31 @@ fn main (argc real, argv str[]) {
PURPLE PURPLE
); );
let players = me.login(password); let running = true;
while (running) {
window("zwl client", screen_width, screen_height) {
splitbox(parent.size*0.25) {
canvas("2D") {
if (button("logout")) {
me.logout();
running = false;
}
}
}
splitbox(parent.size*0.75) {
canvas("3D") {
model(Floor((0, 0, 0), 30));
me.update();
model(Cube(me.pos, (0.5, 0.5, 0.5), me.appearance));
if (let players = me.server.read("players")) {
for (p in players) {
model(Cube(p.pos, (0.5, 0.5, 0.5), p.apperance));
}
}
}
}
}
}
let window = Window("zwl client", screen_width, screen_height);
let splitbox = window.split("vertical", 0.75); /* vertical split 75% left */
let universe = Universe();
let canvas = Canvas();
canvas.append(Button("logout", fn () {
me.logout();
window.send("close");
}));
splitbox.left.append(universe);
splitbox.right.append(canvas);
universe.append(Grid(30, 1.0));
universe.append(Cube(player.pos, (0.5, 0.5, 0.5), me.appearance), player_behavior);
universe.listen("login", fn () {
let p = m.data as Player;
if (!p) return;
universe.append(Cube(p.pos, (0.5, 0.5, 0.5), p.apperance), player_behavior);
});
window.run();
exits("Client Closed Successfully"); exits("Client Closed Successfully");
} }
fn player_behavior(Message m) {
}

View File

@ -16,7 +16,7 @@ type Camera {
*/ */
type Player { type Player {
init (username str, pos Vec3, color Color) { init (username str, pos Vec3, color Color) {
this.server = `tcp://localhost:25565`; this.server = Client("tcp://localhost:25565");
this.username = username; this.username = username;
this.pos = pos; this.pos = pos;
this.color = color; this.color = color;
@ -40,22 +40,22 @@ type Player {
} }
update() { update() {
if (key_down(KEY_RIGHT)) { if (key_down("right")) {
this.pos.x = this.pos.x + 0.2; this.pos.x = this.pos.x + 0.2;
this.server.write(Command(this.username, KEY_RIGHT)) this.server.write(Command(this.username, KEY_RIGHT))
} }
if (key_down(KEY_LEFT)) { if (key_down("left")) {
this.pos.x = this.pos.x - 0.2; this.pos.x = this.pos.x - 0.2;
this.server.write(Command(this.username, KEY_LEFT)) this.server.write(Command(this.username, KEY_LEFT))
} }
if (key_down(KEY_DOWN)) { if (key_down("down")) {
this.pos.z = this.pos.z + 0.2; this.pos.z = this.pos.z + 0.2;
this.server.write(Command(this.username, KEY_DOWN)) this.server.write(Command(this.username, KEY_DOWN))
} }
if (key_down(KEY_UP)) { if (key_down("up")) {
this.pos.z = this.pos.z - 0.2; this.pos.z = this.pos.z - 0.2;
this.server.write(Command(this.username, KEY_UP)) this.server.write(Command(this.username, KEY_UP))
} }

View File

@ -1,11 +1,22 @@
use `common.ztl`; use "common.ztl";
fn main (argc real, argv str[]) { fn main (argc real, argv str[]) {
let s = `tcp://0.0.0.0:25565`; let s = Server("tcp://0.0.0.0:25565");
s.bind("players", fn () Player[] { let running = true;
let players = [ Player("user", (0, 0, 0), RED) ]; let players = [ Player("user", (0, 0, 0), RED) ];
return players; while(running) {
}); if (let client = s.accept("players")) {
s.start(); if (let message = client.get()) {
if (message == "close") {
client.close();
running = false;
} else if (message == "players") {
client.write(players);
} else {
print("unknown message {message}");
}
}
}
}
exits(nil); exits(nil);
} }