This commit is contained in:
Tony Garnock-Jones 2023-02-14 16:40:26 +01:00
parent 1737848330
commit f4b17e2fde
5 changed files with 300 additions and 163 deletions

View File

@ -1,5 +1,6 @@
<LoadRoomInto "lobby" "scene/lobby.pr" $config>
<Room "other" "scene/other.pr">
<Room "misc" "scene/misc.pr">
? <Room ?name ?fileName> [
let ?scene = dataspace

View File

@ -1,5 +1,5 @@
<sprite "light" [] <hemispheric-light <v 0.1 1.0 0.0>>>
<gravity <v 0.0 -9.81 0.0>>
; <gravity <v 0.0 -9.81 0.0>>
<sprite "sky" [] <skybox "textures/Daylight Box UV_0">>
<sprite "ground" []
@ -8,43 +8,9 @@
<v 0.0 0.0>]
<floor <scale <v 300.0 1.0 300.0> <ground>>>>>
<sprite "box" []
<move <v -6.0 1.0 8.0>
<scale <v 10.0 0.1 10.0>
<texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
<v 10.0 10.0>
<v 0.0 0.0>
0.75]
<floor <box>>>>>>
<sprite "box2" []
<move <v -500.0 0.5 3.0>
<floor
<color 0.0 0.0 1.0 1.0
<scale <v 1000.0 1.0 1.0> <box>>>>>>
<Exit "p" "lobby">
<sprite "p" []
<move <v -999.5 2.0 3.0>
<rotate <v 0.0 -0.25 0.0>
<color 1.0 0.0 1.0
<touchable <scale <v 1.0 2.0 1.0> <plane>>>>>>>
<sprite "steps" []
<color 0.0 0.5 0.0
<move <v 0.0 0.0 3.5>
<scale <v 1.0 1.0 3.0>
<texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"]
[
<move <v 0.0 0.25 0.0> <box>>
<move <v 1.0 0.0 0.0> <box>>
<move <v 2.0 -0.25 0.0> <box>>
]>>>>>
<Exit "door" "other">
<variable "door" y 0.0>
<sprite "door" [y]
<move <v -3.0 y 1.5>
<sprite "door" []
<move <v -13.0 0.0 1.5>
<rotate <v 0.0 -0.1 0.0> [
<scale <v 1.0 2.11 1.0>
<texture ["textures/door1.jpg"]
@ -52,136 +18,104 @@
<scale <v 1.0 2.11 0.1> <move <v 0.0 0.5 0.6> <box>>>
]>>>
; <portal "door2" <route [<ws "wss://vr.demo.eighty-twenty.org/ws">]>>
; <sprite "door2" []
; <move <v -5.0 0.0 1.5>
; <rotate <v 0.0 -0.1 0.0> [
; <scale <v 1.0 2.11 1.0>
; <texture ["textures/door1.jpg"]
; <touchable <move <v 0.0 0.5 0.0> <plane>>>>>
; <scale <v 1.0 2.11 0.1> <move <v 0.0 0.5 0.6> <box>>>
; ]>>>
<Exit "miscdoor" "misc">
<sprite "miscdoor" []
<move <v -12.0 0.0 2.25>
<rotate <v 0.0 -0.1 0.0> [
<scale <v 1.0 2.11 1.0>
<texture ["textures/door1.jpg"]
<touchable <move <v 0.0 0.5 0.0> <plane>>>>>
<scale <v 1.0 2.11 0.1> <move <v 0.0 0.5 0.6> <box>>>
]>>>
<sprite "plans" []
<texture ["plans/signal-2022-12-27-125451_002.jpeg"]
<move <v 0.0 1.0 -10.0>
<move <v 0.0 1.0 2.0>
<rotate <v 0.1 0.0 0.0>
<scale <v 2.0 2.0 0.1>
<box>>>>>>
<sprite "tower" []
<rotate <v 0.1 0.0 0.0>
<move <v -10.0 50.0 13.0>
<scale <v 3.0 100.0 3.0>
<floor
<color 0.5 0.5 0.0
<box>>>>>>>
; <sprite "sponge" []
; <move <v 4.0 1.6 0.0> [
; <scale <v 0.001 0.001 0.001>
; <external "objects/usnm_346-100k-obj/usnm_346-01-100k.obj">>
; <texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"]
; <scale <v 0.105 1.6 0.13>
; <move <v -0.05 -0.5384 0.5>
; <box>>>>
; ]>>
; <sprite "sofa" []
; <rotate <v -0.125 0.5 0.0>
; <scale <v 0.01 0.01 0.01>
; <external "objects/IKE020001_obj/IKEA-Arild_2_Seat_Sofa-3D.obj">>>>
; <sprite "x" []
; <move <v 10.0 1.6 -5.0>
; <texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
; <v 1.0 3.0 1.0>
; <v 0.0 0.0 0.0>]
; <sound <stream "https://streams.95bfm.com/stream95">
; <csg
; <subtract [
; <move <v 0.0 0.0 0.5> <scale <v 1.1 3.1 1.1> <mesh <box>>>>
; <move <v 0.0 0.0 0.5> <scale <v 1.0 3.0 1.0> <mesh <box>>>>
; ]>
; >>>>>
<sprite "tt2" []
<move <v 0.0 1.6 5.2>
<color 0.5 0.0 1.0
<sprite "house" []
<move <v 0.0 0.0 10.0>
<rotate <v 0.0 0.0 0.0>
<turtle [
1 to slen
0.025 to dlen
90 U
dlen 10 * F
PenDown
90 L
[12 L dlen 2 * F] 30 times
90 R
slen F
SetPen
[
to [f]
GetPos to p
GetHeading to h
f
h SetHeading
p SetPos
] to saved
quote PenUp to PU
quote PenDown to PD
[ to [f] PD f PU ] to draw
[ to [f] PD f DefinePen GetPen ] to drawPen
[
to [f]
[
ClearPen
90 U
f
] saved
to pen
[ 0 F pen SetPen 0 F ]
] to recordPen
[ to [s1 s2] [s1 F 90 L s2 F 90 L] 2 times ] to rectL
2.3 to interiorWallHeight
2.5 to exteriorWallHeight
[ 90 R 0.06 F 90 L ] to setup
[setup [interiorWallHeight 0.12 rectL] drawPen] recordPen to interiorWall
[setup [exteriorWallHeight 0.25 rectL] drawPen] recordPen to exteriorWall
[setup 2.11 F [interiorWallHeight 2.11 - 0.25 rectL] drawPen] recordPen to interiorDoor
[setup 2.11 F [exteriorWallHeight 2.11 - 0.25 rectL] drawPen] recordPen to exteriorDoor
[ to [angle length] [ angle L [length F] draw ] saved ] to wall
#t SetMiter
[ 0 F ] to miter
[ 90 L miter ] to --
[ 90 R miter ] to ++
exteriorWall
[
2.1 F --
0.3 F exteriorDoor 1 F exteriorWall 0.9 F ++
7.7 F ++
13.3 F ++
0.7 F --
2.2 F ++
4.8 F ++
2.2 F --
4.3 F ++
11.1 F ++
] draw
interiorWall
Home
"double" SetSideOrientation
#t SetSmooth
PenDown
[6 CW dlen F] 240 times
PenUp
]>>>>
<sprite "tt" []
<move <v 1.0 1.01 0.75>
<rotate <v -0.125 0.0 0.0>
<texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
<v 2.0 1.0>
<v 0.0 0.0>
1.0]
<csg
<subtract [
<mesh
<turtle [
1.0 to wallHeight
0.1 to wallDepth
90 U
PenDown
[wallHeight F 90 L wallDepth F 90 L] 2 times
SetPen
Home
#t SetMiter
; #t SetSmooth
; quote F to ff
[ 1 to k k / [dup F] k times drop ] to ff
[ R 0 F ] to rr
; [ R 0 F 60 D ] to rr
; [ 4 to k k / [dup R 0 F] k times drop ] to rr
PenDown
60 to sides
[4 sides / ff 360 sides / rr] sides 2 / 2 - times
1 0.5 1 PenScale 0 F
[4 sides / ff 360 sides / rr] 4 times
1 1 1 PenScale 0 F
[4 sides / ff 360 sides / rr] sides 2 / 2 - times
PenUp
]>>
<mesh <box>>
]>>>>>>
; <Exit "y" "lobby">
; <sprite "y" []
; <move <v 12.0 0.75 -5.0>
; <texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
; <v 1.0 1.0 1.0>
; <v 0.0 0.0 0.0>]
; <touchable
; <csg
; <intersect [
; <scale <v 0.5 1.0 0.5> <mesh <box>>>
; <mesh <sphere>>
; ]>
; >>
; >>>
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
]>
>>>
[]

187
scene/misc.pr Normal file
View File

@ -0,0 +1,187 @@
<sprite "light" [] <hemispheric-light <v 0.1 1.0 0.0>>>
<gravity <v 0.0 -9.81 0.0>>
<sprite "sky" [] <skybox "textures/Daylight Box UV_0">>
<sprite "ground" []
<texture ["textures/grass-256x256.jpg"
<v 100.0 100.0>
<v 0.0 0.0>]
<floor <scale <v 300.0 1.0 300.0> <ground>>>>>
<sprite "box" []
<move <v -6.0 1.0 8.0>
<scale <v 10.0 0.1 10.0>
<texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
<v 10.0 10.0>
<v 0.0 0.0>
0.75]
<floor <box>>>>>>
<sprite "box2" []
<move <v -500.0 0.5 3.0>
<floor
<color 0.0 0.0 1.0 1.0
<scale <v 1000.0 1.0 1.0> <box>>>>>>
<Exit "p" "lobby">
<sprite "p" []
<move <v -999.5 2.0 3.0>
<rotate <v 0.0 -0.25 0.0>
<color 1.0 0.0 1.0
<touchable <scale <v 1.0 2.0 1.0> <plane>>>>>>>
<sprite "steps" []
<color 0.0 0.5 0.0
<move <v 0.0 0.0 3.5>
<scale <v 1.0 1.0 3.0>
<texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"]
[
<move <v 0.0 0.25 0.0> <box>>
<move <v 1.0 0.0 0.0> <box>>
<move <v 2.0 -0.25 0.0> <box>>
]>>>>>
<Exit "door" "other">
<variable "door" y 0.0>
<sprite "door" [y]
<move <v -3.0 y 1.5>
<rotate <v 0.0 -0.1 0.0> [
<scale <v 1.0 2.11 1.0>
<texture ["textures/door1.jpg"]
<touchable <move <v 0.0 0.5 0.0> <plane>>>>>
<scale <v 1.0 2.11 0.1> <move <v 0.0 0.5 0.6> <box>>>
]>>>
; <portal "door2" <route [<ws "wss://vr.demo.eighty-twenty.org/ws">]>>
; <sprite "door2" []
; <move <v -5.0 0.0 1.5>
; <rotate <v 0.0 -0.1 0.0> [
; <scale <v 1.0 2.11 1.0>
; <texture ["textures/door1.jpg"]
; <touchable <move <v 0.0 0.5 0.0> <plane>>>>>
; <scale <v 1.0 2.11 0.1> <move <v 0.0 0.5 0.6> <box>>>
; ]>>>
<sprite "plans" []
<texture ["plans/signal-2022-12-27-125451_002.jpeg"]
<move <v 0.0 1.0 -10.0>
<rotate <v 0.1 0.0 0.0>
<scale <v 2.0 2.0 0.1>
<box>>>>>>
<sprite "tower" []
<rotate <v 0.1 0.0 0.0>
<move <v -10.0 50.0 13.0>
<scale <v 3.0 100.0 3.0>
<floor
<color 0.5 0.5 0.0
<box>>>>>>>
; <sprite "sponge" []
; <move <v 4.0 1.6 0.0> [
; <scale <v 0.001 0.001 0.001>
; <external "objects/usnm_346-100k-obj/usnm_346-01-100k.obj">>
; <texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"]
; <scale <v 0.105 1.6 0.13>
; <move <v -0.05 -0.5384 0.5>
; <box>>>>
; ]>>
; <sprite "sofa" []
; <rotate <v -0.125 0.5 0.0>
; <scale <v 0.01 0.01 0.01>
; <external "objects/IKE020001_obj/IKEA-Arild_2_Seat_Sofa-3D.obj">>>>
; <sprite "x" []
; <move <v 10.0 1.6 -5.0>
; <texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
; <v 1.0 3.0 1.0>
; <v 0.0 0.0 0.0>]
; <sound <stream "https://streams.95bfm.com/stream95">
; <csg
; <subtract [
; <move <v 0.0 0.0 0.5> <scale <v 1.1 3.1 1.1> <mesh <box>>>>
; <move <v 0.0 0.0 0.5> <scale <v 1.0 3.0 1.0> <mesh <box>>>>
; ]>
; >>>>>
<sprite "tt2" []
<move <v 0.0 1.6 5.2>
<color 0.5 0.0 1.0
<turtle [
1 to slen
0.025 to dlen
90 U
dlen 10 * F
PenDown
90 L
[12 L dlen 2 * F] 30 times
90 R
slen F
DefinePen
Home
"double" SetSideOrientation
#t SetSmooth
PenDown
[6 CW dlen F] 240 times
PenUp
]>>>>
<sprite "tt" []
<move <v 1.0 1.01 0.75>
<rotate <v -0.125 0.0 0.0>
<texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
<v 2.0 1.0>
<v 0.0 0.0>
1.0]
<csg
<subtract [
<mesh
<turtle [
1.0 to wallHeight
0.1 to wallDepth
90 U
PenDown
[wallHeight F 90 L wallDepth F 90 L] 2 times
DefinePen
Home
#t SetMiter
; #t SetSmooth
; quote F to ff
[ 1 to k k / [dup F] k times drop ] to ff
[ R 0 F ] to rr
; [ R 0 F 60 D ] to rr
; [ 4 to k k / [dup R 0 F] k times drop ] to rr
PenDown
60 to sides
[4 sides / ff 360 sides / rr] sides 2 / 2 - times
1 0.5 1 PenScale 0 F
[4 sides / ff 360 sides / rr] 4 times
1 1 1 PenScale 0 F
[4 sides / ff 360 sides / rr] sides 2 / 2 - times
PenUp
]>>
<mesh <box>>
]>>>>>>
; <Exit "y" "lobby">
; <sprite "y" []
; <move <v 12.0 0.75 -5.0>
; <texture ["textures/oak-herringbone-5e80fb40b00c9-1200.jpg"
; <v 1.0 1.0 1.0>
; <v 0.0 0.0 0.0>]
; <touchable
; <csg
; <intersect [
; <scale <v 0.5 1.0 0.5> <mesh <box>>>
; <mesh <sphere>>
; ]>
; >>
; >>>
[]

View File

@ -296,6 +296,8 @@ export const Primitives: Environment<any> = {
'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<any> {

View File

@ -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<TurtleVM> = 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<TurtleVM> = 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<TurtleVM> = 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);