| derek_bartram 2004-04-18, 11:37 am |
| What I am trying to do is create new nodes [from protos] on the fly, and be able to call methods on them. I've managed to create the new nodes, but I can't call functions on them at a later date. How can I do this please? The bit where I am trying to do this is in frameUpdate of WorldScript; I want to call frameUpdate on all the nodes created. I also want to send squackList [a MFNode containging all the created nodes], to the newly created node. Any help would be appreciated, thanks.
Code......
<Emergance1.wrl>
#VRML V2.0 utf8
PROTO World [
field MFNode squackList []
field MFNode enemyList []
field SFNode mainCharacter NULL
eventIn SFTime frameUpdate
]
{
Transform {
children [
DEF Squacks Transform {
children [
]
}
DEF squackList Transform {
children [
]
}
]
}
DEF WorldScript Script {
field MFNode squackList USE squackList
field SFNode Squacks USE Squacks
field SFTime lastTime 0
eventIn SFTime frameUpdate IS frameUpdate
url "java script:
function initialize () {
print ('Starting World....');
var string = 'EXTERNPROTO externalSquack [ '+
'exposedField MFNode squackList '+
'exposedField MFNode enemyList '+
'exposedField SFNode mainCharacter '+
'exposedField SFInt32 arrayIndex '+
' '+
'exposedField SFNode geometry '+
'exposedField SFColor color '+
'exposedField SFVec3f position '+
'exposedField SFVec3f direction '+
'exposedField SFInt32 state '+
' '+
'eventIn SFTime frameUpdate '+
'eventIn SFInt32 changeState '+
'eventIn SFVec3f setPosition '+
'eventIn SFVec3f setDirection '+
' '+
'] \"Emergance1Externals.wrl#Squack\" '+
' '+
'DEF anExternal externalSquack { } ';
//var string = 'DEF squack Squack { }'; <---------------------------
//'Shape { '+
//' appearance Appearance { '+
//' material Material { '+
//' diffuseColor 1 0.2 1'+
//' } '+
//' } '+
//' geometry Box { '+
//' size 50 40 20 '+
//' } '+
//' } ';
var newNode = Browser.createVrmlFromString(string);
Squacks.addChildren = newNode;
//squackList.length = 10;
squackList.addChildren = newNode;
//squackList[1] = 2;
//squackList[2] = null;
print('Adding node = ' + squackList.length + ', as ' + newNode);
for (var i = 0; i < squackList.length; i++)
{
print('squackList[' + i + '] = ' + squackList[i] + '.');
}
}
function frameUpdate (value, ts) {
var timeTaken = value - lastTime;
lastTime = value;
for (var i = 0; i < squackList.length; i++)
{
//print('squackList[' + i + '] = ' + squackList[i] + '.');
//squackList[i].frameUpdate(timeTaken);
//var node = squackList.children[i];
//node.frameUpdate(timeTaken);
}
for (var i = 0; i < Squacks.children.length; i++)
{
//print('Noooooo' + Squacks.children[i]);
//print('');
//Squacks.children[i].
}
}
"
}
}
#### Testing stuff ------------------------------------------------------------------------------------------------------------------
DEF View1 Viewpoint {
orientation 0 1 0 0
position 0 0.5 20
description "View 1"
}
Transform {
children [
Shape {
geometry Box {
size 100 0.01 100
}
appearance Appearance {
material Material {
diffuseColor 1 0.46 0
emissiveColor 0 1 0
}
}
}
]
}
#DEF sq1 Squack { }
#DEF sq2 Squack { }
#DEF sq3 Squack { }
#DEF sq4 Squack { }
#DEF sq5 Squack { }
#DEF sq6 Squack { }
#DEF sq7 Squack { }
#DEF sq8 Squack { }
DEF world World { }
DEF time TimeSensor {
loop TRUE
}
ROUTE time.time TO world.frameUpdate
#ROUTE time.time TO sq1.frameUpdate
#ROUTE time.time TO sq2.frameUpdate
#ROUTE time.time TO sq3.frameUpdate
#ROUTE time.time TO sq4.frameUpdate
#ROUTE time.time TO sq5.frameUpdate
#ROUTE time.time TO sq6.frameUpdate
#ROUTE time.time TO sq7.frameUpdate
#ROUTE time.time TO sq8.frameUpdate
EXTERNPROTO externalSquack [
exposedField MFNode squackList
exposedField MFNode enemyList
exposedField SFNode mainCharacter
exposedField SFInt32 arrayIndex
exposedField SFNode geometry
exposedField SFColor color
exposedField SFVec3f position
exposedField SFVec3f direction
exposedField SFInt32 state
eventIn SFTime frameUpdate
eventIn SFInt32 changeState
eventIn SFVec3f setPosition
eventIn SFVec3f setDirection
] "Emergance1Externals.wrl#Squack"
DEF no externalSquack { }
ROUTE time.time TO no.frameUpdate |