Exemplo n.º 1
0
		std::shared_ptr<void> MainThreadStage()
		{
			if (!*ps_desc_.ps)
			{
				ParticleSystemPtr ps = MakeSharedPtr<ParticleSystem>(NUM_PARTICLES);

				ps->ParticleAlphaFromTex(ps_desc_.ps_data->particle_alpha_from_tex);
				ps->ParticleAlphaToTex(ps_desc_.ps_data->particle_alpha_to_tex);
				ps->ParticleColorFrom(ps_desc_.ps_data->particle_color_from);
				ps->ParticleColorTo(ps_desc_.ps_data->particle_color_to);

				ParticleEmitterPtr emitter = ps->MakeEmitter(ps_desc_.ps_data->emitter_type);
				ps->AddEmitter(emitter);

				emitter->Frequency(ps_desc_.ps_data->frequency);
				emitter->EmitAngle(ps_desc_.ps_data->angle);
				emitter->MinPosition(ps_desc_.ps_data->min_pos);
				emitter->MaxPosition(ps_desc_.ps_data->max_pos);
				emitter->MinVelocity(ps_desc_.ps_data->min_vel);
				emitter->MaxVelocity(ps_desc_.ps_data->max_vel);
				emitter->MinLife(ps_desc_.ps_data->min_life);
				emitter->MaxLife(ps_desc_.ps_data->max_life);

				ParticleUpdaterPtr updater = ps->MakeUpdater(ps_desc_.ps_data->updater_type);
				ps->AddUpdater(updater);
				checked_pointer_cast<PolylineParticleUpdater>(updater)->SizeOverLife(ps_desc_.ps_data->size_over_life_ctrl_pts);
				checked_pointer_cast<PolylineParticleUpdater>(updater)->MassOverLife(ps_desc_.ps_data->mass_over_life_ctrl_pts);
				checked_pointer_cast<PolylineParticleUpdater>(updater)->OpacityOverLife(ps_desc_.ps_data->opacity_over_life_ctrl_pts);

				*ps_desc_.ps = ps;
			}
			return std::static_pointer_cast<void>(*ps_desc_.ps);
		}