First upgrade to Godot 4.

This commit is contained in:
2021-08-21 20:56:19 +02:00
parent 47fbd56b9a
commit 74d4a37de2
15 changed files with 211 additions and 191 deletions

View File

@@ -1,4 +1,4 @@
extends Reference
extends RefCounted
class_name GDB_Entity
@@ -8,58 +8,56 @@ var _properties := [].duplicate()
var _property_ids := [].duplicate()
class _CommonWrapperProperty extends GDB_Property:
var object : WeakRef
func _init(object_ : Object, val, sig_name := "", flags := 0) -> void:
self.object = weakref(object_)
.set_type(typeof(val))
.set_value(val)
.set_flags(flags)
func _init(val, sig : Signal = Signal(), flags := 0):
super.set_type(typeof(val))
super.set_value(val)
super.set_flags(flags)
if sig_name != "":
object_.connect(sig_name, self, "_on_object_value_changed")
if !sig.is_null():
sig.connect(self._on_object_value_changed)
func _on_object_value_changed(p0 = null, p1 = null, p2 = null, p3 = null) -> void:
var obj : Object = self.object.get_ref()
if obj: # shouldn't actually be null, who called the handler then?
_value = obj.get(self.member)
emit_signal("value_changed")
_value = self.get_value()
value_changed.emit()
class _WrapperProperty extends _CommonWrapperProperty:
var object : WeakRef
var member : String
func _init(object_ : Object, member_ : String, sig_name : String, flags : int) \
.(object_, object_.get(member), sig_name, flags) -> void:
func _init(object_ : Object, member_ : String, sig : Signal, flags : int):
super(object_.get(member), sig, flags)
self.object = object_
self.member = member_
.set_name(member_.capitalize())
super.set_name(member_.capitalize())
func get_value():
var obj : Object = self.object.get_ref()
if obj:
return obj.get(self.member)
return .get_value()
return super.get_value()
func set_value(value) -> void:
var obj : Object = self.object.get_ref()
if obj:
obj.set(self.member, value)
.set_value(obj.get(self.member))
super.set_value(obj.get(self.member))
else:
.set_value(value)
super.set_value(value)
class _ArrayWrapperProperty extends _WrapperProperty:
func _init(object_ : Object, member_ : String, sig_name_added : String, sig_name_removed : String, flags : int) \
.(object_, member_, "", flags) -> void:
if sig_name_added != "":
object_.connect(sig_name_added, self, "_on_object_value_added")
if sig_name_removed != "":
object_.connect(sig_name_added, self, "_on_object_value_removed")
func _init(object_ : Object, member_ : String, sig_added : Signal = Signal(), sig_removed : Signal = Signal(), flags := 0):
super(object_, member_, Signal(), flags)
if !sig_added.is_null():
sig_added.connect(self._on_object_value_added)
if !sig_removed.is_null():
sig_removed.connect(self._on_object_value_removed)
func _on_object_value_added(value, p0 = null, p1 = null, p2 = null, p3 = null) -> void:
var obj : Object = self.object.get_ref()
if obj:
_value = obj.get(self.member)
emit_signal("value_changed")
emit_signal("value_added", value)
value_changed.emit()
value_added.emit(value)
func _on_object_value_removed(value, p0 = null, p1 = null, p2 = null, p3 = null) -> void:
var obj : Object = self.object.get_ref()
@@ -69,29 +67,29 @@ class _ArrayWrapperProperty extends _WrapperProperty:
emit_signal("value_removed", value)
class _GetSetWrapperProperty extends _CommonWrapperProperty:
var getter := ""
var setter := ""
var getter := Callable()
var setter := Callable()
func _init(object_ : Object, getter_ : String, setter_ := "", sig_name := "", flags := 0) \
.(object_, object.call(getter_), sig_name, flags) -> void:
func _init(getter_ : Callable, setter_ := Callable(), sig : Signal = Signal(), flags := 0):
super(getter_.call(), sig, flags)
self.getter = getter_
self.setter = setter_
func get_value():
var obj : Object = self.object.get_ref()
if obj:
return obj.call(self.getter)
return .get_value()
return self.getter.call()
return super.get_value()
func set_value(value) -> void:
if !self.setter:
if self.setter.is_null():
return
var obj : Object = self.object.get_ref()
if obj:
obj.call(self.setter, value)
.set_value(obj.call(self.getter))
self.setter.call(value)
super.set_value(self.getter.call())
else:
.set_value(value)
super.set_value(value)
################
# public stuff #
@@ -199,14 +197,14 @@ static func is_valid_entity(object : Object) -> bool:
return object != null \
&& object.has_method("get_properties")
static func make_property(object : Object, member : String, sig_name := "", flags := 0) -> GDB_Property:
return _WrapperProperty.new(object, member, sig_name, flags)
static func make_property(object : Object, member : String, sig := Signal(), flags := 0) -> GDB_Property:
return _WrapperProperty.new(object, member, sig, flags)
static func make_getset_property(object : Object, getter : String, setter := "", sig_name := "", flags := 0) -> GDB_Property:
return _GetSetWrapperProperty.new(object, getter, setter, sig_name, flags)
static func make_getset_property(getter : Callable, setter := Callable(), sig := Signal(), flags := 0) -> GDB_Property:
return _GetSetWrapperProperty.new(getter, setter, sig, flags)
static func make_array_property(object : Object, member : String, sig_name_added := "", sig_name_removed := "", array_type := TYPE_NIL, flags := 0) -> GDB_Property:
var prop := _ArrayWrapperProperty.new(object, member, sig_name_added, sig_name_removed, flags)
static func make_array_property(object : Object, member : String, sig_added := Signal(), sig_removed := Signal(), array_type := TYPE_NIL, flags := 0) -> GDB_Property:
var prop := _ArrayWrapperProperty.new(object, member, sig_added, sig_removed, flags)
prop.set_content_type(array_type)
return prop
@@ -217,21 +215,21 @@ static func make_entity_title_property(entity : Object) -> Object:
if property:
return property
if entity.get("title") is String:
var sig_name := ""
var sig := Signal()
if entity.has_signal("title_changed"):
sig_name = "title_changed"
return make_property(entity, "title", sig_name)
sig = entity.title_changed
return make_property(entity, "title", sig)
if entity.has_method("get_title"):
var setter := ""
var sig_name := ""
var setter := Callable()
var sig := Signal()
var flags := 0
if entity.has_method("set_title"):
setter = "set_title"
setter = entity.set_title
else:
flags |= GDB_Property.FLAG_READONLY
if entity.has_signal("title_changed"):
sig_name = "title_changed"
return make_getset_property(entity, "get_title", setter, sig_name, flags)
sig = entity.title_changed
return make_getset_property(entity.get_title, setter, sig, flags)
return null

View File

@@ -1,4 +1,4 @@
extends Reference
extends RefCounted
class_name GDB_Property
@@ -26,7 +26,7 @@ func get_name() -> String:
func set_name(name : String) -> void:
if _name != name:
_name = name
emit_signal("name_changed")
name_changed.emit()
func get_icon() -> Texture:
return _icon
@@ -34,7 +34,7 @@ func get_icon() -> Texture:
func set_icon(icon : Texture) -> void:
if _icon != icon:
_icon = icon
emit_signal("icon_changed")
icon_changed.emit()
func get_value():
return _value
@@ -42,7 +42,7 @@ func get_value():
func set_value(value) -> void:
if value != _value:
_value = value
emit_signal("value_changed")
value_changed.emit()
func get_type() -> int:
return _type
@@ -50,7 +50,7 @@ func get_type() -> int:
func set_type(type : int) -> void:
if type != _type:
_type = type
emit_signal("type_changed")
type_changed.emit()
func get_content_type() -> int:
return _content_type
@@ -58,7 +58,7 @@ func get_content_type() -> int:
func set_content_type(type : int) -> void:
if type != _content_type:
_content_type = type
emit_signal("type_changed")
type_changed.emit()
func get_flags() -> int:
return _flags
@@ -66,7 +66,7 @@ func get_flags() -> int:
func set_flags(flags : int) -> void:
if flags != _flags:
_flags = flags
emit_signal("flags_changed")
flags_changed.emit()
################
# static stuff #
@@ -97,7 +97,7 @@ static func is_prop_value_valid(property : Object, value) -> bool:
return value is bool
TYPE_INT:
return value is int
TYPE_REAL:
TYPE_FLOAT:
return value is float
TYPE_STRING:
return value is String