コード例 #1
0
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 ();
            }
        }
    }
}
コード例 #2
0
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 ();
			}
		}
	}
}