Example #1
0
/* Turret fires a projectile */
static void turret_shoot(struct SpecialObj *turret) {
    struct Projectile *bullet;
    double x = turret->x + cos(turret->angle)*6;
    double y = turret->y - sin(turret->angle)*6;
    Vector v = get_muzzle_vel(turret->angle);

    switch(turret->type) {
        case 2:
            bullet = make_missile(x,y,v);
            bullet->angle = 2*M_PI-turret->angle;
            turret->timer = 1.5*GAME_SPEED;
            playwave_3d (WAV_MISSILE, turret->x, turret->y);
            break;
        case 1:
            bullet = make_grenade(x,y,v);
            turret->timer = 0.9 * GAME_SPEED;
            playwave_3d (WAV_NORMALWEAP, turret->x, turret->y);
            break;
        default:
            bullet = make_bullet(x,y,v);
            turret->timer = 0.5 * GAME_SPEED;
            playwave_3d (WAV_NORMALWEAP, turret->x, turret->y);
            break;
    }
    bullet->owner = turret->owner;
    add_projectile(bullet);
}
Example #2
0
/* Shoot */
static int critter_shoot(struct Critter *critter, double angle) {
    double x = critter->physics.x + cos(angle)* critter->physics.radius;
    double y = critter->physics.y + sin(angle)* critter->physics.radius;
    if(is_solid(Round(x),Round(y))) return 0;
    Vector mvel = {cos(angle) * 10, sin(angle)*10};
    add_projectile(make_bullet(x,y,addVectors(critter->physics.vel,mvel)));
    return 1;
};
Example #3
0
void WeaponSystem::shoot_gun(GunPosition gun_pos, long time)
{
	Projectile *p = new Projectile;
	p->init();
	Object *front = guns[gun_pos]->get_object("NUC_energy.nogravity$front");
	Object *back = guns[gun_pos]->get_object("NUC_energy.nogravity$back");
    Vector3 front_pos = front->get_matrix().get_translation();
	Vector3 back_pos = back->get_matrix().get_translation();
	Vector3 vel = front_pos - back_pos;
	vel.normalize();
	p->set_velocity(vel);
	p->set_position(front_pos);
	p->set_speed(125.0);
	if (heat >= 70) {
		p->set_dmg(overheat_dmg);
	}
	else {
		p->set_dmg(dmg);
	}
	p->calc_matrix(time);
	NucEmitter *em = p->get_emitter();
	Vector4 start_color = em->get_start_color();
	Vector4 end_color = em->get_end_color();

	float vec_term = (std::max)(0.0, (std::min)(1.0 - heat_factor * 1.51, 1.0));

	Vector3 factor_vec = Vector3(1.0, vec_term, vec_term);
	em->set_start_color(Vector4(start_color.x, start_color.y * factor_vec.y, start_color.z * factor_vec.z, start_color.w));
	em->set_end_color(Vector4(end_color.x, end_color.y  * factor_vec.y, end_color.z  * factor_vec.z, end_color.w));
	em->calc_matrix(time);
	add_projectile(p);


	muzzle_emitters[gun_pos]->set_active(true);
	muzzle_emitters[gun_pos]->set_activation_time(time);

	int anim_idx = guns[gun_pos]->lookup_animation("shoot");
	if (anim_idx == -1)
		return;
	guns[gun_pos]->start_animation(anim_idx, time);
	guns[gun_pos]->set_anim_speed(anim_idx, fire_rate);

	heat += log(heat_rate) * 1.1;
	heat_rate++;

	if (heat >= 100){
		heat = 100;
		heat_rate = 0;
		overheated = true;
		game::engine::audio_manager->play_sample(game::utils::get_audio_sample_by_name("overheat"), 1.0, AUDIO_PLAYMODE_ONCE);
		game::engine::audio_manager->play_sample(game::utils::get_audio_sample_by_name("alarm"), 0.4, AUDIO_PLAYMODE_ONCE, Vector3(), &overheat_alarm_source_idx);
		game::engine::audio_manager->play_sample(game::utils::get_audio_sample_by_name("warning"), 1.5, AUDIO_PLAYMODE_LOOP, Vector3(), &warning_source_idx);
	}

	game::engine::audio_manager->play_sample(game::utils::get_audio_sample_by_name("laser_gun"), 1.0, AUDIO_PLAYMODE_ONCE, front_pos);
}
Example #4
0
File: pilot.c Project: callaa/luola
/* Shoot in the direction of attack_vector */
static void pilot_shoot(struct Pilot *pilot) {
    double xoff,yoff;
    xoff = pilot->attack_vector.x * (pilot->walker.physics.radius+1);
    yoff = pilot->attack_vector.y * (pilot->walker.physics.radius+1);
    add_projectile(make_bullet (
                pilot->walker.physics.x + xoff,
                pilot->walker.physics.y + yoff,
                addVectors(pilot->walker.physics.vel,
                    multVector(pilot->attack_vector,10.0))));
    pilot->weap_cooloff = 7;
}