// Copyright (C) 1997 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source is may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// DESCRIPTION:
// Security turret.  Senses when player is near and raises up, searches for player,
// and fires.  When player is dead or not near, it lowers down and goes back to
// sleep.
//

#include "securityturret.h"

CLASS_DECLARATION( Turret, TurretTop, "trap_securityturret" )

ResponseDef TurretTop::Responses[] =
{
	{ NULL, NULL }
};

TurretTop::TurretTop( void )
{
	setModel( "turtop.def" );
	setSize( "-16 -16 0", "16 16 26" );
	RandomAnimate( "down_idle", NULL );

	gunoffset      = "0 0 0";

	neworientation = angles.yaw();

	setMoveType( MOVETYPE_NONE );
	setSolidType( SOLID_BBOX );

	health         = G_GetFloatArg( "health", 100 );
	takedamage     = DAMAGE_YES;
	flags         |= FL_SPARKS;

	wakeupdistance = G_GetFloatArg( "wakeupdistance", 750 );
	firingdistance = G_GetFloatArg( "firingdistance", 800 );

	SetupBase();
}

void TurretTop::SetupBase( void )
{
	TurretBase *baseptr;

	baseptr = new TurretBase;
	baseptr->setOrigin( worldorigin );

	base = baseptr->entnum;
}

CLASS_DECLARATION( Entity, TurretBase, NULL )

ResponseDef TurretBase::Responses[] =
{
	{ &EV_Turret_GoUp,   ( Response )TurretBase::GoUp },
	{ &EV_Turret_GoDown, ( Response )TurretBase::GoDown },
	{ NULL, NULL }
};

TurretBase::TurretBase()
{
	setModel( "turbase.def" );
	setSize( "-16 -16 0", "16 16 1" );
	setMoveType( MOVETYPE_NONE );
	setSolidType( SOLID_BBOX );
	RandomAnimate( "down_idle", NULL );
	takedamage = DAMAGE_NO;
}

void TurretBase::GoUp( Event *ev )
{
	RandomAnimate( "raise", NULL );
}

void TurretBase::GoDown( Event *ev )
{
	RandomAnimate( "lower", NULL );
}
