sin-2015/behavior.h

1776 lines
40 KiB
C
Raw Normal View History

1999-04-22 00:00:00 +00:00
//-----------------------------------------------------------------------------
//
// $Logfile:: /Quake 2 Engine/Sin/code/game/behavior.h $
// $Revision:: 55 $
// $Author:: Jimdose $
// $Date:: 10/27/98 8:02p $
//
// Copyright (C) 1998 by Ritual Entertainment, Inc.
// All rights reserved.
//
// This source may not be distributed and/or modified without
// expressly written permission by Ritual Entertainment, Inc.
//
// $Log:: /Quake 2 Engine/Sin/code/game/behavior.h $
//
// 55 10/27/98 8:02p Jimdose
// added PlayAnimSeekEnemy
//
// 54 10/27/98 12:42a Jimdose
// added animprefix to AimAndShoot
//
// 53 10/25/98 11:52p Jimdose
// added EXPORT_TEMPLATE
//
// 52 10/25/98 4:59a Jimdose
// Added lastSearchNode and lastSearchPos to chase
// archived howclose in GetCloseToEnemy
//
// 51 10/22/98 11:44p Jimdose
// Added GetCloseToEnemy
//
// 50 10/20/98 11:30p Markd
// Added aim_time to aimandshoot
//
// 49 10/20/98 2:38a Markd
// Added goal variable to Jump
//
// 48 10/17/98 4:41p Markd
// Added curioustime to Investigate behavior
//
// 47 10/16/98 7:20p Markd
// Added maxshots and numshots to AimAndMelee
//
// 46 10/14/98 9:02p Markd
// Made the Jump behavior more robust, and added landing
//
// 45 10/14/98 5:22p Markd
// Moved jump definition
//
// 44 10/13/98 7:38p Markd
// Created behaviors for Wander, FLy, FlyCloseAttack and WanderCloseAttack
//
// 43 10/10/98 6:08p Markd
// Added FleeAndRemove, FindFlee, fixed max_ainode bug
//
// 42 10/10/98 1:25a Jimdose
// Removed unneccesary definition stack template
//
// 41 10/05/98 3:04p Markd
// Added enemy_health variable to AimAndShoot
//
// 40 10/04/98 3:01p Markd
// fixed swimming behavior
//
// 39 10/03/98 7:27p Markd
// working on swimming character and redid some weapon aiming stuff
//
// 38 10/01/98 8:01p Markd
// Added AimAndMelee
//
// 37 9/29/98 5:58p Markd
// put in archive and unarchive
//
// 36 9/22/98 1:55a Jimdose
// Completed ShowInfo for all behaviors
// Added StrafeTo
//
// 35 9/18/98 10:56p Jimdose
// Separated steering behaviors into their own file
//
// 34 9/14/98 5:27p Jimdose
// Added SetPathRate to Chase so that actors can choose how often they search
// for a new path
//
// 33 8/31/98 7:48p Jimdose
// Simplified FollowPath
//
// 32 8/26/98 11:13p Jimdose
// Added StrafeAttack
//
// 31 8/19/98 8:47p Jimdose
// Added Jump behavior
//
// 30 8/14/98 6:25p Jimdose
// Got rid of decelleration for steering
// Added GoalEnt to GotoPathNode
//
// 29 8/08/98 8:24p Markd
// added pickupandthrow
//
// 28 8/07/98 6:02p Jimdose
// Rewrote AimAndShoot
//
// 27 8/06/98 6:57p Jimdose
// Removed FireFromCover (now done in script)
// Added SetArgs to AimAndShoot
//
// 26 8/03/98 7:58p Aldie
// Added a first attempt at wander behavior
//
// 25 7/26/98 11:44a Jimdose
// Added FindClosestSightNode
//
// 24 7/22/98 10:51p Jimdose
// Added repel behavior
//
// 23 7/08/98 9:00p Jimdose
// Made OpenDoor script callable
//
// 22 7/06/98 1:06p Jimdose
// working on ai
//
// 21 6/30/98 6:03p Jimdose
// Chase and GotoPathNode now can use vectors for goals
// Investigate no longer needs currentEnemy to be set
//
// 20 6/24/98 4:26p Jimdose
// Fixed bugs in TurnTo
//
// 19 6/17/98 1:18a Jimdose
// Removed TargetEnemies. Moved it back into actor
//
// 18 6/15/98 10:47p Jimdose
// Added Hide and CoverFire
//
// 17 6/13/98 8:21p Jimdose
// Added FindCover
//
// 16 6/11/98 12:44a Jimdose
// behaviors now get info from the script at startup
//
// 15 6/10/98 10:25p Jimdose
// added priority based state system
//
// 14 6/09/98 4:24p Jimdose
// worked on ai
//
// 13 6/04/98 10:48p Jimdose
// Fixed a bunch of things that got broken just in time for E3. Paths and
// scripting actually work now.
//
// 12 6/03/98 5:44p Jimdose
// Fixed spelling of behavior. :)
//
// 11 5/27/98 7:12a Jimdose
// ai ai ai
//
// 10 5/27/98 6:39a Jimdose
// working on ai
//
// 9 5/27/98 5:11a Jimdose
// working on ai
//
// 8 5/25/98 5:31p Jimdose
// Pathnodes are no longer a subclass of Entity. This was done to save on
// edicts
//
// 7 5/25/98 1:06a Jimdose
// Added chatter
//
// 6 5/24/98 1:02a Jimdose
// Added Investigate
//
// 5 5/23/98 6:29p Jimdose
// Added Aim
//
// 4 5/22/98 9:39p Jimdose
// Worked on ai
//
// 3 5/20/98 6:38p Jimdose
// working on ai
//
// 2 5/18/98 8:15p Jimdose
// Created file
//
// DESCRIPTION:
// Standard class for creating AI behaviors
//
#ifndef __BEHAVIOR_H__
#define __BEHAVIOR_H__
#include "g_local.h"
#include "entity.h"
#include "path.h"
#include "steering.h"
extern Event EV_Behavior_Args;
extern Event EV_Behavior_AnimDone;
class Actor;
class EXPORT_FROM_DLL Behavior : public Listener
{
protected:
PathNodePtr movegoal;
public:
CLASS_PROTOTYPE( Behavior );
Behavior();
virtual void ShowInfo( Actor &self );
virtual void Begin( Actor &self );
virtual qboolean Evaluate( Actor &self );
virtual void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Behavior::Archive
(
Archiver &arc
)
{
Listener::Archive( arc );
arc.WriteSafePointer( movegoal );
}
inline EXPORT_FROM_DLL void Behavior::Unarchive
(
Archiver &arc
)
{
Listener::Unarchive( arc );
arc.ReadSafePointer( &movegoal );
}
#ifdef EXPORT_TEMPLATE
template class EXPORT_FROM_DLL SafePtr<Behavior>;
#endif
typedef SafePtr<Behavior> BehaviorPtr;
class EXPORT_FROM_DLL Idle : public Behavior
{
private:
float nexttwitch;
str anim;
public:
CLASS_PROTOTYPE( Idle );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Idle::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteFloat( nexttwitch );
arc.WriteString( anim );
}
inline EXPORT_FROM_DLL void Idle::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadFloat( &nexttwitch );
arc.ReadString( &anim );
}
class EXPORT_FROM_DLL Aim : public Behavior
{
private:
Seek seek;
EntityPtr target;
public:
CLASS_PROTOTYPE( Aim );
void SetTarget( Entity *ent );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Aim::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteSafePointer( target );
}
inline EXPORT_FROM_DLL void Aim::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadSafePointer( &target );
}
class EXPORT_FROM_DLL FireOnSight : public Behavior
{
private:
Chase chase;
Aim aim;
int mode;
str anim;
public:
CLASS_PROTOTYPE( FireOnSight );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void FireOnSight::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &chase );
arc.WriteObject( &aim );
arc.WriteInteger( mode );
arc.WriteString( anim );
}
inline EXPORT_FROM_DLL void FireOnSight::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &chase );
arc.ReadObject( &aim );
arc.ReadInteger( &mode );
arc.ReadString( &anim );
}
class EXPORT_FROM_DLL TurnTo : public Behavior
{
private:
Seek seek;
EntityPtr ent;
Vector dir;
float yaw;
int mode;
int tolerance; //### facing tolerance
public:
CLASS_PROTOTYPE( TurnTo );
TurnTo();
void SetDirection( float yaw );
void SetTarget( Entity *ent );
void SetTolerance( float tol ); //###
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void TurnTo::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteSafePointer( ent );
arc.WriteVector( dir );
arc.WriteFloat( yaw );
arc.WriteInteger( mode );
arc.WriteInteger( tolerance ); //###
}
inline EXPORT_FROM_DLL void TurnTo::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadSafePointer( &ent );
arc.ReadVector( &dir );
arc.ReadFloat( &yaw );
arc.ReadInteger( &mode );
arc.ReadInteger( &tolerance ); //###
}
class EXPORT_FROM_DLL Jump : public Behavior
{
friend class Jump2; //### for Splitter bug's jump
private:
float endtime;
float speed;
str anim;
int state;
qboolean animdone;
Vector goal;
public:
CLASS_PROTOTYPE( Jump );
Jump();
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
void AnimDone( Event *ev );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Jump::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteFloat( endtime );
arc.WriteFloat( speed );
arc.WriteString( anim );
arc.WriteInteger( state );
arc.WriteBoolean( animdone );
arc.WriteVector( goal );
}
inline EXPORT_FROM_DLL void Jump::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadFloat( &endtime );
arc.ReadFloat( &speed );
arc.ReadString( &anim );
arc.ReadInteger( &state );
arc.ReadBoolean( &animdone );
arc.ReadVector( &goal );
}
class EXPORT_FROM_DLL GotoPathNode : public Behavior
{
private:
TurnTo turnto;
Chase chase;
int state;
qboolean usevec;
float time;
str anim;
EntityPtr goalent;
Vector goal;
public:
CLASS_PROTOTYPE( GotoPathNode );
GotoPathNode();
void SetArgs( Event *ev );
void SetGoal( PathNode *node );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void GotoPathNode::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &turnto );
arc.WriteObject( &chase );
arc.WriteInteger( state );
arc.WriteBoolean( usevec );
arc.WriteFloat( time );
arc.WriteString( anim );
arc.WriteSafePointer( goalent );
arc.WriteVector( goal );
}
inline EXPORT_FROM_DLL void GotoPathNode::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &turnto );
arc.ReadObject( &chase );
arc.ReadInteger( &state );
arc.ReadBoolean( &usevec );
arc.ReadFloat( &time );
arc.ReadString( &anim );
arc.ReadSafePointer( &goalent );
arc.ReadVector( &goal );
}
class EXPORT_FROM_DLL Investigate : public Behavior
{
private:
Chase chase;
str anim;
Vector goal;
float curioustime;
qboolean Done( Actor &self );
public:
CLASS_PROTOTYPE( Investigate );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Investigate::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &chase );
arc.WriteString( anim );
arc.WriteVector( goal );
arc.WriteFloat( curioustime );
}
inline EXPORT_FROM_DLL void Investigate::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &chase );
arc.ReadString( &anim );
arc.ReadVector( &goal );
arc.ReadFloat( &curioustime );
}
class EXPORT_FROM_DLL Flee : public Behavior
{
private:
FollowPath follow;
PathPtr path;
ObstacleAvoidance avoid;
float avoidtime;
str anim;
public:
CLASS_PROTOTYPE( Flee );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Flee::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &follow );
arc.WriteSafePointer( path );
arc.WriteObject( &avoid );
arc.WriteFloat( avoidtime );
arc.WriteString( anim );
}
inline EXPORT_FROM_DLL void Flee::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &follow );
arc.ReadSafePointer( &path );
arc.ReadObject( &avoid );
arc.ReadFloat( &avoidtime );
arc.ReadString( &anim );
}
class EXPORT_FROM_DLL OpenDoor : public Behavior
{
private:
float time;
float endtime;
qboolean usedir;
Vector dir;
public:
CLASS_PROTOTYPE( OpenDoor );
OpenDoor();
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void OpenDoor::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteFloat( time );
arc.WriteFloat( endtime );
arc.WriteBoolean( usedir );
arc.WriteVector( dir );
}
inline EXPORT_FROM_DLL void OpenDoor::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadFloat( &time );
arc.ReadFloat( &endtime );
arc.ReadBoolean( &usedir );
arc.ReadVector( &dir );
}
class EXPORT_FROM_DLL PlayAnim : public Behavior
{
private:
str anim;
public:
CLASS_PROTOTYPE( PlayAnim );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void PlayAnim::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteString( anim );
}
inline EXPORT_FROM_DLL void PlayAnim::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadString( &anim );
}
class EXPORT_FROM_DLL FindCover : public Behavior
{
private:
str anim;
Chase chase;
int state;
float nextsearch;
public:
CLASS_PROTOTYPE( FindCover );
void SetArgs( Event *ev );
PathNode *FindCoverNode( Actor &self );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void FindCover::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteString( anim );
arc.WriteObject( &chase );
arc.WriteInteger( state );
arc.WriteFloat( nextsearch );
}
inline EXPORT_FROM_DLL void FindCover::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadString( &anim );
arc.ReadObject( &chase );
arc.ReadInteger( &state );
arc.ReadFloat( &nextsearch );
}
class EXPORT_FROM_DLL FindFlee : public Behavior
{
private:
str anim;
Chase chase;
int state;
float nextsearch;
public:
CLASS_PROTOTYPE( FindFlee );
void SetArgs( Event *ev );
PathNode *FindFleeNode( Actor &self );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void FindFlee::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteString( anim );
arc.WriteObject( &chase );
arc.WriteInteger( state );
arc.WriteFloat( nextsearch );
}
inline EXPORT_FROM_DLL void FindFlee::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadString( &anim );
arc.ReadObject( &chase );
arc.ReadInteger( &state );
arc.ReadFloat( &nextsearch );
}
class EXPORT_FROM_DLL FindEnemy : public Behavior
{
private:
str anim;
Chase chase;
int state;
float nextsearch;
PathNodePtr lastSearchNode;
Vector lastSearchPos;
public:
CLASS_PROTOTYPE( FindEnemy );
PathNode *FindClosestSightNode( Actor &self );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void FindEnemy::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteString( anim );
arc.WriteObject( &chase );
arc.WriteInteger( state );
arc.WriteFloat( nextsearch );
arc.WriteSafePointer( lastSearchNode );
arc.WriteVector( lastSearchPos );
}
inline EXPORT_FROM_DLL void FindEnemy::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadString( &anim );
arc.ReadObject( &chase );
arc.ReadInteger( &state );
arc.ReadFloat( &nextsearch );
arc.ReadSafePointer( &lastSearchNode );
arc.ReadVector( &lastSearchPos );
}
class EXPORT_FROM_DLL Hide : public Behavior
{
private:
FindCover hide;
str anim;
int state;
float checktime;
public:
CLASS_PROTOTYPE( Hide );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Hide::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &hide );
arc.WriteString( anim );
arc.WriteInteger( state );
arc.WriteFloat( checktime );
}
inline EXPORT_FROM_DLL void Hide::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &hide );
arc.ReadString( &anim );
arc.ReadInteger( &state );
arc.ReadFloat( &checktime );
}
class EXPORT_FROM_DLL FleeAndRemove : public Behavior
{
private:
FindFlee flee;
str anim;
int state;
float checktime;
public:
CLASS_PROTOTYPE( FleeAndRemove );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void FleeAndRemove::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &flee );
arc.WriteString( anim );
arc.WriteInteger( state );
arc.WriteFloat( checktime );
}
inline EXPORT_FROM_DLL void FleeAndRemove::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &flee );
arc.ReadString( &anim );
arc.ReadInteger( &state );
arc.ReadFloat( &checktime );
}
class EXPORT_FROM_DLL AimAndShoot : public Behavior
{
private:
Aim aim;
int mode;
int maxshots;
int numshots;
qboolean animdone;
float enemy_health;
float aim_time;
str animprefix;
str readyfireanim;
str aimanim;
str fireanim;
public:
CLASS_PROTOTYPE( AimAndShoot );
AimAndShoot();
void SetMaxShots( int num );
void SetArgs( Event *ev );
void AnimDone( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void AimAndShoot::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &aim );
arc.WriteInteger( mode );
arc.WriteInteger( maxshots );
arc.WriteInteger( numshots );
arc.WriteBoolean( animdone );
arc.WriteFloat( enemy_health );
arc.WriteFloat( aim_time );
arc.WriteString( animprefix );
arc.WriteString( readyfireanim );
arc.WriteString( aimanim );
arc.WriteString( fireanim );
}
inline EXPORT_FROM_DLL void AimAndShoot::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &aim );
arc.ReadInteger( &mode );
arc.ReadInteger( &maxshots );
arc.ReadInteger( &numshots );
arc.ReadBoolean( &animdone );
arc.ReadFloat( &enemy_health );
arc.ReadFloat( &aim_time );
arc.ReadString( &animprefix );
arc.ReadString( &readyfireanim );
arc.ReadString( &aimanim );
arc.ReadString( &fireanim );
}
class EXPORT_FROM_DLL AimAndMelee : public Behavior
{
private:
Aim aim;
int mode;
int maxshots;
int numshots;
qboolean animdone;
public:
CLASS_PROTOTYPE( AimAndMelee );
AimAndMelee();
void SetArgs( Event *ev );
void AnimDone( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void AimAndMelee::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &aim );
arc.WriteInteger( mode );
arc.WriteInteger( maxshots );
arc.WriteInteger( numshots );
arc.WriteBoolean( animdone );
}
inline EXPORT_FROM_DLL void AimAndMelee::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &aim );
arc.ReadInteger( &mode );
arc.ReadInteger( &maxshots );
arc.ReadInteger( &numshots );
arc.ReadBoolean( &animdone );
}
class EXPORT_FROM_DLL Melee : public Behavior
{
private:
int mode;
qboolean animdone;
public:
CLASS_PROTOTYPE( Melee );
Melee();
void SetArgs( Event *ev );
void AnimDone( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Melee::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteInteger( mode );
arc.WriteBoolean( animdone );
}
inline EXPORT_FROM_DLL void Melee::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadInteger( &mode );
arc.ReadBoolean( &animdone );
}
class EXPORT_FROM_DLL Repel : public Behavior
{
private:
str anim;
float dist;
float len;
float speed;
Vector goal;
Vector start;
Vector dir;
public:
CLASS_PROTOTYPE( Repel );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Repel::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteString( anim );
arc.WriteFloat( dist );
arc.WriteFloat( len );
arc.WriteFloat( speed );
arc.WriteVector( goal );
arc.WriteVector( start );
arc.WriteVector( dir );
}
inline EXPORT_FROM_DLL void Repel::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadString( &anim );
arc.ReadFloat( &dist );
arc.ReadFloat( &len );
arc.ReadFloat( &speed );
arc.ReadVector( &goal );
arc.ReadVector( &start );
arc.ReadVector( &dir );
}
class EXPORT_FROM_DLL PickupAndThrow : public Behavior
{
private:
Aim aim;
int mode;
qboolean animdone;
EntityPtr pickup_target;
public:
CLASS_PROTOTYPE( PickupAndThrow );
PickupAndThrow();
void SetArgs( Event *ev );
void AnimDone( Event *ev );
void Pickup( Event *ev );
void Throw( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void PickupAndThrow::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &aim );
arc.WriteInteger( mode );
arc.WriteBoolean( animdone );
arc.WriteSafePointer( pickup_target );
}
inline EXPORT_FROM_DLL void PickupAndThrow::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &aim );
arc.ReadInteger( &mode );
arc.ReadBoolean( &animdone );
arc.ReadSafePointer( &pickup_target );
}
class EXPORT_FROM_DLL StrafeAttack : public Behavior
{
private:
int state;
TurnTo turn;
public:
CLASS_PROTOTYPE( StrafeAttack );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void StrafeAttack::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteInteger( state );
arc.WriteObject( &turn );
}
inline EXPORT_FROM_DLL void StrafeAttack::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadInteger( &state );
arc.ReadObject( &turn );
}
class EXPORT_FROM_DLL StrafeTo : public Behavior
{
private:
Vector goal;
Seek seek;
int fail;
public:
CLASS_PROTOTYPE( StrafeTo );
void ShowInfo( Actor &self );
void SetArgs( Event *ev );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void StrafeTo::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteVector( goal );
arc.WriteObject( &seek );
arc.WriteInteger( fail );
}
inline EXPORT_FROM_DLL void StrafeTo::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadVector( &goal );
arc.ReadObject( &seek );
arc.ReadInteger( &fail );
}
class EXPORT_FROM_DLL Swim : public Behavior
{
private:
Seek seek;
ObstacleAvoidance2 avoid;
str anim;
float avoidtime;
Vector avoidvec;
public:
CLASS_PROTOTYPE( Swim );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Swim::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteObject( &avoid );
arc.WriteString( anim );
arc.WriteFloat( avoidtime );
arc.WriteVector( avoidvec );
}
inline EXPORT_FROM_DLL void Swim::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadObject( &avoid );
arc.ReadString( &anim );
arc.ReadFloat( &avoidtime );
arc.ReadVector( &avoidvec );
}
class EXPORT_FROM_DLL SwimCloseAttack : public Behavior
{
private:
Seek seek;
ObstacleAvoidance2 avoid;
qboolean avoiding;
str anim;
float avoidtime;
Vector avoidvec;
public:
CLASS_PROTOTYPE( SwimCloseAttack );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void SwimCloseAttack::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteObject( &avoid );
arc.WriteBoolean( avoiding );
arc.WriteString( anim );
arc.WriteFloat( avoidtime );
arc.WriteVector( avoidvec );
}
inline EXPORT_FROM_DLL void SwimCloseAttack::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadObject( &avoid );
arc.ReadBoolean( &avoiding );
arc.ReadString( &anim );
arc.ReadFloat( &avoidtime );
arc.ReadVector( &avoidvec );
}
class EXPORT_FROM_DLL Fly : public Behavior
{
private:
Seek seek;
ObstacleAvoidance2 avoid;
str anim;
float avoidtime;
Vector avoidvec;
public:
CLASS_PROTOTYPE( Fly );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Fly::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteObject( &avoid );
arc.WriteString( anim );
arc.WriteFloat( avoidtime );
arc.WriteVector( avoidvec );
}
inline EXPORT_FROM_DLL void Fly::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadObject( &avoid );
arc.ReadString( &anim );
arc.ReadFloat( &avoidtime );
arc.ReadVector( &avoidvec );
}
class EXPORT_FROM_DLL FlyCloseAttack : public Behavior
{
private:
Seek seek;
ObstacleAvoidance2 avoid;
qboolean avoiding;
str anim;
float avoidtime;
Vector avoidvec;
public:
CLASS_PROTOTYPE( FlyCloseAttack );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void FlyCloseAttack::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteObject( &avoid );
arc.WriteBoolean( avoiding );
arc.WriteString( anim );
arc.WriteFloat( avoidtime );
arc.WriteVector( avoidvec );
}
inline EXPORT_FROM_DLL void FlyCloseAttack::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadObject( &avoid );
arc.ReadBoolean( &avoiding );
arc.ReadString( &anim );
arc.ReadFloat( &avoidtime );
arc.ReadVector( &avoidvec );
}
class EXPORT_FROM_DLL Wander : public Behavior
{
private:
Seek seek;
ObstacleAvoidance2 avoid;
str anim;
float avoidtime;
Vector avoidvec;
public:
CLASS_PROTOTYPE( Wander );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void Wander::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteObject( &avoid );
arc.WriteString( anim );
arc.WriteFloat( avoidtime );
arc.WriteVector( avoidvec );
}
inline EXPORT_FROM_DLL void Wander::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadObject( &avoid );
arc.ReadString( &anim );
arc.ReadFloat( &avoidtime );
arc.ReadVector( &avoidvec );
}
class EXPORT_FROM_DLL WanderCloseAttack : public Behavior
{
private:
Seek seek;
ObstacleAvoidance2 avoid;
qboolean avoiding;
str anim;
float avoidtime;
Vector avoidvec;
public:
CLASS_PROTOTYPE( WanderCloseAttack );
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void WanderCloseAttack::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteObject( &avoid );
arc.WriteBoolean( avoiding );
arc.WriteString( anim );
arc.WriteFloat( avoidtime );
arc.WriteVector( avoidvec );
}
inline EXPORT_FROM_DLL void WanderCloseAttack::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &seek );
arc.ReadObject( &avoid );
arc.ReadBoolean( &avoiding );
arc.ReadString( &anim );
arc.ReadFloat( &avoidtime );
arc.ReadVector( &avoidvec );
}
class EXPORT_FROM_DLL GetCloseToEnemy : public Behavior
{
private:
float howclose;
str anim;
Chase chase;
int state;
float nextsearch;
public:
CLASS_PROTOTYPE( GetCloseToEnemy );
GetCloseToEnemy();
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void GetCloseToEnemy::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteFloat( howclose );
arc.WriteString( anim );
arc.WriteObject( &chase );
arc.WriteInteger( state );
arc.WriteFloat( nextsearch );
}
inline EXPORT_FROM_DLL void GetCloseToEnemy::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadFloat( &howclose );
arc.ReadString( &anim );
arc.ReadObject( &chase );
arc.ReadInteger( &state );
arc.ReadFloat( &nextsearch );
}
class EXPORT_FROM_DLL PlayAnimSeekEnemy : public Behavior
{
private:
Aim aim;
int mode;
qboolean animdone;
str anim;
str oldanim;
public:
CLASS_PROTOTYPE( PlayAnimSeekEnemy );
void SetArgs( Event *ev );
void AnimDone( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void PlayAnimSeekEnemy::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &aim );
arc.WriteInteger( mode );
arc.WriteBoolean( animdone );
arc.WriteString( anim );
arc.WriteString( oldanim );
}
inline EXPORT_FROM_DLL void PlayAnimSeekEnemy::Unarchive
(
Archiver &arc
)
{
Behavior::Unarchive( arc );
arc.ReadObject( &aim );
arc.ReadInteger( &mode );
arc.ReadBoolean( &animdone );
arc.ReadString( &anim );
arc.ReadString( &oldanim );
}
//### 2015 added stuff
class EXPORT_FROM_DLL GetCloseToObject : public Behavior
{
private:
float howclose;
str anim;
Chase chase;
int state;
float nextsearch;
EntityPtr targetobject;
public:
CLASS_PROTOTYPE(GetCloseToObject);
GetCloseToObject();
void SetArgs( Event *ev );
void ShowInfo( Actor &self );
void Begin( Actor &self );
qboolean Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void GetCloseToObject::Archive (Archiver &arc)
{
Behavior::Archive( arc );
arc.WriteFloat( howclose );
arc.WriteString( anim );
arc.WriteObject( &chase );
arc.WriteInteger( state );
arc.WriteFloat( nextsearch );
arc.WriteSafePointer( targetobject );
}
inline EXPORT_FROM_DLL void GetCloseToObject::Unarchive (Archiver &arc)
{
Behavior::Unarchive( arc );
arc.ReadFloat( &howclose );
arc.ReadString( &anim );
arc.ReadObject( &chase );
arc.ReadInteger( &state );
arc.ReadFloat( &nextsearch );
arc.ReadSafePointer( &targetobject );
}
//###
#endif /* behavior.h */