489 lines
13 KiB
C++
489 lines
13 KiB
C++
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Logfile:: /Code/DLLs/game/misc.h $
|
|
// $Revision:: 18 $
|
|
// $Author:: Steven $
|
|
// $Date:: 10/13/03 8:54a $
|
|
//
|
|
// Copyright (C) 1997 by Ritual Entertainment, Inc.
|
|
// All rights reserved.
|
|
//
|
|
// This source is may not be distributed and/or modified without
|
|
// expressly written permission by Ritual Entertainment, Inc.
|
|
//
|
|
//
|
|
// DESCRIPTION:
|
|
// Basically the big stew pot of the DLLs, or maybe a garbage bin, whichever
|
|
// metaphore you prefer. This really should be cleaned up. Anyway, this
|
|
// should contain utility functions that could be used by any entity.
|
|
// Right now it contains everything from entities that could be in their
|
|
// own file to my mother pot roast recipes.
|
|
//
|
|
|
|
#ifndef __MISC_H__
|
|
#define __MISC_H__
|
|
|
|
#include "g_local.h"
|
|
#include "entity.h"
|
|
#include "mover.h"
|
|
#include "animate.h"
|
|
|
|
class InfoNull : public Listener
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE( InfoNull );
|
|
|
|
InfoNull();
|
|
};
|
|
|
|
class FuncRemove : public Entity
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE( FuncRemove );
|
|
|
|
FuncRemove();
|
|
};
|
|
|
|
class MiscModel : public Entity
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE( MiscModel );
|
|
|
|
MiscModel();
|
|
};
|
|
|
|
class InfoNotNull : public Entity
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE( InfoNotNull );
|
|
};
|
|
|
|
class ExplodingWall : public Trigger
|
|
{
|
|
protected:
|
|
int dmg;
|
|
int explosions;
|
|
float attack_finished;
|
|
Vector land_angles;
|
|
float land_radius;
|
|
float angle_speed;
|
|
int state;
|
|
Vector base_velocity;
|
|
Vector random_velocity;
|
|
Vector orig_mins, orig_maxs;
|
|
qboolean on_ground;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( ExplodingWall );
|
|
|
|
ExplodingWall();
|
|
void Setup( Event *ev );
|
|
void AngleSpeed( Event *ev );
|
|
void LandRadius( Event *ev );
|
|
void LandAngles( Event *ev );
|
|
void BaseVelocity( Event *ev );
|
|
void RandomVelocity( Event *ev );
|
|
void SetDmg( Event *ev );
|
|
void SetExplosions( Event *ev );
|
|
void SetupSecondStage( void );
|
|
void Explode( Event *ev );
|
|
void DamageEvent( Event *ev );
|
|
void GroundDamage( Event *ev );
|
|
void TouchFunc( Event *ev );
|
|
void StopRotating( Event *ev );
|
|
void CheckOnGround( Event *ev );
|
|
void setDamage( Event *ev );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void ExplodingWall::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Trigger::Archive( arc );
|
|
|
|
arc.ArchiveInteger( &dmg );
|
|
arc.ArchiveInteger( &explosions );
|
|
arc.ArchiveFloat( &attack_finished );
|
|
arc.ArchiveVector( &land_angles );
|
|
arc.ArchiveFloat( &land_radius );
|
|
arc.ArchiveFloat( &angle_speed );
|
|
arc.ArchiveInteger( &state );
|
|
arc.ArchiveVector( &base_velocity );
|
|
arc.ArchiveVector( &random_velocity );
|
|
arc.ArchiveVector( &orig_mins );
|
|
arc.ArchiveVector( &orig_maxs );
|
|
arc.ArchiveBoolean( &on_ground );
|
|
}
|
|
|
|
class Teleporter : public Trigger
|
|
{
|
|
public:
|
|
str teleport_thread;
|
|
qboolean in_use;
|
|
|
|
CLASS_PROTOTYPE( Teleporter );
|
|
|
|
Teleporter();
|
|
virtual void StartTeleport( Event *ev );
|
|
virtual void Teleport( Event *ev );
|
|
virtual void StopTeleport( Event *ev );
|
|
void SetThread( Event *ev );
|
|
bool doFullTeleport( Entity *entity );
|
|
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void Teleporter::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Trigger::Archive( arc );
|
|
|
|
arc.ArchiveString( &teleport_thread );
|
|
arc.ArchiveBoolean( &in_use );
|
|
}
|
|
|
|
class TeleporterDestination : public Entity
|
|
{
|
|
public:
|
|
Vector movedir;
|
|
|
|
CLASS_PROTOTYPE( TeleporterDestination );
|
|
|
|
TeleporterDestination();
|
|
void SetMoveDir( Event *ev );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TeleporterDestination::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveVector( &movedir );
|
|
}
|
|
|
|
class UseAnim : public Entity
|
|
{
|
|
public:
|
|
int count;
|
|
qboolean active;
|
|
str thread;
|
|
str triggertarget;
|
|
int num_loops;
|
|
str state;
|
|
str camera;
|
|
str anim;
|
|
str key;
|
|
float delay;
|
|
float last_active_time;
|
|
str action_type;
|
|
|
|
CLASS_PROTOTYPE( UseAnim );
|
|
|
|
UseAnim();
|
|
virtual void Touched( Event *ev );
|
|
void Reset( Event *ev );
|
|
void SetThread( Event * ev );
|
|
void SetTriggerTarget( Event * ev );
|
|
void SetCount( Event * ev );
|
|
void SetAnim( Event *ev );
|
|
void SetState( Event *ev );
|
|
void SetKey( Event *ev );
|
|
void SetCamera( Event *ev );
|
|
void SetNumLoops( Event *ev );
|
|
void SetDelay( Event *ev );
|
|
bool canBeUsed( Entity *activator );
|
|
bool GetInformation( const Entity *activator, Vector * org, Vector * angles, str * animatoin, int * loopcount, str * state, str * camera );
|
|
void TriggerTargets( Entity *activator );
|
|
void SetActionType( Event *ev );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void UseAnim::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveInteger( &count );
|
|
arc.ArchiveBoolean( &active );
|
|
arc.ArchiveString( &thread );
|
|
arc.ArchiveString( &triggertarget );
|
|
arc.ArchiveInteger( &num_loops );
|
|
arc.ArchiveString( &state );
|
|
arc.ArchiveString( &camera );
|
|
arc.ArchiveString( &anim );
|
|
arc.ArchiveString( &key );
|
|
arc.ArchiveFloat( &delay );
|
|
arc.ArchiveFloat( &last_active_time );
|
|
arc.ArchiveString( &action_type );
|
|
}
|
|
|
|
class TouchAnim : public UseAnim
|
|
{
|
|
public:
|
|
|
|
CLASS_PROTOTYPE( TouchAnim );
|
|
|
|
TouchAnim();
|
|
};
|
|
|
|
|
|
class UseAnimDestination : public Entity
|
|
{
|
|
public:
|
|
int num_loops;
|
|
str state;
|
|
str anim;
|
|
|
|
CLASS_PROTOTYPE( UseAnimDestination );
|
|
|
|
UseAnimDestination();
|
|
void SetAnim( Event *ev );
|
|
void SetState( Event *ev );
|
|
void SetNumLoops( Event *ev );
|
|
int GetNumLoops( void );
|
|
str GetAnim( void );
|
|
str GetState( void );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void UseAnimDestination::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveInteger( &num_loops );
|
|
arc.ArchiveString( &state );
|
|
arc.ArchiveString( &anim );
|
|
}
|
|
|
|
class UseObject : public Entity
|
|
{
|
|
public:
|
|
str move_thread;
|
|
str stop_thread;
|
|
str reset_thread;
|
|
str triggertarget;
|
|
Vector offset;
|
|
float yaw_offset;
|
|
int count;
|
|
float cone;
|
|
str state;
|
|
str state_backwards;
|
|
str useMaterial;
|
|
int objectState;
|
|
float reset_time;
|
|
str action_type;
|
|
qboolean active;
|
|
bool movetheplayer;
|
|
|
|
CLASS_PROTOTYPE( UseObject );
|
|
|
|
UseObject();
|
|
void SetMoveThread( Event * ev );
|
|
void SetStopThread( Event * ev );
|
|
void SetResetThread( Event * ev );
|
|
void SetTriggerTarget( Event * ev );
|
|
void SetOffset( Event * ev );
|
|
void SetYawOffset( Event * ev );
|
|
void SetCount( Event * ev );
|
|
void SetCone( Event * ev );
|
|
void SetState( Event * ev );
|
|
void SetBackwardsState( Event * ev );
|
|
void SetResetTime( Event * ev );
|
|
void Reset( Event * ev );
|
|
void Resetting( Event * ev );
|
|
void DamageTriggered( Event * ev );
|
|
void DamageFunc( Event * ev );
|
|
bool canBeUsed( const Vector &org, const Vector &dir );
|
|
void Setup( const Entity *activator, Vector *org, Vector *ang, str *newstate );
|
|
void Start( Event * ev = NULL );
|
|
bool Loop( void );
|
|
void SetActiveState( Event *ev );
|
|
void Stop( Entity *activator );
|
|
void ActivateEvent( Event *ev );
|
|
void DeactivateEvent( Event *ev );
|
|
void UseMaterialEvent( Event *ev );
|
|
void SetActionType( Event *ev );
|
|
void MoveThePlayer( Event *ev );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void UseObject::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveString( &move_thread );
|
|
arc.ArchiveString( &stop_thread );
|
|
arc.ArchiveString( &reset_thread );
|
|
arc.ArchiveString( &triggertarget );
|
|
arc.ArchiveVector( &offset );
|
|
arc.ArchiveFloat( &yaw_offset );
|
|
arc.ArchiveInteger( &count );
|
|
arc.ArchiveFloat( &cone );
|
|
arc.ArchiveString( &state );
|
|
arc.ArchiveString( &state_backwards );
|
|
arc.ArchiveString( &useMaterial );
|
|
arc.ArchiveInteger( &objectState );
|
|
arc.ArchiveFloat( &reset_time );
|
|
arc.ArchiveString( &action_type );
|
|
arc.ArchiveBoolean( &active );
|
|
arc.ArchiveBool( &movetheplayer );
|
|
|
|
}
|
|
|
|
|
|
class Waypoint : public Entity
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE( Waypoint );
|
|
};
|
|
|
|
class TossObject : public Entity
|
|
{
|
|
private:
|
|
str bouncesound;
|
|
float bouncesoundchance;
|
|
void Stop( Event *ev );
|
|
void Touch( Event *ev );
|
|
void SetBounceSound( Event *ev );
|
|
void SetBounceSoundChance( Event *ev );
|
|
public:
|
|
CLASS_PROTOTYPE( TossObject );
|
|
|
|
TossObject();
|
|
TossObject( const str &modelname );
|
|
void SetBounceSound( const str &bounce );
|
|
void SetBounceSoundChance( float chance );
|
|
void SetVelocity( float severity );
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TossObject::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveString( &bouncesound );
|
|
arc.ArchiveFloat( &bouncesoundchance );
|
|
}
|
|
|
|
|
|
class PushObject : public Entity
|
|
{
|
|
private:
|
|
EntityPtr owner;
|
|
float attack_finished;
|
|
int dmg;
|
|
str pushsound;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( PushObject );
|
|
|
|
PushObject();
|
|
void Start( Event *ev );
|
|
void SetDamage( Event *ev );
|
|
void BlockFunc( Event *ev );
|
|
void SetPushSound( Event *ev );
|
|
qboolean Push( Entity *pusher, const Vector &move );
|
|
qboolean canPush( const Vector &dir );
|
|
void setDamage( Event *ev );
|
|
|
|
Entity *getOwner( void );
|
|
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void PushObject::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveSafePointer( &owner );
|
|
arc.ArchiveFloat( &attack_finished );
|
|
arc.ArchiveInteger( &dmg );
|
|
arc.ArchiveString( &pushsound );
|
|
}
|
|
|
|
class FallingRock : public Entity
|
|
{
|
|
private:
|
|
int active;
|
|
Vector start_origin;
|
|
Vector last_bounce_origin;
|
|
Entity *current;
|
|
Entity *activator;
|
|
Vector bounce_dir;
|
|
Vector rotateaxis;
|
|
float attack_finished;
|
|
float wait;
|
|
float speed;
|
|
int dmg;
|
|
str bouncesound;
|
|
|
|
void Touch( Event *ev );
|
|
void Bounce( Event *ev );
|
|
void Rotate( Event *ev );
|
|
void Activate( Event *ev );
|
|
void NextBounce( void );
|
|
void StartFalling( Event *ev );
|
|
void SetWait( Event *ev );
|
|
void SetSpeed( Event *ev );
|
|
void SetDmg( Event *ev );
|
|
Entity *SetNextBounceDir( void );
|
|
void SetBounceSound( const str &sound );
|
|
void SetBounceSound( Event *ev );
|
|
void setDamage( Event *ev );
|
|
virtual void Archive( Archiver &arc );
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( FallingRock );
|
|
|
|
FallingRock();
|
|
};
|
|
|
|
inline void FallingRock::Archive
|
|
(
|
|
Archiver &arc
|
|
)
|
|
|
|
{
|
|
Entity::Archive( arc );
|
|
|
|
arc.ArchiveInteger( &active );
|
|
arc.ArchiveVector( &start_origin );
|
|
arc.ArchiveVector( &last_bounce_origin );
|
|
arc.ArchiveObjectPointer( ( Class ** )¤t );
|
|
arc.ArchiveObjectPointer( ( Class ** )&activator );
|
|
arc.ArchiveVector( &bounce_dir );
|
|
arc.ArchiveVector( &rotateaxis );
|
|
arc.ArchiveFloat( &attack_finished );
|
|
arc.ArchiveFloat( &wait );
|
|
arc.ArchiveFloat( &speed );
|
|
arc.ArchiveInteger( &dmg );
|
|
arc.ArchiveString( &bouncesound );
|
|
if ( arc.Loading() )
|
|
{
|
|
SetBounceSound( bouncesound );
|
|
}
|
|
}
|
|
|
|
#endif /* misc.h */
|