Пример #1
0
void ParticleSystem::render() {

    // render the emitters
    for (int e = 0; e < MAX_EMITTERS; e++) {

        if (_emitter[e].active) {
            if (_emitter[e].showingBaseParticle) {
                glColor4f(_particle[0].color.r, _particle[0].color.g, _particle[0].color.b, _particle[0].color.a);
                glPushMatrix();
                glTranslatef(_emitter[e].position.x, _emitter[e].position.y, _emitter[e].position.z);
                glutSolidSphere(_particle[0].radius, _emitter[e].particleResolution, _emitter[e].particleResolution);
                glPopMatrix();
            }
        }

        if (_emitter[e].visible) {
            renderEmitter(e, DEFAULT_EMITTER_RENDER_LENGTH);
        }
    };  
    
        // render the particles
    for (int p = 0; p < MAX_PARTICLES; p++) {
        if (_particle[p].alive) {
            if (_emitter[_particle[p].emitterIndex].particleLifespan > 0.0) {
                renderParticle(p);
             }
        }
    }
}
Пример #2
0
static void renderBase(Particle *p, RenderConf *rc)
{
	const GLfloat *col;
	switch(p->type) {
		case BASE_A: col = A_col; break;
		case BASE_T: col = T_col; break;
		case BASE_C: col = C_col; break;
		case BASE_G: col = G_col; break;
		case BASE_X: col = X_col; break;
		case BASE_Y: col = Y_col; break;
		default: /* not a base */
		     assert(false);
		     col = gray;
	}
	glLightfv(GL_LIGHT0, GL_DIFFUSE, col);
	renderParticle(p, rc);
}
Пример #3
0
/* render Objects in list */
void bucketRenderCurrentList(void)
{
	std::sort(bucketArray.begin(), bucketArray.end());

	pie_MatBegin(true);
	for (std::vector<BUCKET_TAG>::const_iterator thisTag = bucketArray.begin(); thisTag != bucketArray.end(); ++thisTag)
	{
		switch(thisTag->objectType)
		{
			case RENDER_PARTICLE:
				renderParticle((ATPART*)thisTag->pObject);
				break;
			case RENDER_EFFECT:
				renderEffect((EFFECT*)thisTag->pObject);
				break;
			case RENDER_DROID:
				renderDroid((DROID*)thisTag->pObject);
				break;
			case RENDER_SHADOW:
				renderShadow((DROID*)thisTag->pObject, getImdFromIndex(MI_SHADOW));
				break;
			case RENDER_STRUCTURE:
				renderStructure((STRUCTURE*)thisTag->pObject);
				break;
			case RENDER_FEATURE:
				renderFeature((FEATURE*)thisTag->pObject);
				break;
			case RENDER_PROXMSG:
				renderProximityMsg((PROXIMITY_DISPLAY*)thisTag->pObject);
				break;
			case RENDER_PROJECTILE:
				renderProjectile((PROJECTILE*)thisTag->pObject);
				break;
			case RENDER_ANIMATION:
				renderAnimComponent((COMPONENT_OBJECT*)thisTag->pObject);
				break;
			case RENDER_DELIVPOINT:
				renderDeliveryPoint((FLAG_POSITION*)thisTag->pObject, false);
				break;
		}
	}
	pie_MatEnd();

	//reset the bucket array as we go
	bucketArray.resize(0);
}
Пример #4
0
void display()
{
	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
	glLoadIdentity();
	glPushMatrix();
	glTranslated(0., 0., -2);
	glRotatef(rx, 1.0, 0.0, 0.0);
	glRotatef(rz, 0.0, 1.0, 0.0);
	glTranslated(0., 0., 10);
	glTranslated(0., 0., -10);
	//rendering each particle
	for (int i = 0; i < partCount; i++)
	{
		renderParticle(particles[i], radius);
	}	
	//draw bounding sphere if drawSphere==1
	if (drawSphere == 1)
		glutWireSphere(sphereRadius, 15, 15);
	glPopMatrix();
	glutSwapBuffers();
}
Пример #5
0
/* render Objects in list */
void bucketRenderCurrentList(const glm::mat4 &viewMatrix)
{
    std::sort(bucketArray.begin(), bucketArray.end());

    for (std::vector<BUCKET_TAG>::const_iterator thisTag = bucketArray.begin(); thisTag != bucketArray.end(); ++thisTag)
    {
        switch (thisTag->objectType)
        {
        case RENDER_PARTICLE:
            renderParticle((ATPART *)thisTag->pObject, viewMatrix);
            break;
        case RENDER_EFFECT:
            renderEffect((EFFECT *)thisTag->pObject, viewMatrix);
            break;
        case RENDER_DROID:
            displayComponentObject((DROID *)thisTag->pObject, viewMatrix);
            break;
        case RENDER_STRUCTURE:
            renderStructure((STRUCTURE *)thisTag->pObject, viewMatrix);
            break;
        case RENDER_FEATURE:
            renderFeature((FEATURE *)thisTag->pObject, viewMatrix);
            break;
        case RENDER_PROXMSG:
            renderProximityMsg((PROXIMITY_DISPLAY *)thisTag->pObject, viewMatrix);
            break;
        case RENDER_PROJECTILE:
            renderProjectile((PROJECTILE *)thisTag->pObject, viewMatrix);
            break;
        case RENDER_DELIVPOINT:
            renderDeliveryPoint((FLAG_POSITION *)thisTag->pObject, false, viewMatrix);
            break;
        }
    }

    //reset the bucket array as we go
    bucketArray.resize(0);
}
Пример #6
0
void atmosDrawParticles()
{
	UDWORD	i;

	if (weather == WT_NONE)
	{
		return;
	}

	/* Traverse the list */
	for (i = 0; i < MAX_ATMOS_PARTICLES; i++)
	{
		/* Don't bother unless it's active */
		if (asAtmosParts[i].status == APS_ACTIVE)
		{
			/* Is it on the grid */
			if (clipXY(asAtmosParts[i].position.x, asAtmosParts[i].position.z))
			{
				renderParticle(&asAtmosParts[i]);
			}
		}
	}
}
Пример #7
0
void atmosDrawParticles(const glm::mat4 &viewMatrix)
{
	UDWORD	i;

	if (weather == WT_NONE)
	{
		return;
	}

	/* Traverse the list */
	for (i = 0; i < MAX_ATMOS_PARTICLES; i++)
	{
		/* Don't bother unless it's active */
		if (asAtmosParts[i].status == APS_ACTIVE)
		{
			/* Is it visible on the screen? */
			if (clipXYZ(asAtmosParts[i].position.x, asAtmosParts[i].position.z, asAtmosParts[i].position.y, viewMatrix))
			{
				renderParticle(&asAtmosParts[i], viewMatrix);
			}
		}
	}
}
Пример #8
0
/**
* \fn int gameLoop(sInterface *p_interface, sMap *p_map)
* \brief Fonction de rendu de l'enigme et d'interfacage avec l'utilisateur
*
* \param *p_interface pointeur vers une structure de type sInterface
* \param *p_map pointeur vers une structure de type sMap
* \return int représentant le déroulement de la fonction
*/
int gameLoop(sInterface *p_interface, sMap *p_map) {
	
	bool l_loop = TRUE, l_solve = FALSE;
	char txtCmpt[32] = "";

	SDL_Rect l_posText = {(WINDOW_WIDTH / CASE_COLUMN_AMOUNT)/2, (WINDOW_HEIGHT / CASE_LINE_AMOUNT)/2, 50, 50};
	SDL_Color l_color = {255, 0, 0};

	p_interface->player.mapPosition.x = p_map->starting.x;
	p_interface->player.mapPosition.y = p_map->starting.y;
	p_interface->player.realPosition = getRealPosition(p_interface->player.mapPosition);
	p_interface->player.realDestination = getRealPosition(p_interface->player.mapPosition);

	displayMap(p_interface, p_map);

	while (l_loop){
		if(SDL_PollEvent(&(p_interface->event))) {
			switch (p_interface->event.type) {
				case(SDL_KEYDOWN):
					switch (p_interface->event.key.keysym.sym) {
						case(SDLK_z):
							updateGoal(p_interface, p_map, DUP);
							break;

						case(SDLK_d):
							updateGoal(p_interface, p_map, DRIGHT);
							break;

						case(SDLK_s):
							updateGoal(p_interface, p_map, DDOWN);
							break;

						case(SDLK_q):
							updateGoal(p_interface, p_map, DLEFT);	
							break;

						case(SDLK_x):
							l_solve = !l_solve;
							break;

						case(SDLK_ESCAPE):
							l_loop = FALSE;
							break;
					}
					break;

				case(SDL_MOUSEBUTTONDOWN):
					break;
			}
			while (SDL_PollEvent(&(p_interface->event)));
		}

		SDL_RenderClear(p_interface->renderer);
		SDL_RenderCopy(p_interface->renderer, p_interface->backgroundSprite, NULL, NULL);

		if(l_solve)
			showSolution(p_interface, p_interface->solution);
		renderParticle(&(p_interface->effect.particle), p_interface, p_map, TRUE);

		updateVision(p_interface, p_map);

		sprintf_s(txtCmpt, 30, "%d", p_interface->compteur);
		displayText(p_interface->renderer, txtCmpt, l_color, l_posText);


		SDL_RenderPresent(p_interface->renderer);
		if (WinOrNot(p_interface, p_map)) {
			l_loop = FALSE;
		}
		SDL_Delay(SDL_ANIMATION_FRAMETIME);
	}


	return 0;
}
Пример #9
0
void loop(void *passedEmit)
{
    //runs long enough and something is getting gced and x and y get off
    //change dead routine to use local copy of emitter
    Particles * emit = (Particles *)passedEmit;
    //make a local copy of the emitter
    Particles lemit = *emit;
    double angle = 0.0;
    SDL_Rect *clip = NULL;
    //variable maybe getting optimized out
    //printf("wind %f x = %f y = %f\n", lemit.m_windVelocity, lemit.particles[1].m_x, lemit.particles[1].m_y);
    //Event handler
    SDL_Event ev;

    //Handle events on queue
    while ( SDL_PollEvent( &ev ) != 0 )
    {
        //User requests quit
        if ( ev.type == SDL_QUIT )
        {
            quit = TRUE;
        }
    }


    //emitter->m_speed = 0.02;
    lemit.m_windVelocity += (r01() - 0.5) * 0.0015;
    if (lemit.m_windVelocity > 0.015)
    {
        lemit.m_windVelocity = 0.015;
    }
    if (lemit.m_windVelocity < 0.0)
    {
        lemit.m_windVelocity = 0.0;
    }
    SDL_RenderClear(renderer);
    SDL_RenderCopyEx(renderer,
                     bgTexture,
                     clip,
                     &bg,
                     angle,
                     NULL,
                     SDL_FLIP_NONE);

    for (int i = 0; i < PART_COUNT; i++)
    {
        //Particle *cparticle = &emitter->particles[i];
        update(&lemit, &(lemit.particles[i]), i);
        renderParticle(&(lemit.particles[i]), i);

    }
    //lastmill = getMilliCount();
    SDL_RenderPresent(renderer);
    //Update the surface
    SDL_UpdateWindowSurface( gWindow );
    lemit.m_lastRender = getMilliCount();
    //save the local copy back into the main emitter
    *((Particles *)passedEmit) = lemit;

    //logEmitter( emitter, 0 );

}
Пример #10
0
static void renderParticles(int num, Particle *ps, RenderConf *rc)
{
	for (int i = 0; i < num; i++)
		renderParticle(&ps[i], rc);
}