void CFeatureHandler::TerrainChanged(int x1, int y1, int x2, int y2) { std::vector<int> quads = qf->GetQuadsRectangle(float3(x1 * SQUARE_SIZE, 0, y1 * SQUARE_SIZE), float3(x2 * SQUARE_SIZE, 0, y2 * SQUARE_SIZE)); for (std::vector<int>::iterator qi = quads.begin(); qi != quads.end(); ++qi) { std::list<CFeature*>::const_iterator fi; const list<CFeature*>& features = qf->GetQuad(*qi).features; for (fi = features.begin(); fi != features.end(); ++fi) { CFeature* feature = *fi; float3& fpos = feature->pos; float gh = ground->GetHeight2(fpos.x, fpos.z); float wh = gh; if(feature->def->floating) wh = ground->GetHeight(fpos.x, fpos.z); if (fpos.y > wh || fpos.y < gh) { SetFeatureUpdateable(feature); feature->finalHeight = wh; feature->CalculateTransform (); } } } }
void CFeatureHandler::TerrainChanged(int x1, int y1, int x2, int y2) { ASSERT_SYNCED_MODE; vector<int> quads=qf->GetQuadsRectangle(float3(x1*SQUARE_SIZE,0,y1*SQUARE_SIZE), float3(x2*SQUARE_SIZE,0,y2*SQUARE_SIZE)); // logOutput.Print("Checking feature pos %i",quads.size()); for(vector<int>::iterator qi=quads.begin();qi!=quads.end();++qi){ list<CFeature*>::iterator fi; list<CFeature*>& features = qf->baseQuads[*qi].features; for(fi = features.begin(); fi != features.end(); ++fi) { CFeature* feature = *fi; float3& fpos = feature->pos; if (fpos.y > ground->GetHeight(fpos.x, fpos.z)) { SetFeatureUpdateable(feature); if (feature->def->floating){ feature->finalHeight = ground->GetHeight(fpos.x, fpos.z); } else { feature->finalHeight = ground->GetHeight2(fpos.x, fpos.z); } feature->CalculateTransform (); } } } }