2
0
Эх сурвалжийг харах

Must now register with set_transform_notify() to get NOTIFICATION_TRANSFORM_CHANGED

Juan Linietsky 8 жил өмнө
parent
commit
a2903fc51d

+ 1 - 0
modules/gridmap/grid_map.cpp

@@ -1831,6 +1831,7 @@ GridMap::GridMap() {
 	use_baked_light=false;
 
 	navigation = NULL;
+	set_notify_transform(true);
 }
 
 

+ 1 - 0
scene/2d/camera_2d.cpp

@@ -713,5 +713,6 @@ Camera2D::Camera2D() {
 	v_drag_enabled=true;
 	h_ofs=0;
 	v_ofs=0;
+	set_notify_transform(true);
 
 }

+ 18 - 2
scene/2d/canvas_item.cpp

@@ -769,7 +769,7 @@ void CanvasItem::_notify_transform(CanvasItem *p_node) {
 
 	p_node->global_invalid=true;
 
-	if (!p_node->xform_change.in_list()) {
+	if (notify_transform && !p_node->xform_change.in_list()) {
 		if (!p_node->block_transform_notify) {
 			if (p_node->is_inside_tree())
 				get_tree()->xform_change_list.add(&p_node->xform_change);
@@ -997,6 +997,12 @@ void CanvasItem::_bind_methods() {
 	ClassDB::bind_method(_MD("set_use_parent_material","enable"),&CanvasItem::set_use_parent_material);
 	ClassDB::bind_method(_MD("get_use_parent_material"),&CanvasItem::get_use_parent_material);
 
+	ClassDB::bind_method(_MD("set_notify_local_transform","enable"),&CanvasItem::set_notify_local_transform);
+	ClassDB::bind_method(_MD("is_local_transform_notification_enabled"),&CanvasItem::is_local_transform_notification_enabled);
+
+	ClassDB::bind_method(_MD("set_notify_transform","enable"),&CanvasItem::set_notify_transform);
+	ClassDB::bind_method(_MD("is_transform_notification_enabled"),&CanvasItem::is_transform_notification_enabled);
+
 	ClassDB::bind_method(_MD("make_canvas_pos_local","screen_point"),
 			&CanvasItem::make_canvas_pos_local);
 	ClassDB::bind_method(_MD("make_input_local","event"),&CanvasItem::make_input_local);
@@ -1081,6 +1087,15 @@ bool CanvasItem::is_local_transform_notification_enabled() const {
 	return notify_local_transform;
 }
 
+
+void CanvasItem::set_notify_transform(bool p_enable) {
+	notify_transform=p_enable;
+}
+
+bool CanvasItem::is_transform_notification_enabled() const {
+	return notify_transform;
+}
+
 int CanvasItem::get_canvas_layer() const {
 
 	if (canvas_layer)
@@ -1118,12 +1133,13 @@ CanvasItem::CanvasItem() : xform_change(this) {
 	first_draw=false;
 	drawing=false;
 	behind=false;
-	block_transform_notify=false;
+	block_transform_notify=false;	
 //	viewport=NULL;
 	canvas_layer=NULL;
 	use_parent_material=false;
 	global_invalid=true;
 	notify_local_transform=false;
+	notify_transform=false;
 	light_mask=1;
 
 	C=NULL;

+ 4 - 0
scene/2d/canvas_item.h

@@ -117,6 +117,7 @@ private:
 	bool behind;
 	bool use_parent_material;
 	bool notify_local_transform;
+	bool notify_transform;
 
 	Ref<CanvasItemMaterial> material;
 
@@ -256,6 +257,9 @@ public:
 	void set_notify_local_transform(bool p_enable);
 	bool is_local_transform_notification_enabled() const;
 
+	void set_notify_transform(bool p_enable);
+	bool is_transform_notification_enabled() const;
+
 	int get_canvas_layer() const;
 
 	CanvasItem();

+ 1 - 0
scene/2d/collision_object_2d.cpp

@@ -363,6 +363,7 @@ CollisionObject2D::CollisionObject2D() {
 
 
 	//owner=
+	set_notify_transform(true);
 
 
 }

+ 1 - 0
scene/2d/light_2d.cpp

@@ -482,6 +482,7 @@ Light2D::Light2D() {
 	shadow_color=Color(0,0,0,0);
 	shadow_filter=SHADOW_FILTER_NONE;
 
+	set_notify_transform(true);
 }
 
 Light2D::~Light2D() {

+ 1 - 0
scene/2d/light_occluder_2d.cpp

@@ -242,6 +242,7 @@ LightOccluder2D::LightOccluder2D() {
 
 	occluder=VS::get_singleton()->canvas_light_occluder_create();
 	mask=1;
+	set_notify_transform(true);
 }
 
 LightOccluder2D::~LightOccluder2D() {

+ 1 - 0
scene/2d/navigation_polygon.cpp

@@ -497,5 +497,6 @@ NavigationPolygonInstance::NavigationPolygonInstance() {
 	navigation=NULL;
 	nav_id=-1;
 	enabled=true;
+	set_notify_transform(true);
 
 }

+ 1 - 1
scene/2d/remote_transform_2d.cpp

@@ -127,7 +127,7 @@ void RemoteTransform2D::_bind_methods() {
 RemoteTransform2D::RemoteTransform2D() {
 
 	cache=0;
-
+	set_notify_transform(true);
 }
 
 

+ 1 - 1
scene/2d/sound_player_2d.cpp

@@ -116,7 +116,7 @@ SoundPlayer2D::SoundPlayer2D() {
 	params[PARAM_ATTENUATION_MAX_DISTANCE]=2048;
 	params[PARAM_ATTENUATION_DISTANCE_EXP]=1.0; //linear (and not really good)
 
-
+	set_notify_transform(true);
 }
 
 SoundPlayer2D::~SoundPlayer2D() {

+ 1 - 0
scene/2d/tile_map.cpp

@@ -1321,6 +1321,7 @@ TileMap::TileMap() {
 
 	fp_adjust=0.00001;
 	tile_origin=TILE_ORIGIN_TOP_LEFT;
+	set_notify_transform(true);
 }
 
 TileMap::~TileMap() {

+ 1 - 0
scene/2d/visibility_notifier_2d.cpp

@@ -145,6 +145,7 @@ void VisibilityNotifier2D::_bind_methods(){
 VisibilityNotifier2D::VisibilityNotifier2D() {
 
 	rect=Rect2(-10,-10,20,20);
+	set_notify_transform(true);
 }
 
 

+ 1 - 0
scene/3d/camera.cpp

@@ -678,6 +678,7 @@ Camera::Camera() {
 	h_offset=0;
 	VisualServer::get_singleton()->camera_set_cull_mask(camera,layers);
 	//active=false;
+	set_notify_transform(true);
 }
 
 

+ 1 - 1
scene/3d/collision_object.cpp

@@ -360,7 +360,7 @@ CollisionObject::CollisionObject() {
 
 	capture_input_on_drag=false;
 	ray_pickable=true;
-
+	set_notify_transform(true);
 	//owner=
 
 	//set_transform_notify(true);

+ 1 - 0
scene/3d/listener.cpp

@@ -156,6 +156,7 @@ Listener::Listener() {
 
 	current=false;
 	force_change=false;
+	set_notify_transform(true);
 	//active=false;
 }
 

+ 1 - 0
scene/3d/navigation_mesh.cpp

@@ -410,5 +410,6 @@ NavigationMeshInstance::NavigationMeshInstance() {
 	navigation=NULL;
 	nav_id=-1;
 	enabled=true;
+	set_notify_transform(true);
 
 }

+ 1 - 0
scene/3d/physics_joint.cpp

@@ -195,6 +195,7 @@ Joint::Joint() {
 
 	exclude_from_collision=true;
 	solver_priority=1;
+	set_notify_transform(true);
 }
 
 

+ 1 - 0
scene/3d/proximity_group.cpp

@@ -190,6 +190,7 @@ ProximityGroup::ProximityGroup() {
 	dispatch_mode = MODE_PROXY;
 
 	grid_radius = Vector3(1, 1, 1);
+	set_notify_transform(true);
 
 };
 

+ 1 - 0
scene/3d/remote_transform.cpp

@@ -127,6 +127,7 @@ void RemoteTransform::_bind_methods() {
 RemoteTransform::RemoteTransform() {
 
 	cache=0;
+	set_notify_transform(true);
 
 }
 

+ 1 - 0
scene/3d/room_instance.cpp

@@ -216,6 +216,7 @@ Room::Room() {
 
 	level=0;
 
+
 }
 
 

+ 15 - 2
scene/3d/spatial.cpp

@@ -74,7 +74,7 @@ SpatialGizmo::SpatialGizmo() {
 
 void Spatial::_notify_dirty() {
 
-	if (!data.ignore_notification && !xform_change.in_list()) {
+	if (data.notify_transform && !data.ignore_notification && !xform_change.in_list()) {
 
 		get_tree()->xform_change_list.add(&xform_change);
 	}
@@ -108,7 +108,7 @@ void Spatial::_propagate_transform_changed(Spatial *p_origin) {
 	}
 
 
-	if (!data.ignore_notification && !xform_change.in_list()) {
+	if (data.notify_transform && !data.ignore_notification && !xform_change.in_list()) {
 
 		get_tree()->xform_change_list.add(&xform_change);
 
@@ -736,6 +736,14 @@ void Spatial::look_at_from_pos(const Vector3& p_pos,const Vector3& p_target, con
 
 }
 
+void Spatial::set_notify_transform(bool p_enable) {
+	data.notify_transform=p_enable;
+}
+
+bool Spatial::is_transform_notification_enabled() const {
+	return data.notify_transform;
+}
+
 void Spatial::set_notify_local_transform(bool p_enable) {
 	data.notify_local_transform=p_enable;
 }
@@ -791,6 +799,9 @@ void Spatial::_bind_methods() {
 	ClassDB::bind_method(_MD("set_notify_local_transform","enable"), &Spatial::set_notify_local_transform);
 	ClassDB::bind_method(_MD("is_local_transform_notification_enabled"), &Spatial::is_local_transform_notification_enabled);
 
+	ClassDB::bind_method(_MD("set_notify_transform","enable"), &Spatial::set_notify_transform);
+	ClassDB::bind_method(_MD("is_transform_notification_enabled"), &Spatial::is_transform_notification_enabled);
+
 	void rotate(const Vector3& p_normal,float p_radians);
 	void rotate_x(float p_radians);
 	void rotate_y(float p_radians);
@@ -848,11 +859,13 @@ Spatial::Spatial() : xform_change(this)
 	data.viewport=NULL;
 	data.inside_world=false;
 	data.visible=true;
+
 #ifdef TOOLS_ENABLED
 	data.gizmo_disabled=false;
 	data.gizmo_dirty=false;
 #endif
 	data.notify_local_transform=false;
+	data.notify_transform=false;
 	data.parent=NULL;
 	data.C=NULL;
 

+ 4 - 0
scene/3d/spatial.h

@@ -92,6 +92,7 @@ class Spatial : public Node {
 
 		bool ignore_notification;
 		bool notify_local_transform;
+		bool notify_transform;
 
 		bool visible;
 
@@ -184,6 +185,9 @@ public:
 	void look_at(const Vector3& p_target, const Vector3& p_up_normal);
 	void look_at_from_pos(const Vector3& p_pos,const Vector3& p_target, const Vector3& p_up_normal);
 
+	void set_notify_transform(bool p_enable);
+	bool is_transform_notification_enabled() const;
+
 	void set_notify_local_transform(bool p_enable);
 	bool is_local_transform_notification_enabled() const;
 

+ 1 - 0
scene/3d/spatial_player.cpp

@@ -125,6 +125,7 @@ SpatialPlayer::SpatialPlayer() {
 	params[PARAM_ATTENUATION_DISTANCE_EXP]=1.0; //linear (and not really good)
 	params[PARAM_EMISSION_CONE_DEGREES]=180.0; //cone disabled
 	params[PARAM_EMISSION_CONE_ATTENUATION_DB]=-6.0; //minus 6 db attenuation
+	set_notify_transform(true);
 
 }
 

+ 1 - 0
scene/3d/visibility_notifier.cpp

@@ -125,6 +125,7 @@ void VisibilityNotifier::_bind_methods(){
 VisibilityNotifier::VisibilityNotifier() {
 
 	aabb=Rect3(Vector3(-1,-1,-1),Vector3(2,2,2));
+	set_notify_transform(true);
 
 }
 

+ 1 - 0
scene/3d/visual_instance.cpp

@@ -162,6 +162,7 @@ VisualInstance::VisualInstance()
 	instance = VisualServer::get_singleton()->instance_create();
 	VisualServer::get_singleton()->instance_attach_object_instance_ID( instance, get_instance_ID() );
 	layers=1;
+	set_notify_transform(true);
 }
 
 

+ 3 - 0
scene/main/node.cpp

@@ -1384,6 +1384,8 @@ String Node::_generate_serial_child_name(Node *p_child) {
 	if (name=="") {
 
 		name = p_child->get_class();
+		/* this is probably too slow to use here, should check alternatives
+		 *
 		// Adjust casing according to project setting. The current type name is expected to be in PascalCase.
 		switch (Globals::get_singleton()->get("node/name_casing").operator int()) {
 			case NAME_CASING_PASCAL_CASE:
@@ -1395,6 +1397,7 @@ String Node::_generate_serial_child_name(Node *p_child) {
 				name = name.camelcase_to_underscore(true);
 				break;
 		}
+		*/
 	}
 
 	// Extract trailing number