//-----------------------------------------------------------------------------
//
//  $Logfile:: /game/securityturret.cpp                                       $
// $Revision:: 2                                                              $
//   $Author:: Burgermac                                                      $
//     $Date:: 12/27/00 7:38 PM                                               $
//
// 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( Vector( -16, -16, 0 ), Vector( 16, 16, 26 ) );
	RandomAnimate( "down_idle", NULL );

	gunoffset      = vec_zero;

	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( Vector( -16, -16, 0 ), Vector( 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 );
}
