mirror of https://github.com/marrub--/zscript-doc
pull/1/head
parent
1242692f6f
commit
996cb2f13f
44
.md
44
.md
|
@ -1,44 +0,0 @@
|
||||||
Top-level
|
|
||||||
=========
|
|
||||||
|
|
||||||
A ZScript file can have one of several things at the top level of the file:
|
|
||||||
|
|
||||||
- Class definitions
|
|
||||||
- Structure definitions
|
|
||||||
- Enumeration definitions
|
|
||||||
- Constant definitions
|
|
||||||
- Include directives
|
|
||||||
|
|
||||||
Class definitions
|
|
||||||
=================
|
|
||||||
|
|
||||||
A class definition starts with a class header, followed by an opening brace, class data and a closing brace. Alternatively, you can follow the class header with a semicolon and the rest of the file will be considered class data.
|
|
||||||
|
|
||||||
Class headers
|
|
||||||
-------------
|
|
||||||
|
|
||||||
The class header is formed as such:
|
|
||||||
|
|
||||||
```cs
|
|
||||||
class Name [: BaseClass] [Class flags...]
|
|
||||||
```
|
|
||||||
|
|
||||||
Class flags include:
|
|
||||||
|
|
||||||
| Flag | Description |
|
|
||||||
| --------------------- | --- |
|
|
||||||
| abstract | Cannot be instantiated with new(). |
|
|
||||||
| native | Class is from the engine. |
|
|
||||||
| ui | Has UI scope. |
|
|
||||||
| play | Has Play scope. |
|
|
||||||
| replaces ReplaceClass | Replaces ReplaceClass with this class. Only works on objects which are descendants of Actor. |
|
|
||||||
| version("ver") | Restricted to version <ver>. |
|
|
||||||
|
|
||||||
Example usages:
|
|
||||||
|
|
||||||
```cs
|
|
||||||
class MyCoolObject play // automatically inherits Object
|
|
||||||
class MyCoolThinker : Thinker // inherits Thinker
|
|
||||||
class MyCoolActor : Actor replaces OtherActor
|
|
||||||
class MyCoolInterface abstract // can only be inherited
|
|
||||||
```
|
|
|
@ -0,0 +1,173 @@
|
||||||
|
Table of Conents
|
||||||
|
================
|
||||||
|
|
||||||
|
* [Top-level](#top-level)
|
||||||
|
* [Class definitions](#class-definitions)
|
||||||
|
* [Enumeration definitions](#enumeration-definitions)
|
||||||
|
* [Include directives](#include-directives)
|
||||||
|
|
||||||
|
Top-level
|
||||||
|
=========
|
||||||
|
|
||||||
|
A ZScript file can have one of several things at the top level of the file:
|
||||||
|
|
||||||
|
- Class definitions
|
||||||
|
- Structure definitions
|
||||||
|
- Enumeration definitions
|
||||||
|
- Constant definitions
|
||||||
|
- Include directives
|
||||||
|
|
||||||
|
Class definitions
|
||||||
|
=================
|
||||||
|
|
||||||
|
A class defines an object type within ZScript, and is most of what you'll be creating within the language.
|
||||||
|
|
||||||
|
A class definition starts with a class header, followed by an opening brace, class content and a closing brace.
|
||||||
|
|
||||||
|
Alternatively, you can follow the class header with a semicolon and the rest of the file will be considered class content. Note that with this syntax you cannot use include directives after the class header.
|
||||||
|
|
||||||
|
Classes all inherit from other classes. The base class can be set within the class header, though if it is not the class will automatically inherit from Object.
|
||||||
|
|
||||||
|
Classes are subject to Scoping.
|
||||||
|
|
||||||
|
Class headers
|
||||||
|
-------------
|
||||||
|
|
||||||
|
The class header is formed as such:
|
||||||
|
|
||||||
|
```
|
||||||
|
class Name [: BaseClass] [Class flags...]
|
||||||
|
```
|
||||||
|
|
||||||
|
Class flags include:
|
||||||
|
|
||||||
|
| Flag | Description |
|
||||||
|
| ----------------------- | --- |
|
||||||
|
| `abstract` | Cannot be instantiated with new(). |
|
||||||
|
| `native` | Class is from the engine. Do not use in user code. |
|
||||||
|
| `ui` | Has UI scope. |
|
||||||
|
| `play` | Has Play scope. |
|
||||||
|
| `replaces ReplaceClass` | Replaces ReplaceClass with this class. Only works on objects which are descendants of Actor. |
|
||||||
|
| `version("ver")` | Restricted to version *ver*. Do not use in user code. |
|
||||||
|
|
||||||
|
Class content
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Class contents are an optional list of various things logically contained within the class, including:
|
||||||
|
|
||||||
|
- Member declarations
|
||||||
|
- Static array declarations
|
||||||
|
- State definitions
|
||||||
|
- Default definitions
|
||||||
|
- Property definitions
|
||||||
|
- Enumeration definitions
|
||||||
|
- Structure definitions
|
||||||
|
- Constant definitions
|
||||||
|
|
||||||
|
Examples: Class headers
|
||||||
|
-----------------------
|
||||||
|
|
||||||
|
Various class headers:
|
||||||
|
|
||||||
|
```
|
||||||
|
class MyCoolObject // automatically inherits Object
|
||||||
|
class MyCoolScopedObject play // has Play scope
|
||||||
|
class MyCoolThinker : Thinker // inherits Thinker
|
||||||
|
class MyCoolActor : Actor replaces OtherActor
|
||||||
|
class MyCoolInterface abstract // can only be inherited
|
||||||
|
```
|
||||||
|
|
||||||
|
Examples: Class definitions
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Basic class definition with a member variable and member function:
|
||||||
|
|
||||||
|
```
|
||||||
|
class BasicClass
|
||||||
|
{
|
||||||
|
int m_thing;
|
||||||
|
|
||||||
|
void changeThing()
|
||||||
|
{
|
||||||
|
m_thing = 500;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Alternate syntax usage:
|
||||||
|
|
||||||
|
```
|
||||||
|
class TheWholeFileIsAClassOhNo;
|
||||||
|
|
||||||
|
int m_mymember;
|
||||||
|
|
||||||
|
// end of file
|
||||||
|
```
|
||||||
|
|
||||||
|
Enumeration definitions
|
||||||
|
=======================
|
||||||
|
|
||||||
|
An enumeration is a list of named numbers, which by default will be incremental from 0. By default they decay to the type `int`, but the default decay type can be set manually.
|
||||||
|
|
||||||
|
An enumeration definition takes the form:
|
||||||
|
|
||||||
|
```
|
||||||
|
enum Name [: IntegerType]
|
||||||
|
{
|
||||||
|
[Enumerator list]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Optionally followed by a semicolon.
|
||||||
|
|
||||||
|
Enumerators can either be incremental (from the last enumerator or 0 if there is none) or explicitly set with the basic syntax `enumerator = value`. Enumerators must be followed by a comma unless it is the end of the list.
|
||||||
|
|
||||||
|
Examples: Enumeration definitions
|
||||||
|
---------------------------------
|
||||||
|
|
||||||
|
Basic enumeration:
|
||||||
|
|
||||||
|
```
|
||||||
|
enum MyCoolEnum
|
||||||
|
{
|
||||||
|
A, // has value int(0)
|
||||||
|
B, // 1 ...
|
||||||
|
C, // 2 ...
|
||||||
|
D // and 3
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
Less trivial example:
|
||||||
|
|
||||||
|
```
|
||||||
|
enum MyCoolerEnum : int16
|
||||||
|
{
|
||||||
|
A = 500, // has value int16(500)
|
||||||
|
B, // 501
|
||||||
|
C = 200,
|
||||||
|
D, // 201
|
||||||
|
E, // 202
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Include directives
|
||||||
|
==================
|
||||||
|
|
||||||
|
Include directives include other files to be processed by the ZScript compiler, allowing you to orgnaize and separate code into different files. Their syntax is simple:
|
||||||
|
|
||||||
|
```
|
||||||
|
#include "filename"
|
||||||
|
```
|
||||||
|
|
||||||
|
Note that included filenames will conflict with other mods. If two mods have a file named `zscript/MyCoolClasses.zsc` and both include it, expecting to get different files, the engine will fail to load with a script error.
|
||||||
|
|
||||||
|
To avoid this, it is suggested to place your ZScript code under a uniquely named sub-folder.
|
||||||
|
|
||||||
|
Examples: Include directives
|
||||||
|
----------------------------
|
||||||
|
|
||||||
|
Basic includes:
|
||||||
|
|
||||||
|
```
|
||||||
|
#include "zscript/MyCoolMod/MyCoolClasses.zsc"
|
||||||
|
```
|
Loading…
Reference in New Issue