use of net.drewke.tdme.utils.Key in project tdme by andreasdr.
the class PartitionQuadTree method createPartition.
/**
* Creates a partition
* @param parent
* @param x
* @param y
* @param z
* @param partition size
* @return partition tree node
*/
public PartitionTreeNode createPartition(PartitionTreeNode parent, int x, int y, int z, float partitionSize) {
PartitionTreeNode node;
node = new PartitionTreeNode();
node.partitionSize = partitionSize;
node.x = x;
node.y = y;
node.z = z;
node.parent = parent;
node.bv = new BoundingBox(new Vector3(x * partitionSize, y * partitionSize, z * partitionSize), new Vector3(x * partitionSize + partitionSize, y * partitionSize + partitionSize, z * partitionSize + partitionSize));
// System.out.println(this.hashCode() + ":" + "FrumstumPartition::createPartition()::" + node.bv);
node.subNodes = null;
node.subNodesByCoordinate = null;
node.partitionObjects = null;
// register in parent sub nodes
if (parent.subNodes == null) {
parent.subNodes = new ArrayList<PartitionTreeNode>();
}
parent.subNodes.add(node);
// register in parent sub nodes by coordinate
if (parent.subNodesByCoordinate == null) {
parent.subNodesByCoordinate = new HashMap<Key, PartitionTreeNode>();
}
Key key = new Key();
key.reset();
key.append(node.x);
key.append(",");
key.append(node.y);
key.append(",");
key.append(node.z);
parent.subNodesByCoordinate.put(key, node);
// create sub nodes
if (partitionSize > PARTITION_SIZE_MIN) {
for (int _y = 0; _y < 2; _y++) for (int _x = 0; _x < 2; _x++) for (int _z = 0; _z < 2; _z++) {
createPartition(node, (int) ((x * partitionSize) / (partitionSize / 2f)) + _x, (int) ((y * partitionSize) / (partitionSize / 2f)) + _y, (int) ((z * partitionSize) / (partitionSize / 2f)) + _z, partitionSize / 2f);
}
} else {
node.partitionObjects = new ArrayList<Entity>();
}
//
return node;
}
Aggregations