Esempio n. 1
0
int LayerSolver::fitIntoSpaceMaxSurface(Box* box, Space space)
{
	comparisonCount++;
	if (box->getMinSurface() > space.getSurface())
    {
        return -1;
    }
    int surfaceLeft = -1;
    if (box->getSurface() <= space.getSurface() && box->getX() <= space.getWidth() && box->getZ() <= space.getLength())
    {
        surfaceLeft = space.getSurface() - box->getSurface();
    }
    return surfaceLeft;
}
void HelloParticlesApp::setup() {
	timer = new Timer();
	
	// init physics
	Space* space = new Space(getWindowWidth(), getWindowHeight(), 0);
	printf("init space %f %f %f\n", space->getWidth(), space->getHeight(), space->getDepth());
	
	physics = new Physics(space);
	
	Emitter* emitter = new Emitter(physics);
	physics->emitter = emitter;
	emitter->setPosition(space->getCenter());
	emitter->setInterval(0.01);
	emitter->setRate(1000);
	emitter->setMax(5000);
	
	emitter->addBehaviour(new RandomEmitter(space));
	physics->addBehaviour(new Gravity());
	
	// wrap
	BoxWrap* wrap = new BoxWrap(*space);
	wrap->preserveMomentum = false;
	physics->addBehaviour(wrap);
	
	// attractor 
	attractor = new AttractorPoint(space);
	attractor->setRange(0.25);
	attractor->setWeight(0);
	physics->addBehaviour(attractor);
	
	// init graphics
	gl::VboMesh::Layout layout;
	layout.setStaticIndices();
	layout.setDynamicPositions();
	layout.setStaticTexCoords2d();

	vboParticles = gl::VboMesh(emitter->getMax(), 0, layout, GL_POINTS);
}