This module defines NimGodotObject and toVariant/fromVariant converters for Nim types. The converters are used by gdobj macro to import/export values from/to Godot (editor, GDScript).
You can also allow conversion of any custom type MyType by implementing:
proc godotTypeInfo*(T: typedesc[MyType]): GodotTypeInfo proc toVariant*(self: MyType): Variant proc fromVariant*(self: var MyType, val: Variant): ConversionResult
Implementing godotTypeInfo is optional and is necessary only if you want the type to be editable from the editor.
Imports
-
tables, typetraits, macros, asyncdispatch, core/godotbase, core/vector2, core/rect2, core/vector3, core/transform2d, core/planes, core/quats, core/rect3, core/basis, core/transforms, core/colors, core/nodepaths, core/rids, core/dictionaries, core/arrays, core/poolarrays, core/variants, godotinternal
Types
NimGodotObject* = ref object of RootObj godotObject: ptr GodotObject linkedObject: NimGodotObject ## Wrapper around native object that is the container of the Nim "script" ## This is needed for `of` checks and `as` conversions to work as ## expected. For example, Nim type may inherit from ``Spatial``, but the ## script is attached to ``Particles``. In this case conversion to ## ``Particles`` is valid, but Nim type system is not aware of that. ## This works in both directions - for linked native object this ## reference points to Nim object. isExternalRef: bool
- The base type all Godot types inherit from. Manages lifecycle of the wrapped GodotObject. Source Edit
ConversionResult* {.
pure.} = enum OK, TypeError, ## Type mismatch RangeError ## Types match, but the value is out of range. ## Mainly used for numeric (ordinal) types.- Conversion result to return from fromVariant procedure. Source Edit
CallError* = object of Exception err*: VariantCallError ## The error as returned by Godot
- Raised by wrappers in case of an incorrect dynamic invocation. For example, if incorrect number of arguments were passed or they had unexpected types. Source Edit
GodotTypeInfo* = object variantType*: VariantType hint*: GodotPropertyHint hintStr*: string ## Format depends on the type and the hint. ## For example, for Enum ``hint`` this is a comma separated list of ## values. ## See documentation of ``GodotPropertyHint`` for description of formats.
- Type information provided to Godot editor Source Edit
Procs
proc print*(parts: varargs[string, `$`])
- Prints concatenated parts to Godot log. Source Edit
proc getClassName*(o: NimGodotObject): string
- Source Edit
proc deinit*(obj: NimGodotObject)
- Destroy the object. You only need to call this for objects not inherited from Reference, where manual lifecycle control is necessary. Source Edit
proc nimGodotObjectFinalizer*[T: NimGodotObject](obj: T)
- Source Edit
proc asNimGodotObject*[T: NimGodotObject](godotObject: ptr GodotObject; noRef: bool = false): T
- Wraps godotObject into Nim type T. This is used by godotapigen and should rarely be used by anything else. Source Edit
proc newVariant*(obj: NimGodotObject): Variant {.
inline.}- Source Edit
proc asObject*[T: NimGodotObject](v: Variant): T {.
inline.}- Converts v to object of type T. Returns nil if the conversion cannot be performed (v's type is not an Object or it's an object of an incompatible type) Source Edit
proc asObject*(v: Variant; T: typedesc[NimGodotObject]): T {.
inline.}- Converts v to object of type T. Returns nil if the conversion cannot be performed (v's type is not an Object or it's an object of an incompatible type) Source Edit
proc `as`*[T: NimGodotObject](obj: NimGodotObject; t: typedesc[T]): T
-
Converts the obj into the specified type. Returns nil if the conversion cannot be performed (the obj is not of the type T)
This can be used either in dot notation (node.as(Button)) or infix notation (node as Button).
Source Edit proc `~`*[T: NimGodotObject](obj: NimGodotObject; t: typedesc[T]): bool {.
inline.}- Godot-specific inheritance check. You must use this over Nim's standard of operator, because Nim does not know which object your script is attached to in runtime. For example, if you create a gdobj Bullet of Spatial and the Bullet is attached to a MeshInstance, myBullet of MeshInstance will return false, but myBullet ~ MeshInstance will return true. This is going to be changed to of in later versions, when Nim starts supporting overloading of operator. Source Edit
proc getSingleton*[T: NimGodotObject](): T
- Returns singleton of type T. Normally, this should not be used, because godotapigen wraps singleton methods so that singleton objects don't have to be provided as parameters. Source Edit
proc gdnew*[T: NimGodotObject](): T
- Instantiates new object of type T. Source Edit
proc newCallError*(err: VariantCallError): ref CallError
- Instantiates CallError from Godot err. Source Edit
proc newConversionError*(err: ConversionResult): ref ValueError
- Instantiates error raised by godotapigen generated code in case of a conversion error. Source Edit
proc setGodotObject*(nimObj: NimGodotObject; obj: ptr GodotObject) {.
inline.}- Used from Godot constructor produced by gdobj macro. Do not call. Source Edit
proc setNativeObject*(nimObj: NimGodotObject; nativeObj: NimGodotObject) {.
inline.}- Used from Godot constructor produced by gdobj macro. Do not call. Source Edit
proc removeGodotObject*(nimObj: NimGodotObject) {.
inline.}- Used from Godot destructor produced by gdobj macro. Do not call. Source Edit
proc `==`*(self, other: NimGodotObject): bool {.
inline.}- Compares objects by referential equality. Source Edit
proc godotObject*(nimObj: NimGodotObject): ptr GodotObject {.
inline.}- Returns raw poitner to GodotObject. Use only if you know what you are doing. Source Edit
proc godotTypeInfo*(T: typedesc[NimGodotObject]): GodotTypeInfo {.
inline.}- Source Edit
proc toVariant*(self: NimGodotObject): Variant {.
inline.}- Source Edit
proc fromVariant*[T: NimGodotObject](self: var T; val: Variant): ConversionResult
- Source Edit
proc toVariant*(self: Variant): Variant {.
inline.}- Source Edit
proc fromVariant*(self: var Variant; val: Variant): ConversionResult {.
inline.}- Source Edit
proc godotTypeInfo*(T: typedesc[SomeGodotOrNum]): GodotTypeInfo {.
inline.}- Source Edit
proc godotTypeInfo*(T: typedesc[range]): VariantType {.
inline.}- Source Edit
proc toVariant*[T: SomeGodotOrNum](val: T): Variant {.
inline.}- Source Edit
proc fromVariant*[T: SomeSignedInt or SomeUnsignedInt](self: var T; val: Variant): ConversionResult
- Source Edit
proc godotTypeInfo*(T: typedesc[enum]): GodotTypeInfo
- Source Edit
proc toVariant*[T: enum](self: T): Variant {.
inline.}- Source Edit
proc fromVariant*[T: enum](self: var T; val: Variant): ConversionResult {.
inline.}- Source Edit
proc fromVariant*[T: SomeFloat](self: var T; val: Variant): ConversionResult
- Source Edit
proc fromVariant*[T: SomeGodot](self: var T; val: Variant): ConversionResult
- Source Edit
proc godotTypeInfo*(T: typedesc[string]): GodotTypeInfo {.
inline.}- Source Edit
proc toVariant*(s: string): Variant {.
inline.}- Source Edit
proc fromVariant*(s: var string; val: Variant): ConversionResult
- Source Edit
proc godotTypeInfo*(T: typedesc[seq]): GodotTypeInfo
- Source Edit
proc godotTypeInfo*(T: typedesc[array]): GodotTypeInfo
- Source Edit
proc toVariant*[T](s: openarray[T]): Variant
- Source Edit
proc fromVariant*[T](s: var seq[T]; val: Variant): ConversionResult
- Source Edit
proc fromVariant*[T: array](s: var T; val: Variant): ConversionResult
- Source Edit
proc godotTypeInfo*(T: typedesc[Table | TableRef]): GodotTypeInfo {.
inline.}- Source Edit
proc toVariant*[T: Table or TableRef](t: T): Variant
- Source Edit
proc fromVariant*[T: Table or TableRef](t: var T; val: Variant): ConversionResult
- Source Edit
proc getNativeLibHandle*(): pointer
- Returns NativeScript library handle used to register type information in Godot. Source Edit
Templates
template printWarning*(warning: typed)
- Prints warning to Godot log, adding filename and line information. Source Edit
template printError*(error: typed)
- Prints error to Godot log, adding filename and line information. Source Edit
template registerClass*(T: typedesc; godotClassName: cstring; native: bool)
- Registers the specified Godot type. Used by gdobj macro and godotapigen. Source Edit