18 index.reserve(arr.size());
24 for(
size_t i=0;i<arr.size();++i) {
38 for(
size_t i=0;i<arr.size();++i)
49 implFind(index.data(),index.size(),0,p,R,ctx,func);
52void BaseSpaceIndex::buildIndex() {
54 index.resize(arr.size());
56 for(
size_t i=0; i<arr.size(); ++i) {
57 if(arr[i]->isDynamic()) {
58 dynamic.push_back(arr[i]);
65 buildIndex(index.data(),index.size(),0);
68void BaseSpaceIndex::buildIndex(
Vob** v,
size_t cnt, uint8_t depth) {
74 buildIndex(v,mid,uint8_t(depth+1u));
78 buildIndex(v+mid+1,cnt-mid-1,uint8_t(depth+1u));
82void BaseSpaceIndex::sort(
Vob** v,
size_t cnt, uint8_t component) {
83 bool (*predicate)(
const Vob* a,
const Vob* b) =
nullptr;
86 predicate = [](
const Vob* a,
const Vob* b){
return a->
position().x < b->position().x; };
89 predicate = [](
const Vob* a,
const Vob* b){
return a->
position().y < b->position().y; };
92 predicate = [](
const Vob* a,
const Vob* b){
return a->
position().z < b->position().z; };
95 std::sort(v,v+cnt,predicate);
98void BaseSpaceIndex::implFind(
Vob** v,
size_t cnt, uint8_t depth,
99 const Tempest::Vec3& p,
float R,
const void* ctx,
void (*func)(
const void*,
Vob*)) {
107 if((pos-p).quadLength()<=qR*qR) {
115 implFind(v,mid,uint8_t(depth+1u),p,R, ctx,func);
117 implFind(v+mid+1,cnt-mid-1,uint8_t(depth+1u),p,R, ctx,func);
121 implFind(v,mid,uint8_t(depth+1u),p,R, ctx,func);
123 implFind(v+mid+1,cnt-mid-1,uint8_t(depth+1u),p,R, ctx,func);
127 implFind(v,mid,uint8_t(depth+1u),p,R, ctx,func);
129 implFind(v+mid+1,cnt-mid-1,uint8_t(depth+1u),p,R, ctx,func);
void find(const Tempest::Vec3 &p, float R, const void *ctx, void(*func)(const void *, Vob *))
bool hasObject(const Vob *v) const
Tempest::Vec3 position() const