!! ! Note that these look like classes but act like structs ! the methods actually have a implied struct as their first argument !! !! ! Camera . !! type Camera { 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 . !! type Player { init(str username, real[3] pos, Color color) { this.server = 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[] { this.server.attach(this.username, password); this.players = server.open("players"); return players.read(); } logout() { this.players.flush(); this.server.clunk(); } update() { if (key_down("right")) { this.pos.x = this.pos.x + 0.2; this.server.write(Command(this.username, KEY_RIGHT)) } if (key_down("left")) { this.pos.x = this.pos.x - 0.2; this.server.write(Command(this.username, KEY_LEFT)) } if (key_down("down")) { this.pos.z = this.pos.z + 0.2; this.server.write(Command(this.username, KEY_DOWN)) } if (key_down("up")) { this.pos.z = this.pos.z - 0.2; this.server.write(Command(this.username, KEY_UP)) } this.camera.sync(); } } const RED is [255, 0, 0]; const WHITE is [0, 0, 0]; const PURPLE is [255, 255, 0];