sin-sdk/scriptvariable.h

331 lines
9.7 KiB
C++

//-----------------------------------------------------------------------------
//
// $Logfile:: /Quake 2 Engine/Sin/code/game/scriptvariable.h $
// $Revision:: 26 $
// $Author:: Jimdose $
// $Date:: 11/08/98 10:54p $
//
// 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.
//
// $Log:: /Quake 2 Engine/Sin/code/game/scriptvariable.h $
//
// 26 11/08/98 10:54p Jimdose
// vec wasn't being archived
//
// 25 10/25/98 11:53p Jimdose
// added EXPORT_TEMPLATE
//
// 24 10/08/98 12:01a Jimdose
// defined ScriptVariablePtr
//
// 23 9/21/98 10:15p Markd
// Putting archiving and unarchiving functions in
//
// 22 9/21/98 4:21p Markd
// Put in archive functions and rewrote all archive routines
//
// 21 8/20/98 6:09p Markd
// Added ToForward, ToRight, To Up for angle vectors
//
// 20 8/20/98 5:35p Markd
// Added cross product, dot product and length
//
// 19 8/20/98 4:31p Markd
// Added vector support
//
// 18 8/07/98 5:43p Jimdose
// Added isVariableCommand
//
// 17 7/26/98 5:32a Markd
// put in archive functions
//
// 16 7/24/98 4:52p Jimdose
// Added getcvar command to script
//
// 15 7/02/98 4:39p Jimdose
// Changed the name of str to string so that it didn't conflict with the class
// name str
//
// 14 6/30/98 6:07p Jimdose
// Added versions of CreateVariable that accept Entity *'s and Vectors
// Added SetVariable with variations
//
// 13 5/24/98 4:48p Jimdose
// Made char *'s const
//
// 12 4/30/98 9:24p Jimdose
// Changed use of string to str class
//
// 11 4/18/98 6:13p Aldie
// Added randomfloat, randomint, div, and mod
//
// 10 3/27/98 6:26p Aldie
// Added coninput.
//
// 9 3/24/98 8:54p Jimdose
// Added thread management script commands
//
// 8 3/23/98 1:33p Jimdose
// Revamped event and command system
//
// 7 3/02/98 8:49p Jimdose
// Changed CLASS_PROTOTYPE to only take the classname
//
// 6 3/02/98 5:39p Jimdose
// Changed Container to template
//
// 5 2/17/98 7:03p Jimdose
// Added ClearList
//
// 4 2/03/98 10:47a Jimdose
// Updated to work with Quake 2 engine
//
// 2 11/07/97 6:35p Jimdose
// Created file
//
// DESCRIPTION:
// Dynamic variable list for scripts.
//
#ifndef __SCRIPTVARIABLE_H__
#define __SCRIPTVARIABLE_H__
#include "g_local.h"
#include "container.h"
#include "listener.h"
extern Event EV_Var_Append;
extern Event EV_Var_AppendInt;
extern Event EV_Var_AppendFloat;
extern Event EV_Var_String;
extern Event EV_Var_Equals;
extern Event EV_Var_PlusEquals;
extern Event EV_Var_MinusEquals;
extern Event EV_Var_TimesEquals;
extern Event EV_Var_DivideEquals;
extern Event EV_Var_IfEqual;
extern Event EV_Var_IfNotEqual;
extern Event EV_Var_IfGreater;
extern Event EV_Var_IfGreaterEqual;
extern Event EV_Var_IfLess;
extern Event EV_Var_IfLessEqual;
extern Event EV_Var_IfStrEqual;
extern Event EV_Var_IfStrNotEqual;
extern Event EV_Var_IfThreadActive;
extern Event EV_Var_IfThreadNotActive;
extern Event EV_Var_GetCvar;
extern Event EV_Var_Vector;
extern Event EV_Var_VectorIfEqual;
extern Event EV_Var_VectorIfNotEqual;
extern Event EV_Var_VectorAdd;
extern Event EV_Var_VectorSubtract;
extern Event EV_Var_VectorScale;
extern Event EV_Var_VectorNormalize;
extern Event EV_Var_VectorGetX;
extern Event EV_Var_VectorGetY;
extern Event EV_Var_VectorGetZ;
extern Event EV_Var_VectorSetX;
extern Event EV_Var_VectorSetY;
extern Event EV_Var_VectorSetZ;
extern Event EV_Var_VectorDotProduct;
extern Event EV_Var_VectorCrossProduct;
extern Event EV_Var_VectorLength;
extern Event EV_Var_AnglesToForward;
extern Event EV_Var_AnglesToRight;
extern Event EV_Var_AnglesToUp;
class EXPORT_FROM_DLL ScriptVariable : public Listener
{
private:
str name;
float value;
str string;
Vector vec;
void setString( const char *newvalue );
public:
CLASS_PROTOTYPE( ScriptVariable );
ScriptVariable();
qboolean isVariableCommand( const char *name );
void setName( const char *newname );
const char *getName( void );
const char *stringValue( void );
void setStringValue( const char *newvalue );
int intValue( void );
void setIntValue( int newvalue );
float floatValue( void );
void setFloatValue( float newvalue );
void setVectorValue( Vector newvector );
Vector vectorValue( void );
void Var_Append( Event *ev );
void Var_AppendInt( Event *ev );
void Var_AppendFloat( Event *ev );
void Var_String( Event *ev );
void Var_ConInput(Event *ev );
void Var_RandomFloat(Event *ev );
void Var_RandomInteger(Event *ev );
void Var_Equals( Event *ev );
void Var_PlusEquals( Event *ev );
void Var_MinusEquals( Event *ev );
void Var_TimesEquals( Event *ev );
void Var_DivideEquals( Event *ev );
void Var_Div( Event *ev );
void Var_Mod( Event *ev );
void Var_IfEqual( Event *ev );
void Var_IfNotEqual( Event *ev );
void Var_IfGreater( Event *ev );
void Var_IfGreaterEqual( Event *ev );
void Var_IfLess( Event *ev );
void Var_IfLessEqual( Event *ev );
void Var_IfStrEqual( Event *ev );
void Var_IfStrNotEqual( Event *ev );
void Var_IfThreadActive( Event *ev );
void Var_IfThreadNotActive( Event *ev );
void Var_GetCvar( Event *ev );
void Var_Vector( Event *ev );
void Var_Vector_Add( Event *ev );
void Var_Vector_Subtract( Event *ev );
void Var_Vector_Scale( Event *ev );
void Var_Vector_Normalize( Event *ev );
void Var_Vector_GetX( Event *ev );
void Var_Vector_GetY( Event *ev );
void Var_Vector_GetZ( Event *ev );
void Var_Vector_SetX( Event *ev );
void Var_Vector_SetY( Event *ev );
void Var_Vector_SetZ( Event *ev );
void Var_Vector_IfEqual( Event *ev );
void Var_Vector_IfNotEqual( Event *ev );
void Var_Vector_DotProduct( Event *ev );
void Var_Vector_CrossProduct( Event *ev );
void Var_Vector_Length( Event *ev );
void Var_Angles_ToForward( Event *ev );
void Var_Angles_ToRight( Event *ev );
void Var_Angles_ToUp( Event *ev );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void ScriptVariable::Archive
(
Archiver &arc
)
{
arc.WriteString( name );
arc.WriteFloat( value );
arc.WriteString( string );
arc.WriteVector( vec );
}
inline EXPORT_FROM_DLL void ScriptVariable::Unarchive
(
Archiver &arc
)
{
name = arc.ReadString();
value = arc.ReadFloat();
string = arc.ReadString();
vec = arc.ReadVector();
}
//
// Exported templated classes must be explicitly instantiated
//
#ifdef EXPORT_TEMPLATE
template class EXPORT_FROM_DLL Container<ScriptVariable *>;
#endif
class EXPORT_FROM_DLL ScriptVariableList : public Class
{
private:
Container<ScriptVariable *> list;
public:
CLASS_PROTOTYPE( ScriptVariableList );
ScriptVariableList();
~ScriptVariableList();
void ClearList( void );
void AddVariable( ScriptVariable *var );
ScriptVariable *CreateVariable( const char *name, float value );
ScriptVariable *CreateVariable( const char *name, int value );
ScriptVariable *CreateVariable( const char *name, const char *text );
ScriptVariable *CreateVariable( const char *name, Entity *ent );
ScriptVariable *CreateVariable( const char *name, Vector &vec );
void RemoveVariable( ScriptVariable *var );
void RemoveVariable( const char *name );
qboolean VariableExists( const char *name );
ScriptVariable *GetVariable( const char *name );
int NumVariables( void );
ScriptVariable *GetVariable( int num );
ScriptVariable *SetVariable( const char *name, float value );
ScriptVariable *SetVariable( const char *name, int value );
ScriptVariable *SetVariable( const char *name, const char *text );
ScriptVariable *SetVariable( const char *name, Entity *ent );
ScriptVariable *SetVariable( const char *name, Vector &vec );
virtual void Archive( Archiver &arc );
virtual void Unarchive( Archiver &arc );
};
inline EXPORT_FROM_DLL void ScriptVariableList::Archive
(
Archiver &arc
)
{
int i;
int num;
ScriptVariable *var;
num = NumVariables();
arc.WriteInteger( num );
for( i = 1; i <= num; i++ )
{
var = GetVariable( i );
arc.WriteObject( var );
}
}
inline EXPORT_FROM_DLL void ScriptVariableList::Unarchive
(
Archiver &arc
)
{
int i;
int num;
ScriptVariable *var;
ClearList();
num = arc.ReadInteger();
for( i = 1; i <= num; i++ )
{
var = new ScriptVariable;
arc.ReadObject( var );
AddVariable( var );
}
}
#ifdef EXPORT_TEMPLATE
template class EXPORT_FROM_DLL SafePtr<ScriptVariable>;
#endif
typedef SafePtr<ScriptVariable> ScriptVariablePtr;
#endif /* scriptvariable.h */