<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE X3D PUBLIC "ISO//Web3D//DTD X3D 3.2//EN" "https://www.web3d.org/specifications/x3d-3.2.dtd">
<X3D profile='Immersive'  version='3.2 xmlns:xsd='http://www.w3.org/2001/XMLSchema-instance' xsd:noNamespaceSchemaLocation =' https://www.web3d.org/specifications/x3d-3.2.xsd ' >
<head>
<meta name='titlecontent=' RoomDesired.x3d '/>
<meta name='descriptioncontent='X3D Follower example'/>
<meta name='creatorcontent='Herbert Stocker'/>
<meta name='translatorcontent='Don Brutzman'/>
<meta name='createdcontent='18 April 2006'/>
<meta name='translatedcontent='2 December 2011'/>
<meta name='modifiedcontent='20 October 2019'/>
<meta name='referencecontent='originals/room-desired.wrl'/>
<meta name='referencecontent=' Stocker_06_Followers.pdf '/>
<meta name='referencecontent=' http://www.hersto.com/Publications/Followers '/>
<meta name='requirescontent='X3D version 3.2 or greater'/>
<meta name='subjectcontent='X3D Follower Chaser Damper'/>
<meta name=' warning content=' under development '/>
<meta name='referencecontent=' https://www.web3d.org/x3d/specifications/ISO-IEC-19775-1.2-X3D-AbstractSpecification/Part01/components/followers.html '/>
<meta name='referencecontent=' https://www.web3d.org/x3d/content/examples/X3dSceneAuthoringHints.html '/>
<meta name='identifiercontent=' https://www.web3d.org/x3d/content/examples/Basic/Followers/RoomDesired.x3d '/>
<meta name='generatorcontent=' Vrml97ToX3dNist, http://ovrt.nist.gov/v2_x3d.html '/>
<meta name='generatorcontent='X3D-Edit 3.3, https://savage.nps.edu/X3D-Edit'/>
<meta name='licensecontent=' ../../license.html'/>
</head>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: PaintingPositionChaser, ShWall, SquareTextureCoordinatePoints, TouchFloor, TouchRoof, TouchWallFront, TouchWallLeft, TouchWallRight, TransInd, Worker

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2 Index for ExternProtoDeclare definition: Selection
-->
<Scene>
<WorldInfo title='RoomDesired.x3d'/>
<ExternProtoDeclare name='Selection'
  url=' "urn:inet:blaxxun.com:node:Selection" "originals/bitmanagement-nodes.x3d#Selection" "https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/bitmanagement-nodes.x3d#Selection" "originals/bitmanagement-nodes.wrl#Selection" "https://www.web3d.org/x3d/content/examples/Basic/Followers/originals/bitmanagement-nodes.wrl#Selection" ' >
<field name='selecttype='SFBoolaccessType='inputOutput'/>
<field name='addChildrentype='MFNodeaccessType='inputOnly'/>
<field name='bboxCentertype='SFVec3faccessType='initializeOnly'/>
<field name='removeChildrentype='MFNodeaccessType='inputOnly'/>
<field name='childrentype='MFNodeaccessType='inputOutput'/>
<field name='proxytype='SFNodeaccessType='initializeOnly'/>
<field name='bboxSizetype='SFVec3faccessType='initializeOnly'/>
<field name='collidetype='SFBoolaccessType='inputOutput'/>
</ExternProtoDeclare>
<Background skyColor='0.1 0.2 0.3'/>
<Viewpoint description='insidefieldOfView='0.785orientation='-1.0 -0.0 0.0 0.105position='-0.0 1.7 7.985'/>
<Viewpoint description='outsidefieldOfView='0.785orientation='-1.0 0.0 0.0 0.105position='0.0 2.068 13.879'/>
<NavigationInfo avatarSize='0.25 1.2 0.75headlight='false'/>
<DirectionalLight intensity='0.5'/>
<PointLight location='2.5 1.0 0.0radius='20.0'/>
<DirectionalLight direction='0.0 -1.0 0.0'/>
<DirectionalLight intensity='0.5'/>
<Group>
<!-- ROUTE information for TouchFloor node:  [from hitPoint_changed to Worker.set_hitPoint ] [from touchTime to Worker.touchedFloor ] -->
<TouchSensor DEF='TouchFloordescription='Touch to move picture here'/>

<Shape>
<Appearance>
<TextureTransform scale='17.0 17.0'/>
<ImageTexture
  url=' "floor.png " "https://www.web3d.org/x3d/content/examples/Basic/Followers/floor.png " ' />
</Appearance>
<Box size='10.0 0.1 10.0'/>
</Shape>
</Group>
<Group>
<!-- ROUTE information for TouchWallFront node:  [from hitPoint_changed to Worker.set_hitPoint ] [from touchTime to Worker.touchedWallFront ] -->
<TouchSensor DEF='TouchWallFrontdescription='Touch to move picture here'/>

<Transform translation='0.0 1.5 -5.0'>
<Shape DEF='ShWall'>
<Appearance>
<Material ambientIntensity='0.0567diffuseColor='0.52 0.51 0.45emissiveColor='0.28 0.27 0.24shininess='0.53specularColor='0.76 0.78 0.54'/>
</Appearance>
<Box size='10.0 3.0 0.1'/>
</Shape>
</Transform>
</Group>
<Group>
<!-- ROUTE information for TouchWallLeft node:  [from hitPoint_changed to Worker.set_hitPoint ] [from touchTime to Worker.touchedWallLeft ] -->
<TouchSensor DEF='TouchWallLeftdescription='Touch to move picture here'/>

<Transform rotation='0.0 1.0 0.0 -1.571translation='-5.0 1.5 0.0'>
<Shape USE=' ShWall'/>
</Transform>
</Group>
<Group>
<!-- ROUTE information for TouchWallRight node:  [from hitPoint_changed to Worker.set_hitPoint ] [from touchTime to Worker.touchedWallRight ] -->
<TouchSensor DEF='TouchWallRightdescription='Touch to move picture here'/>

<Transform rotation='0.0 1.0 0.0 1.571translation='5.0 1.5 0.0'>
<Shape USE=' ShWall'/>
</Transform>
</Group>
<Group>
<!-- ROUTE information for TouchRoof node:  [from hitPoint_changed to Worker.set_hitPoint ] [from touchTime to Worker.touchedRoof ] -->
<TouchSensor DEF='TouchRoofdescription='Touch to move picture here'/>

<Transform translation='0.0 3.0 0.0'>
<Shape>
<Appearance>
<Material ambientIntensity='0.0567diffuseColor='0.522 0.451 0.447emissiveColor='0.306 0.235 0.176shininess='0.53specularColor='0.761 0.541 0.584'/>
</Appearance>
<Box size='10.0 0.1 10.0'/>
</Shape>
</Transform>
</Group>
<ProtoInstance name='Selection'>
<fieldValue name='selectvalue='false'/>
<fieldValue name='children'>
<!-- ROUTE information for TransInd node:  [from PaintingPositionChaser.value_changed to translation ] [from PaintingPositionChaser.value_changed to rotation ] -->
<Transform DEF='TransIndscale='3.5 3.0 3.0'>
<Transform scale='0.223 0.341 0.5'>
<Shape>
<Appearance> </Appearance>
<IndexedFaceSet solid='falsecoordIndex='0 1 2 3 -1 4 5 6 7 -1 4 0 3 7 -1 5 1 0 4 -1 6 2 1 5 -1 7 3 2 6 -1texCoordIndex='0 1 2 3 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1 0 0 0 0 -1'>
<TextureCoordinate DEF='SquareTextureCoordinatePointspoint='0 0 1 0 1 1 0 1'/>
<Coordinate point='-1.0 -1.0 0.03 1.0 -1.0 0.03 1.0 1.0 0.03 -1.0 1.0 0.03 -1.0 -1.0 0.0 1.0 -1.0 0.0 1.0 1.0 0.0 -1.0 1.0 0.0'/>
</IndexedFaceSet>
</Shape>
<Shape>
<Appearance> </Appearance>
<IndexedFaceSet coordIndex='0 1 2 3 -1'>
<TextureCoordinate USE=' SquareTextureCoordinatePoints'/>
<Coordinate point='-1.15 -1.15 0.01 1.15 -1.15 0.01 1.15 1.15 0.01 -1.15 1.15 0.01'/>
</IndexedFaceSet>
</Shape>
</Transform>
</Transform>
</fieldValue>
</ProtoInstance>
<field name='set_hitPointtype='SFVec3faccessType='inputOnly'/>
<field name='touchedWallLefttype='SFTimeaccessType='inputOnly'/>
<field name='indPostype='SFVec3faccessType='outputOnly'/>
<field name='touchedWallRighttype='SFTimeaccessType='inputOnly'/>
<field name='cRoomDepthtype='SFFloatvalue='9.9accessType='initializeOnly'/>
<field name='cPaintingWidthtype='SFFloatvalue='1.561accessType='initializeOnly'/>
<field name='cFloorYtype='SFFloatvalue='0.05accessType='initializeOnly'/>
<field name='cPaintingHeighttype='SFFloatvalue='2.046accessType='initializeOnly'/>
<field name='touchedWallFronttype='SFTimeaccessType='inputOnly'/>
<field name='touchedFloortype='SFTimeaccessType='inputOnly'/>
<field name='touchedRooftype='SFTimeaccessType='inputOnly'/>
<field name='indOritype='SFRotationaccessType='outputOnly'/>
<field name='cRoomHeighttype='SFFloatvalue='2.9accessType='initializeOnly'/>
<field name='cRoomWidthtype='SFFloatvalue='9.9accessType='initializeOnly'/>
<field name='lastHitPointtype='SFVec3fvalue='0.0 0.0 0.0accessType='initializeOnly'/>
<![CDATA[
      
ecmascript:

function set_hitPoint(hp)
{
    lastHitPoint= hp;
}

function touchedFloor(t)
{
    indPos= CheckGroundRoof(lastHitPoint);
    indOri= new SFRotation(-1, 0, 0, 1.571);
}

function touchedWallLeft(t)
{
    indPos= CheckLeftRightWall(CheckHeight(lastHitPoint));
    indOri= new SFRotation(0, 1, 0, 1.5705);
}

function touchedWallRight(t)
{
    indPos= CheckLeftRightWall(CheckHeight(lastHitPoint));
    indOri= new SFRotation(0, -1, 0, 1.5705);
}

function touchedWallFront(t)
{
    indPos= CheckFrontWall(CheckHeight(lastHitPoint));
    indOri= new SFRotation(0, 1, 0, 0);
}

function touchedRoof(t)
{
    indPos= CheckGroundRoof(lastHitPoint);
    indOri= (new SFRotation(1, 0, 0, 1.57));//.multiply(new SFRotation(0, 1, 0, 3.14159));
}

function CheckGroundRoof(pos)
{
return new SFVec3f( Limit(pos.x, -cRoomWidth/2 + cPaintingWidth/2, cRoomWidth/2 - cPaintingWidth/2)
                  , pos.y
                  , Limit(pos.z, -cRoomDepth/2 + cPaintingHeight/2, cRoomDepth/2 - cPaintingHeight/2)
                  );
}

function CheckHeight(pos)
{
    return new SFVec3f( pos.x
                  , Limit(pos.y, cFloorY + cPaintingHeight/2, cFloorY + cRoomHeight - cPaintingHeight/2)
                  , pos.z
                  );
}

function CheckLeftRightWall(pos)
{
    return new SFVec3f( pos.x
                      , pos.y
                      , Limit(pos.z, -cRoomDepth/2 + cPaintingWidth/2, cRoomDepth/2 - cPaintingWidth/2)
                      );
}

function CheckFrontWall(pos)
{
    return new SFVec3f( Limit(pos.x, -cRoomWidth/2 + cPaintingWidth/2, cRoomWidth/2 - cPaintingWidth/2)
                      , pos.y
                      , pos.z
                      );
}
function Limit(x, min, max)
{
    return Min(Max(x, min), max);
}

function Max(a, b)
{
    return a > b? a:b;
}

function Min(a, b)
{
    return a > b? b:a;
}

    
]]>
</Script>
< ROUTE  fromNode=' TouchFloor' fromField='hitPoint_changed' toNode=' Worker' toField='set_hitPoint'/>
< ROUTE  fromNode=' TouchWallLeft' fromField='hitPoint_changed' toNode=' Worker' toField='set_hitPoint'/>
< ROUTE  fromNode=' TouchWallRight' fromField='hitPoint_changed' toNode=' Worker' toField='set_hitPoint'/>
< ROUTE  fromNode=' TouchWallFront' fromField='hitPoint_changed' toNode=' Worker' toField='set_hitPoint'/>
< ROUTE  fromNode=' TouchRoof' fromField='hitPoint_changed' toNode=' Worker' toField='set_hitPoint'/>
< ROUTE  fromNode=' TouchFloor' fromField='touchTime' toNode=' Worker' toField='touchedFloor'/>
< ROUTE  fromNode=' TouchWallLeft' fromField='touchTime' toNode=' Worker' toField='touchedWallLeft'/>
< ROUTE  fromNode=' TouchWallRight' fromField='touchTime' toNode=' Worker' toField='touchedWallRight'/>
< ROUTE  fromNode=' TouchWallFront' fromField='touchTime' toNode=' Worker' toField='touchedWallFront'/>
< ROUTE  fromNode=' TouchRoof' fromField='touchTime' toNode=' Worker' toField='touchedRoof'/>

< ROUTE  fromNode=' Worker' fromField='indPos' toNode=' PaintingPositionChaser' toField='set_destination'/>
< ROUTE  fromNode=' Worker' fromField='indOri' toNode=' PaintingPositionChaser' toField='set_destination'/>
< ROUTE  fromNode=' PaintingPositionChaser' fromField='value_changed' toNode=' TransInd' toField='translation'/>
< ROUTE  fromNode=' PaintingPositionChaser' fromField='value_changed' toNode=' TransInd' toField='rotation'/>
</Scene>
</X3D>
<!--

to top <!-- Event Graph ROUTE Table shows event connections -->
 
<!-- Index for DEF nodes: PaintingPositionChaser, ShWall, SquareTextureCoordinatePoints, TouchFloor, TouchRoof, TouchWallFront, TouchWallLeft, TouchWallRight, TransInd, Worker

Index for Viewpoint nodes: Viewpoint_1, Viewpoint_2 Index for ExternProtoDeclare definition: Selection
-->

Event Graph ROUTE Table entries with 14 ROUTE connections total, showing X3D event-model relationships for this scene.

Each row shows an event cascade that may occur during a single timestamp interval between frame renderings, as part of the X3D execution model.

TouchFloor
TouchSensor
hitPoint_changed
SFVec3f

ROUTE
event to
(1)
Worker
Script
set_hitPoint
SFVec3f

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
TouchFloor
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
Worker
Script
touchedFloor
SFTime

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation


TouchRoof
TouchSensor
hitPoint_changed
SFVec3f

ROUTE
event to
(1)
Worker
Script
set_hitPoint
SFVec3f

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
TouchRoof
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
Worker
Script
touchedRoof
SFTime

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation


TouchWallFront
TouchSensor
hitPoint_changed
SFVec3f

ROUTE
event to
(1)
Worker
Script
set_hitPoint
SFVec3f

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
TouchWallFront
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
Worker
Script
touchedWallFront
SFTime

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation


TouchWallLeft
TouchSensor
hitPoint_changed
SFVec3f

ROUTE
event to
(1)
Worker
Script
set_hitPoint
SFVec3f

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
TouchWallLeft
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
Worker
Script
touchedWallLeft
SFTime

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation


TouchWallRight
TouchSensor
hitPoint_changed
SFVec3f

ROUTE
event to
(1)
Worker
Script
set_hitPoint
SFVec3f

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
TouchWallRight
TouchSensor
touchTime
SFTime

ROUTE
event to
(1)
Worker
Script
touchedWallRight
SFTime

 
 
then
Worker
Script
indOri
SFRotation

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation
 
 
 
then
Worker
Script
indPos
SFVec3f

ROUTE
event to
(2)
PaintingPositionChaser
PositionChaser
set_destination
SFVec3f

 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
translation
SFVec3f
 
 
 
then
PaintingPositionChaser
PositionChaser
value_changed
SFVec3f

ROUTE
event to
(3)
TransInd
Transform
rotation
SFRotation



ProtoInstance
Selection
No ROUTE connection found for output from this node.
Contains SFNode/MFNode field with indirect access to other nodes. 


-->

<!-- Online at
https://www.web3d.org/x3d/content/examples/Basic/Followers/RoomDesiredIndex.html -->
<!-- Version control at
https://sourceforge.net/p/x3d/code/HEAD/tree/www.web3d.org/x3d/content/examples/Basic/Followers/RoomDesired.x3d -->

<!-- Color legend: X3D terminology <X3dNode DEF='idName' field='value'/> matches XML terminology <XmlElement DEF='idName' attribute='value'/>
(Light-blue background: event-based behavior node or statement) (Grey background inside box: inserted documentation) (Magenta background: X3D Extensibility)
    <ProtoInstance name='ProtoName'> <field name='fieldName'/> </ProtoInstance> -->

to top <!-- For additional help information about X3D scenes, please see X3D Tooltips, X3D Resources, and X3D Scene Authoring Hints. -->