Start Page » DragonScript Scripting Language » Abstraction Layers » XML Element Classes
Video explaining what behavior factories are, what they can be used for and how they are created. Shown using ExampleApp which contains an example for this.
XML Element classes allow to create new element classes using an XML file (*.deeclass) instead of writing script code. XML element classes always subclass from an existing script class or XML element class. Using an XML element class you can change properties added by the behavior definitions.
Element class properties are typically in the form behavior.property or behavior(id).property. The identifier is omitted if it is empty string. For example the ECBehaviorComponent behavior uses the prefix component.. Hence component.model would set the _model_ property. The same for an ECBehaviorComponent with the identifier second. Here the name would be component(second).model.
Behaviors can be complex and nested. This allows behaviors to add other behaviors to achieve their goals. Such nested behaviors need to be differentiated from other behaviors of the same kind. The rule is to prefix the property names of the behaviors with their parent prefix to make them unique. For example if you have a fictional behavior MyBehavior with the prefix mybehavior. which adds one or more ECBehaviorComponent then the property names of those component behaviors would look like mybehavior.component.model or mybehavior.component(second).model. This nesting can go deeper depending on how complex of a behavior you are designing. In general it is favorable to keep the nesting as little as possible as this is easier to use for team members and modders.
Scripted element classes can be also assigned a list of Behavior Factories. This allows the user to add behaviors to XML element classes if they are in the list of allowed behavior factories. The DragonScript module provides the GenericBehaviorElementClass which contains the factories of all DragonScript module provided behavior factories. You can create your own behaviors and make them available to the generic behavior element class by extending BaseGameApp.createAndAddBehaviorFactories().
Adding behaviors is done using the behavior tag. Some behaviors require additional parameters during construction time. These parameters can be defined inside the behavior tag using the same tags as you use to define element properties. The behavior documentation list the supported parameters. After adding a behavior you can set the element properties outside the behavior tag as you usually would do.
To simplify the adding of behaviors properties of a just added behavior can be also defined by moving the property tags inside the behavior tag. If you do this you have to remove the behavior property prefix from the property names leaving being only the . as first character in the name. This way the DragonScript module prepends the behavior property prefix while setting the property values. This is easier to write, increases readability and has less possibility for errors. It is thus recommended to set properties of just added behaviors in this way.
(TODO: add video of behavior factories)
| Attribute | Description | Required | Default |
|---|---|---|---|
| name | Unique name of the element class to create. | true | - |
| class | Name of the element class to subclass. | true | - |
| Tag | Description | Occurance | Default |
|---|---|---|---|
| behavior | Add behavior to element class. | 0..N | - |
| string | Set named element property to string type value. Tag content is string value. Attributes:
| 0..N | empty string |
| float | Set named element property to float type value. Tag content is float value. Attributes:
| 0..N | 0 |
| integer | Set named element property to integer type value. Tag content is integer value. Attributes:
| 0..N | 0 |
| boolean |
Set named element property to boolean type value. Tag content is boolean value where
| 0..N | false |
| vector | Set named element property to floating point vector type value. Attributes:
| 0..N | - |
| vector2 | Set named element property to floating point vector2 type value. Attributes:
| 0..N | - |
| point | Set named element property to integer point type value. Attributes:
| 0..N | - |
| point3 | Set named element property to integer point3 type value. Attributes:
| 0..N | - |
| borderSize | Set named element property to integer borderSize type value. Attributes:
| 0..N | - |
| rectArea | Set named element property to integer rectArea type value. Attributes:
| 0..N | - |
| floatRectArea | Set named element property to floating point rectArea type value. Attributes:
| 0..N | - |
| color | Set named element property to floating point color4 type value. Color can be defined either using hex, r/g/b/a or ir/ig/ib/ia. Mixing is not possible. Attributes:
| 0..N | - |
| null | Set named element property to null value. Attributes:
| 0..N | - |
| list | Set named element property to Array value. Attributes:
| 0..N | - |
| map | Set named element property to Dictionary value. Attributes:
| 0..N | - |
| Attribute | Description | Required | Default |
|---|---|---|---|
| type | Unique name of the behavior to add to the element class. Only names matching behavior factories added to the super element class can be used. | true | - |
| id | Unique identifier of behavior. Required to be used if multiple behaviors of the same type are added. | false | empty string |
| Tag | Description | Occurance | Default |
|---|---|---|---|
| string | Set named element property to string type value. Tag content is string value. Attributes:
| 0..N | empty string |
| float | Set named element property to float type value. Tag content is float value. Attributes:
| 0..N | 0 |
| integer | Set named element property to integer type value. Tag content is integer value. Attributes:
| 0..N | 0 |
| boolean |
Set named element property to boolean type value. Tag content is boolean value where
| 0..N | false |
| vector | Set named element property to floating point vector type value. Attributes:
| 0..N | - |
| vector2 | Set named element property to floating point vector2 type value. Attributes:
| 0..N | - |
| point | Set named element property to integer point type value. Attributes:
| 0..N | - |
| point3 | Set named element property to integer point3 type value. Attributes:
| 0..N | - |
| borderSize | Set named element property to integer borderSize type value. Attributes:
| 0..N | - |
| rectArea | Set named element property to integer rectArea type value. Attributes:
| 0..N | - |
| floatRectArea | Set named element property to floating point rectArea type value. Attributes:
| 0..N | - |
| color | Set named element property to floating point color4 type value. Color can be defined either using hex, r/g/b/a or ir/ig/ib/ia. Mixing is not possible. Attributes:
| 0..N | - |
| null | Set named element property to null value. Attributes:
| 0..N | - |
| list | Set named element property to Array value. Attributes:
| 0..N | - |
| map | Set named element property to Dictionary value. Attributes:
| 0..N | - |
| Tag | Description | Occurance | Default |
|---|---|---|---|
| string | String type value. Tag content is string value. | 0..N | empty string |
| float | Float type value. Tag content is float value. | 0..N | 0 |
| integer | Integer type value. Tag content is integer value. | 0..N | 0 |
| boolean | Boolean type value. Tag content is boolean value where true, yes, 1 are true values and false, no, 0 are false values. | 0..N | false |
| vector | Floating point vector type value. Attributes:
| 0..N | - |
| vector2 | Floating point vector2 type value. Attributes:
| 0..N | - |
| point | Integer point type value. Attributes:
| 0..N | - |
| point3 | Integer point3 type value. Attributes:
| 0..N | - |
| borderSize | Integer borderSize type value. Attributes:
| 0..N | - |
| rectArea | Integer rectArea type value. Attributes:
| 0..N | - |
| floatRectArea | Floating point rectArea type value. Attributes:
| 0..N | - |
| color | Floating point color4 type value. Color can be defined either using hex, r/g/b/a or ir/ig/ib/ia. Mixing is not possible. Attributes:
| 0..N | - |
| null | Null value. | 0..N | - |
| list | Array value. | 0..N | - |
| map | Dictionary value. | 0..N | - |
| Tag | Description | Occurance | Default |
|---|---|---|---|
| string | Set string value. Attributes:
| 0..N | empty string |
| float | Set float type value. Tag content is float value. Attributes:
| 0..N | 0 |
| integer | Set integer type value. Tag content is integer value. Attributes:
| 0..N | 0 |
| boolean |
Set boolean type value. Tag content is boolean value where
| 0..N | false |
| vector | Set floating point vector type value. Attributes:
| 0..N | - |
| vector2 | Set floating point vector2 type value. Attributes:
| 0..N | - |
| point | Set integer point type value. Attributes:
| 0..N | - |
| point3 | Set integer point3 type value. Attributes:
| 0..N | - |
| borderSize | Set integer borderSize type value. Attributes:
| 0..N | - |
| rectArea | Set integer rectArea type value. Attributes:
| 0..N | - |
| floatRectArea | Set floating point rectArea type value. Attributes:
| 0..N | - |
| color | Set floating point color4 type value. Color can be defined either using hex, r/g/b/a or ir/ig/ib/ia. Mixing is not possible. Attributes:
| 0..N | - |
| null | Set null value. Attributes:
| 0..N | - |
| list | Set Array value. Attributes:
| 0..N | - |
| map | Set Dictionary value. Attributes:
| 0..N | - |
This example creates a simple XML element class based on the SimpleElementClass. It modifies some element properties to use a specific model, skin and rig resource. The path are either absolute path (if starting with /) or relative to the directory the *.deeclass file is located in.
This example creates a complex XML element class which is based on the GenericBehaviorElementClass. This allows adding behaviors inside the *.deeclass file avoiding the need to write an explicit script class to do the same. This is the example file used in the behavior factory video above.