//-----------------------------------------------------------------------------
//
//  $Logfile:: /Quake 2 Engine/Sin/code/game/securityturret.cpp               $
// $Revision:: 25                                                             $
//   $Author:: Aldie                                                          $
//     $Date:: 9/19/98 6:13p                                                  $
//
// 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.
//
// $Log:: /Quake 2 Engine/Sin/code/game/securityturret.cpp                    $
// 
// 25    9/19/98 6:13p Aldie
// Made wakeupdistance and firingdistance spawn args
// 
// 24    9/15/98 6:45p Aldie
// Fixed some stuff for Richard
// 
// 23    9/11/98 3:52p Aldie
// Put in wakeupdistance and firingdistance
// 
// 22    7/07/98 4:11p Aldie
// Updated to new class hierarchy
// 
// 21    6/24/98 12:39p Markd
// Added default tesselation percentage
// 
// 20    6/18/98 2:00p Markd
// rewrote tesselation code
// 
// 19    5/24/98 1:04a Jimdose
// Added sound events for ai
// 
// 18    5/13/98 4:57p Jimdose
// Startup event is now posted 0 in the future
// 
// 17    5/11/98 2:19p Markd
// Fixed randomsound stuff
// 
// 16    5/09/98 7:11p Markd
// Removed sound parameter from tesselate command
// 
// 15    5/03/98 4:37p Jimdose
// Changed Vector class
// 
// 14    5/01/98 11:09a Markd
// Added sound to tesselation event
// 
// 13    4/18/98 5:45p Markd
// Removed SINED calls, because they are now in DEF file format
// 
// 12    4/14/98 6:56p Markd
// Added thickness to tesselation
// 
// 11    4/10/98 4:53p Jimdose
// no longer binding base to top
// 
// 10    4/10/98 1:23a Markd
// Added FL_SPARKS as its default
// 
// 9     4/10/98 12:35a Jimdose
// made turret "New and Improved!"
// 
// 8     4/09/98 7:37p Markd
// 
// 7     4/08/98 4:22p Jimdose
// Getting ready to conver to Q2
// 
// 5     12/14/97 4:23p Jimdose
// Changed from monster_turret to trap_securityturret
// 
// 4     12/13/97 6:00p Jimdose
// Changed the base from a Sentient to an Entity
// 
// 3     12/13/97 3:47p Jimdose
// Finished implementing behaviour
// 
// 2     12/09/97 3:00p Jimdose
// Created file
//
// 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 );
	}
