⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 scriptlist.h

📁 Blood 2全套源码
💻 H
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : ScriptList.h
//
// PURPOSE : List of ScriptCmd class objects
//
// CREATED : 10/21/97
//
// ----------------------------------------------------------------------- //

#ifndef __SCRIPT_LIST_H__
#define __SCRIPT_LIST_H__

#include "dynarray.h"
#include <memory.h>  // for memset

#define MAXDATA_LEN            50

// Cut Scene Commands
#define SCRIPTSCENE_START                           "START"
#define SCRIPTSCENE_END                             "END"

#define SCRIPTSCENE_CUTSCENE                        "CUTSCENE"

#define SCRIPTSCENE_SUBTITLE_DISPLAY                "SUBTITLEDISPLAY"
#define SCRIPTSCENE_SUBTITLE_FADE		            "SUBTITLEFADE"

#define SCRIPTSCENE_PLAY_ANIM                       "PLAYANIM"
#define SCRIPTSCENE_PLAY_SOUNDPOS                   "PLAYSOUNDPOS"
#define SCRIPTSCENE_PLAY_SOUNDOBJ                   "PLAYSOUNDOBJ"

#define SCRIPTSCENE_WAIT							"WAIT"

#define SCRIPTSCENE_KILL_SOUND                      "KILLSOUND"

#define SCRIPTSCENE_OBJECT_CREATE_AT                "OBJECTCREATE"
#define SCRIPTSCENE_OBJECT_CREATE_NEAR              "OBJECTCREATENEAR"

#define SCRIPTSCENE_OBJECT_ASSIGN                   "OBJECTASSIGN"
#define SCRIPTSCENE_OBJECT_CREATE_MODEL_AT          "OBJECTCREATEMODEL"
#define SCRIPTSCENE_OBJECT_CREATE_MODEL_NEAR        "OBJECTCREATEMODELNEAR"
#define SCRIPTSCENE_OBJECT_CREATE_FIRE              "OBJECTCREATEFIRE"

#define SCRIPTSCENE_OBJECT_CREATE_EXPLOSION_AT      "OBJECTCREATE_EXPLOSIONAT"
#define SCRIPTSCENE_OBJECT_CREATE_EXPLOSION_NEAR    "OBJECTCREATE_EXPLOSIONNEAR"

#define SCRIPTSCENE_OBJECT_MOVE                     "OBJECTMOVE"
#define SCRIPTSCENE_OBJECT_MOVE_OVERTIME            "OBJECTMOVETOOBJ"
#define SCRIPTSCENE_OBJECT_TELEPORT                 "OBJECTTELEPORT"
#define SCRIPTSCENE_OBJECT_FLAGS                    "OBJECTFLAGS"
#define SCRIPTSCENE_OBJECT_FLAG_VISIBLE             "OBJECTFLAGVISIBLE"
#define SCRIPTSCENE_OBJECT_FLAG_SOLID               "OBJECTFLAGSOLID"
#define SCRIPTSCENE_OBJECT_FLAG_GRAVITY             "OBJECTFLAGGRAVITY"
#define SCRIPTSCENE_OBJECT_DIMS                     "OBJECTDIMS"
#define SCRIPTSCENE_OBJECT_GIB                      "OBJECTGIB"
#define SCRIPTSCENE_OBJECT_SCALE                    "OBJECTSCALE"
#define SCRIPTSCENE_OBJECT_DESTROY                  "OBJECTDESTROY"

//#define SCRIPTSCENE_CAMERA_FOV                      "CAMERAFOV"
//#define SCRIPTSCENE_CAMERA_RECT                     "CAMERARECT"
#define SCRIPTSCENE_CAMERA_RESET                    "CAMERARESET"

#define SCRIPTSCENE_CAMERA_CREATE                   "CAMERACREATE"         // 
#define SCRIPTSCENE_CAMERA_DESTROY                  "CAMERADESTROY"         // 
#define SCRIPTSCENE_CAMERA_SELECT                   "CAMERASELECT"         // arg 0=camera object to view from
#define SCRIPTSCENE_CAMERA_MOVE_OBJ                 "CAMERAMOVETOOBJ"        // moves camera over time to a specified object
#define SCRIPTSCENE_CAMERA_TELEPORT                 "CAMERATELEPORT"       // 
#define SCRIPTSCENE_CAMERA_TELEPORT_OBJ				"CAMERATELEPORTTOOBJ"		// Teleport to a specified object
#define SCRIPTSCENE_CAMERA_ROTATE                   "CAMERAROTATE"
#define SCRIPTSCENE_CAMERA_LINKSPOT                 "CAMERALINKSPOT"
#define SCRIPTSCENE_CAMERA_ZOOM                     "CAMERAZOOM"

#define SCRIPTSCENE_EXECUTESCRIPT                   "EXECUTESCRIPT"

#define SCRIPTSCENE_SEND_AI_SCRIPT                  "SENDAISCRIPT"
#define SCRIPTSCENE_SEND_TRIGGER                    "SENDTRIGGER"
#define SCRIPTSCENE_SEND_TRIGGER_NAMED              "SENDTRIGGERNAMED"



#define SCRIPT_SCMD_UNKNOWN                     0
#define SCRIPT_SCMD_ARG                         1
#define SCRIPT_SCMD_START                       2
#define SCRIPT_SCMD_END                         3
#define SCRIPT_SCMD_SUBTITLE_DISPLAY            4
#define SCRIPT_SCMD_SUBTITLE_FADE		        5

#define SCRIPT_SCMD_PLAY_ANIM                   6
#define SCRIPT_SCMD_PLAY_SOUND_POS              7
#define SCRIPT_SCMD_PLAY_SOUND_OBJ              8

#define SCRIPT_SCMD_WAIT                        9

#define SCRIPT_SCMD_OBJECT_CREATE_AT            10
#define SCRIPT_SCMD_OBJECT_MOVE                 11
#define SCRIPT_SCMD_OBJECT_TELEPORT             12
#define SCRIPT_SCMD_OBJECT_FLAGS                14
#define SCRIPT_SCMD_OBJECT_FLAG_VISIBLE         15
#define SCRIPT_SCMD_OBJECT_FLAG_SOLID           16
#define SCRIPT_SCMD_OBJECT_FLAG_GRAVITY         17

#define SCRIPT_SCMD_CAMERA_CREATE               18
#define SCRIPT_SCMD_CAMERA_DESTROY              19
//#define SCRIPT_SCMD_CAMERA_RECT                 20
//#define SCRIPT_SCMD_CAMERA_RESET                21
#define SCRIPT_SCMD_CAMERA_SELECT               22
#define SCRIPT_SCMD_CAMERA_MOVE_OBJ             23
#define SCRIPT_SCMD_CAMERA_TELEPORT             24
#define SCRIPT_SCMD_CAMERA_TELEPORT_OBJ         25
#define SCRIPT_SCMD_CAMERA_ROTATE               26
#define SCRIPT_SCMD_CAMERA_LINKSPOT             27
#define SCRIPT_SCMD_CAMERA_ZOOM                 28

#define SCRIPT_SCMD_CUTSCENE                    40

#define SCRIPT_SCMD_OBJECT_ASSIGN               41
#define SCRIPT_SCMD_OBJECT_CREATE_MODEL_AT      42
#define SCRIPT_SCMD_OBJECT_CREATE_FIRE          43
#define SCRIPT_SCMD_OBJECT_CREATE_EXPLOSION_AT  44
#define SCRIPT_SCMD_OBJECT_CREATE_EXPLOSION_NEAR 45

#define SCRIPT_SCMD_OBJECT_DIMS                 46
#define SCRIPT_SCMD_OBJECT_MOVE_OVERTIME        47
#define SCRIPT_SCMD_SEND_AI_SCRIPT              48
#define SCRIPT_SCMD_OBJECT_GIB                  49
#define SCRIPT_SCMD_OBJECT_SCALE                50

#define SCRIPT_SCMD_OBJECT_DESTROY              51

#define SCRIPT_SCMD_OBJECT_CREATE_NEAR          52

#define SCRIPT_SCMD_KILL_SOUND                  53
#define SCRIPT_SCMD_OBJECT_CREATE_MODEL_NEAR    54

#define SCRIPT_SCMD_SEND_TRIGGER                60
#define SCRIPT_SCMD_SEND_TRIGGER_NAMED          61

                    
// SCRIPTCMD struct -> CScriptList nodes...
struct SCRIPTCMD
{
	SCRIPTCMD::SCRIPTCMD();
    
    DFLOAT  fStartTime;
	int		command;
                        //	char args[MAX_ARGS_LENGTH];
	char	data[MAXDATA_LEN];
    DBOOL	m_bExecuted;
};

// Store commands like this:
// command = COMMAND
// data = num of args
// command = ARG
// data = "STRING"
// etc... (for all the args, this will give unlimited number of args per each command


inline SCRIPTCMD::SCRIPTCMD()
{
	memset(this, 0, sizeof(SCRIPTCMD));
}


class CScriptList
{
	public :

		int GetNumItems()	const { return m_nNumItems; }
		DBOOL IsEmpty()		const { return (DBOOL)(m_nNumItems == 0); }

		CScriptList()
		{
			m_pArray	= new CDynArray<SCRIPTCMD*> (DTRUE, 16);
			m_nNumItems = 0;
		}

		~CScriptList()
		{
			if (m_pArray)
			{
				for (int i=0; i < m_nNumItems; i++)
				{
					delete (*m_pArray)[i];
				}

				delete m_pArray;
			}
		}

		SCRIPTCMD* & operator[] (int nIndex)
		{
			assert (nIndex >= 0 && nIndex < m_nNumItems);
			return ((*m_pArray)[nIndex]);
		}

		void Add(SCRIPTCMD* pFX)
		{
			if (m_pArray && pFX)
			{
				(*m_pArray)[m_nNumItems++] = pFX;
			}
		}

		DBOOL Remove(SCRIPTCMD* pFX, DBOOL bRebuildArray=DTRUE)
		{
			DBOOL bRet = DFALSE;
			if (!m_pArray || !pFX) return DFALSE;

			for (int i=0; i < m_nNumItems; i++)
			{
				if ((*m_pArray)[i] == pFX)
				{
					delete (*m_pArray)[i];
					(*m_pArray)[i] = DNULL;
					bRet = DTRUE;
					break;
				}
			}

			if (bRet && bRebuildArray) RebuildArray();

			return bRet;
		}

		DBOOL Remove(int nIndex, DBOOL bRebuildArray=DTRUE)
		{
			if (!m_pArray || nIndex < 0 || nIndex > m_nNumItems) return DFALSE;

			delete (*m_pArray)[nIndex];
			(*m_pArray)[nIndex] = DNULL;

			if (bRebuildArray) RebuildArray();

			return DTRUE;
		}


		void RemoveAll()
		{
			if (m_pArray)
			{
				for (int i=0; i < m_nNumItems; i++)
				{
					delete (*m_pArray)[i];
				}

				delete m_pArray;
			}

			m_pArray	= new CDynArray<SCRIPTCMD*> (DTRUE, 16);
			m_nNumItems = 0;
		}

		// Remove all NULL entries from the array...

		void RebuildArray()
		{
			if (!m_pArray) return;

			CDynArray<SCRIPTCMD*> *pNewArray = new CDynArray<SCRIPTCMD*> (DTRUE, 16);
			if (!pNewArray) return;

			int nNewCount = 0;
			for (int i=0; i < m_nNumItems; i++)
			{
				if ((*m_pArray)[i])
				{
					(*pNewArray)[nNewCount++] = (*m_pArray)[i];
				}
			}

			delete m_pArray;

			m_pArray	= pNewArray;
			m_nNumItems = nNewCount;
		}
	
	private :

		CDynArray<SCRIPTCMD*> *m_pArray;	// Dynamic array 
		int	m_nNumItems;					// Number of elements in array

};


#endif // __SCRIPT_LIST_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -