void particle_simple_think(particle_t* self) { float tmp = self->color[0]; self->color[0] = self->color[1]; self->color[1] = self->color[2]; self->color[2] = tmp; self->box = box_rotate(self->box, 2.5); }
static void trail_action(particle_t *p){ p->color[3] *= 0.93; p->color[2] *= 0.85; p->color[1] *= 0.5; p->altcolor[3] *= 0.9; p->altcolor[2] *= 0.7; p->altcolor[1] *= 0.5; p->param[0] = p->param[0] -1; p->box = box_rotate(p->box,random()%11 - 5); if(p->param[0] < 0 ){ p->life = -1; } return; }
box_t box_direct(box_t b, vec_t direction){ return box_rotate(b, vec_angle(direction) - vec_angle(b.axis0) ); }
static void ship_action(particle_t*p){ #define MISSILE 0 #define SHIP_SPEED 350 #define SHIP_ACCEL 2000 #define SHIP_VSPEED 0 #define SHIP_HSPEED 1 particle_t * missile = NULL; particle_t * trail = NULL; vec_t spread = vec_new(random()%100 - 50,random()%100 -50); int boost = 0; nprop_t vspeed = particle_get_nprop(p,SHIP_VSPEED); nprop_t hspeed = particle_get_nprop(p,SHIP_HSPEED); if(!key_pressed('y')){ if(key_pressed('a')){ if(nprop_get(hspeed) > 100 ){ hspeed = nprop_set_hard(hspeed,0); boost = 1; } hspeed = nprop_set(hspeed,-SHIP_SPEED); }else if(key_pressed('d')){ if(nprop_get(hspeed) < -100 ){ hspeed = nprop_set_hard(hspeed,0); boost = 1; } hspeed = nprop_set(hspeed,SHIP_SPEED); }else{ hspeed = nprop_set(hspeed,0); } if(key_pressed('w')){ if(nprop_get(vspeed) < -100 ){ vspeed = nprop_set_hard(vspeed,0); boost = 1; } vspeed = nprop_set(vspeed,SHIP_SPEED); }else if(key_pressed('s')){ if(nprop_get(vspeed) > 100 ){ vspeed = nprop_set_hard(vspeed,0); boost = 1; } vspeed = nprop_set(vspeed,-SHIP_SPEED); }else{ vspeed = nprop_set(vspeed,0); } } if (key_pressed('y') && (nprop_get(vspeed) < 700 && nprop_get(vspeed) > - 700 && nprop_get(hspeed) < 700 && nprop_get(hspeed) > -700) ){ vspeed = nprop_set(vspeed,1.5*nprop_get(vspeed)); hspeed = nprop_set(hspeed,1.5*nprop_get(hspeed)); } particle_set_nprop(p,SHIP_VSPEED,vspeed); particle_set_nprop(p,SHIP_HSPEED,hspeed); p->v = vec_new(nprop_get(hspeed),nprop_get(vspeed)); if(boost){ trail = factory_create_v(p->box.pos,P_SHIP_BOOST); trail->box = box_direct(trail->box,p->box.axis0); } if(vec_len(p->v) > 10.0){ p->box = box_direct(p->box,p->v); p->vector[MISSILE] = p->v; trail = factory_create_v(p->box.pos,P_SHIP_TRAIL); trail->box = box_scale(p->box,0.5); if(key_pressed('y')){ particle_set_color(trail,1,1,1,0.3); particle_set_alt_color(trail,1,1,1,0.3); } } if(key_pressed('g') && !key_pressed('y') && get_time() > p->time[MISSILE]){ p->time[MISSILE] = get_time() + 100; missile = factory_create_v(p->box.pos,P_MISSILE); missile->v = vec_add(p->vector[MISSILE],p->v); missile->v = vec_add(missile->v,spread); missile->box = box_direct(missile->box,missile->v); missile->die_time = get_time() + random()%1000+1000; particle_set_solid(p,0); } if(!key_pressed('g')){ particle_set_solid(p,1); } if(key_pressed('r') && get_time() > p->time[MISSILE]){ trail = factory_create_v(p->box.pos,P_WALL); trail = factory_create_v(vec_add(p->box.pos,vec_new(10,-10)),P_BG); p->time[MISSILE] = get_time() + 500; } if(key_pressed('f')){ p->box = box_rotate(p->box,1); } }