1 | //************************************ bs::framework - Copyright 2018 Marko Pintera **************************************// |
2 | //*********** Licensed under the MIT license. See LICENSE.md for full terms. This notice is not to be removed. ***********// |
3 | #pragma once |
4 | |
5 | // Contains forward declares used as a convenience |
6 | |
7 | namespace bs |
8 | { |
9 | // Script binding defines |
10 | |
11 | /** |
12 | * @page scriptBindingMacro Script binding exports |
13 | * |
14 | * Marks the specific type or a method to be exported to the scripting API. Supports a variety of options which can |
15 | * be specified in the "option:value" format, where multiple options are separated by commas, with no whitespace. |
16 | * |
17 | * Supported options: |
18 | * - n - Specify a different name for the type in the scripting API (e.g. "n:MyName"). Usable on types and methods. |
19 | * - v - Specify a different visibility (default is public). Supported values are "public", "internal" and "private". |
20 | * Usable on types and methods. |
21 | * - f - Specify the name of the output file(s) for the script object and its potential wrappers. If not specified |
22 | * the name of the type will be used for the file. Usable on types only. |
23 | * - pl - Specify whether the type is plain or not (default is false). Supported values are "true" or "false". Plain |
24 | * types don't have script interop objects generated, instead they are generated in script code as plain data |
25 | * types. No methods are exposed, but all data members and constructors are copied. Usable on types only. |
26 | * - e - Specify that a method is external and is to be appended to some script class. Such methods must be static |
27 | * and as the first parameter accept the instance of the class they operate on. Value of this option should be |
28 | * the name of the class to attach this method to. Methods with this parameter must also be part of a class |
29 | * with this option. Usable on types and methods. |
30 | * - ec - Similar to "e", but specifies an external constructor. Such method must have a return value that returns |
31 | * an instance of the class its registered for. Value of this option should be the name of the class to attach |
32 | * this method to. Methods with this parameter must also be part of a class with the "e" option. Usable on methods |
33 | * only. |
34 | * - pr - Specify the method should be exported as a property in script code. Supported values are "getter" or "setter". |
35 | * Getter methods must return a single value and accept no parameters, while setter methods must accept one |
36 | * parameter and return no values. Usable on methods only. |
37 | * - ed - Specify that a type should be exported for use in the editor only. Supported values are "true" or "false". |
38 | * Usable on types only. |
39 | * - ex - Excludes an enum or struct member from being generated in script code. Supported values are "true" or "false". |
40 | * By default all struct & enum members are exported. |
41 | * - in - When enabled ensures only the interop C# method is generated, but not a public one. It is instead expected |
42 | * the user will manually implement the public method. Supported values are "true" or "false". Default is "false". |
43 | * Only supported on methods. |
44 | * - m - Specifies the name of the module to place the entry in. This determines the documentation group, and may also |
45 | * determine namespace and/or module (e.g. m:Animation to place it in the Animation module). Usable on types. |
46 | */ |
47 | |
48 | #if BS_COMPILER == BS_COMPILER_CLANG |
49 | /** @ref scriptBindingMacro */ |
50 | #define BS_SCRIPT_EXPORT(...) __attribute__((annotate("se," #__VA_ARGS__))) |
51 | |
52 | /** |
53 | * When applied to a parameter, makes it a variable argument parameter in the scripting interface (if supported |
54 | * by the scripting language. |
55 | */ |
56 | #define BS_PARAMS __attribute__((annotate("params"))) |
57 | |
58 | /** |
59 | * When applied to a parameter or a field of ResourceHandle type, makes that element be exported as a raw resource in |
60 | * script code. |
61 | */ |
62 | #define BS_NORREF __attribute__((annotate("norref"))) |
63 | #else |
64 | /** @ref scriptBindingMacro */ |
65 | #define BS_SCRIPT_EXPORT(...) |
66 | |
67 | /** |
68 | * When applied to a parameter, makes it a variable argument parameter in the scripting interface (if supported |
69 | * by the scripting language). |
70 | */ |
71 | #define BS_PARAMS |
72 | |
73 | /** |
74 | * When applied to a parameter or a field of ResourceHandle type, makes that element be exported as a raw resource in |
75 | * script code. |
76 | */ |
77 | #define BS_NORREF |
78 | #endif |
79 | |
80 | /** @addtogroup Math |
81 | * @{ |
82 | */ |
83 | |
84 | /** Values that represent in which order are euler angles applied when used in transformations. */ |
85 | enum class BS_SCRIPT_EXPORT() EulerAngleOrder |
86 | { |
87 | XYZ, |
88 | XZY, |
89 | YXZ, |
90 | YZX, |
91 | ZXY, |
92 | ZYX |
93 | }; |
94 | |
95 | /** Enum used for object construction specifying the object should be zero initialized. */ |
96 | enum BS_ZERO { BsZero }; |
97 | |
98 | /** Enum used for matrix/quaternion constructor specifying it should be initialized with an identity value. */ |
99 | enum BS_IDENTITY { BsIdentity }; |
100 | |
101 | /** @} */ |
102 | |
103 | /** @addtogroup Platform-Utility |
104 | * @{ |
105 | */ |
106 | |
107 | /** Enum that defines possible window border styles. */ |
108 | enum class WindowBorder |
109 | { |
110 | Normal, |
111 | None, |
112 | Fixed |
113 | }; |
114 | |
115 | /** @} */ |
116 | |
117 | class Angle; |
118 | class AABox; |
119 | class Degree; |
120 | class Math; |
121 | class Matrix3; |
122 | class Matrix4; |
123 | class Plane; |
124 | class Quaternion; |
125 | class Radian; |
126 | class Ray; |
127 | class Capsule; |
128 | class Sphere; |
129 | class Vector2; |
130 | class Vector3; |
131 | class Vector4; |
132 | struct Vector2I; |
133 | class Rect2I; |
134 | class Rect2; |
135 | class Rect3; |
136 | class Color; |
137 | class DynLib; |
138 | class DynLibManager; |
139 | class DataStream; |
140 | class MemoryDataStream; |
141 | class FileDataStream; |
142 | class MeshData; |
143 | class FileSystem; |
144 | class Timer; |
145 | class Task; |
146 | class GpuResourceData; |
147 | class PixelData; |
148 | class HString; |
149 | class StringTable; |
150 | struct LocalizedStringData; |
151 | class Path; |
152 | class HThread; |
153 | class TestSuite; |
154 | class TestOutput; |
155 | class AsyncOpSyncData; |
156 | struct RTTIField; |
157 | struct RTTIReflectablePtrFieldBase; |
158 | struct SerializedObject; |
159 | struct SerializedInstance; |
160 | class FrameAlloc; |
161 | class LogEntry; |
162 | // Reflection |
163 | class IReflectable; |
164 | class RTTITypeBase; |
165 | // Serialization |
166 | class ISerializable; |
167 | class SerializableType; |
168 | |
169 | enum TypeID_Utility |
170 | { |
171 | TID_Abstract = 50, // Special type ID used for Abstract classes. Only type ID that may be used by more than one class. |
172 | TID_WString = 51, |
173 | TID_Path = 52, |
174 | TID_Vector = 53, |
175 | TID_Map = 54, |
176 | TID_UnorderedMap = 55, |
177 | TID_Pair = 56, |
178 | TID_Set = 57, |
179 | TID_StringID = 58, |
180 | TID_SerializedInstance = 59, |
181 | TID_SerializedField = 60, |
182 | TID_SerializedObject = 61, |
183 | TID_SerializedArray = 62, |
184 | TID_SerializedEntry = 63, |
185 | TID_SerializedArrayEntry = 64, |
186 | TID_SerializedSubObject = 65, |
187 | TID_UnorderedSet = 66, |
188 | TID_SerializedDataBlock = 67, |
189 | TID_Flags = 68, |
190 | TID_IReflectable = 69, |
191 | TID_DataBlob = 70, |
192 | TID_ColorGradient = 71, |
193 | TID_SerializationContext = 72, |
194 | TID_List = 73, |
195 | TID_SmallVector = 74 |
196 | }; |
197 | } |
198 | |