📄 behavior.h
字号:
//-----------------------------------------------------------------------------
//
// $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;
public:
CLASS_PROTOTYPE( TurnTo );
TurnTo();
void SetDirection( float yaw );
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 TurnTo::Archive
(
Archiver &arc
)
{
Behavior::Archive( arc );
arc.WriteObject( &seek );
arc.WriteSafePointer( ent );
arc.WriteVector( dir );
arc.WriteFloat( yaw );
arc.WriteInteger( mode );
}
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 );
}
class EXPORT_FROM_DLL Jump : public Behavior
{
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
(
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -