Calerga VR Sysquake Extensions
In Calerga VR, Sysquake extensions add the following features to the base set of nodes.
Nodes
SysquakeFigure
| [in,out] | SFString | code | |
| [] | SFBool | enabled | |
| [in,out] | SFNode | metadata | |
| [] | SFVec2f | size |
Node SysquakeFigure is a geometry whose shape is a rectangle in plane z=0 with a size specified by field size (default: 2 2). It contains an SQ file instance (a Sysquake program with interactive graphics) which is displayed in the rectangular shape, on both sides, inverted on the back. User interactions (mouse clicks and drags in the figures) are intepreted by Sysquake. The code of the SQ file is provided in SFString field code (default: "").
Sysquake code in Script nodes
Inline Sysquake code (LME) is supported, with url starting with sysquake:.
In Script nodes, fields are declared the same way as in JavaScript Script nodes. In the script itself, fields are accessed with the following functions:
- val = x3dGetField(name)
- Get the value of a field (access initializeOnly or inputOutput).
- x3dSetField(name, val)
- Set the value of a field (access initializeOnly or inputOutput). For fields with access inputOutput, an event whose name is suffixed with _changed is sent.
- x3dSendEvent(name, val)
- Send an outputOnly event.
The script should implement all inputOnly events as functions, and optionnally initialize(), eventsProcessed(), prepareEvents(timestamp) and shutdown().
Example: oscillating cube
#X3D V3.3 utf8
PROFILE com/calerga/sysquake
DEF t Transform {
children [
Shape {
geometry Box {}
}
]
}
DEF clock TimeSensor {
loop TRUE
cycleInterval 1
}
DEF rotationOscillator Script {
initializeOnly SFFloat amplitude 0.3
inputOnly SFFloat set_fraction
outputOnly SFRotation rotation_changed
url [
"sysquake:
function set_fraction(f)
theta = x3dGetField('amplitude') * sin(2 * pi * f);
x3dSendEvent('rotation_changed', [1, 0, 0, theta]);
"
]
}
ROUTE clock.fraction_changed TO rotationOscillator.set_fraction
ROUTE rotationOscillator.rotation_changed TO t.set_rotation