this keik game source

源代码在线查看: script.h

软件大小: 746 K
上传用户: wanjunsheng
关键词: source this keik game
下载地址: 免注册下载 普通下载 VIP

相关代码

				//-----------------------------------------------------------------------------
				//
				//  $Logfile:: /Quake 2 Engine/Sin/code/game/script.h                         $
				// $Revision:: 12                                                             $
				//   $Author:: Jimdose                                                        $
				//     $Date:: 10/07/98 11:59p                                                $
				//
				// 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/script.h                              $
				// 
				// 12    10/07/98 11:59p Jimdose
				// changed script_p to offset in script markers
				// 
				// 11    9/21/98 10:15p Markd
				// Putting archiving and unarchiving functions in
				// 
				// 10    6/09/98 4:24p Jimdose
				// filename is now an str
				// added close and filename
				// 
				// 9     5/26/98 11:59p Markd
				// moved buffer out of protected for e3 demo
				// 
				// 8     5/24/98 4:48p Jimdose
				// Made char *'s const
				// 
				// 7     3/02/98 8:49p Jimdose
				// Changed CLASS_PROTOTYPE to only take the classname
				// 
				// 6     2/17/98 7:14p Jimdose
				// Added MarkPosition and RestorePosition
				// Added atString for determining if the next token is a quoted string
				// 
				// 5     2/03/98 10:54a Jimdose
				// Updated to work with Quake 2 engine
				// 
				// 3     11/24/97 4:30p Markd
				// Added GetVector 
				// 
				// 2     9/26/97 6:14p Jimdose
				// Added standard Ritual headers
				//
				// DESCRIPTION:
				// C++ implementaion of tokenizing text interpretation.  Class accepts filename
				// to load or pointer to preloaded text data.  Standard tokenizing operations
				// such as skip white-space, get string, get integer, get float, get token,
				// and skip line are implemented.  
				//
				// Note: all '//', '#', and ';' are treated as comments.  Probably should
				// make this behaviour toggleable.
				// 
				
				#ifndef __SCRIPT_H__
				#define __SCRIPT_H__
				
				#include "class.h"
				#include "vector.h"
				#include "str.h"
				
				#define	MAXTOKEN	256
				
				typedef struct
					{
					qboolean		tokenready;
				   int         offset;
					int			line;		
					char			token[ MAXTOKEN ];
					} scriptmarker_t;
				
				class EXPORT_FROM_DLL Script : public Class
					{
					protected:
						qboolean		tokenready;
						
						str			filename;
						const char	*script_p;
						const char	*end_p;
						
						int			line;		
						char			token[ MAXTOKEN ];
				
						qboolean		releaseBuffer;
				
						qboolean		AtComment( void );
						void			CheckOverflow( void );
				
					public:
						const char	*buffer;
						int			length;
				
				      CLASS_PROTOTYPE( Script );
				
						~Script();
						Script();
						void			Close( void );
						const char *Filename( void );
						int			GetLineNumber( void );
						void			Reset( void );	
						void			MarkPosition( scriptmarker_t *mark );
						void			RestorePosition( scriptmarker_t *mark );
						qboolean		SkipToEOL( void );
						void			SkipWhiteSpace( qboolean crossline );
						void			SkipNonToken( qboolean crossline );
						qboolean		TokenAvailable( qboolean crossline );
						qboolean		CommentAvailable( qboolean crossline );
						void			UnGetToken( void );
						qboolean		AtString( qboolean crossline );
						const char	*GetToken( qboolean crossline );
						const char	*GetLine( qboolean crossline );
						const char	*GetRaw( void );
						const char	*GetString( qboolean crossline );
						qboolean		GetSpecific( const char *string );
						int			GetInteger( qboolean crossline );
						double		GetDouble( qboolean crossline );
						float			GetFloat( qboolean crossline );
						Vector		GetVector( qboolean crossline );
						int			LinesInFile( void );
						void			Parse( const char *data, int length, const char *name );
						void			LoadFile( const char *name );
						const char	*Token( void );
				      virtual void Archive( Archiver &arc );
				      virtual void Unarchive( Archiver &arc );
					};
				
				inline EXPORT_FROM_DLL void Script::Archive
					(
					Archiver &arc
					)
				   {
				   Class::Archive( arc );
				
				   arc.WriteString( filename );
				   arc.WriteBoolean( tokenready );
				   //
				   // save out current pointer as an offset
				   //
				   arc.WriteInteger( script_p - buffer );
				   arc.WriteInteger( line );
				   arc.WriteRaw( token, sizeof( token ) );
				   }
				
				inline EXPORT_FROM_DLL void Script::Unarchive
					(
					Archiver &arc
					)
				   {
				   int i;
				
				   Class::Unarchive( arc );
				
				   arc.ReadString( &filename );
				   //
				   // load the file in
				   //
				   LoadFile( filename.c_str() );
				
				   arc.ReadBoolean( &tokenready );
				   arc.ReadInteger( &i );
				   //
				   // restore the script pointer
				   //
				   script_p = buffer + i;
				   arc.ReadInteger( &line );
				   arc.ReadRaw( token, sizeof( token ) );
				   }
				
				#endif
							

相关资源