| |
Malgré le fait que vous pouvez tout à fait travailler avec Crystal Entity Layer en utilisant les appel API C++, Crystal Entity Layer a un imposant support pour XML. Pour ce faire Crystal Entity Layer utilise le système d'addon implémenté dans le chargeur de map Crystal Space. A la base ce système autorise l'écriture de plugins se branchant directement dans le chargeur, et permet d'ajouter des morceaux XML additionnels aux fichiers mondes standards. Crystal Entity Layer définit plusieurs addons.
Contents |
Addon CelEntity
Avec l'addon cel.addons.celentity vous pouvez définir vos propres entités directement dans le fichier monde. Voici un exemple d'utilisation :
<addon plugin="cel.addons.celentity" entityname="SlidingDoor"> <propclass name="pcobject.mesh"> <action name="SetMesh"> <par name="name" string="SlidingDoor" /> </action> </propclass> <propclass name="pclogic.trigger"> <property name="monitor" string="camera" /> <action name="SetupTriggerSphere"> <par name="sector" string="Corridors" /> <par name="position" vector="-118,-8,78.7" /> <par name="radius" float="4" /> </action> </propclass> <propclass name="pclogic.quest"> <action name="NewQuest"> <par name="name" string="SlideDoor" /> <par name="openx" string="-3.5" /> <par name="openy" string="0" /> <par name="openz" string="0" /> <par name="closex" string="3.5" /> <par name="closey" string="0" /> <par name="closez" string="0" /> </action> <property name="state" string="closed" /> </propclass> </addon>
Vous pouvez voir ici comment l'entité est créée sous le nom SlidingDoor et les trois Classes de propriété : pcobject.mesh, pclogic.trigger et pclogic.quest. Pour chaque Classe de Propriété, nous pouvons appeler des actions et définir des propriétés.
Vous pouvez créer une entité partout dans le fichier map où vous pouvez utiliser des addons. Si vous créez une Entité comme un enfant d'un meshobj, alors l'addon créera automatiquement une Classe de Propriété pcobject.mesh attaché à ce mesh.
Vous pouvez aussi créer une entité depuis un Modèle d'Entité, comme ceci :
<addon plugin="cel.addons.celentity" template="EntityTemplate" entityname="MyEntity"> <params> <par name="pos" value="-24.5,0,-22.5" /> </params> </addon>
Notez comment le paramètre pos est donnée au Modèle. Les paramètres pour les modèles sont toujours des chaînes de caractères mais peuvent souvent être interprétés différemment. En plus du paramètre pos, il y a toujours un paramètre this implicite qui définira le nom de l'Entité créée. Dans ce cas particulier, il sera égal à MyEntity.
Addon Modèle CelEntity
Avec l'addon cel.addons.celentitytpl vous pouvez définir votre propre Modèle d'Entité directement dans le fichier monde. Voici un exemple d'utilisation :
<addon plugin="cel.addons.celentitytpl" entityname="EntityTemplate"> <propclass name="pcobject.mesh"> <action name="SetMesh"> <par name="name" string="$this" /> </action> </propclass> <propclass name="pclogic.trigger"> <property name="monitor" string="camera" /> <action name="SetupTriggerSphere"> <par name="sector" string="Inside" /> <par name="position" vector="$pos" /> <par name="radius" float="4" /> </action> </propclass> <propclass name="pclogic.quest"> <action name="NewQuest"> <par name="name" string="MyQuest" /> </action> <property name="state" string="closed" /> </propclass> </addon>
Vous pouvez définir un Modèle d'Entité simplement comme vous définiriez une Entité (voir la section Addon CelEntity), sauf que vous pouvez utiliser les paramètres. Le paramètre $this sera défini sur le nom de l'Entité qui est créée depuis le modèle. En plus vous pouvez définir les autres paramètres au moment où vous créez une Entité depuis le modèle. Dans l'exemple ci-dessus le paramètre $pos est utilisé.
Addon Scripts XML
L'addon cel.addons.xmlscripts est spécifiquement fait pour la Couche Comportement XML et vous permet de définir des scripts XML directement dans un fichier monde. Voici un exemple :
<addon plugin="cel.addons.xmlscripts"> <pcfactory>cel.pcfactory.billboard</pcfactory> <pcfactory>cel.pcfactory.timer</pcfactory> <pcfactory>cel.pcfactory.properties</pcfactory> <script name="chair_clicker"> <event name="init"> <var name="counter" value="0" /> </event> <event name="pcbillboard_select"> <var name="counter" value="?counter+1" /> <if eval="?counter < 10"> <true> <print value="'You clicked '+?counter+' times.'" /> </true> <false> <print value="'It is time you stopped clicking!'" /> </false> </if> </event> </script> <script name="chair_mover"> <event name="pctimer_wakeup"> <bb_move x="rand(1)*250000" y="rand(1)*250000" delta="500" /> </event> </script> </addon>
Cet addon vous permet de faire deux choses : d'abord vous pouvez charger une Fabrique de Classe de Propriété avec l'opération pcfactory. Ensuite vous pouvez créer des scripts (correspondant aux comportements) pour la couche Comportement XML.
Addon Définition de Quête
Avec l'addon cel.addons.questdef vous pouvez définir des quêtes pour le Gestionnaire de Quêtes directement dans un fichier monde. Voici un exemple :
<addon plugin="cel.addons.questdef"> <quest name="SlideDoor"> <state name="locked"> <trigger type="trigger"> <fireon entity="$this" /> <reward type="debugprint" message="Door is closed!" /> </trigger> <trigger type="inventory"> <fireon entity="camera" child_entity="$key_ent" /> <reward type="debugprint" message="The door is unlocked!" /> <reward type="changeproperty" entity="$key_ent" pc="pcbillboard" property="cel.property.visible" bool="true" /> <reward type="newstate" state="closed" /> </trigger> </state> <state name="closed"> <trigger type="trigger"> <fireon entity="$this" /> <reward type="debugprint" message="Door Opens!" /> <reward type="sequencefinish" entity="$this" sequence="closedoor" /> <reward type="sequence" entity="$this" sequence="opendoor" /> <reward type="newstate" state="opened" /> </trigger> </state> <state name="opened"> <trigger type="trigger"> <fireon entity="$this" leave="true" /> <reward type="debugprint" message="Door Closes!" /> <reward type="sequencefinish" entity="$this" sequence="opendoor" /> <reward type="sequence" entity="$this" sequence="closedoor" /> <reward type="newstate" state="closed" /> </trigger> </state> <sequence name="opendoor"> <op type="transform" duration="500" entity="$this"> <v x="$openx" y="$openy" z="$openz" /> </op> </sequence> <sequence name="closedoor"> <op type="transform" duration="500" entity="$this"> <v x="$closex" y="$closey" z="$closez" /> </op> </sequence> </quest> </addon>
Langue:
English •
Brazilian •
Chinese •
Deutsch •
Español •
Esperanto •
Français •
Magyar
Translate this page
