/**********************************************************************
This file is part of Crack dot Com's free source code release of
Golgotha.
for
information about compiling & licensing issues visit this URL
If that doesn't help, contact Jonathan Clark at golgotha_source@usa.net (Subject should have "GOLG" in it) ***********************************************************************/ #include "g1_object.hh" #include "objs/model_draw.hh" #include "lisp/lisp.hh" #include "tex_id.hh" #include "objs/particle_emitter.hh" #include "object_definer.hh" static li_symbol_ref part_emit("particle_emitter"); static r1_texture_ref smoke_texture("smoke_particle"); class g1_carcass_class : public g1_object_class { public: int time_left; g1_carcass_class(g1_object_type id, g1_loader_class *fp) : g1_object_class(id, fp) { if (fp) // remove from game on load x=-1; } void draw(g1_draw_context_class *context) { g1_model_draw(this, draw_params, context); flags|=TARGETABLE | GROUND | BLOCKING | CAN_DRIVE_ON; } void setup(g1_object_class *from, g1_quad_object_class *model, int ticks, int ticks_to_smoke, g1_quad_object_class *lod_model) { if (ticks_to_smoke>0) { g1_particle_emitter_class *smoke= (g1_particle_emitter_class *)g1_create_object(g1_get_object_type(part_emit.get())); g1_particle_emitter_params params; params.defaults(); params.texture=smoke_texture.get(); params.start_size=0.05; params.grow_speed=0.005; params.particle_lifetime=50; params.num_create_attempts_per_tick=1; params.creation_probability=0.5; params.speed=i4_3d_vector(0.001, 0.001, 0.05); params.emitter_lifetime = ticks_to_smoke; if (smoke) smoke->setup(from->x, from->y, from->h, params); } time_left = ticks; theta=from->theta; x=from->x; y=from->y; h=from->h; grab_old(); draw_params.setup(model, 0, lod_model); } void think() { if (time_left>=0) { time_left--; if (time_left<=0) { unoccupy_location(); request_remove(); } } } }; g1_object_definerg1_carcass_def("carcass", g1_object_definition_class::EDITOR_SELECTABLE); g1_object_class *g1_create_carcass(g1_object_class *from, g1_quad_object_class *model, int ticks, int ticks_to_smoke, g1_quad_object_class *lod_model) { g1_carcass_class *c=(g1_carcass_class *)g1_create_object(g1_carcass_def.type); c->setup(from, model, ticks, ticks_to_smoke, lod_model); c->occupy_location(); return c; }