00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #include <framework.h>
00020
00021 #include <eventHandler.h>
00022 #include <chancfg.h>
00023 #include <string>
00024 #include <renderModeTransition.h>
00025 #include <colorTransition.h>
00026 #include <cullFaceTransition.h>
00027 #include <depthTestTransition.h>
00028 #include <depthWriteTransition.h>
00029 #include <textureTransition.h>
00030 #include <lightTransition.h>
00031 #include <materialTransition.h>
00032 #include <transformTransition.h>
00033 #include <get_rel_pos.h>
00034 #include <boundingSphere.h>
00035 #include <geomSphere.h>
00036 #include <geomNode.h>
00037 #include <notify.h>
00038 #include <directionalLight.h>
00039 #include <renderRelation.h>
00040 #include <camera.h>
00041 #include <frustum.h>
00042 #include <orthoProjection.h>
00043 #include <perspectiveProjection.h>
00044 #include <textNode.h>
00045 #include <physicsManager.h>
00046 #include <particleSystem.h>
00047 #include <emitters.h>
00048 #include <forces.h>
00049 #include <sparkleParticleRenderer.h>
00050 #include <pointParticleRenderer.h>
00051 #include <spriteParticleRenderer.h>
00052 #include <pointParticleFactory.h>
00053 #include <particleSystemManager.h>
00054 #include <clockObject.h>
00055 #include <nodePath.h>
00056 #include <memoryUsage.h>
00057 #include <texture.h>
00058 #include <texturePool.h>
00059
00060
00061
00062 PhysicsManager physics_manager;
00063 ParticleSystemManager ps_manager;
00064
00065 static void
00066 event_csn_update(CPT_Event) {
00067 float dt = ClockObject::get_global_clock()->get_dt();
00068
00069 physics_manager.do_physics(dt);
00070 ps_manager.do_particles(dt);
00071 }
00072
00073 PT(ParticleSystem) explosion_system = new ParticleSystem(128);
00074 PT(PointParticleFactory) explosion_factory = new PointParticleFactory;
00075 PT(SpriteParticleRenderer) explosion_renderer = new SpriteParticleRenderer;
00076 PT(SphereSurfaceEmitter) explosion_emitter = new SphereSurfaceEmitter;
00077
00078 PT(ParticleSystem) fireworks_system = new ParticleSystem(32);
00079 PT(PointParticleFactory) fireworks_factory = new PointParticleFactory;
00080 PT(PointParticleRenderer) fireworks_renderer = new PointParticleRenderer;
00081 PT(LineEmitter) fireworks_emitter = new LineEmitter;
00082 PT(Texture) fireworks_texture;
00083
00084 static void
00085 event_add_particles(CPT_Event) {
00086
00087 fireworks_factory->set_lifespan_base(1.5f);
00088 fireworks_factory->set_lifespan_delta(0.5f);
00089 fireworks_emitter->set_endpoints(LPoint3f(-2.0f, 0.0f, 0.0f),
00090 LPoint3f(2.0f, 0.0f, 0.0f));
00091 fireworks_emitter->set_launch_vec(LVector3f(0.0f, 0.0f, 1.0f));
00092 fireworks_renderer->set_point_size(4.0f);
00093 fireworks_renderer->set_color1(Colorf(1, 1, 1, 1));
00094 fireworks_renderer->set_color2(Colorf(1, 0, 0, 1));
00095 fireworks_renderer->set_blend_type(PP_BLEND_LIFE);
00096 fireworks_renderer->set_blend_method(PP_BLEND_LINEAR);
00097 fireworks_renderer->set_alpha_decay(PR_ALPHA_OUT);
00098 fireworks_system->set_birth_rate(0.25f);
00099 fireworks_system->set_litter_size(1);
00100 fireworks_system->set_birth_node(render);
00101 fireworks_system->set_emitter(fireworks_emitter);
00102 fireworks_system->set_renderer(fireworks_renderer);
00103 fireworks_system->set_factory(fireworks_factory);
00104 fireworks_system->set_render_parent(render);
00105 fireworks_system->set_spawn_on_death_flag(true);
00106 fireworks_system->set_spawn_render_node(render);
00107
00108
00109 explosion_factory->set_lifespan_base(1.0f);
00110 explosion_factory->set_lifespan_delta(0.0f);
00111 explosion_emitter->set_radius(0.1f);
00112 explosion_emitter->set_amplitude(2.0f);
00113 explosion_emitter->set_offset_force(LVector3f(2.0f, 0.0f, 2.0f));
00114 explosion_renderer->set_texture(fireworks_texture);
00115 explosion_renderer->set_alpha_decay(PR_ALPHA_OUT);
00116 explosion_renderer->set_color(Colorf(1, 0, 0, 1));
00117 explosion_system->set_birth_rate(5.0f);
00118 explosion_system->set_litter_size(64);
00119 explosion_system->set_template_system_flag(true);
00120 explosion_system->set_system_grows_older_flag(true);
00121 explosion_system->set_system_lifespan(1.0f);
00122 explosion_system->set_emitter(explosion_emitter);
00123 explosion_system->set_renderer(explosion_renderer);
00124 explosion_system->set_factory(explosion_factory);
00125
00126 fireworks_system->add_spawn_template(explosion_system);
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141 ps_manager.attach_particlesystem(fireworks_system);
00142 physics_manager.attach_physical(fireworks_system);
00143
00144 nout << "Added particles." << endl;
00145 event_handler.add_hook("NewFrame", event_csn_update);
00146 }
00147
00148 void demo_keys(EventHandler&) {
00149 event_handler.add_hook("p", event_add_particles);
00150 }
00151
00152 int main(int argc, char *argv[]) {
00153 fireworks_texture = TexturePool::load_texture("firework.rgba");
00154
00155 define_keys = &demo_keys;
00156 return framework_main(argc, argv);
00157 }
00158
00159
00160
00161
00162
00163