Difference between revisions of "User:Sunjammer/Struct keyword (draft)"

From Dragon Age Toolset Wiki
Jump to: navigation, search
(Created)
 
m
Line 2: Line 2:
  
 
The [[vector keyword|vector]] data type is a predefined struct which consists of three [[float keyword|values]]: x, y and z. To access or modify the y value of a vector, v, we would use v.y for example v.y = 1.2.
 
The [[vector keyword|vector]] data type is a predefined struct which consists of three [[float keyword|values]]: x, y and z. To access or modify the y value of a vector, v, we would use v.y for example v.y = 1.2.
 +
 +
<dascript>
 +
struct name
 +
{
 +
    type identifier1;
 +
    type identifier2,identifier3;
 +
    type identifier4;
 +
};
 +
</dascript>
 +
 +
Things to note: braces, semi-colon after member declaration, semi-colon after struct declaration.
  
 
== Remarks ==
 
== Remarks ==
Line 21: Line 32:
  
 
== Examples ==
 
== Examples ==
 +
 +
 +
<dascript>
 +
// user-defined type
 +
struct quaternion
 +
{
 +
    float w, x, y, z;
 +
};
 +
 +
// constructor
 +
struct quaternion Quaternion(float fW, float fX, float fY, float fZ)
 +
{
 +
    struct quaternion q;
 +
 +
    q.w = fW;
 +
    q.x = fX;
 +
    q.y = fY;
 +
    q.z = fZ;
 +
 +
    return q;
 +
}
 +
 +
void main()
 +
{
 +
    struct quaternion q = Quaternion(0.0, 0.0, 0.0, 0.0);
 +
}
 +
</dascript>
  
 
* Declaration
 
* Declaration

Revision as of 00:29, 15 April 2014

The struct keyword is used to construct a composite data type, or structure, consisting of a set related members/variables/values which can be accessed individually using the dot operator.

The vector data type is a predefined struct which consists of three values: x, y and z. To access or modify the y value of a vector, v, we would use v.y for example v.y = 1.2.

struct name
{
    type identifier1;
    type identifier2,identifier3;
    type identifier4;
};

Things to note: braces, semi-colon after member declaration, semi-colon after struct declaration.

Remarks

  • you cannot nest structs
  • you can include the command, effect, event, float, int, location, object or string data types and they all appear to work
  • you can include the itemproperty data type however there is no point (it is not used by anything other than its Get/SetLocal functions)
  • you can include the vector data type or another struct but it will either fail to compile (can generate a "Void expression where non void required" error) or fail at runtime when you try to access it/its members
  • you cannot include the resource data type: it will not compile (generates a "Bad type specifier" error)
  • you cannot include an array (can generate an "Incorrect variable state left on stack" or "Void expression where non void required" error)
  • you cannot declare an array of structs


  • wrapping a vector in a dummy location
  • wrapping a resource in a dummy event
  • a pseudo-array could be created using an effect (limited to floats, ints, objects and/or strings)
  • a pseudo-array could be created using an event (limited to floats, ints, locations, objects, resources and/or strings)

Examples

// user-defined type
struct quaternion
{
    float w, x, y, z;
};
 
// constructor
struct quaternion Quaternion(float fW, float fX, float fY, float fZ)
{
    struct quaternion q;
 
    q.w = fW;
    q.x = fX;
    q.y = fY;
    q.z = fZ;
 
    return q;
}
 
void main()
{
    struct quaternion q = Quaternion(0.0, 0.0, 0.0, 0.0);
}
  • Declaration
  • Definition
  • Assignment
  • Comparison
  • Member access
  • Passing into a function
  • Returning from a function

See Also