Aby dynamické akcie fungovali vo všetkých úrovniach detailu, bolo potrebné
implementáciu prototypu snehuliaka z minulej úlohy úplne prepracovať
do jediného prototypu SNOWMAN s priamo vloženými LOD uzlami
pre jednotlivé časti tela. Súčasne boli do tohoto prototypu zjednotené
mužské aj ženské prvky a prototypy SNOWMALE a
SNOWFEMALE len zavolajú SNOWMANa s príslušnými
prepínačmi.
PROTO SNOWMAN [
field SFInt32 lod 1 # lod ON/OFF
field SFInt32 pot 0 # none/cylindrical/conical pot
field SFInt32 dmb 0 # dumb-bells OFF/ON
field SFInt32 but 0 # buttons OFF/ON
field SFInt32 brs 0 # breast OFF/ON
exposedField SFColor pot_color .1 .15 .5
exposedField MFString pot_texture "img/granitetex.png"
] {...}
Snehuliak-muž má na hlave modrý valcový hrniec, v rukách činky a na bruchu gombíky.
PROTO SNOWMALE [
field SFInt32 lod 1
exposedField SFColor pot_color .1 .15 .5
exposedField MFString pot_texture "img/granitetex.png"
]
{ SNOWMAN { lod IS lod,
dmb 1, but 1, brs 0, pot 1,
pot_color IS pot_color, pot_texture IS pot_texture }
}
Snehuliačka žena je menšia, má fialový kužeľový hrniec a prsia. Navyše má v
bruchu maličkého snehuliaka (ktorý je v dôsledku prototypu tiež interaktívny).
Ten však už nemôže byť tiež prvkom v prototype SNOWMAN, pretože
by sa odvolával sám na seba.
PROTO SNOWFEMALE [
field SFInt32 lod 1
exposedField SFColor pot_color .62 .23 .5
exposedField MFString pot_texture "img/granitetex.png"
]
{ ...
SNOWMAN { lod IS lod,
dmb 0, but 0, brs 1, pot 2,
pot_color IS pot_color, pot_texture IS pot_texture }
# baby
Transform {
...
children SNOWMAN { but 1 }
}
}
Použitím priamo prototypu SNOWMAN sa dá priamo prepínačmi
dosiahnuť akákoľvek kombinácia mužských a ženských prvkov (viď. malý
snehuliak).
Tieto tri prototypy sú vytvorené v pomocnom súbore
snowman_proto.wrl a používané v aplikačnom súbore
snowman.wrl popisujúceho už časť sveta, pomocou
EXTERNPROTO.