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, gdnativeapi, core/godotcoretypes, core/godotbase, core/vector2, core/rect2, core/vector3, core/transform2d, core/planes, core/quats, core/aabb, 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. isRef*: bool isFinalized: bool isNative: 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 isFinalized(obj: NimGodotObject): bool {.
inline, raises: [], tags: [].}- Source Edit
proc getClassName(o: NimGodotObject): string {.
raises: [], tags: [].}- Source Edit
proc deinit(obj: NimGodotObject) {.
raises: [], tags: [].}- 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; forceNativeObject, 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, raises: [], tags: [].}- 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:type {.
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 `of`[T: NimGodotObject](obj: NimGodotObject; t: typedesc[T]): bool {.
inline.}- Godot-specific inheritance check. 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 {.
raises: [], tags: [].}- Instantiates CallError from Godot err. Source Edit
proc newConversionError(err: ConversionResult): ref ValueError {.
raises: [], tags: [].}- Instantiates error raised by godotapigen generated code in case of a conversion error. Source Edit
proc setGodotObject(nimObj: NimGodotObject; obj: ptr GodotObject) {.
inline, raises: [], tags: [].}- Used from Godot constructor produced by gdobj macro. Do not call. Source Edit
proc setNativeObject(nimObj: NimGodotObject; nativeObj: NimGodotObject) {.
inline, raises: [], tags: [].}- Used from Godot constructor produced by gdobj macro. Do not call. Source Edit
proc removeGodotObject(nimObj: NimGodotObject) {.
inline, raises: [], tags: [].}- Used from Godot destructor produced by gdobj macro. Do not call. Source Edit
proc `==`(self, other: NimGodotObject): bool {.
inline, raises: [], tags: [].}- Compares objects by referential equality. Source Edit
proc godotObject(nimObj: NimGodotObject): ptr GodotObject {.
inline, raises: [], tags: [].}- 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, raises: [], tags: [].}- Source Edit
proc fromVariant[T: NimGodotObject](self: var T; val: Variant): ConversionResult
- Source Edit
proc toVariant(self: Variant): Variant {.
inline, raises: [], tags: [].}- Source Edit
proc fromVariant(self: var Variant; val: Variant): ConversionResult {.
inline, raises: [], tags: [].}- 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, raises: [], tags: [].}- Source Edit
proc fromVariant(s: var string; val: Variant): ConversionResult {.
raises: [], tags: [].}- Source Edit
proc godotTypeInfo(T: typedesc[seq]): GodotTypeInfo
- Source Edit
proc godotTypeInfo(T: typedesc[array]): GodotTypeInfo
- Source Edit
proc toVariant[T](s: seq[T]): Variant
- Source Edit
proc toVariant[I, T](s: array[I, 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 {.
raises: [], tags: [].}- Returns NativeScript library handle used to register type information in Godot. Source Edit
proc registerFrameCallback(cb: proc () {.
closure.}) {.raises: [], tags: [].}- Source Edit
Templates
template registerClass(T: typedesc; godotClassName: cstring; native: bool)
- Registers the specified Godot type. Used by gdobj macro and godotapigen. Source Edit