Properties

Similar to signals, properties are created via a delegate which varies depending on the type of the property.

  • intProperty()for Ints
  • floatProperty() for Floats
  • booleanProperty() for Boolean
  • stringProperty() for String
  • enumProperty() for Enums
  • property() for godot.Resource types.

Note that properties must be mutable (declared as vars).

1
2
3
4
5
6
class RotatingCube: Spatial() {
  var rotationSpeed by floatProperty()
  var reverse by booleanProperty()

  ...
}

Value changes

You can optionally pass a ChangeListener to a property delegate to get notified when the value of the property changes.

1
2
3
val reverse by booleanProperty { oldValue, newValue ->
  gprint("Value of reverse has changed. from: $oldValue to: $newValue")
}

It is quite common to emit some signal when a value of the property changes, to make it simpler a signal can be converted to a ChangeListener via signal.asListener().

1
2
val signalReverseChanged by signal1<Boolean>()
val reverse by booleanProperty(signalReverseChanged.asListener())

Whenever the value of reverse changes, the signal reverseChanged is emitted automatically.

Registration

Properties can be registered in GodotClass.init via ClassMemberRegistry.registerProperty.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
class RotatingCube: Spatial() {
  ...

  companion object: GodotClass<Spatial, RotatingCube>(::RotatingCube) {
    override fun init(registry: ClassMemberRegistry<RotatingCube>) {
      registry.registerProperty(RotatingCube::rotationSpeed)
      registry.registerProperty(RotatingCube::reverse)
    }
  }
}

Default values

Specifying default values should be done during registration in order for Godot to know about it. This binding will automatically set this value when the owner of the property is instantiated.

1
registry.registerProperty(RotatingCube::rotationSpeed, default = 100f)

Property hints

Exposed properties are displayed in Godot's editors, to control how a property is displayed can done by passing a property hint during registration.

1
2
3
4
registry.registerProperty(
  RotatingCube::rotationSpeed, 
  hint = PropertyHint.range(0f, 1000f, 0.5f)
)

Certain PropertyHints are only available for certain property types. The property hint range for example is only available for Float and Int properties. The following are the available property hints and their respective supported types.

Property hint Supported property type(s)
range(end), range(start, end, step) Int, Float
ease() Float
exp(start, end, step) Float
rgb(), rgba() godot.core.Color
multiline() String
file(global, filter), directory(global) String
resource() godot.Resource

See GDScript exports for more details.