/*
 * Copyright (c) 2000 Mark B. Allan. All rights reserved.
 *
 * "Chromium B.S.U." is free software; you can redistribute 
 * it and/or use it and/or modify it under the terms of the 
 * "Artistic License" 
 */
#include "EnemyAircraft_Straight.h"

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#include "Config.h"

#include "define.h"
#include "Ammo.h"
#include "Global.h"
#include "EnemyAmmo.h"
#include "HeroAircraft.h"
#include "ScreenItemAdd.h"

//=================================================================
EnemyAircraft_Straight::EnemyAircraft_Straight(EnemyType et, float p[3], float randFact)
	: EnemyAircraft(et, p, randFact)
{
	init(p, randFact);
}

//----------------------------------------------------------
EnemyAircraft_Straight::~EnemyAircraft_Straight()
{
}

//----------------------------------------------------------
// this is only here to get rid of the IRIX compiler warning...
void EnemyAircraft_Straight::init() 
{
	EnemyAircraft::init();
}

//----------------------------------------------------------
void EnemyAircraft_Straight::init(float *p, float randFact)
{
	EnemyAircraft::init(p, randFact);
	float frand = FRAND*randFact;

	damage = baseDamage = -110.0*game->gameSkill;
	size[0] = 0.75;
	size[1] = 1.02;
	collisionMove = 0.5;
	vel[1] = -0.046-frand*0.04;
}

//-- NOTE: Many of the firing rates are not adjusted by game->speedAdj
//-- so they will not be totally correct. Should be close enough for jazz, though.
//----------------------------------------------------------
void EnemyAircraft_Straight::update()
{
	//-- update age
	age++;
	shootInterval--;
	
	pos[0] += secondaryMove[0]*game->speedAdj;
	pos[1] += secondaryMove[1]*game->speedAdj;
	float s = (1.0-game->speedAdj)+(game->speedAdj*0.7);
	secondaryMove[0] *= s;
	secondaryMove[1] *= s;
	move();
	
	float	p[3] = { pos[0], pos[1], pos[2] };

	if(shootInterval < 10)
		preFire = (10-shootInterval)/10.0;
	else
		preFire = 0.0;
	if(!shootInterval)
	{
		calcShootInterval();
		p[1] -= 0.9;
		game->enemyAmmo->addAmmo(0, p, shootVec);
	}
}

//----------------------------------------------------------
void EnemyAircraft_Straight::calcShootInterval()
{
	shootInterval = (int)((30.0 + FRAND*90.0)/game->speedAdj);
}	
	
//----------------------------------------------------------
void EnemyAircraft_Straight::move()
{
	Config *config = Config::instance();
	float	*hpos;
	if(target)
		hpos = target->getPos();
	else
		hpos = pos;

	pos[1] += (game->speedAdj*(vel[1] * game->gameSkill));
//	fprintf(stderr, "EnemyAircraft_Straight %p ... pos[1] = %g, vel[1] = %g\n", this, pos[1], vel[1]);

	if(pos[0] < -config->screenBoundX())
		pos[0] = -config->screenBoundX();
	if(pos[0] >  config->screenBoundX())
		pos[0] =  config->screenBoundX();
}
