ef2-sdk/dlls/game/steering.h

143 lines
3.7 KiB
C
Raw Permalink Normal View History

2003-11-05 00:00:00 +00:00
//-----------------------------------------------------------------------------
//
// $Logfile:: /Code/DLLs/game/steering.h $
// $Revision:: 21 $
// $Author:: Steven $
// $Date:: 10/13/03 8:54a $
//
// 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:
// Steering behaviors for AI.
//
#ifndef __STEERING2_H__
#define __STEERING2_H__
#include "g_local.h"
#include "entity.h"
class Actor;
//-----------------------------------------------------------------------------
//
// Steering Class Declaration
//
//-----------------------------------------------------------------------------
class Steering : public Listener
{
public:
enum ReturnValue
{
EVALUATING,
EVALUATING_REACHED_NODE,
SUCCESS,
FAILED_BLOCKED_BY_ENEMY,
FAILED_BLOCKED_BY_CIVILIAN,
FAILED_BLOCKED_BY_FRIEND,
FAILED_BLOCKED_BY_TEAMMATE,
FAILED_BLOCKED_BY_WORLD,
FAILED_BLOCKED_BY_FALL,
FAILED_BLOCKED_BY_DOOR,
FAILED_CANNOT_GET_TO_PATH,
FAILED_NO_PATH,
FAILED,
ERROR,
NUMBER_OF_RETURN_VALUES,
};
CLASS_PROTOTYPE( Steering );
Steering();
virtual void ShowInfo( Actor &self );
virtual void Begin( Actor &self );
virtual const ReturnValue Evaluate( Actor &self );
virtual void End( Actor &self );
virtual void ResetForces( void );
virtual const Vector & GetSteeringForce( void ) const;
virtual void SetSteeringForce( const Vector &steeringForce );
virtual const Vector & GetPosition( void ) const;
virtual void SetPosition( const Vector &pos );
virtual const Vector & GetMoveDirection( void ) const;
virtual void SetMoveDirection( const Vector &dir );
virtual const float GetMaxSpeed( void ) const;
virtual void SetMaxSpeed( float speed );
virtual void DrawForces( void );
virtual void Archive( Archiver &arc );
private:
Vector _steeringForce;
Vector _origin;
Vector _moveDirection;
float _maxSpeed;
};
inline void Steering::Archive
(
Archiver &arc
)
{
Listener::Archive( arc );
arc.ArchiveVector( &_steeringForce );
arc.ArchiveVector( &_origin );
arc.ArchiveVector( &_moveDirection );
arc.ArchiveFloat( &_maxSpeed );
}
enum JumpStates
{
JUMP_PREPARE,
JUMP_LAUNCH,
JUMP_FALL,
JUMP_LANDING
};
class Jump : public Steering
{
public:
CLASS_PROTOTYPE( Jump );
Jump();
void SetGoal( const Vector &goalPosition );
void SetEntity( Entity *ent_to_jump_to );
void SetLaunchAngle( const float launchAngle) { _launchAngle = launchAngle; }
void Begin( Actor &self );
virtual const ReturnValue Evaluate( Actor &self );
void End( Actor &self );
virtual void Archive( Archiver &arc );
private:
float _endtime;
Angle _launchAngle;
str _anim;
int _state;
bool _animdone;
Vector _goal;
};
inline void Jump::Archive
(
Archiver &arc
)
{
Steering::Archive( arc );
arc.ArchiveFloat( &_endtime );
arc.ArchiveFloat( &_launchAngle.GetValue() );
arc.ArchiveString( &_anim );
arc.ArchiveInteger( &_state );
arc.ArchiveBool( &_animdone );
arc.ArchiveVector( &_goal );
}
#endif // steering.h