sin-sdk/turret.h
1998-12-20 00:00:00 +00:00

170 lines
4.9 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Quake 2 Engine/Sin/code/game/turret.h $
// $Revision:: 14 $
// $Author:: Markd $
// $Date:: 10/15/98 3:37p $
//
// 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/turret.h $
//
// 14 10/15/98 3:37p Markd
// Added forcefield to turrets with no health
//
// 13 10/09/98 4:55p Markd
// Added ExecuteThread
//
// 12 9/30/98 4:37p Aldie
// Fixed some weirdness with turrets not responding
//
// 11 9/22/98 4:57p Aldie
// Moved lagtime check right before firing
//
// 10 9/21/98 4:21p Markd
// Put in archive functions and rewrote all archive routines
//
// 9 9/20/98 9:11p Aldie
// Added lagtime and patience
//
// 8 9/20/98 5:13p Aldie
// Fixed some stuff with thread and target when turret sees player
//
// 7 9/19/98 6:15p Aldie
// Added thread to turrets
//
// 6 7/10/98 3:08p Aldie
// Activate and deactivate turrets
//
// 5 7/07/98 4:12p Aldie
// Updated to new class hierarchy
//
// 3 10/27/97 2:59p Jimdose
// Removed dependency on quakedef.h
//
// 2 9/26/97 5:23p Jimdose
// Added standard Ritual headers
//
// DESCRIPTION:
// Script controlled turret.
//
#ifndef __TURRET_H__
#define __TURRET_H__
#include "sentient.h"
#define TURRET_OUTOFRANGE 0
#define TURRET_WAKEUPRANGE 1
#define TURRET_FIRERANGE 2
class EXPORT_FROM_DLL Turret : public Sentient
{
protected:
int base;
int enemy;
float lastSightTime;
qboolean active;
qboolean attacking;
qboolean turning;
float neworientation;
float turntime;
float lagtime;
float firetime;
float patience;
int wakeupdistance;
int firingdistance;
qboolean activated;
str thread;
str sight_target;
public:
CLASS_PROTOTYPE( Turret );
Turret();
virtual qboolean CanSee( Entity *ent );
virtual int Range( float dist );
virtual float Distance( Entity *targ );
virtual void Pain( Event *ev );
virtual void Killed( Event *ev );
virtual qboolean FindTarget( void );
virtual float AdjustAngle( float maxadjust, float currangle, float targetangle );
virtual void Seek( Event *ev );
virtual void Fire( Event *ev );
virtual void Turn( Event *ev );
virtual void EndSeek( Event *ev );
virtual void CheckVicinity( Event *ev );
virtual void GoUp( Event *ev );
virtual void GoDown( Event *ev );
virtual void Down( Event *ev );
virtual void AttackStart( Event *ev );
virtual void AttackFinished( Event *ev );
virtual void Activate( Event *ev );
virtual void Deactivate( Event *ev );
virtual void Lagtime( Event *ev );
virtual void SetSightTime( Event *ev );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
extern Event EV_Turret_GoUp;
extern Event EV_Turret_GoDown;
extern Event EV_Turret_Turn;
extern Event EV_Turret_Seek;
extern Event EV_Turret_Attack;
inline EXPORT_FROM_DLL void Turret::Archive
(
Archiver &arc
)
{
Sentient::Archive( arc );
arc.WriteInteger( base );
arc.WriteInteger( enemy );
arc.WriteFloat( lastSightTime );
arc.WriteBoolean( active );
arc.WriteBoolean( attacking );
arc.WriteBoolean( turning );
arc.WriteFloat( neworientation );
arc.WriteFloat( turntime );
arc.WriteFloat( lagtime );
arc.WriteFloat( firetime );
arc.WriteFloat( patience );
arc.WriteInteger( wakeupdistance );
arc.WriteInteger( firingdistance );
arc.WriteBoolean( activated );
arc.WriteString( thread );
arc.WriteString( sight_target );
}
inline EXPORT_FROM_DLL void Turret::Unarchive
(
Archiver &arc
)
{
Sentient::Unarchive( arc );
arc.ReadInteger( &base );
arc.ReadInteger( &enemy );
arc.ReadFloat( &lastSightTime );
arc.ReadBoolean( &active );
arc.ReadBoolean( &attacking );
arc.ReadBoolean( &turning );
arc.ReadFloat( &neworientation );
arc.ReadFloat( &turntime );
arc.ReadFloat( &lagtime );
arc.ReadFloat( &firetime );
arc.ReadFloat( &patience );
arc.ReadInteger( &wakeupdistance );
arc.ReadInteger( &firingdistance );
arc.ReadBoolean( &activated );
arc.ReadString( &thread );
arc.ReadString( &sight_target );
}
#endif /* turret.h */