mirror of
				https://github.com/godotengine/godot.git
				synced 2025-10-31 05:31:01 +00:00 
			
		
		
		
	 3877ed73d0
			
		
	
	
		3877ed73d0
		
	
	
	
	
		
			
			Port lawnjelly's dynamic BVH implementation from 3.x to be used in both 2D and 3D broadphases. Removed alternative broadphase implementations which are not meant to be used anymore since they are much slower. Includes changes in Rect2, Vector2, Vector3 that help with the template implementation of the dynamic BVH by uniformizing the interface between 2D and 3D math. Co-authored-by: lawnjelly <lawnjelly@gmail.com>
		
			
				
	
	
		
			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);
 | |
| 		}
 | |
| 	}
 | |
| }
 |