mirror of
https://github.com/UberGames/EF2GameSource.git
synced 2024-11-10 06:31:42 +00:00
3036 lines
69 KiB
C++
3036 lines
69 KiB
C++
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Logfile:: /Code/DLLs/game/behavior.h $
|
|
// $Revision:: 72 $
|
|
// $Author:: Steven $
|
|
// $Date:: 10/13/03 8:53a $
|
|
//
|
|
// 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.
|
|
//
|
|
//
|
|
// 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"
|
|
#include "beam.h"
|
|
#include "sentient.h"
|
|
#include "bspline.h"
|
|
#include "waypoints.h"
|
|
#include "FollowPath.h"
|
|
#include "FollowPathToPoint.h"
|
|
#include "FollowPathToEntity.h"
|
|
|
|
extern Event EV_Behavior_Args;
|
|
extern Event EV_Behavior_AnimDone;
|
|
|
|
class Actor;
|
|
|
|
typedef enum
|
|
{
|
|
BEHAVIOR_SUCCESS,
|
|
BEHAVIOR_EVALUATING,
|
|
BEHAVIOR_FAILED,
|
|
BEHAVIOR_FAILED_STEERING_BLOCKED_BY_ENEMY,
|
|
BEHAVIOR_FAILED_STEERING_BLOCKED_BY_CIVILIAN,
|
|
BEHAVIOR_FAILED_STEERING_BLOCKED_BY_FRIEND,
|
|
BEHAVIOR_FAILED_STEERING_BLOCKED_BY_TEAMMATE,
|
|
BEHAVIOR_FAILED_STEERING_BLOCKED_BY_WORLD,
|
|
BEHAVIOR_FAILED_STEERING_BLOCKED_BY_DOOR,
|
|
BEHAVIOR_FAILED_STEERING_CANNOT_GET_TO_PATH,
|
|
BEHAVIOR_FAILED_STEERING_NO_PATH,
|
|
BEHAVIOR_INVALID,
|
|
BEHAVIOR_NUMBER_OF_RETURN_VALUES
|
|
} BehaviorReturnCode_t;
|
|
|
|
class Behavior : public Listener
|
|
{
|
|
private:
|
|
str _failureReason;
|
|
str _internalStateName;
|
|
Listener *_controller ;
|
|
Actor* _self;
|
|
|
|
protected:
|
|
PathNodePtr movegoal;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Behavior );
|
|
|
|
Behavior();
|
|
virtual void ShowInfo( Actor &self );
|
|
virtual void Begin( Actor &self );
|
|
virtual BehaviorReturnCode_t Evaluate( Actor &self );
|
|
virtual void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
|
|
void SetFailureReason( const str &reason ) { _failureReason = reason; }
|
|
str GetFailureReason() { return _failureReason; }
|
|
|
|
void SetInternalStateName( const str &reason ) { _internalStateName = reason; }
|
|
str GetInternalStateName() { return _internalStateName; }
|
|
|
|
Listener* GetController( ) { return _controller ; }
|
|
void SetController( Listener *controller ) { _controller = controller ; }
|
|
|
|
void SetSelf( Actor* self ) { _self = self; }
|
|
Actor* GetSelf() { return _self; }
|
|
};
|
|
|
|
inline void Behavior::Archive( Archiver &arc )
|
|
{
|
|
Listener::Archive( arc );
|
|
|
|
arc.ArchiveString ( &_failureReason );
|
|
arc.ArchiveString ( &_internalStateName );
|
|
arc.ArchiveObjectPointer( ( Class ** )&_controller );
|
|
arc.ArchiveObjectPointer( ( Class ** )&_self );
|
|
arc.ArchiveSafePointer ( &movegoal );
|
|
}
|
|
|
|
typedef SafePtr<Behavior> BehaviorPtr;
|
|
|
|
class Idle : public Behavior
|
|
{
|
|
private:
|
|
float nexttwitch;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Idle );
|
|
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Idle::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &nexttwitch );
|
|
}
|
|
|
|
class Pain : public Behavior
|
|
{
|
|
private:
|
|
int current_pain_type;
|
|
int pain_anim_number;
|
|
qboolean anim_done;
|
|
int number_of_pains;
|
|
int max_pains;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Pain );
|
|
|
|
void AnimDone( Event *ev );
|
|
|
|
void SetPainAnim( Actor &self, int new_pain_type, int new_anim_number );
|
|
int GetNumberOfPainAnims( Actor &self, int new_pain_type );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Pain::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveInteger( ¤t_pain_type );
|
|
arc.ArchiveInteger( &pain_anim_number );
|
|
arc.ArchiveBoolean( &anim_done );
|
|
arc.ArchiveInteger( &number_of_pains );
|
|
arc.ArchiveInteger( &max_pains );
|
|
}
|
|
|
|
class Watch : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_watch;
|
|
float turn_speed;
|
|
float old_turn_speed;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Watch );
|
|
|
|
Watch();
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Watch::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_watch );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &old_turn_speed );
|
|
}
|
|
|
|
class Turn : public Behavior
|
|
{
|
|
private:
|
|
float turn_speed;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Turn );
|
|
|
|
Turn();
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Turn::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &turn_speed );
|
|
}
|
|
|
|
class CircleEnemy : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_circle;
|
|
str center_part_name;
|
|
float last_angle_change;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( CircleEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
float GetAngleDiff( const Actor &self, const Actor *center_actor, const Vector &origin );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void CircleEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_circle );
|
|
arc.ArchiveString( ¢er_part_name );
|
|
arc.ArchiveFloat( &last_angle_change );
|
|
}
|
|
|
|
|
|
|
|
class BurrowAttack : public Behavior
|
|
{
|
|
private:
|
|
Vector goal;
|
|
Vector attack_origin;
|
|
int burrow_mode;
|
|
EntityPtr leg1;
|
|
EntityPtr leg2;
|
|
EntityPtr leg3;
|
|
EntityPtr leg4;
|
|
int stage;
|
|
int attacks_left;
|
|
float burrow_speed;
|
|
qboolean too_close;
|
|
qboolean use_last_known_position;
|
|
public:
|
|
CLASS_PROTOTYPE( BurrowAttack );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
void SpawnArm( Actor &self, EntityPtr &leg, const Vector &original_arm_origin, const char *anim_name, float angle );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void BurrowAttack::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveVector( &attack_origin );
|
|
arc.ArchiveInteger( &burrow_mode );
|
|
arc.ArchiveSafePointer( &leg1 );
|
|
arc.ArchiveSafePointer( &leg2 );
|
|
arc.ArchiveSafePointer( &leg3 );
|
|
arc.ArchiveSafePointer( &leg4 );
|
|
arc.ArchiveInteger( &stage );
|
|
arc.ArchiveInteger( &attacks_left );
|
|
arc.ArchiveFloat( &burrow_speed );
|
|
arc.ArchiveBoolean( &too_close );
|
|
arc.ArchiveBoolean( &use_last_known_position );
|
|
}
|
|
|
|
class ShockWater : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr left_beam;
|
|
EntityPtr right_beam;
|
|
EntityPtr center_beam;
|
|
qboolean already_started;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( ShockWater );
|
|
|
|
ShockWater();
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void ShockWater::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &left_beam );
|
|
arc.ArchiveSafePointer( &right_beam );
|
|
arc.ArchiveSafePointer( ¢er_beam );
|
|
arc.ArchiveBoolean( &already_started );
|
|
}
|
|
|
|
class Shock : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr beam;
|
|
str tag_name;
|
|
float damage;
|
|
qboolean already_started;
|
|
float random_angle;
|
|
str beamShader;
|
|
float z_offset;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Shock );
|
|
|
|
Shock();
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Shock::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &beam );
|
|
arc.ArchiveString( &tag_name );
|
|
arc.ArchiveFloat( &damage );
|
|
arc.ArchiveBoolean( &already_started );
|
|
arc.ArchiveFloat( &random_angle );
|
|
arc.ArchiveString( &beamShader );
|
|
arc.ArchiveFloat( &z_offset );
|
|
}
|
|
|
|
class MultiShock : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr beam1;
|
|
EntityPtr beam2;
|
|
str tag_name1;
|
|
str tag_name2;
|
|
float damage;
|
|
qboolean already_started;
|
|
float random_angle;
|
|
str beamShader;
|
|
float z_offset;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( MultiShock );
|
|
|
|
MultiShock();
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void MultiShock::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &beam1 );
|
|
arc.ArchiveSafePointer( &beam2 );
|
|
arc.ArchiveString( &tag_name1 );
|
|
arc.ArchiveString( &tag_name2 );
|
|
arc.ArchiveFloat( &damage );
|
|
arc.ArchiveBoolean( &already_started );
|
|
arc.ArchiveFloat( &random_angle );
|
|
arc.ArchiveString( &beamShader );
|
|
arc.ArchiveFloat( &z_offset );
|
|
}
|
|
|
|
class ShockDown : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr beam;
|
|
str tag_name;
|
|
float damage;
|
|
qboolean already_started;
|
|
str beamShader;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( ShockDown );
|
|
|
|
ShockDown();
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void ShockDown::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &beam );
|
|
arc.ArchiveString( &tag_name );
|
|
arc.ArchiveFloat( &damage );
|
|
arc.ArchiveBoolean( &already_started );
|
|
arc.ArchiveString( &beamShader );
|
|
}
|
|
|
|
class CircleAttack : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr first_part;
|
|
EntityPtr current_part;
|
|
str command;
|
|
str direction;
|
|
float next_time;
|
|
int current_direction;
|
|
int number_of_attacks;
|
|
public:
|
|
CLASS_PROTOTYPE( CircleAttack );
|
|
|
|
CircleAttack();
|
|
Actor *FindClosestPart( const Actor &self, float angle );
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void CircleAttack::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &first_part );
|
|
arc.ArchiveSafePointer( ¤t_part );
|
|
arc.ArchiveString( &command );
|
|
arc.ArchiveString( &direction );
|
|
arc.ArchiveFloat( &next_time );
|
|
arc.ArchiveInteger( ¤t_direction );
|
|
arc.ArchiveInteger( &number_of_attacks );
|
|
}
|
|
|
|
class DragEnemy : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_drag;
|
|
str tag_name;
|
|
float damage;
|
|
float target_yaw;
|
|
float last_turn_time;
|
|
qboolean attached;
|
|
Vector offset;
|
|
qboolean drop;
|
|
public:
|
|
CLASS_PROTOTYPE( DragEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void DragEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_drag );
|
|
arc.ArchiveString( &tag_name );
|
|
arc.ArchiveFloat( &damage );
|
|
arc.ArchiveFloat( &target_yaw );
|
|
arc.ArchiveFloat( &last_turn_time );
|
|
arc.ArchiveBoolean( &attached );
|
|
arc.ArchiveVector( &offset );
|
|
arc.ArchiveBoolean( &drop );
|
|
}
|
|
|
|
class PickupEnemy : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_drag;
|
|
str tag_name;
|
|
float damage;
|
|
float target_yaw;
|
|
float last_turn_time;
|
|
qboolean attached;
|
|
Vector offset;
|
|
qboolean drop;
|
|
public:
|
|
CLASS_PROTOTYPE( PickupEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void PickupEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_drag );
|
|
arc.ArchiveString( &tag_name );
|
|
arc.ArchiveFloat( &damage );
|
|
arc.ArchiveFloat( &target_yaw );
|
|
arc.ArchiveFloat( &last_turn_time );
|
|
arc.ArchiveBoolean( &attached );
|
|
arc.ArchiveVector( &offset );
|
|
arc.ArchiveBoolean( &drop );
|
|
}
|
|
|
|
class Aim : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr target;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Aim );
|
|
|
|
void SetTarget( Entity *ent );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Aim::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &target );
|
|
}
|
|
|
|
class TurnTo : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent;
|
|
Vector dir;
|
|
float yaw;
|
|
int mode;
|
|
qboolean anim_done;
|
|
bool useTurnAnim;
|
|
int extraFrames;
|
|
bool _useAnims;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( TurnTo );
|
|
|
|
TurnTo();
|
|
void SetDirection( float yaw );
|
|
void SetTarget( Entity *ent );
|
|
void AnimDone( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
void SetUseTurnAnim( bool useAnim );
|
|
void useAnims( bool useAnims );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TurnTo::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent );
|
|
arc.ArchiveVector( &dir );
|
|
arc.ArchiveFloat( &yaw );
|
|
arc.ArchiveInteger( &mode );
|
|
arc.ArchiveBoolean( &anim_done );
|
|
arc.ArchiveBool( &useTurnAnim );
|
|
arc.ArchiveInteger ( &extraFrames );
|
|
arc.ArchiveBool( &_useAnims );
|
|
}
|
|
|
|
class RotateToEnemy : public Behavior
|
|
{
|
|
private:
|
|
float turnSpeed;
|
|
str anim;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( RotateToEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void RotateToEnemy::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &turnSpeed );
|
|
arc.ArchiveString( &anim );
|
|
}
|
|
|
|
class PickupEntity : public Behavior
|
|
{
|
|
private:
|
|
str pickup_anim_name;
|
|
qboolean anim_done;
|
|
EntityPtr ent_to_pickup;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( PickupEntity );
|
|
|
|
void SetArgs( Event *ev );
|
|
void AnimDone( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void PickupEntity::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &pickup_anim_name );
|
|
arc.ArchiveBoolean( &anim_done );
|
|
arc.ArchiveSafePointer( &ent_to_pickup );
|
|
}
|
|
|
|
class ThrowEntity : public Behavior
|
|
{
|
|
private:
|
|
str throw_anim_name;
|
|
qboolean anim_done;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( ThrowEntity );
|
|
|
|
void SetArgs( Event *ev );
|
|
void AnimDone( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void ThrowEntity::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &throw_anim_name );
|
|
arc.ArchiveBoolean( &anim_done );
|
|
}
|
|
|
|
class HeadWatch : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_watch;
|
|
Vector current_head_angles;
|
|
float max_speed;
|
|
qboolean forever;
|
|
qboolean usingEyes;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( HeadWatch );
|
|
|
|
HeadWatch();
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
void useEyes( qboolean moveEyes );
|
|
};
|
|
|
|
inline void HeadWatch::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_watch );
|
|
arc.ArchiveVector( ¤t_head_angles );
|
|
arc.ArchiveFloat( &max_speed );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveBoolean( &usingEyes );
|
|
}
|
|
|
|
class HeadWatchEnemy : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_watch;
|
|
Vector current_head_angles;
|
|
Vector current_torso_angles;
|
|
float max_speed;
|
|
qboolean forever;
|
|
float threshold;
|
|
qboolean usingEyes;
|
|
public:
|
|
CLASS_PROTOTYPE( HeadWatchEnemy );
|
|
|
|
HeadWatchEnemy();
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
void useEyes( qboolean moveEyes );
|
|
};
|
|
|
|
inline void HeadWatchEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_watch );
|
|
arc.ArchiveVector( ¤t_head_angles );
|
|
arc.ArchiveVector( ¤t_torso_angles );
|
|
arc.ArchiveFloat( &max_speed );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveFloat( &threshold );
|
|
arc.ArchiveBoolean( &usingEyes );
|
|
}
|
|
|
|
class EyeWatch : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_watch;
|
|
Vector current_left_eye_angles;
|
|
Vector current_right_eye_angles;
|
|
float max_speed;
|
|
qboolean forever;
|
|
float threshold;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( EyeWatch );
|
|
|
|
EyeWatch();
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void EyeWatch::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_watch );
|
|
arc.ArchiveVector( ¤t_left_eye_angles );
|
|
arc.ArchiveVector( ¤t_right_eye_angles );
|
|
arc.ArchiveFloat( &max_speed );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveFloat( &threshold );
|
|
}
|
|
|
|
class EyeWatchEnemy : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent_to_watch;
|
|
Vector current_left_eye_angles;
|
|
Vector current_right_eye_angles;
|
|
float max_speed;
|
|
qboolean forever;
|
|
float threshold;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( EyeWatchEnemy );
|
|
|
|
EyeWatchEnemy();
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void EyeWatchEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent_to_watch );
|
|
arc.ArchiveVector( ¤t_left_eye_angles );
|
|
arc.ArchiveVector( ¤t_right_eye_angles );
|
|
arc.ArchiveFloat( &max_speed );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveFloat( &threshold );
|
|
}
|
|
|
|
class HeadAndEyeWatch : public Behavior
|
|
{
|
|
private:
|
|
HeadWatch headWatch;
|
|
EyeWatch eyeWatch;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( HeadAndEyeWatch );
|
|
|
|
HeadAndEyeWatch();
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void HeadAndEyeWatch::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveObject(&headWatch);
|
|
arc.ArchiveObject(&eyeWatch);
|
|
}
|
|
|
|
class TorsoTurn : public Behavior
|
|
{
|
|
private:
|
|
int turn_towards_enemy;
|
|
float speed;
|
|
int forever;
|
|
qboolean use_pitch;
|
|
float current_yaw;
|
|
float current_pitch;
|
|
str tag_name;
|
|
float tolerance;
|
|
float offset;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( TorsoTurn );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
|
|
void SetRequiredParameters( int TurnTowardsEnemy, int Speed, int Forever );
|
|
};
|
|
|
|
inline void TorsoTurn::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveInteger( &turn_towards_enemy );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveInteger( &forever );
|
|
arc.ArchiveBoolean( &use_pitch);
|
|
arc.ArchiveFloat( ¤t_yaw );
|
|
arc.ArchiveFloat( ¤t_pitch );
|
|
arc.ArchiveString( &tag_name );
|
|
arc.ArchiveFloat( &tolerance );
|
|
arc.ArchiveFloat( &offset );
|
|
}
|
|
|
|
|
|
class TorsoWatchEnemy : public Behavior
|
|
{
|
|
private:
|
|
float speed;
|
|
int forever;
|
|
qboolean use_pitch;
|
|
float current_yaw;
|
|
float current_pitch;
|
|
str tag_name;
|
|
float threshold;
|
|
float offset;
|
|
qboolean invert;
|
|
qboolean reset;
|
|
qboolean invertLegs;
|
|
float nextFlipTime;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( TorsoWatchEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TorsoWatchEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveInteger( &forever );
|
|
arc.ArchiveBoolean( &use_pitch);
|
|
arc.ArchiveFloat( ¤t_yaw );
|
|
arc.ArchiveFloat( ¤t_pitch );
|
|
arc.ArchiveString( &tag_name );
|
|
arc.ArchiveFloat( &threshold );
|
|
arc.ArchiveFloat( &offset );
|
|
arc.ArchiveBoolean( &invert );
|
|
arc.ArchiveBoolean( &reset );
|
|
arc.ArchiveBoolean( &invertLegs );
|
|
arc.ArchiveFloat( &nextFlipTime );
|
|
}
|
|
|
|
class FallToDeath : public Behavior
|
|
{
|
|
private:
|
|
float forwardmove;
|
|
float sidemove;
|
|
float distance;
|
|
float time;
|
|
float speed;
|
|
str startAnim;
|
|
str fallAnim;
|
|
str deathAnim;
|
|
Vector yaw_forward;
|
|
Vector yaw_left;
|
|
qboolean did_impulse;
|
|
float impulse_time;
|
|
|
|
qboolean animdone;
|
|
int state;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FallToDeath );
|
|
|
|
FallToDeath();
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
|
|
};
|
|
|
|
inline void FallToDeath::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &forwardmove );
|
|
arc.ArchiveFloat( &sidemove );
|
|
arc.ArchiveFloat( &distance );
|
|
arc.ArchiveFloat( &time );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveString( &startAnim );
|
|
arc.ArchiveString( &fallAnim );
|
|
arc.ArchiveString( &deathAnim );
|
|
arc.ArchiveVector( &yaw_forward );
|
|
arc.ArchiveVector( &yaw_left );
|
|
arc.ArchiveBoolean( &did_impulse );
|
|
arc.ArchiveFloat( &impulse_time );
|
|
arc.ArchiveBoolean( &animdone );
|
|
arc.ArchiveInteger( &state );
|
|
}
|
|
|
|
class GotoPathNode : public Behavior
|
|
{
|
|
private:
|
|
TurnTo turnto;
|
|
FollowPath *chase;
|
|
int state;
|
|
qboolean usevec;
|
|
//float time;
|
|
str anim;
|
|
EntityPtr goalent;
|
|
Vector goal;
|
|
EntityPtr entity_to_watch;
|
|
HeadWatch head_watch;
|
|
bool _followingEntity;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( GotoPathNode );
|
|
|
|
GotoPathNode();
|
|
void SetArgs( Event *ev );
|
|
void SetGoal( PathNode *node );
|
|
void AnimDone( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void GotoPathNode::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveObject( &turnto );
|
|
|
|
// Archive chase last
|
|
|
|
arc.ArchiveInteger( &state );
|
|
arc.ArchiveBoolean( &usevec );
|
|
//arc.ArchiveFloat( &time );
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveSafePointer( &goalent );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveSafePointer( &entity_to_watch );
|
|
arc.ArchiveObject( &head_watch );
|
|
arc.ArchiveBool( &_followingEntity );
|
|
|
|
if ( arc.Saving() )
|
|
{
|
|
arc.ArchiveObject( chase );
|
|
}
|
|
else
|
|
{
|
|
if ( _followingEntity )
|
|
chase = new FollowPathToEntity;
|
|
else
|
|
chase = new FollowPathToPoint;
|
|
|
|
arc.ArchiveObject( chase );
|
|
}
|
|
}
|
|
|
|
|
|
class Flee : public Behavior
|
|
{
|
|
private:
|
|
FollowPathToPoint chase;
|
|
str anim;
|
|
PathNodePtr flee_node;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Flee );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
void FindFleeNode( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Flee::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveSafePointer( &flee_node );
|
|
}
|
|
|
|
/*
|
|
class PlayAnim : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( PlayAnim );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void PlayAnim::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
}
|
|
|
|
*/
|
|
|
|
class FindCover : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
str crouch_anim;
|
|
FollowPathToPoint 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 );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FindCover::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveString( &crouch_anim );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveInteger( &state );
|
|
arc.ArchiveFloat( &nextsearch );
|
|
}
|
|
|
|
class FindFlee : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FollowPathToPoint 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 );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FindFlee::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveInteger( &state );
|
|
arc.ArchiveFloat( &nextsearch );
|
|
}
|
|
|
|
class FindEnemy : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FollowPathToPoint 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 );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FindEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveInteger( &state );
|
|
arc.ArchiveFloat( &nextsearch );
|
|
arc.ArchiveSafePointer( &lastSearchNode );
|
|
arc.ArchiveVector( &lastSearchPos );
|
|
}
|
|
|
|
class AimAndShoot : public Behavior
|
|
{
|
|
private:
|
|
Aim aim;
|
|
TorsoTurn torsoTurn;
|
|
int mode;
|
|
int maxshots;
|
|
int numshots;
|
|
qboolean animdone;
|
|
float enemy_health;
|
|
float aim_time;
|
|
str animprefix;
|
|
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 );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void AimAndShoot::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveObject( &aim );
|
|
arc.ArchiveObject( &torsoTurn );
|
|
arc.ArchiveInteger( &mode );
|
|
arc.ArchiveInteger( &maxshots );
|
|
arc.ArchiveInteger( &numshots );
|
|
arc.ArchiveBoolean( &animdone );
|
|
arc.ArchiveFloat( &enemy_health );
|
|
arc.ArchiveFloat( &aim_time );
|
|
arc.ArchiveString( &animprefix );
|
|
arc.ArchiveString( &aimanim );
|
|
arc.ArchiveString( &fireanim );
|
|
}
|
|
|
|
class AimAndMelee : public Behavior
|
|
{
|
|
private:
|
|
Aim aim;
|
|
int mode;
|
|
int maxshots;
|
|
int numshots;
|
|
qboolean animdone;
|
|
str anim_name;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( AimAndMelee );
|
|
|
|
AimAndMelee();
|
|
void SetArgs( Event *ev );
|
|
void AnimDone( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void AimAndMelee::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveObject( &aim );
|
|
arc.ArchiveInteger( &mode );
|
|
arc.ArchiveInteger( &maxshots );
|
|
arc.ArchiveInteger( &numshots );
|
|
arc.ArchiveBoolean( &animdone );
|
|
arc.ArchiveString( &anim_name );
|
|
}
|
|
|
|
class JumpToPathNode : public Behavior
|
|
{
|
|
private:
|
|
Jump jump;
|
|
public:
|
|
CLASS_PROTOTYPE( JumpToPathNode );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void JumpToPathNode::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveObject( &jump );
|
|
}
|
|
|
|
class LeapToEnemy : public Behavior
|
|
{
|
|
private:
|
|
Jump jump;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( LeapToEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void LeapToEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
arc.ArchiveObject(&jump );
|
|
|
|
}
|
|
|
|
class FlyToPoint : public Behavior
|
|
{
|
|
private:
|
|
float avoidtime;
|
|
Vector target_angle;
|
|
float turn_speed;
|
|
float old_turn_speed;
|
|
float speed;
|
|
float old_forward_speed;
|
|
Vector goal;
|
|
qboolean random_allowed;
|
|
qboolean force_goal;
|
|
int stuck;
|
|
Vector temp_goal;
|
|
qboolean use_temp_goal;
|
|
qboolean adjustYawAndRoll;
|
|
qboolean offsetOrigin;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyToPoint );
|
|
|
|
FlyToPoint();
|
|
|
|
void SetTurnSpeed( float new_turn_speed );
|
|
void SetGoalPoint( const Vector &goal_point );
|
|
void SetRandomAllowed( qboolean allowed );
|
|
void SetSpeed( float speed_value );
|
|
void ForceGoal( void );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
float LerpAngle( float old_angle, float new_angle, float lerp_amount );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
void setAdjustYawAndRoll( bool adjust ) { adjustYawAndRoll = adjust; }
|
|
void setOffsetOrigin( bool setOffset ) { offsetOrigin = setOffset; }
|
|
};
|
|
|
|
inline void FlyToPoint::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &avoidtime );
|
|
arc.ArchiveVector( &target_angle );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &old_turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveFloat( &old_forward_speed );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveBoolean( &random_allowed );
|
|
arc.ArchiveBoolean( &force_goal );
|
|
arc.ArchiveInteger( &stuck );
|
|
arc.ArchiveVector( &temp_goal );
|
|
arc.ArchiveBoolean( &use_temp_goal );
|
|
arc.ArchiveBoolean( &adjustYawAndRoll );
|
|
arc.ArchiveBoolean( &offsetOrigin );
|
|
}
|
|
|
|
class FlyCloseToEnemy : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
float next_goal_time;
|
|
qboolean adjustPitch;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyCloseToEnemy );
|
|
|
|
FlyCloseToEnemy();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyCloseToEnemy::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveFloat( &next_goal_time );
|
|
arc.ArchiveBoolean( &adjustPitch );
|
|
}
|
|
|
|
class FlyCloseToPlayer : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
float next_goal_time;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyCloseToPlayer );
|
|
|
|
FlyCloseToPlayer();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyCloseToPlayer::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveFloat( &next_goal_time );
|
|
}
|
|
|
|
class FlyCloseToParent : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
float next_goal_time;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyCloseToParent );
|
|
|
|
FlyCloseToParent();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyCloseToParent::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveFloat( &next_goal_time );
|
|
}
|
|
|
|
|
|
class FlyDescend: public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
Vector goal;
|
|
float height;
|
|
float speed;
|
|
float next_height_check;
|
|
float last_check_height;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyDescend );
|
|
|
|
FlyDescend();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyDescend::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveFloat( &height );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveFloat( &next_height_check );
|
|
arc.ArchiveFloat( &last_check_height );
|
|
}
|
|
|
|
|
|
class FlyWander : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
float change_course_time;
|
|
float next_change_course_time;
|
|
float original_z;
|
|
Vector goal;
|
|
qboolean try_to_go_up;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyWander );
|
|
|
|
FlyWander();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyWander::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveFloat( &change_course_time );
|
|
arc.ArchiveFloat( &next_change_course_time );
|
|
arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveBoolean( &try_to_go_up );
|
|
}
|
|
|
|
class FlyToNode : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
//float original_z;
|
|
//Vector goal;
|
|
//qboolean try_to_go_up;
|
|
str NodeType;
|
|
//int NodeIdx;
|
|
int NumberOfNodes;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyToNode );
|
|
|
|
FlyToNode();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyToNode::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
//arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveString( &NodeType );
|
|
arc.ArchiveInteger( &NumberOfNodes );
|
|
}
|
|
|
|
class FlyToRandomNode : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
//float original_z;
|
|
str NodeType;
|
|
int NumberOfNodes;
|
|
int CurrentNode;
|
|
PathNodePtr goal;
|
|
qboolean NeedNextNode;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyToRandomNode );
|
|
|
|
FlyToRandomNode();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyToRandomNode::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
//arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveString( &NodeType );
|
|
arc.ArchiveInteger( &NumberOfNodes );
|
|
arc.ArchiveInteger( &CurrentNode );
|
|
arc.ArchiveSafePointer( &goal );
|
|
arc.ArchiveBoolean( &NeedNextNode );
|
|
}
|
|
|
|
class FlyToNodeNearestPlayer : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
//float original_z;
|
|
str NodeType;
|
|
int NumberOfNodes;
|
|
int CurrentNode;
|
|
PathNodePtr goal;
|
|
qboolean NeedNextNode;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyToNodeNearestPlayer );
|
|
|
|
FlyToNodeNearestPlayer();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyToNodeNearestPlayer::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
//arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveString( &NodeType );
|
|
arc.ArchiveInteger( &NumberOfNodes );
|
|
arc.ArchiveInteger( &CurrentNode );
|
|
arc.ArchiveSafePointer( &goal );
|
|
arc.ArchiveBoolean( &NeedNextNode );
|
|
}
|
|
|
|
class FlyNodePath : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float turn_speed;
|
|
float speed;
|
|
FlyToPoint fly;
|
|
//float original_z;
|
|
str NodeType;
|
|
int NumberOfNodes;
|
|
int CurrentNode;
|
|
PathNodePtr goal;
|
|
qboolean NeedNextNode;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyNodePath );
|
|
|
|
FlyNodePath();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyNodePath::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveObject( &fly );
|
|
//arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveString( &NodeType );
|
|
arc.ArchiveInteger( &NumberOfNodes );
|
|
arc.ArchiveInteger( &CurrentNode );
|
|
arc.ArchiveSafePointer( &goal );
|
|
arc.ArchiveBoolean( &NeedNextNode );
|
|
}
|
|
|
|
class FlyCircle : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
float original_z;
|
|
qboolean fly_clockwise;
|
|
qboolean circle_player;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyCircle );
|
|
|
|
FlyCircle();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyCircle::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveBoolean( &fly_clockwise );
|
|
arc.ArchiveBoolean( &circle_player );
|
|
}
|
|
|
|
class FlyCircleRandomPoint : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
//float original_z;
|
|
qboolean fly_clockwise;
|
|
float change_course_time;
|
|
float next_change_course_time;
|
|
Vector goal;
|
|
qboolean try_to_go_up;
|
|
//float speed;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyCircleRandomPoint );
|
|
|
|
FlyCircleRandomPoint();
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyCircleRandomPoint::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
//arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveBoolean( &fly_clockwise );
|
|
|
|
arc.ArchiveFloat( &change_course_time );
|
|
arc.ArchiveFloat( &next_change_course_time );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveBoolean( &try_to_go_up );
|
|
}
|
|
|
|
class FlyDive : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
Vector goal;
|
|
float speed;
|
|
//float old_speed;
|
|
float damage;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyDive );
|
|
|
|
FlyDive();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyDive::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveFloat( &speed );
|
|
//arc.ArchiveFloat( &old_speed );
|
|
arc.ArchiveFloat( &damage );
|
|
}
|
|
|
|
class FlyCharge : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
Vector goal;
|
|
float speed;
|
|
//float old_speed;
|
|
float damage;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyCharge );
|
|
|
|
FlyCharge();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyCharge::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveFloat( &speed );
|
|
//arc.ArchiveFloat( &old_speed );
|
|
arc.ArchiveFloat( &damage );
|
|
}
|
|
|
|
class FlyStrafe : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float speed;
|
|
qboolean right;
|
|
float roll;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyStrafe );
|
|
|
|
FlyStrafe();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyStrafe::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveBoolean( &right );
|
|
arc.ArchiveFloat( &roll );
|
|
}
|
|
|
|
class FlyClimb : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
Vector goal;
|
|
float height;
|
|
float speed;
|
|
float next_height_check;
|
|
float last_check_height;
|
|
float collision_buffer;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyClimb );
|
|
|
|
FlyClimb();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyClimb::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveFloat( &height );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveFloat( &next_height_check );
|
|
arc.ArchiveFloat( &last_check_height );
|
|
arc.ArchiveFloat( &collision_buffer );
|
|
}
|
|
|
|
class FlySplinePath : public Behavior
|
|
{
|
|
private:
|
|
EntityPtr ent;
|
|
BSpline splinePath;
|
|
SplinePathPtr currentNode;
|
|
qboolean clamp;
|
|
qboolean ignoreAngles;
|
|
qboolean splineAngles;
|
|
float startTime;
|
|
Vector oldGoal;
|
|
qboolean havePath;
|
|
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlySplinePath );
|
|
|
|
FlySplinePath();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
|
|
void CreatePath( SplinePath *path, splinetype_t type );
|
|
};
|
|
|
|
inline void FlySplinePath::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &ent );
|
|
arc.ArchiveObject( &splinePath );
|
|
arc.ArchiveSafePointer( ¤tNode );
|
|
arc.ArchiveBoolean( &clamp );
|
|
arc.ArchiveBoolean( &ignoreAngles );
|
|
arc.ArchiveBoolean( &splineAngles );
|
|
arc.ArchiveFloat( &startTime );
|
|
arc.ArchiveVector( &oldGoal );
|
|
arc.ArchiveBoolean( &havePath );
|
|
}
|
|
|
|
class Land : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Land );
|
|
|
|
Land();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Land::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
}
|
|
|
|
class VerticalTakeOff : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float speed;
|
|
float height;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( VerticalTakeOff );
|
|
|
|
VerticalTakeOff();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void VerticalTakeOff::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveFloat( &height );
|
|
}
|
|
|
|
class Hover : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
Vector goal;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Hover );
|
|
|
|
Hover();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Hover::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveVector( &goal );
|
|
}
|
|
|
|
|
|
// Fixme / don't think this works right now
|
|
|
|
class Wander : public Behavior
|
|
{
|
|
private:
|
|
//ObstacleAvoidance avoid;
|
|
str anim;
|
|
float avoidtime;
|
|
Vector avoidvec;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Wander );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Wander::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
//arc.ArchiveObject( &avoid );
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &avoidtime );
|
|
arc.ArchiveVector( &avoidvec );
|
|
}
|
|
|
|
class CircleCurrentEnemy : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
float radius;
|
|
qboolean maintainDistance;
|
|
qboolean clockwise;
|
|
Vector dirToEnemy;
|
|
|
|
float turnAngle;
|
|
float oldAngle;
|
|
float angleStep;
|
|
|
|
int stuck;
|
|
int stuckCheck;
|
|
|
|
qboolean angleAdjusted;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( CircleCurrentEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void CircleCurrentEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &radius );
|
|
arc.ArchiveBoolean( &maintainDistance );
|
|
arc.ArchiveBoolean( &clockwise );
|
|
arc.ArchiveVector( &dirToEnemy );
|
|
arc.ArchiveFloat( &turnAngle );
|
|
arc.ArchiveFloat( &oldAngle );
|
|
arc.ArchiveFloat( &angleStep );
|
|
arc.ArchiveInteger( &stuck );
|
|
arc.ArchiveInteger( &stuckCheck );
|
|
arc.ArchiveBoolean( &angleAdjusted );
|
|
|
|
}
|
|
|
|
class ChaoticDodge : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
|
|
float turnAngle;
|
|
float oldAngle;
|
|
float angleStep;
|
|
float time;
|
|
float changeTime;
|
|
|
|
int stuck;
|
|
int stuckCheck;
|
|
qboolean adjusting;
|
|
|
|
qboolean angleAdjusted;
|
|
float turnspeed;
|
|
float turnTime;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( ChaoticDodge );
|
|
|
|
void SetArgs( Event *ev );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
float GetNewYaw();
|
|
virtual void Archive( Archiver &arc );
|
|
|
|
};
|
|
|
|
inline void ChaoticDodge::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveFloat( &turnAngle );
|
|
arc.ArchiveFloat( &oldAngle );
|
|
arc.ArchiveFloat( &angleStep );
|
|
arc.ArchiveFloat( &time );
|
|
arc.ArchiveFloat( &changeTime );
|
|
|
|
arc.ArchiveInteger( &stuck );
|
|
arc.ArchiveInteger( &stuckCheck );
|
|
arc.ArchiveBoolean( &adjusting );
|
|
|
|
arc.ArchiveBoolean( &angleAdjusted );
|
|
arc.ArchiveFloat( &turnspeed );
|
|
arc.ArchiveFloat( &turnTime );
|
|
}
|
|
|
|
class GetCloseToEnemy : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FollowPathToEntity chase;
|
|
Wander wander;
|
|
qboolean forever;
|
|
float next_think_time;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( GetCloseToEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void GetCloseToEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveObject( &wander );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveFloat( &next_think_time );
|
|
}
|
|
|
|
class GetCloseToPlayer : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FollowPathToEntity chase;
|
|
Wander wander;
|
|
qboolean forever;
|
|
float next_think_time;
|
|
float speed;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( GetCloseToPlayer );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void GetCloseToPlayer::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveObject( &wander );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveFloat( &next_think_time );
|
|
arc.ArchiveFloat( &speed );
|
|
}
|
|
|
|
class GetWithinRangeOfPlayer : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FollowPathToEntity chase;
|
|
Wander wander;
|
|
qboolean forever;
|
|
float next_think_time;
|
|
float speed;
|
|
float startRangeMax;
|
|
float startRangeMin;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( GetWithinRangeOfPlayer );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void GetWithinRangeOfPlayer::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveObject( &wander );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveFloat( &next_think_time );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveFloat( &startRangeMax );
|
|
arc.ArchiveFloat( &startRangeMin );
|
|
}
|
|
|
|
class RetreatFromEnemy : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FollowPathToPoint chase;
|
|
Wander wander;
|
|
qboolean forever;
|
|
float next_think_time;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( RetreatFromEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void RetreatFromEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveObject( &wander );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveFloat( &next_think_time );
|
|
}
|
|
|
|
class GotoDeadEnemy : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FollowPathToPoint chase;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( GotoDeadEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void GotoDeadEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &chase );
|
|
}
|
|
|
|
class Investigate : public Behavior
|
|
{
|
|
private:
|
|
FollowPathToPoint chase;
|
|
str moveanim;
|
|
str lookaroundanim;
|
|
Vector goal;
|
|
float curioustime;
|
|
float lookaroundtime;
|
|
float lookaroundtime_end;
|
|
TurnTo turnto;
|
|
float investigate_time;
|
|
int mode;
|
|
Vector start_pos;
|
|
float start_yaw;
|
|
qboolean return_to_original_location;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( Investigate );
|
|
Investigate();
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Investigate::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveString( &moveanim );
|
|
arc.ArchiveString( &lookaroundanim );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveFloat( &curioustime );
|
|
arc.ArchiveFloat( &lookaroundtime );
|
|
arc.ArchiveFloat( &lookaroundtime_end );
|
|
arc.ArchiveObject( &turnto );
|
|
arc.ArchiveFloat( &investigate_time );
|
|
arc.ArchiveInteger( &mode );
|
|
arc.ArchiveVector( &start_pos );
|
|
arc.ArchiveFloat( &start_yaw );
|
|
arc.ArchiveBoolean( &return_to_original_location );
|
|
}
|
|
|
|
|
|
class TurnInvestigate : public Behavior
|
|
{
|
|
private:
|
|
str left_anim;
|
|
str right_anim;
|
|
float turn_speed;
|
|
Vector goal;
|
|
public:
|
|
CLASS_PROTOTYPE( TurnInvestigate );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TurnInvestigate::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &left_anim );
|
|
arc.ArchiveString( &right_anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveVector( &goal );
|
|
}
|
|
|
|
class TurnToEnemy : public Behavior
|
|
{
|
|
private:
|
|
str left_anim;
|
|
str right_anim;
|
|
float turn_speed;
|
|
qboolean forever;
|
|
qboolean anim_done;
|
|
qboolean use_last_known_position;
|
|
public:
|
|
CLASS_PROTOTYPE( TurnToEnemy );
|
|
|
|
void SetArgs( Event *ev );
|
|
void AnimDone( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TurnToEnemy::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &left_anim );
|
|
arc.ArchiveString( &right_anim );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveBoolean( &forever );
|
|
arc.ArchiveBoolean( &anim_done );
|
|
arc.ArchiveBoolean( &use_last_known_position );
|
|
}
|
|
|
|
class Teleport : public Behavior
|
|
{
|
|
private:
|
|
public:
|
|
CLASS_PROTOTYPE( Teleport );
|
|
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
qboolean TestPosition( Actor &self, int test_pos, Vector &good_position, qboolean use_enemy_dir );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
};
|
|
|
|
class TeleportToPlayer : public Behavior
|
|
{
|
|
private:
|
|
public:
|
|
CLASS_PROTOTYPE( TeleportToPlayer );
|
|
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
qboolean TestPosition( Actor &self, int test_pos, Vector &good_position, Entity* player, qboolean use_player_dir );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
};
|
|
|
|
class TeleportToPosition : public Behavior
|
|
{
|
|
private:
|
|
str teleport_position_name;
|
|
int number_of_teleport_positions;
|
|
public:
|
|
CLASS_PROTOTYPE( TeleportToPosition );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
//qboolean TestPosition( Actor &self, int test_pos, const Vector &good_position );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TeleportToPosition::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &teleport_position_name );
|
|
arc.ArchiveInteger( &number_of_teleport_positions );
|
|
}
|
|
|
|
class GhostAttack : public Behavior
|
|
{
|
|
private:
|
|
int mode;
|
|
Vector attack_dir;
|
|
Vector attack_position;
|
|
Vector retreat_position;
|
|
FlyToPoint fly;
|
|
qboolean real_attack;
|
|
public:
|
|
CLASS_PROTOTYPE( GhostAttack );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void GhostAttack::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveInteger( &mode );
|
|
arc.ArchiveVector( &attack_dir );
|
|
arc.ArchiveVector( &attack_position );
|
|
arc.ArchiveVector( &retreat_position );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveBoolean( &real_attack );
|
|
}
|
|
|
|
class Levitate : public Behavior
|
|
{
|
|
private:
|
|
float distance;
|
|
float speed;
|
|
float final_z;
|
|
public:
|
|
CLASS_PROTOTYPE( Levitate );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Levitate::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &distance );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveFloat( &final_z );
|
|
}
|
|
|
|
//
|
|
// WayPoint Behaviors
|
|
//
|
|
class GotoWayPoint : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
str path_name;
|
|
str start_point;
|
|
FollowPathToPoint chase;
|
|
Wander wander;
|
|
str current_waypoint_name;
|
|
WayPointNodePtr current_waypoint;
|
|
float next_think_time;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( GotoWayPoint );
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
WayPointNode* GetWayPoint( const str& waypoint_name );
|
|
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void GotoWayPoint::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveString( &path_name );
|
|
arc.ArchiveString( &start_point );
|
|
arc.ArchiveObject( &chase );
|
|
arc.ArchiveObject( &wander );
|
|
arc.ArchiveString( ¤t_waypoint_name );
|
|
arc.ArchiveSafePointer( ¤t_waypoint );
|
|
arc.ArchiveFloat( &next_think_time );
|
|
}
|
|
|
|
//=============================================
|
|
// FlyCircleAroundWaypoint
|
|
// Allows a flying creature to circle around a given
|
|
// Waypoint node.
|
|
//=============================================
|
|
class FlyCircleAroundWaypoint : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
FlyToPoint fly;
|
|
//float original_z;
|
|
qboolean fly_clockwise;
|
|
str waypointname;
|
|
qboolean nearestPlayer;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FlyCircleAroundWaypoint );
|
|
|
|
FlyCircleAroundWaypoint();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
WayPointNode *GetWayPoint( Actor &self );
|
|
WayPointNode *GetWayPointNearestPlayer( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void FlyCircleAroundWaypoint::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
//arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveBoolean( &fly_clockwise );
|
|
arc.ArchiveString( &waypointname );
|
|
arc.ArchiveBoolean( &nearestPlayer );
|
|
}
|
|
|
|
//================================================================
|
|
// Sort of a hack for now. This is basically a specialized version
|
|
// of Fly to point. But it's not really cleaned up.
|
|
//===============================================================
|
|
class HelicopterFlyToPoint : public Behavior
|
|
{
|
|
private:
|
|
float avoidtime;
|
|
Vector target_angle;
|
|
float turn_speed;
|
|
float old_turn_speed;
|
|
float speed;
|
|
float old_forward_speed;
|
|
Vector goal;
|
|
qboolean random_allowed;
|
|
qboolean force_goal;
|
|
int stuck;
|
|
Vector temp_goal;
|
|
qboolean use_temp_goal;
|
|
qboolean adjustYawAndRoll;
|
|
qboolean offsetOrigin;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( HelicopterFlyToPoint );
|
|
|
|
HelicopterFlyToPoint();
|
|
|
|
void SetTurnSpeed( float new_turn_speed );
|
|
void SetGoalPoint( const Vector &goal_point );
|
|
void SetRandomAllowed( qboolean allowed );
|
|
void SetSpeed( float speed_value );
|
|
void ForceGoal( void );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
float LerpAngle( float old_angle, float new_angle, float lerp_amount );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
void setAdjustYawAndRoll( bool adjust ) { adjustYawAndRoll = adjust; }
|
|
void setOffsetOrigin( bool setOffset ) { offsetOrigin = setOffset; }
|
|
};
|
|
|
|
inline void HelicopterFlyToPoint::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveFloat( &avoidtime );
|
|
arc.ArchiveVector( &target_angle );
|
|
arc.ArchiveFloat( &turn_speed );
|
|
arc.ArchiveFloat( &old_turn_speed );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveFloat( &old_forward_speed );
|
|
arc.ArchiveVector( &goal );
|
|
arc.ArchiveBoolean( &random_allowed );
|
|
arc.ArchiveBoolean( &force_goal );
|
|
arc.ArchiveInteger( &stuck );
|
|
arc.ArchiveVector( &temp_goal );
|
|
arc.ArchiveBoolean( &use_temp_goal );
|
|
arc.ArchiveBoolean( &adjustYawAndRoll );
|
|
arc.ArchiveBoolean( &offsetOrigin );
|
|
}
|
|
|
|
//================================================================
|
|
// Sort of a hack for now. This is basically a specialized version
|
|
// of Fly to point. But it's not really cleaned up.
|
|
//===============================================================
|
|
class HelicopterFlyCircle : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
HelicopterFlyToPoint fly;
|
|
//float original_z;
|
|
qboolean fly_clockwise;
|
|
qboolean circle_player;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( HelicopterFlyCircle );
|
|
|
|
HelicopterFlyCircle();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void HelicopterFlyCircle::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
//arc.ArchiveFloat( &original_z );
|
|
arc.ArchiveBoolean( &fly_clockwise );
|
|
arc.ArchiveBoolean( &circle_player );
|
|
}
|
|
|
|
//===================================================
|
|
// Helicopter Strafe Attack
|
|
//==================================================
|
|
class HelicopterStrafeAttack : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
Vector dir;
|
|
Vector targetAngles;
|
|
//float angleDelta;
|
|
float turnTime;
|
|
|
|
float lerpStart;
|
|
float lerpEnd;
|
|
float startYaw;
|
|
float endYaw;
|
|
qboolean setUpLerp;
|
|
qboolean completedLerp;
|
|
|
|
Vector goal;
|
|
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( HelicopterStrafeAttack );
|
|
|
|
HelicopterStrafeAttack();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
WayPointNode *GetWayPointNearestPlayer( Actor &self );
|
|
WayPointNode *GetWayPoint( Actor &self , const str &name );
|
|
void LerpToNewAngle( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void HelicopterStrafeAttack::Archive( Archiver &arc )
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveVector( &dir );
|
|
arc.ArchiveVector( &targetAngles );
|
|
arc.ArchiveFloat( &turnTime );
|
|
|
|
arc.ArchiveFloat( &lerpStart );
|
|
arc.ArchiveFloat( &lerpEnd );
|
|
arc.ArchiveFloat( &startYaw );
|
|
arc.ArchiveFloat( &endYaw );
|
|
arc.ArchiveBoolean( &setUpLerp );
|
|
arc.ArchiveBoolean( &completedLerp );
|
|
|
|
arc.ArchiveVector( &goal );
|
|
}
|
|
|
|
//=============================================
|
|
// HelicopterFlyToWaypoint
|
|
// Allows a flying creature to circle around a given
|
|
// Waypoint node.
|
|
//=============================================
|
|
class HelicopterFlyToWaypoint : public Behavior
|
|
{
|
|
private:
|
|
str anim;
|
|
HelicopterFlyToPoint fly;
|
|
str waypointname;
|
|
qboolean nearestPlayer;
|
|
qboolean nearestPlayerTarget;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( HelicopterFlyToWaypoint );
|
|
|
|
HelicopterFlyToWaypoint();
|
|
|
|
void SetArgs( Event *ev );
|
|
void ShowInfo( Actor &self );
|
|
void Begin( Actor &self );
|
|
BehaviorReturnCode_t Evaluate( Actor &self );
|
|
void End( Actor &self );
|
|
WayPointNode *GetWayPoint( Actor &self );
|
|
WayPointNode *GetWayPointNearestPlayer( Actor &self );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void HelicopterFlyToWaypoint::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Behavior::Archive( arc );
|
|
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveObject( &fly );
|
|
arc.ArchiveString( &waypointname );
|
|
arc.ArchiveBoolean( &nearestPlayer );
|
|
arc.ArchiveBoolean( &nearestPlayerTarget );
|
|
}
|
|
|
|
//
|
|
//I know, I know... It hurts me too, but until I get all this behavior transition stuff squared away
|
|
//there's not much that can be done about it.
|
|
//
|
|
#include "PlayAnim.hpp"
|
|
|
|
#endif /* behavior.h */
|