diff --git a/scene/boot/00-rooms.pr b/scene/boot/00-rooms.pr index 4a8adf9..ce2c73d 100644 --- a/scene/boot/00-rooms.pr +++ b/scene/boot/00-rooms.pr @@ -1,5 +1,6 @@ + ? [ let ?scene = dataspace diff --git a/scene/lobby.pr b/scene/lobby.pr index 4691427..5d4260c 100644 --- a/scene/lobby.pr +++ b/scene/lobby.pr @@ -1,5 +1,5 @@ >> -> +; > > ] >>>> - - - - - 0.75] - >>>>> - - - >>>>> - - - - - >>>>>> - - - - > - > - > - ]>>>>> - - - + [ >> ]>>> -; ]>> -; -; [ -; -; >>>> -; >> -; ]>>> + + + [ + + >>>> + >> + ]>>> + >>>>> - - - - >>>>>> - -; [ -; -; > -; -; -; >>> -; ]>> - -; -; -; >>> - -; -; -; ] -; -; >>> -; >>> -; ]> -; >>>>> - - - + >>> - - - - - - 1.0] - > - > - ]>>>>>> - -; -; -; -; ] -; >> -; > -; ]> -; >> -; >>> + 2.1 F + [7.7 F] draw + 1.1 B 90 2.2 wall + 1.4 B [ + ++ + [2.1 F ++ 3 F] draw 3 B + 0.7 F -- [0.9 F] draw ++ 3.2 B + [4.2 F -- 2.7 F -- 0.4 F ++ 1.0 F] draw + [-- [3.8 F] draw] saved + [4.5 F] draw + [-- [3.1 F] draw] saved + [1.3 F] draw + [++ [1.6 F] draw] saved + [1 F] draw + ] saved + 1.6 B 90 2.2 wall + 1.4 B -90 11.1 wall + ]> + >>> [] diff --git a/scene/misc.pr b/scene/misc.pr new file mode 100644 index 0000000..a2ac144 --- /dev/null +++ b/scene/misc.pr @@ -0,0 +1,187 @@ +>> +> +> + + + ] + >>>> + + + + + + 0.75] + >>>>> + + + >>>>> + + + + + >>>>>> + + + + > + > + > + ]>>>>> + + + + + [ + + >>>> + >> + ]>>> + +; ]>> +; +; [ +; +; >>>> +; >> +; ]>>> + + + + + >>>>> + + + + + >>>>>> + +; [ +; +; > +; +; +; >>> +; ]>> + +; +; +; >>> + +; +; +; ] +; +; >>> +; >>> +; ]> +; >>>>> + + + >>> + + + + + + 1.0] + > + > + ]>>>>>> + +; +; +; +; ] +; >> +; > +; ]> +; >> +; >>> + +[] diff --git a/src/cat.ts b/src/cat.ts index c30edd3..10195ad 100644 --- a/src/cat.ts +++ b/src/cat.ts @@ -296,6 +296,8 @@ export const Primitives: Environment = { 'if'(v, t) { if (!!v) this.apply('if', t); return []; }, 'ifelse'(v, t, f) { if (!!v) this.apply('ifelse', t); else this.apply('ifelse', f); return []; }, + + '*dump*'() { console.log(this._summary()); return []; }, }; function _code(s: string): Closure { diff --git a/src/turtle.ts b/src/turtle.ts index 0f20f9f..a6fab29 100644 --- a/src/turtle.ts +++ b/src/turtle.ts @@ -11,6 +11,8 @@ import { import * as Cat from './cat.js'; +export class PenError extends Cat.RuntimeError {} + export class PenState { templatePath: Vector3[] = [new Vector3()]; paths: Vector3[][] | null = null; @@ -28,7 +30,7 @@ export class PenState { } set() { - if (!this.paths) throw new Error("Cannot set pen with no paths"); + if (!this.paths) throw new PenError("Cannot set pen with no paths"); this.templatePath = this.paths[0]; this.paths = null; this.directions = null; @@ -219,7 +221,8 @@ export const TurtlePrimitives: Cat.Environment = Object.assign({}, Cat 'SetX'(v) { this.pos.x = v as number; return []; }, 'SetY'(v) { this.pos.y = v as number; return []; }, 'SetZ'(v) { this.pos.z = v as number; return []; }, - 'SetPos'(x, y, z) { + 'SetPos'(v) { + const [x, y, z] = v as number[]; this.pos.set(x as number, y as number, z as number); return []; }, @@ -231,7 +234,8 @@ export const TurtlePrimitives: Cat.Environment = Object.assign({}, Cat 'SetRX'(v) { this.q.x = v as number * D2R; return []; }, 'SetRY'(v) { this.q.y = v as number * D2R; return []; }, 'SetRZ'(v) { this.q.z = v as number * D2R; return []; }, - 'SetHeading'(x, y, z) { + 'SetHeading'(v) { + const [x, y, z] = v as number[]; this.q = Quaternion.FromEulerAngles(x as number * D2R, y as number * D2R, z as number * D2R); return []; }, @@ -251,7 +255,16 @@ export const TurtlePrimitives: Cat.Environment = Object.assign({}, Cat 'CCW'(degrees) { this.relativeRotate(0, 0, degrees as number); return []; }, 'ClearPen'() { this.pen.clear(); return []; }, - 'SetPen'() { this.pen.set(); return []; }, + 'DefinePen'() { this.pen.set(); return []; }, + 'GetPen'() { return [this.pen.templatePath.map(v => v.asArray())]; }, + 'SetPen'(p0) { + const p = p0 as [number, number, number][]; + if (this.pen.isDown && this.pen.templatePath.length !== p.length) { + throw new PenError("Cannot set pen with different number of points when pen is down"); + } + this.pen.templatePath = p.map(v => Vector3.FromArray(v)); + return []; + }, 'PenScale'(sx, sy, sz) { this.pen.templateScale = new Vector3(sx as number, sy as number, sz as number);