Browse Source

Merge pull request #12350 from kubecz3k/ray-mask-bit

missing set/get_collision_mask_bit() for RayCast

[ci skip]
Rémi Verschelde 7 years ago
parent
commit
804cab31de
4 changed files with 42 additions and 0 deletions
  1. 18 0
      scene/2d/ray_cast_2d.cpp
  2. 3 0
      scene/2d/ray_cast_2d.h
  3. 18 0
      scene/3d/ray_cast.cpp
  4. 3 0
      scene/3d/ray_cast.h

+ 18 - 0
scene/2d/ray_cast_2d.cpp

@@ -61,6 +61,21 @@ void RayCast2D::set_type_mask(uint32_t p_mask) {
 	type_mask = p_mask;
 	type_mask = p_mask;
 }
 }
 
 
+void RayCast2D::set_collision_mask_bit(int p_bit, bool p_value) {
+
+	uint32_t mask = get_collision_mask();
+	if (p_value)
+		mask |= 1 << p_bit;
+	else
+		mask &= ~(1 << p_bit);
+	set_collision_mask(mask);
+}
+
+bool RayCast2D::get_collision_mask_bit(int p_bit) const {
+
+	return get_collision_mask() & (1 << p_bit);
+}
+
 uint32_t RayCast2D::get_type_mask() const {
 uint32_t RayCast2D::get_type_mask() const {
 
 
 	return type_mask;
 	return type_mask;
@@ -279,6 +294,9 @@ void RayCast2D::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &RayCast2D::set_collision_mask);
 	ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &RayCast2D::set_collision_mask);
 	ClassDB::bind_method(D_METHOD("get_collision_mask"), &RayCast2D::get_collision_mask);
 	ClassDB::bind_method(D_METHOD("get_collision_mask"), &RayCast2D::get_collision_mask);
 
 
+	ClassDB::bind_method(D_METHOD("set_collision_mask_bit", "bit", "value"), &RayCast2D::set_collision_mask_bit);
+	ClassDB::bind_method(D_METHOD("get_collision_mask_bit", "bit"), &RayCast2D::get_collision_mask_bit);
+
 	ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast2D::set_type_mask);
 	ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast2D::set_type_mask);
 	ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast2D::get_type_mask);
 	ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast2D::get_type_mask);
 
 

+ 3 - 0
scene/2d/ray_cast_2d.h

@@ -64,6 +64,9 @@ public:
 	void set_collision_mask(uint32_t p_mask);
 	void set_collision_mask(uint32_t p_mask);
 	uint32_t get_collision_mask() const;
 	uint32_t get_collision_mask() const;
 
 
+	void set_collision_mask_bit(int p_bit, bool p_value);
+	bool get_collision_mask_bit(int p_bit) const;
+
 	void set_type_mask(uint32_t p_mask);
 	void set_type_mask(uint32_t p_mask);
 	uint32_t get_type_mask() const;
 	uint32_t get_type_mask() const;
 
 

+ 18 - 0
scene/3d/ray_cast.cpp

@@ -63,6 +63,21 @@ void RayCast::set_type_mask(uint32_t p_mask) {
 	type_mask = p_mask;
 	type_mask = p_mask;
 }
 }
 
 
+void RayCast::set_collision_mask_bit(int p_bit, bool p_value) {
+
+	uint32_t mask = get_collision_mask();
+	if (p_value)
+		mask |= 1 << p_bit;
+	else
+		mask &= ~(1 << p_bit);
+	set_collision_mask(mask);
+}
+
+bool RayCast::get_collision_mask_bit(int p_bit) const {
+
+	return get_collision_mask() & (1 << p_bit);
+}
+
 uint32_t RayCast::get_type_mask() const {
 uint32_t RayCast::get_type_mask() const {
 
 
 	return type_mask;
 	return type_mask;
@@ -248,6 +263,9 @@ void RayCast::_bind_methods() {
 	ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &RayCast::set_collision_mask);
 	ClassDB::bind_method(D_METHOD("set_collision_mask", "mask"), &RayCast::set_collision_mask);
 	ClassDB::bind_method(D_METHOD("get_collision_mask"), &RayCast::get_collision_mask);
 	ClassDB::bind_method(D_METHOD("get_collision_mask"), &RayCast::get_collision_mask);
 
 
+	ClassDB::bind_method(D_METHOD("set_collision_mask_bit", "bit", "value"), &RayCast::set_collision_mask_bit);
+	ClassDB::bind_method(D_METHOD("get_collision_mask_bit", "bit"), &RayCast::get_collision_mask_bit);
+
 	ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast::set_type_mask);
 	ClassDB::bind_method(D_METHOD("set_type_mask", "mask"), &RayCast::set_type_mask);
 	ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast::get_type_mask);
 	ClassDB::bind_method(D_METHOD("get_type_mask"), &RayCast::get_type_mask);
 
 

+ 3 - 0
scene/3d/ray_cast.h

@@ -72,6 +72,9 @@ public:
 	void set_collision_mask(uint32_t p_mask);
 	void set_collision_mask(uint32_t p_mask);
 	uint32_t get_collision_mask() const;
 	uint32_t get_collision_mask() const;
 
 
+	void set_collision_mask_bit(int p_bit, bool p_value);
+	bool get_collision_mask_bit(int p_bit) const;
+
 	void set_type_mask(uint32_t p_mask);
 	void set_type_mask(uint32_t p_mask);
 	uint32_t get_type_mask() const;
 	uint32_t get_type_mask() const;