161 lines
3.1 KiB
Markdown
161 lines
3.1 KiB
Markdown
# VECTOR
|
|
|
|
An N-dimensional vector of floating-point numbers. In practice, used for two- or three-dimensional coordinates — engine games use vectors mostly in physics-flavoured minigames (reflection, movement-direction normalisation).
|
|
|
|
The variable's value is the vector's Euclidean length, i.e. `sqrt(x1² + x2² + … + xN²)`.
|
|
|
|
## Fields
|
|
|
|
### SIZE
|
|
|
|
```
|
|
INTEGER SIZE
|
|
```
|
|
|
|
The number of vector components. Typical values in shipping games are `2` or `3`.
|
|
|
|
### VALUE
|
|
|
|
```
|
|
DOUBLE, DOUBLE, [DOUBLE...] VALUE
|
|
```
|
|
|
|
Initial values of each component. The number of entries should match [`SIZE`](#size).
|
|
|
|
## Methods
|
|
|
|
### ADD
|
|
|
|
```
|
|
void ADD(STRING|VECTOR vectorName)
|
|
```
|
|
|
|
Adds another vector to this one component-wise. The result is stored in the vector the method was called on.
|
|
|
|
**Parameters**
|
|
|
|
- `vectorName` — the vector to add; either a [`STRING`](STRING.md) (variable name) or a `VECTOR`.
|
|
|
|
**Examples**
|
|
|
|
```
|
|
VTEMP2^ADD("VTOCENTER");
|
|
VTEMP2^ADD(VTOCENTER);
|
|
```
|
|
|
|
### ASSIGN
|
|
|
|
```
|
|
void ASSIGN(DOUBLE x1, DOUBLE x2, [DOUBLE...])
|
|
```
|
|
|
|
Assigns new component values. The number of arguments dictates how many components are overwritten — any beyond that retain their previous values. If more arguments are supplied than the vector has components, the vector is extended.
|
|
|
|
**Parameters**
|
|
|
|
- `x1, x2, …` — the new component values.
|
|
|
|
**Examples**
|
|
|
|
```
|
|
VTEMP1^ASSIGN(0.0,0.0);
|
|
VTEMP1^ASSIGN(ARRDIRX^GET(VARPLAYER),ARRDIRY^GET(VARPLAYER));
|
|
VNORMAL^ASSIGN([ARRPOSX^GET(VARPLAYER)+ARRHWIDTH^GET(VARPLAYER)],[ARRPOSY^GET(VARPLAYER)+ARRHHEIGHT^GET(VARPLAYER)]);
|
|
```
|
|
|
|
### GET
|
|
|
|
```
|
|
DOUBLE GET(INTEGER index)
|
|
```
|
|
|
|
Returns the value of the component at the given (zero-based) index. Returns `0.0` for out-of-range indices.
|
|
|
|
**Parameters**
|
|
|
|
- `index` — component index, zero-based.
|
|
|
|
**Returns**: [`DOUBLE`](DOUBLE.md) — the component value or `0.0`.
|
|
|
|
**Examples**
|
|
|
|
```
|
|
VTEMP1^GET(0);
|
|
VTEMP1^GET(1);
|
|
```
|
|
|
|
### LEN
|
|
|
|
```
|
|
DOUBLE LEN()
|
|
```
|
|
|
|
Returns the vector's Euclidean length.
|
|
|
|
**Returns**: [`DOUBLE`](DOUBLE.md) — the vector length.
|
|
|
|
### MUL
|
|
|
|
```
|
|
void MUL(DOUBLE scalar)
|
|
```
|
|
|
|
Multiplies every component by the given scalar.
|
|
|
|
**Parameters**
|
|
|
|
- `scalar` — the multiplier.
|
|
|
|
**Examples**
|
|
|
|
```
|
|
VTEMP1^MUL(10.0);
|
|
VTEMP1^MUL(ARRSPEED^GET(VARPLAYER));
|
|
VTEMP2^MUL(-1);
|
|
```
|
|
|
|
### NORMALIZE
|
|
|
|
```
|
|
void NORMALIZE()
|
|
```
|
|
|
|
Normalises the vector to length `1` (divides each component by the current length). Calling this on a zero-length vector leaves the vector unchanged.
|
|
|
|
**Examples**
|
|
|
|
```
|
|
VNORMAL^NORMALIZE();
|
|
VTEMP1^NORMALIZE();
|
|
```
|
|
|
|
### REFLECT
|
|
|
|
```
|
|
void REFLECT(STRING|VECTOR normalVector, STRING|VECTOR resultVector)
|
|
```
|
|
|
|
Reflects this vector about the given normal vector and writes the result into the result vector. The original vector is unchanged.
|
|
|
|
**Parameters**
|
|
|
|
- `normalVector` — normal vector of the surface to reflect against.
|
|
- `resultVector` — vector that will receive the result.
|
|
|
|
**Examples**
|
|
|
|
```
|
|
VINCIDENT^REFLECT("VNORMAL","VREFLECT");
|
|
VINCIDENT^REFLECT(VNORMAL,VREFLECT);
|
|
```
|
|
|
|
## Signals
|
|
|
|
### ONINIT
|
|
|
|
Fired when the object is initialised.
|
|
|
|
### ONSIGNAL
|
|
|
|
Fired when a signal arrives (see [Events and signals](../engine/events.md#onsignal)).
|