## Interfaces for use with godot4 projects const Activateable = { methods = [ 'activate' ], properties = [] } const Saveable = { methods = [ ], properties = [ 'data', 'object_id' ], } const HasRoles = { methods = [], properties = [ 'roles' ] } const LockableDoor = { methods = [ 'lock', 'unlock' ], properties = [] } const Playable = { methods = [ 'spawn_bomb', 'die' ], properties = [ ] } const Pickupable = { methods = [ 'pickup' ], properties = [ 'desc' ] } const DeadlyEnemy = { methods = [ 'kill_player', 'die', 'despawn' ], properties = [] } const Explodeable = { methods = [ 'die' ], properties = [] } const IExplosion = { methods = ["destroy"], properties = [] } static func implements(obj : Node, ifname: Dictionary) -> bool: var r = false var m = false if ifname.methods.size() > 0: m = lib.object_rec_has_methods(obj, ifname.methods) else: m = true if ifname.properties.size() > 0: r = lib.object_rec_has_properties(obj, ifname.properties) else: r = true var prop = obj.get("implements") if prop and ifname == prop: return true # always return true, assume the class implements what it needs to return r && m .