82 lines
1.7 KiB
Fortran
82 lines
1.7 KiB
Fortran
/**
|
|
* Note that these look like classes but act like structs
|
|
* the methods actually have a implied struct as their first argument
|
|
*/
|
|
|
|
/**
|
|
* Camera.
|
|
*/
|
|
plex Camera {
|
|
int setting;
|
|
real pov;
|
|
real[3] up;
|
|
real[3] pos;
|
|
real[3] look;
|
|
|
|
init(real[3] pos, real[3] look) {
|
|
this.setting = CAMERA_PERSPECTIVE;
|
|
this.pov = 45.0;
|
|
this.up = [0.0, 1.0, 0.0];
|
|
this.pos = pos;
|
|
this.look = look;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Player.
|
|
*/
|
|
plex Player {
|
|
Client client;
|
|
str username;
|
|
real[3] pos;
|
|
nat color;
|
|
Camera camera;
|
|
|
|
init(str username, real[3] pos, Color color) {
|
|
this.client = Client("tcp://localhost:25565");
|
|
this.username = username;
|
|
this.pos = pos;
|
|
this.color = color;
|
|
this.camera =
|
|
Camera([this.pos.x + 10.0, this.pos.y + 10.0, this.pos.z], this.pos);
|
|
}
|
|
|
|
login(str password) Player[] { // looks like a method but really it just has an implied "Player this" as the first argument
|
|
this.client.attach(this.username, password);
|
|
this.players = client.open("players");
|
|
return players.read();
|
|
}
|
|
|
|
logout() {
|
|
this.players.flush();
|
|
this.client.clunk();
|
|
}
|
|
|
|
update() {
|
|
if (key_down("right")) {
|
|
this.pos.x += 0.2;
|
|
this.client.write(Command(this.username, KEY_RIGHT))
|
|
}
|
|
|
|
if (key_down("left")) {
|
|
this.pos.x -= 0.2;
|
|
this.client.write(Command(this.username, KEY_LEFT))
|
|
}
|
|
|
|
if (key_down("down")) {
|
|
this.pos.z += 0.2;
|
|
this.client.write(Command(this.username, KEY_DOWN))
|
|
}
|
|
|
|
if (key_down("up")) {
|
|
this.pos.z -= 0.2;
|
|
this.client.write(Command(this.username, KEY_UP))
|
|
}
|
|
this.camera.sync();
|
|
}
|
|
}
|
|
|
|
const nat RED = rgb332([255, 0, 0]);
|
|
const nat WHITE = rgb332([0, 0, 0]);
|
|
const nat PURPLE = rgb332([255, 255, 0]);
|