////////////////////////////////////////////////////////////////////////////////////////////////////
//This class serves purely for an aesthetic purpose and contains zero code
//That performs any attacks. Please look elsewhere.
////////////////////////////////////////////////////////////////////////////////////////////////////

//weapons/shotpm "Sounds/ALTPUMP.ogg"
//weapons/shotpl "Sounds/ALTPULL.ogg"

Class GHAGFloatingGun : Actor
{
	GHAGGardevoir parent;

	default
	{
		+NoGravity;
		+NoClip;
	}
	
	Actor targetOverride;
	
	states
	{
		Spawn:
			MODL A 1;
			Loop;
		PistolFire:
			GPST B 2 Bright;
		PistolIdle:
			GPST A 3;
			loop;
		ShotgunFire:
			GSHT B 8 Bright;
			GSHT B 0;
			GSHT D 0 A_StartSound("weapons/shotpl", CHAN_AUTO);
			GSHT DEF 2;
			GSHT F 0 A_StartSound("weapons/shotpm", CHAN_AUTO);
			GSHT ED 2;
		ShotgunIdle:
			GSHT A 1;
			loop;
		NailgunFire:
			GNAI A 1 A_StartSound("weapons/nailshot", CHAN_AUTO, CHANF_OVERLAP);
		NailgunIdle:
			GNAI A 1;
			Loop;
		PlasmaFire:
			GPLS BCDEFGA 1 Bright;
			Loop;
		PlasmaCooldown:
			GPLS A 2;
			GPLS B 4;
			GPLS C 6;
			GPLS D 8;
			GPLS E 10;
			GPLS F 12;
			GPLS G 14;
		PlasmaIdle:
			GPLS A 1;
			Loop;
		RocketIdle:
			GROC A 1;
			Loop;
		RocketSmash:
			GROC ABCDE 2;
			goto Hidden;
		ChainsawIdle:
			GCHA A 1;
			Loop;
		RailgunFire:
			GSRG A 6;
			GSRG B 3 A_StartSound("weapons/sshoto", CHAN_WEAPON, CHANF_OVERLAP);
			GSRG C 3;
			GSRG D 3;
			GSRG E 3 A_StartSound("weapons/sshotl", CHAN_WEAPON, CHANF_OVERLAP);
			GSRG F 7;
			GSRG G 3;
			GSRG H 3 A_StartSound("weapons/sshotc", CHAN_WEAPON, CHANF_OVERLAP);
		RailgunIdle:
			GSRG A 1;
			Loop;
		Hidden:
			TNT1 A 1;
			Loop;
	}
	
	Action void A_NullTarget()
	{
		invoker.targetOverride = null;
	}
	
	static double PitchTo( Actor a, Actor b, double hfact = 1. )
    {
        if ( !a || !b ) return 0;
        Vector3 thispos = a.player?a.Vec2OffsetZ(0,0,a.player.viewz):a.Vec3Offset(0,0,a.missileheight);
        Vector3 otherpos = b.Vec3Offset(0,0,b.height*hfact);
        Vector3 diff = level.Vec3Diff(thispos,otherpos);
        double dist = diff.length();
        if ( dist > 0 ) return -asin(diff.z/dist);
        return 0;
    }
}

Class GHAGGunTarget : Actor
{
	Default
	{
		Radius 1;
	}
	States
	{
		Spawn:
			TNT1 A 1;
			Stop;
	}
}