typed-factorio 1.17.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +95 -53
- package/common/data-global.d.ts +15 -0
- package/common/serpent.d.ts +93 -0
- package/common/settings-global.d.ts +8 -0
- package/common/types.d.ts +74 -0
- package/index.d.ts +26 -0
- package/lualib/index.d.ts +2 -0
- package/{runtime → lualib}/mod-gui.d.ts +1 -0
- package/{runtime → lualib}/util.d.ts +69 -38
- package/package.json +25 -28
- package/prototype/generated/prototypes.d.ts +12823 -0
- package/prototype/generated/types.d.ts +11985 -0
- package/prototype/index.d.ts +11 -0
- package/runtime/generated/builtin-types.d.ts +59 -64
- package/runtime/generated/classes.d.ts +25770 -24477
- package/runtime/generated/concepts.d.ts +8551 -9160
- package/runtime/generated/defines.d.ts +2084 -1872
- package/runtime/generated/events.d.ts +4197 -4383
- package/runtime/generated/global-functions.d.ts +30 -28
- package/runtime/generated/global-objects.d.ts +42 -41
- package/runtime/generated/index-types.d.ts +51 -50
- package/runtime/index.d.ts +8 -16
- package/runtime/pairs.d.ts +9 -7
- package/settings/index.d.ts +10 -0
- package/settings/types.d.ts +103 -112
- package/custom-index-template.d.ts +0 -23
- package/data/types.d.ts +0 -13
- package/runtime/librariesAndFunctions.d.ts +0 -91
- package/strict-index-types.d.ts +0 -3
package/README.md
CHANGED
@@ -2,23 +2,20 @@
|
|
2
2
|
|
3
3
|
Complete and featureful typescript definitions for the Factorio modding lua api. This is intended to be used with [TypescriptToLua](https://typescripttolua.github.io/).
|
4
4
|
|
5
|
-
This project aims to provide type definitions for the Factorio lua API that are as complete as possible.
|
5
|
+
This project aims to provide type definitions for the Factorio lua API that are as complete as possible.
|
6
|
+
The generator uses both the Factorio api docs JSON and manually defined additions.
|
6
7
|
|
7
8
|
## Installation
|
8
9
|
|
9
|
-
To use in your TypescriptToLua project:
|
10
|
+
To use in your [TypescriptToLua](https://typescripttolua.github.io/) project:
|
10
11
|
|
11
|
-
1. Install this package
|
12
|
+
1. Install this package: `npm install typed-factorio`
|
13
|
+
- Note: When types are updated for a new factorio version, you will need to the npm package to get the latest types.
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
or
|
17
|
-
|
18
|
-
yarn add typed-factorio
|
19
|
-
```
|
15
|
+
2. Add the types for the [stages](https://lua-api.factorio.com/1.1.89/index.html) used to `tsconfig.json > compilerOptions > types`.
|
16
|
+
The available stages are `"typed-factorio/settings"`, `"typed-factorio/prototype"`, and `"typed-factorio/runtime"`.
|
20
17
|
|
21
|
-
|
18
|
+
Example:
|
22
19
|
|
23
20
|
```diff
|
24
21
|
{
|
@@ -28,84 +25,137 @@ yarn add typed-factorio
|
|
28
25
|
}
|
29
26
|
```
|
30
27
|
|
31
|
-
|
28
|
+
The stages selected will control the global variables defined.
|
29
|
+
It is possible to include multiple stages, but there are some caveats. See [Using multiple stages in the same project](#using-multiple-stages-in-the-same-project) for more info.
|
32
30
|
|
33
|
-
|
31
|
+
## Usage
|
34
32
|
|
35
|
-
|
33
|
+
Global variables will be defined for the stage(s) selected.
|
36
34
|
|
37
|
-
|
35
|
+
### Types
|
38
36
|
|
39
|
-
|
37
|
+
No matter which stage(s) are selected, _type_ definitions for all stages are available in the modules `"factorio:settings"`, `"factorio:prototype"`, and `"factorio:runtime"`:
|
38
|
+
```ts
|
39
|
+
import { BoolSettingDefinition } from "factorio:settings"
|
40
|
+
import { ItemPrototype } from "factorio:prototype"
|
41
|
+
import { LuaEntity } from "factorio:runtime"
|
42
|
+
```
|
40
43
|
|
41
|
-
|
44
|
+
### Data.extend
|
45
|
+
In the settings and prototype stages, the `data` global variable is available.
|
42
46
|
|
47
|
+
For [performance reasons](https://github.com/microsoft/TypeScript/wiki/Performance#preferring-base-types-over-unions), `data.extend()` is only loosely typed.
|
48
|
+
To get full type checking, use specific types when adding prototypes:
|
43
49
|
```ts
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
+
// example: adding an ammo category and item prototype
|
51
|
+
import { AmmoCategory, ItemPrototype } from "factorio:prototype"
|
52
|
+
|
53
|
+
data.extend([
|
54
|
+
{
|
55
|
+
type: "ammo-category",
|
56
|
+
name: "foo",
|
57
|
+
} satisfies AmmoCategory,
|
58
|
+
{
|
59
|
+
type: "item",
|
60
|
+
name: "bar",
|
61
|
+
// other fields...
|
62
|
+
} satisfies ItemPrototype,
|
63
|
+
])
|
50
64
|
|
51
|
-
data.extend([{ ... }])
|
52
65
|
```
|
53
66
|
|
54
|
-
There are currently full types for settings stage, but only basic types for the data stage.
|
55
|
-
|
56
67
|
### Factorio lualib modules
|
57
68
|
|
58
|
-
|
69
|
+
There are types for the following [Factorio lualib modules](https://github.com/wube/factorio-data/tree/master/core/lualib):
|
59
70
|
|
60
71
|
- `util`
|
61
72
|
- `mod-gui`
|
62
73
|
|
63
|
-
|
74
|
+
These can be imported as modules:
|
75
|
+
|
76
|
+
```ts
|
77
|
+
import * as util from "util"
|
78
|
+
|
79
|
+
const foo = util.copy(bar)
|
80
|
+
```
|
81
|
+
|
82
|
+
If you wish to see types for more lualib modules, feel free to open an issue or pull request.
|
64
83
|
|
65
84
|
### The `global` table
|
66
85
|
|
67
|
-
The `global` table
|
86
|
+
The `global` table (in the runtime stage) can have any shape, so it is not defined here. Instead, you can:
|
68
87
|
|
69
88
|
- add `declare const global: <Your type>` in a `.d.ts` file included in your project, to apply it project-wide, or
|
70
|
-
- add `declare const global: {...}` to each
|
89
|
+
- add `declare const global: {...}` to each file where needed. This way, you can define only properties that each file specifically uses.
|
90
|
+
|
91
|
+
## Using multiple stages in the same project
|
92
|
+
|
93
|
+
Every Factorio loading stage declares different global variables.
|
94
|
+
To add types for multiple Factorio stages, you have a few options, with different pros and cons:
|
95
|
+
|
96
|
+
1. Add multiple stages to the "types" field, e.g. `"types": ["typed-factorio/prototype", "typed-factorio/runtime"]`. This will define global variables for _all_ stages selected. With this option, take care that you only use global variables available in the stages the code is run.
|
97
|
+
2. Add _only_ the runtime stage to your types, then manually declare other global variables in other stages, only in files that use them. There are types in `"factorio:common"` to allow this:
|
98
|
+
```ts
|
99
|
+
// -- For the prototype stage --
|
100
|
+
import { PrototypeData, ActiveMods } from "factorio:common"
|
101
|
+
declare const data: PrtotopyeData
|
102
|
+
declare const mods: ActiveMods
|
103
|
+
// The `settings` global variable is already declared in the runtime stage.
|
104
|
+
// However, in the prototype stage _only_ startup settings are available.
|
105
|
+
```
|
106
|
+
```ts
|
107
|
+
// -- For the settings stage --
|
108
|
+
import { SettingsData, ActiveMods } from "factorio:common"
|
109
|
+
declare const settings: SettingsData
|
110
|
+
declare const mods: ActiveMods
|
111
|
+
```
|
112
|
+
3. Use a separate `tsconfig.json` for each stage. In each `tsconfig.json`, include only files in that stage in the `"include"` field, e.g. `include: ["src/control.ts"]` for the runtime stage. However, this means you need to run `tstl` separately for each stage, and files shared by multiple stages will be compiled multiple times.
|
113
|
+
|
114
|
+
### Additional notes
|
115
|
+
|
116
|
+
You can also include just `"typed-factorio"` in your `types` field. This will include only global variables available to _all_ stages.
|
71
117
|
|
72
118
|
## Type features
|
73
119
|
|
74
|
-
|
120
|
+
Here is some info on type features that you may find useful:
|
75
121
|
|
76
|
-
`nil`
|
122
|
+
### `nil`
|
77
123
|
|
78
|
-
|
124
|
+
The `nil` type is equivalent to `undefined`.
|
125
|
+
A class attribute is marked as possibly nil if the _read_ type is possibly `nil`. For properties where `nil` is possible on _write_, but not _read_, you can use `undefined!` or `myNullableValue!`, e.g. `controlBehavior.parameters = undefined!`.
|
79
126
|
|
80
127
|
### Parameter Variants
|
81
128
|
|
82
|
-
Parameter tables with variants (having "additional attributes can be specified depending on type ...") are defined as a union of all variants. The type for a specific variant is prefixed with the variant name, or "Other"
|
129
|
+
Parameter tables with variants (having "additional attributes can be specified depending on type ...") are defined as a union of all variants. The type for a specific variant is prefixed with the variant name (e.g. `AmmoDamageTechnologyModifier`), or prefixed with "Other" for variants without extra properties (e.g. `OtherTechnologyModifier`).
|
83
130
|
|
84
131
|
### Events
|
85
132
|
|
86
|
-
Event IDs (`defines.events`)
|
87
|
-
|
133
|
+
Event IDs (`defines.events`) hold type info for their corresponding event type and filters, which is used by various methods in `script`.
|
134
|
+
|
135
|
+
You can pass an event data type parameter to `script.generate_event_name<T>()`, and it will return a `CustomEventId` that includes type info.
|
88
136
|
|
89
137
|
### Array-like classes
|
90
138
|
|
91
|
-
Classes that have an index operator, a length operator, and have an array-like structure
|
139
|
+
Classes that have an index operator, a length operator, and have an array-like structure subclass from `(Readonly)Array`. These are `LuaInventory`, `LuaFluidBox`, `LuaTransportLine`.
|
140
|
+
This allows you to use these classes like arrays, e.g. having array methods and `.length` translating to the lua length operator. However, this means like typescript arrays, they are **0-indexed, not 1-indexed**.
|
92
141
|
|
93
142
|
### Read and write variants
|
94
143
|
|
95
144
|
For concepts that can take a table or array form, the main type (e.g. `MapPosition`) defines the table form, and an `Array` suffix (e.g. `MapPositionArray`) defines the array form.
|
96
|
-
Concepts in a "read" position
|
145
|
+
Concepts in a "read" position are in table form, and concepts in a "write" position may be either in table or array form (e.g. `MapPosition | MapPositionArray`).
|
146
|
+
Concepts that include table-or-array concepts may have an additional `Write` variant (e.g. `ScriptArea`, `ScriptAreaWrite`).
|
97
147
|
|
98
148
|
### Classes with subclasses
|
99
149
|
|
100
|
-
Some classes have attributes that
|
150
|
+
Some classes have attributes that only work for particular subclasses. For these classes (e.g. `LuaEntity`) there are specific types that you can _optionally_ use:
|
101
151
|
|
102
|
-
-
|
103
|
-
-
|
152
|
+
- A "Base" type (e.g. `BaseEntity`) which contains only members usable by all subclasses
|
153
|
+
- Multiple subclass types, e.g. `CraftingMachineEntity`, which extends the base type with members specific to that subclass.
|
104
154
|
|
105
|
-
The
|
155
|
+
The original class name (e.g. `LuaEntity`) contains attributes for _all_ subclasses.
|
106
156
|
|
107
157
|
For stricter types, use the `Base` type generally, and the specific subclass type when needed.
|
108
|
-
You can also create your own type-narrowing functions
|
158
|
+
You can also create your own type-narrowing functions:
|
109
159
|
|
110
160
|
```ts
|
111
161
|
function isCraftingMachineEntity(entity: BaseEntity): entity is CraftingMachineEntity {
|
@@ -115,16 +165,8 @@ function isCraftingMachineEntity(entity: BaseEntity): entity is CraftingMachineE
|
|
115
165
|
|
116
166
|
### LuaGuiElement
|
117
167
|
|
118
|
-
`LuaGuiElement` is broken up into a [discriminated union](https://basarat.gitbook.io/typescript/type-system/discriminated-unions),
|
168
|
+
`LuaGuiElement` is broken up into a [discriminated union](https://basarat.gitbook.io/typescript/type-system/discriminated-unions), for each gui element type. Individual gui element types can be referred to by `<Type>GuiElement`, e.g. `ButtonGuiElement`.
|
119
169
|
|
120
|
-
Similarly, the table passed to `LuaGuiElement.add
|
170
|
+
Similarly, `GuiSpec` (the table passed to `LuaGuiElement.add`), is also a discriminated union. The type for a specific GuiSpec is `<Type>GuiSpec`, e.g. `ListBoxGuiSpec`. `LuaGuiElement.add` will return the appropriate gui element type corresponding to the GuiSpec type passed in.
|
121
171
|
|
122
172
|
This is done both to provide more accurate types, and for possible integration with [JSX](https://typescripttolua.github.io/docs/jsx/).
|
123
|
-
|
124
|
-
### Strict index types
|
125
|
-
|
126
|
-
This is a recommended **opt-in** feature. To opt in, add `"typed-factorio/strict-index-types"` to `compilerOptions > types` in your tsconfig.json (in addition to `"typed-factorio/runtime"`).
|
127
|
-
|
128
|
-
Some `uint` types which represent unique indices, e.g. player_index, entity_number, can be "branded" numbers, e.g. `PlayerIndex` and `EntityNumber`. If opted-in, these index-types will be still assignable to `number`, but a plain `number` is not directly assignable to them. This helps ensure their correct use.
|
129
|
-
You can use these types as keys in an index signature, e.g. `{ [index: PlayerIndex]: "foo" }`.
|
130
|
-
You can cast "plain" numbers to these types, e.g. `1 as PlayerIndex`, do this with caution.
|
@@ -0,0 +1,15 @@
|
|
1
|
+
/**
|
2
|
+
* Provides access to read/edit prototypes.
|
3
|
+
*
|
4
|
+
* This is only available in the settings or prototype stage.
|
5
|
+
* Only prototypes for the current stage can be accessed.
|
6
|
+
*/
|
7
|
+
declare const data: import("factorio:common").DataGlobal
|
8
|
+
|
9
|
+
/**
|
10
|
+
* A table of (mod name -> mod version) for all currently active mods.
|
11
|
+
*
|
12
|
+
* This global is only available in the settings or prototype stage.
|
13
|
+
* In the runtime stage, use `script.active_mods`.
|
14
|
+
*/
|
15
|
+
declare const mods: import("factorio:common").ActiveMods
|
@@ -0,0 +1,93 @@
|
|
1
|
+
// from https://lua-api.factorio.com/latest/Libraries.html
|
2
|
+
// last updated for 1.1.35, 1.1.36, 1.1.37
|
3
|
+
|
4
|
+
/** @noSelfInFile */
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Factorio provides the {@link https://github.com/pkulchenko/serpent serpent library} as a global variable `serpent` for
|
8
|
+
* all mods to use. It allows for easy debugging of tables, because serpent makes it trivial to print them, for example
|
9
|
+
* by using `serpent.block()`. However, serpent cannot pretty-print LuaObjects such as LuaEntity. The serpent library
|
10
|
+
* was modified to improve determinism, e.g. comments are turned off by default to avoid returning table addresses.
|
11
|
+
* Furthermore, two options were added: `refcomment` (true/false/maxlevel) and `tablecomment` (true/false/maxlevel),
|
12
|
+
* which allow to separately control the self-reference and table value output of the `comment` option.
|
13
|
+
*/
|
14
|
+
declare namespace serpent {
|
15
|
+
/** @noSelf */
|
16
|
+
interface Options {
|
17
|
+
/** Indentation; triggers long multi-line output. */
|
18
|
+
indent: string
|
19
|
+
/** Provide stringified value in a comment (up to maxlevel of depth). */
|
20
|
+
comment: boolean | number
|
21
|
+
/** Sort keys. */
|
22
|
+
sortkeys: boolean | ((this: void, keys: any[], table: any) => void)
|
23
|
+
/** Force sparse encoding (no nil filling based on #t). */
|
24
|
+
sparse: boolean
|
25
|
+
/** Remove spaces. */
|
26
|
+
compact: boolean
|
27
|
+
/** Raise fatal error on non-serializable values. */
|
28
|
+
fatal: boolean
|
29
|
+
/** Disable bytecode serialization for easy comparison. */
|
30
|
+
nocode: boolean
|
31
|
+
/** Disable checking numbers against undefined and huge values. */
|
32
|
+
nohuge: boolean
|
33
|
+
/** Specify max level up to which to expand nested tables. */
|
34
|
+
maxlevel: number
|
35
|
+
/** Specify max number of elements in a table. */
|
36
|
+
maxnum: number
|
37
|
+
/** Specify max length for all table elements. */
|
38
|
+
maxlength: number
|
39
|
+
/**
|
40
|
+
* Use __tostring metamethod when serializing tables (v0.29); set to false to disable and serialize the table as is,
|
41
|
+
* even when __tostring is present.
|
42
|
+
*/
|
43
|
+
metatostring: boolean
|
44
|
+
/**
|
45
|
+
* Specify format for numeric values as shortest possible round-trippable double (v0.30). Use "%.16g" for better
|
46
|
+
* readability and "%.17g" (the default value) to preserve floating point precision.
|
47
|
+
*/
|
48
|
+
numformat: string
|
49
|
+
/** Allows to specify a list of values to ignore (as keys). */
|
50
|
+
valignore: string[]
|
51
|
+
/** Allows to specify the list of keys to be serialized. Any keys not in this list are not included in final output (as keys). */
|
52
|
+
keyallow: string[]
|
53
|
+
/** Allows to specity the list of keys to ignore in serialization. */
|
54
|
+
keyignore: string[]
|
55
|
+
/** Allows to specify a list of value types to ignore (as keys). */
|
56
|
+
valtypeignore: string[]
|
57
|
+
|
58
|
+
/** Provide custom output for tables. */
|
59
|
+
custom(opts: {
|
60
|
+
/** The name of the current element with '=' or an empty string in case of array index, */
|
61
|
+
tag: string
|
62
|
+
/** An opening table bracket { and associated indentation and newline (if any), */
|
63
|
+
head: string
|
64
|
+
/** Table elements concatenated into a string using commas and indentation/newlines (if any), */
|
65
|
+
body: string
|
66
|
+
/** A closing table bracket } and associated indentation and newline (if any), and */
|
67
|
+
tail: string
|
68
|
+
/** The current level. */
|
69
|
+
level: number
|
70
|
+
}): string
|
71
|
+
|
72
|
+
/** Name; triggers full serialization with self-ref section. */
|
73
|
+
name: string
|
74
|
+
|
75
|
+
refcomment: boolean | number
|
76
|
+
tablecomment: boolean | number
|
77
|
+
}
|
78
|
+
|
79
|
+
/** Full serialization; sets name, compact and sparse options; */
|
80
|
+
function dump(tbl: unknown, options?: Partial<Options>): string
|
81
|
+
|
82
|
+
/** Single line pretty printing, no self-ref section; sets sortkeys and comment options; */
|
83
|
+
function line(tbl: unknown, options?: Partial<Options>): string
|
84
|
+
|
85
|
+
/** Multi-line indented pretty printing, no self-ref section; sets indent, sortkeys, and comment options. */
|
86
|
+
function block(tbl: unknown, options?: Partial<Options>): string
|
87
|
+
|
88
|
+
/**
|
89
|
+
* For loading serialized fragments, serpent also provides `load` function that adds safety checks and reports an
|
90
|
+
* error if there is any executable code in the fragment.
|
91
|
+
*/
|
92
|
+
function load<T>(str: string, options?: { safe?: boolean }): LuaMultiReturn<[true, T] | [false, string]>
|
93
|
+
}
|
@@ -0,0 +1,8 @@
|
|
1
|
+
/**
|
2
|
+
* Provides access to the current mod settings.
|
3
|
+
* This is available in the prototype and runtime stages.
|
4
|
+
*
|
5
|
+
* In the prototype stage, _only_ the `startup` settings are available.
|
6
|
+
* In the runtime stage, this is extended with the full {@link LuaSettings} interface.
|
7
|
+
*/
|
8
|
+
declare const settings: import("factorio:common").SettingsGlobal
|
@@ -0,0 +1,74 @@
|
|
1
|
+
/** @noResolution */
|
2
|
+
declare module "factorio:common" {
|
3
|
+
import { ModSetting } from "factorio:runtime"
|
4
|
+
import { PrototypeMap as PrototypePrototypeMap } from "factorio:prototype"
|
5
|
+
import { PrototypeMap as SettingsPrototypeMap } from "factorio:settings"
|
6
|
+
/**
|
7
|
+
* A type map of type name -> prototype type.
|
8
|
+
*
|
9
|
+
* Including the settings/prototype stage in your tsconfig extends this interface.
|
10
|
+
*/
|
11
|
+
export interface GlobalPrototypeMap {}
|
12
|
+
|
13
|
+
/** Represents any valid prototype. */
|
14
|
+
export interface AnyPrototype<M = GlobalPrototypeMap> {
|
15
|
+
readonly type: keyof M
|
16
|
+
readonly name: string
|
17
|
+
}
|
18
|
+
|
19
|
+
export interface DataGlobal<M = GlobalPrototypeMap> {
|
20
|
+
/**
|
21
|
+
* A table of the already added prototypes.
|
22
|
+
* Indexed by prototype type, then by prototype name.
|
23
|
+
*/
|
24
|
+
readonly raw: {
|
25
|
+
readonly [T in keyof M]: {
|
26
|
+
readonly [name in string]?: M[T]
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Add additional prototypes.
|
32
|
+
*/
|
33
|
+
extend<P extends AnyPrototype<M>>(prototypes: readonly P[]): void
|
34
|
+
}
|
35
|
+
|
36
|
+
export interface SettingsGlobal {
|
37
|
+
readonly startup: {
|
38
|
+
readonly [name: string]: ModSetting
|
39
|
+
}
|
40
|
+
}
|
41
|
+
|
42
|
+
/** A version string, in the form "major.minor.patch". */
|
43
|
+
export type VersionString = `${bigint}.${bigint}.${bigint}`
|
44
|
+
|
45
|
+
export interface ActiveMods {
|
46
|
+
readonly [modName: string]: VersionString | undefined
|
47
|
+
}
|
48
|
+
|
49
|
+
/**
|
50
|
+
* Represents a `data` global variable for the prototype stage.
|
51
|
+
*
|
52
|
+
* If you did _not_ add `"typed-factorio/prototype"` to your tsconfig, you can manually declare this global like so:
|
53
|
+
* ```ts
|
54
|
+
* import { PrototypeData } from "factorio:prototype"
|
55
|
+
* declare const data: PrototypeData
|
56
|
+
*
|
57
|
+
* data.extend(...)
|
58
|
+
* ```
|
59
|
+
*/
|
60
|
+
export type PrototypeData = DataGlobal<PrototypePrototypeMap>
|
61
|
+
|
62
|
+
/**
|
63
|
+
* Represents a `data` global variable for the settings stage.
|
64
|
+
*
|
65
|
+
* If you did _not_ add `"typed-factorio/settings"` to your tsconfig, you can manually declare this global like so:
|
66
|
+
* ```ts
|
67
|
+
* import { SettingsData } from "factorio:settings"
|
68
|
+
* declare const data: SettingsData
|
69
|
+
*
|
70
|
+
* data.extend(...)
|
71
|
+
* ```
|
72
|
+
*/
|
73
|
+
export type SettingsData = DataGlobal<SettingsPrototypeMap>
|
74
|
+
}
|
package/index.d.ts
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
/*
|
2
|
+
This file includes _only_ types for all factorio stages; it declares the factorio:common, factorio:prototype,
|
3
|
+
and factorio:runtime modules.
|
4
|
+
*/
|
5
|
+
/// <reference types="lua-types/5.2" />
|
6
|
+
|
7
|
+
/// <reference path="common/types.d.ts" />
|
8
|
+
|
9
|
+
/// <reference path="settings/types.d.ts" />
|
10
|
+
|
11
|
+
/// <reference path="prototype/generated/prototypes.d.ts" />
|
12
|
+
/// <reference path="prototype/generated/types.d.ts" />
|
13
|
+
|
14
|
+
/// <reference path="runtime/generated/builtin-types.d.ts" />
|
15
|
+
/// <reference path="runtime/generated/events.d.ts" />
|
16
|
+
/// <reference path="runtime/generated/classes.d.ts" />
|
17
|
+
/// <reference path="runtime/generated/concepts.d.ts" />
|
18
|
+
/// <reference path="runtime/generated/index-types.d.ts" />
|
19
|
+
/// <reference path="runtime/pairs.d.ts" />
|
20
|
+
|
21
|
+
/// <reference path="lualib/index.d.ts" />
|
22
|
+
|
23
|
+
// common globals
|
24
|
+
/// <reference path="common/serpent.d.ts" />
|
25
|
+
/// <reference path="runtime/generated/defines.d.ts" />
|
26
|
+
/// <reference path="runtime/generated/global-functions.d.ts" />
|
@@ -1,10 +1,27 @@
|
|
1
|
-
// "util" is declared only as a module, even though it also modifies global variables
|
2
|
-
// This is both because of limitations in `declare module`, and that modules are much friendlier to tooling.
|
3
|
-
|
4
1
|
/** @noSelfInFile */
|
5
2
|
|
6
3
|
/** @noResolution */
|
7
4
|
declare module "util" {
|
5
|
+
import {
|
6
|
+
ColorArray as RColorArray,
|
7
|
+
float,
|
8
|
+
LuaEntity,
|
9
|
+
MapPosition,
|
10
|
+
MapPositionArray,
|
11
|
+
nil,
|
12
|
+
table,
|
13
|
+
} from "factorio:runtime"
|
14
|
+
import { Color as PrototypeColor, SpriteParameters } from "factorio:prototype"
|
15
|
+
import { PrototypeData } from "factorio:common"
|
16
|
+
|
17
|
+
type ColorArray = PrototypeColor & float[]
|
18
|
+
interface ColorTable {
|
19
|
+
r: float
|
20
|
+
g: float
|
21
|
+
b: float
|
22
|
+
a?: float
|
23
|
+
}
|
24
|
+
type AnyColor = PrototypeColor | RColorArray
|
8
25
|
namespace table {
|
9
26
|
function deepcopy<T>(table: T): T
|
10
27
|
|
@@ -20,24 +37,23 @@ declare module "util" {
|
|
20
37
|
function formattime(ticks: number): string
|
21
38
|
|
22
39
|
/** Supports 'rrggbb', 'rgb', 'rrggbbaa', 'rgba', 'ww', 'w' */
|
23
|
-
function color(hex: string):
|
40
|
+
function color(hex: string): ColorTable
|
41
|
+
|
42
|
+
function premul_color(color: AnyColor): ColorTable
|
43
|
+
|
44
|
+
function mix_color(c1: AnyColor, c2: AnyColor): ColorArray
|
24
45
|
|
25
|
-
function
|
46
|
+
function multiply_color(c1: AnyColor, n: number): ColorArray
|
26
47
|
|
27
|
-
function
|
48
|
+
function get_color_with_alpha(color: AnyColor, alpha: number, normalized_alpha?: boolean): ColorTable
|
28
49
|
|
29
|
-
|
50
|
+
const direction_vectors: Record<defines.direction, MapPositionArray>
|
30
51
|
|
31
52
|
function moveposition(
|
32
53
|
position: MapPositionArray,
|
33
|
-
direction: defines.direction.north
|
54
|
+
direction: defines.direction.north,
|
34
55
|
distance: number
|
35
56
|
): MapPositionArray
|
36
|
-
function moveposition(
|
37
|
-
position: MapPositionArray,
|
38
|
-
direction: defines.direction,
|
39
|
-
distance: number
|
40
|
-
): MapPositionArray | nil
|
41
57
|
|
42
58
|
function oppositedirection(direction: defines.direction): defines.direction
|
43
59
|
|
@@ -50,22 +66,30 @@ declare module "util" {
|
|
50
66
|
/** Gets tile position by pixel, hr */
|
51
67
|
function by_pixel_hr(x: number, y: number): MapPositionArray
|
52
68
|
|
53
|
-
|
69
|
+
type SpriteWithHrVersion<T = unknown> = T & SpriteParameters & { hr_version?: SpriteParameters & T }
|
70
|
+
|
71
|
+
function foreach_sprite_definition<T extends SpriteWithHrVersion>(
|
72
|
+
sprite: T,
|
73
|
+
fun: (sprite: T & T["hr_version"]) => void
|
74
|
+
): void
|
54
75
|
|
55
76
|
function add_shift(a: MapPositionArray | nil, b: MapPositionArray): MapPositionArray
|
56
77
|
function add_shift(a: MapPositionArray, b: MapPositionArray | nil): MapPositionArray
|
57
78
|
function add_shift(a: MapPositionArray | nil, b: MapPositionArray | nil): MapPositionArray | nil
|
58
79
|
|
59
|
-
|
80
|
+
function add_shift_offset<T extends SpriteWithHrVersion<{ shift?: MapPositionArray }>>(
|
81
|
+
offset: MapPositionArray | nil,
|
82
|
+
sprite: T
|
83
|
+
): T
|
60
84
|
|
61
85
|
function mul_shift(shift: MapPositionArray, scale: number | nil): MapPositionArray
|
62
86
|
function mul_shift(shift: MapPositionArray | nil, scale: number | nil): MapPositionArray | nil
|
63
87
|
|
64
88
|
function format_number(amount: number, append_suffix?: boolean): string
|
65
89
|
|
66
|
-
function increment(t: number[],
|
90
|
+
function increment(t: number[], luaIndex: number, v?: number): void
|
67
91
|
|
68
|
-
//
|
92
|
+
// Omitted: conditional_return; it's literally just `a and b`
|
69
93
|
|
70
94
|
/**
|
71
95
|
* Recursively merges and/or deep-copies tables. Entries in later tables override entries in earlier ones, unless both
|
@@ -80,37 +104,44 @@ declare module "util" {
|
|
80
104
|
|
81
105
|
function split_whitespace(string: string): string[]
|
82
106
|
|
83
|
-
//
|
107
|
+
// Omitted: split, string_starts_with. Use the builtin tstl functions for that.
|
84
108
|
|
85
|
-
//
|
109
|
+
// Omitted: online_players. Use game.connected_players
|
110
|
+
// The lua code actually logs "But why?" if you do this...
|
86
111
|
|
87
112
|
function clamp(x: number, lower: number, upper: number): number
|
88
113
|
|
89
114
|
function get_walkable_tile(): string
|
90
115
|
|
91
|
-
|
116
|
+
/**
|
117
|
+
* This function takes 2 icons tables, and adds the second to the first, but applies scale, shift and tint to the entire second set.
|
118
|
+
* This allows you to manipulate the entire second icons table in the same way as you would manipulate a single icon when adding to the icons table.
|
119
|
+
*/
|
120
|
+
function combine_icons<T extends SpriteParameters>(
|
121
|
+
icons1: readonly T[],
|
122
|
+
icons2: readonly T[],
|
123
|
+
inputs: {
|
124
|
+
scale?: number
|
125
|
+
shift?: MapPositionArray
|
126
|
+
tint?: AnyColor
|
127
|
+
}
|
128
|
+
): T[]
|
129
|
+
|
92
130
|
// omitted: technology_icons. Create an issue if you really want to see these
|
93
131
|
|
94
132
|
function parse_energy(energy: string): number
|
95
133
|
|
96
|
-
function product_amount(
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
)
|
108
|
-
): number
|
109
|
-
|
110
|
-
function empty_sprite(): object
|
111
|
-
|
112
|
-
// omitted: draw_as_glow
|
113
|
-
// omitted: remove_tile_references
|
134
|
+
function product_amount(product: {
|
135
|
+
probability: number
|
136
|
+
amount?: number
|
137
|
+
amount_min?: number
|
138
|
+
amount_max?: number
|
139
|
+
}): number
|
140
|
+
|
141
|
+
function empty_sprite(): SpriteParameters
|
142
|
+
|
143
|
+
function draw_as_glow<T extends SpriteWithHrVersion>(sprite: T): T
|
144
|
+
function remove_tile_references(data: PrototypeData, array_of_tiles_to_remove: readonly string[]): void
|
114
145
|
|
115
146
|
function remove_from_list<T>(list: T[], value: T): boolean
|
116
147
|
|