mirror of
https://github.com/UberGames/EF2GameSource.git
synced 2024-11-27 13:42:00 +00:00
313 lines
7.4 KiB
C++
313 lines
7.4 KiB
C++
//-----------------------------------------------------------------------------
|
|
//
|
|
// $Logfile:: /Code/DLLs/game/worldspawn.h $
|
|
// $Revision:: 28 $
|
|
// $Author:: Steven $
|
|
// $Date:: 3/02/03 4:13p $
|
|
//
|
|
// Copyright (C) 2002 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:
|
|
// Base class for worldspawn objects. This should be subclassed whenever
|
|
// a DLL has new game behaviour that needs to be initialized before any other
|
|
// entities are created, or before any entity thinks each frame. Also controls
|
|
// spawning of clients.
|
|
//
|
|
|
|
class TargetList;
|
|
class DynamicLightInfo;
|
|
class WindInfo;
|
|
class World;
|
|
|
|
#ifndef __WORLDSPAWN_H__
|
|
#define __WORLDSPAWN_H__
|
|
|
|
#include "entity.h"
|
|
#include <qcommon/qfiles.h>
|
|
|
|
typedef enum
|
|
{
|
|
WORLD_PHYSICS_MAXSPEED,
|
|
WORLD_PHYSICS_AIRACCELERATE,
|
|
WORLD_PHYSICS_GRAVITY,
|
|
|
|
WORLD_PHYSICS_TOTAL_NUMBER
|
|
} WorldPhysicsVarTypes;
|
|
|
|
class TargetList : public Class
|
|
{
|
|
public:
|
|
CLASS_PROTOTYPE( TargetList );
|
|
|
|
Container<Entity *> list;
|
|
str targetname;
|
|
int index;
|
|
|
|
TargetList();
|
|
TargetList( const str &tname );
|
|
~TargetList();
|
|
|
|
void AddEntity( Entity * ent );
|
|
void RemoveEntity( Entity * ent );
|
|
Entity *GetNextEntity( Entity * ent );
|
|
int GetNumTargets() { return list.NumObjects() ; }
|
|
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
class DynamicLightInfo
|
|
{
|
|
public:
|
|
float defaultIntensity;
|
|
|
|
float intensity;
|
|
|
|
float start_intensity;
|
|
float end_intensity;
|
|
|
|
float start_fade_time;
|
|
float fade_time;
|
|
|
|
str lightstyle;
|
|
int current_lightstyle_position;
|
|
qboolean stop_at_end;
|
|
|
|
DynamicLightInfo();
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void DynamicLightInfo::Archive( Archiver &arc )
|
|
{
|
|
arc.ArchiveFloat( &defaultIntensity );
|
|
|
|
arc.ArchiveFloat( &intensity );
|
|
arc.ArchiveFloat( &start_intensity );
|
|
arc.ArchiveFloat( &end_intensity );
|
|
|
|
arc.ArchiveFloat( &start_fade_time );
|
|
arc.ArchiveFloat( &fade_time );
|
|
|
|
arc.ArchiveString( &lightstyle );
|
|
arc.ArchiveInteger( ¤t_lightstyle_position );
|
|
arc.ArchiveBoolean( &stop_at_end );
|
|
}
|
|
|
|
class WindInfo
|
|
{
|
|
public:
|
|
Vector direction;
|
|
float intensity;
|
|
|
|
float start_intensity;
|
|
float end_intensity;
|
|
|
|
float min_intensity;
|
|
float max_intensity;
|
|
|
|
float start_fade_time;
|
|
float fade_time;
|
|
|
|
float gust_time;
|
|
|
|
float max_change;
|
|
|
|
WindInfo();
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void WindInfo::Archive( Archiver &arc )
|
|
{
|
|
arc.ArchiveVector( &direction );
|
|
arc.ArchiveFloat( &intensity );
|
|
arc.ArchiveFloat( &start_intensity );
|
|
arc.ArchiveFloat( &end_intensity );
|
|
|
|
arc.ArchiveFloat( &min_intensity );
|
|
arc.ArchiveFloat( &max_intensity );
|
|
|
|
arc.ArchiveFloat( &start_fade_time );
|
|
arc.ArchiveFloat( &fade_time );
|
|
|
|
arc.ArchiveFloat( &gust_time );
|
|
|
|
arc.ArchiveFloat( &max_change );
|
|
}
|
|
|
|
class WeatherInfo
|
|
{
|
|
public:
|
|
weather_t type;
|
|
int intensity;
|
|
|
|
WeatherInfo();
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void WeatherInfo::Archive( Archiver &arc )
|
|
{
|
|
ArchiveEnum( type, weather_t );
|
|
arc.ArchiveInteger( &intensity );
|
|
}
|
|
|
|
class World : public Entity
|
|
{
|
|
private:
|
|
Container<TargetList *> targetList;
|
|
Container<str> _brokenThings;
|
|
Container<str> _availableViewModes;
|
|
qboolean world_dying;
|
|
|
|
public:
|
|
CLASS_PROTOTYPE( World );
|
|
|
|
str skipthread;
|
|
float farplane_distance;
|
|
Vector farplane_color;
|
|
qboolean farplane_cull;
|
|
qboolean farplane_fog;
|
|
|
|
qboolean terrain_global;
|
|
float terrain_global_min;
|
|
|
|
float entity_fade_dist;
|
|
|
|
DynamicLightInfo dynamic_lights[ MAX_LIGHTING_GROUPS ];
|
|
|
|
WindInfo wind;
|
|
|
|
WeatherInfo weather;
|
|
float time_scale;
|
|
|
|
float sky_alpha;
|
|
qboolean sky_portal;
|
|
|
|
// Movement info
|
|
float _physicsInfo[ WORLD_PHYSICS_TOTAL_NUMBER ];
|
|
|
|
bool _canShakeCamera;
|
|
|
|
World();
|
|
~World();
|
|
|
|
void FreeTargetList( void );
|
|
//TargetList *GetTargetList( const str &targetname );
|
|
TargetList *GetTargetList( const str &targetname, qboolean createnew = true );
|
|
TargetList *GetTargetList( int index );
|
|
void AddTargetEntity( const str &targetname, Entity * ent );
|
|
void RemoveTargetEntity( const str &targetname, Entity * ent );
|
|
Entity *GetNextEntity( const str &targetname, Entity * ent );
|
|
void SetSoundtrack( Event *ev );
|
|
void SetSkipThread( Event *ev );
|
|
void SetNextMap( Event *ev );
|
|
void SetMessage( Event *ev );
|
|
void SetScript( Event *ev );
|
|
void SetWaterColor( Event *ev );
|
|
void SetWaterAlpha( Event *ev );
|
|
void SetSlimeColor( Event *ev );
|
|
void SetSlimeAlpha( Event *ev );
|
|
void SetLavaColor( Event *ev );
|
|
void SetLavaAlpha( Event *ev );
|
|
void SetFarPlane_Color( Event *ev );
|
|
void SetFarPlane_Cull( Event *ev );
|
|
void SetFarPlane_Fog( Event *ev );
|
|
void SetFarPlane( Event *ev );
|
|
void SetTerrainGlobal( Event *ev );
|
|
void SetTerrainGlobalMin( Event *ev );
|
|
void SetEntityFadeDist( Event *ev );
|
|
void SetSkyAlpha( Event *ev );
|
|
void SetSkyPortal( Event *ev );
|
|
void UpdateConfigStrings( void );
|
|
void UpdateFog( void );
|
|
void UpdateTerrain( void );
|
|
void UpdateEntityFadeDist( void );
|
|
void UpdateDynamicLights( void );
|
|
void UpdateWindDirection( void );
|
|
void UpdateWindIntensity( void );
|
|
void UpdateWeather( void );
|
|
void UpdateTimeScale( void );
|
|
void UpdateSky( void );
|
|
|
|
void SetLightIntensity( Event *ev );
|
|
void SetLightDefaultIntensity( Event *ev );
|
|
void SetLightFade( Event *ev );
|
|
void SetLightLightstyle( Event *ev );
|
|
void GetLightIntensity( Event *ev );
|
|
|
|
void SetWindDensity( Event *ev );
|
|
void SetWindDirection( Event *ev );
|
|
void SetWindIntensity( Event *ev );
|
|
void SetWindGust( Event *ev );
|
|
void SetWindFade( Event *ev );
|
|
void SetWindMinMax( Event *ev );
|
|
void SetWeather( Event *ev );
|
|
|
|
int worldPhysicsVarNameToIndex( const char *varName );
|
|
void setPhysicsVar( Event *ev );
|
|
void setPhysicsVar( const char *varName, float varValue );
|
|
float getPhysicsVar( const char *varName );
|
|
float getPhysicsVar( int index );
|
|
|
|
void SetTimeScale( Event *ev );
|
|
|
|
int findBrokenThing( const char *name );
|
|
void addBrokenThing( const char *name );
|
|
void removeBrokenThing( const char *name );
|
|
bool isThingBroken( const char *name );
|
|
void addBrokenThing( Event *ev );
|
|
void removeBrokenThing( Event *ev );
|
|
void freeAllBrokenThings( void );
|
|
|
|
void addAvailableViewMode( Event *ev );
|
|
void removeAvailableViewMode( Event *ev );
|
|
void clearAvailableViewModes( Event *ev );
|
|
bool isAnyViewModeAvailable( void );
|
|
bool isViewModeAvailable( const char *name );
|
|
|
|
void setCanShakeCamera( Event *ev );
|
|
bool canShakeCamera( void );
|
|
|
|
void Think( void );
|
|
|
|
virtual void Archive( Archiver &arc );
|
|
};
|
|
|
|
inline void TargetList::Archive( Archiver &arc )
|
|
{
|
|
int num, i;
|
|
|
|
Class::Archive( arc );
|
|
|
|
if ( arc.Saving() )
|
|
num = list.NumObjects();
|
|
|
|
arc.ArchiveInteger( &num );
|
|
|
|
if ( arc.Loading() )
|
|
{
|
|
list.ClearObjectList();
|
|
list.Resize( num );
|
|
}
|
|
|
|
for ( i = 1; i <= num; i++ )
|
|
{
|
|
arc.ArchiveObjectPointer( ( Class ** )list.AddressOfObjectAt( i ) );
|
|
}
|
|
|
|
arc.ArchiveString( &targetname );
|
|
arc.ArchiveInteger( &index );
|
|
}
|
|
|
|
inline TargetList *World::GetTargetList( int index )
|
|
{
|
|
return targetList.ObjectAt( index );
|
|
}
|
|
|
|
typedef SafePtr<World> WorldPtr;
|
|
extern WorldPtr world;
|
|
|
|
#endif /* worldspawn.h */
|