mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 13:41:03 +00:00 
			
		
		
		
	 d8f681029f
			
		
	
	
		d8f681029f
		
	
	
	
	
		
			
			List of changes: - Modified bvh class to handle 2D and 3D as a template - Changes in Rect2, Vector2, Vector3 interface to uniformize template calls - New option in Project Settings to enable BVH for 2D Physics (enabled by default like in 3D)
		
			
				
	
	
		
			42 lines
		
	
	
	
		
			932 B
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			42 lines
		
	
	
	
		
			932 B
		
	
	
	
		
			C++
		
	
	
	
	
	
| void _integrity_check_all() {
 | |
| #ifdef BVH_INTEGRITY_CHECKS
 | |
| 	for (int n = 0; n < NUM_TREES; n++) {
 | |
| 		uint32_t root = _root_node_id[n];
 | |
| 		if (root != BVHCommon::INVALID) {
 | |
| 			_integrity_check_down(root);
 | |
| 		}
 | |
| 	}
 | |
| #endif
 | |
| }
 | |
| 
 | |
| void _integrity_check_up(uint32_t p_node_id) {
 | |
| 	TNode &node = _nodes[p_node_id];
 | |
| 
 | |
| 	BVHABB_CLASS abb = node.aabb;
 | |
| 	node_update_aabb(node);
 | |
| 
 | |
| 	BVHABB_CLASS abb2 = node.aabb;
 | |
| 	abb2.expand(-_node_expansion);
 | |
| 
 | |
| 	CRASH_COND(!abb.is_other_within(abb2));
 | |
| }
 | |
| 
 | |
| void _integrity_check_down(uint32_t p_node_id) {
 | |
| 	const TNode &node = _nodes[p_node_id];
 | |
| 
 | |
| 	if (node.is_leaf()) {
 | |
| 		_integrity_check_up(p_node_id);
 | |
| 	} else {
 | |
| 		CRASH_COND(node.num_children != 2);
 | |
| 
 | |
| 		for (int n = 0; n < node.num_children; n++) {
 | |
| 			uint32_t child_id = node.children[n];
 | |
| 
 | |
| 			// check the children parent pointers are correct
 | |
| 			TNode &child = _nodes[child_id];
 | |
| 			CRASH_COND(child.parent_id != p_node_id);
 | |
| 
 | |
| 			_integrity_check_down(child_id);
 | |
| 		}
 | |
| 	}
 | |
| }
 |