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

📄 serverobj_de.h

📁 Blood 2全套源码
💻 H
📖 第 1 页 / 共 2 页
字号:
		class __ClassDefiner;
		extern __ClassDefiner *__g_ClassDefinerHead;
		
		class __ClassDefiner
		{
			public:

				__ClassDefiner(ClassDef *pDef)
				{
					m_pClass = pDef;
					m_pNext = __g_ClassDefinerHead;
					__g_ClassDefinerHead = this;
				}

				ClassDef		*m_pClass;
				__ClassDefiner	*m_pNext;

		};
		
		extern ClassDef **__g_cpp_classlist;
		class __cpp_classlist_auto_free	{
			public:
				~__cpp_classlist_auto_free() {
					if(__g_cpp_classlist) {
						free(__g_cpp_classlist);
						__g_cpp_classlist = 0;
					}
				}
		};

		#define DEFINE_CLASSES() \
			ClassDef **__g_cpp_classlist=0;\
			__cpp_classlist_auto_free __free_the_g_cpp_classlist;\
			ServerDE *g_pServerDE=(ServerDE*)0;\
			BEGIN_EXTERNC() \
				__declspec(dllexport) ClassDef** ObjectDLLSetup(int *nDefs, ServerDE *pServer, int *version); \
			END_EXTERNC() \
			__ClassDefiner *__g_ClassDefinerHead=0;\
			ClassDef** ObjectDLLSetup(int *nDefs, ServerDE *pServer, int *version) \
			{\
				int nClasses;\
				__ClassDefiner *pCurDefiner;\
				*version = SERVEROBJ_VERSION;\
				g_pServerDE = pServer;\
				nClasses=0;\
				pCurDefiner = __g_ClassDefinerHead;\
				while(pCurDefiner)\
				{\
					pCurDefiner = pCurDefiner->m_pNext;\
					++nClasses;\
				}\
				__g_cpp_classlist = (ClassDef**)malloc(sizeof(ClassDef*) * nClasses);\
				nClasses=0;\
				pCurDefiner = __g_ClassDefinerHead;\
				while(pCurDefiner)\
				{\
					__g_cpp_classlist[nClasses] = pCurDefiner->m_pClass;\
					pCurDefiner = pCurDefiner->m_pNext;\
					++nClasses;\
				}\
				*nDefs = nClasses; \
				return __g_cpp_classlist; \
			}

	#endif




	// -------------------------------------------------------- //
	// These are the macros that you use to define classes.
	// -------------------------------------------------------- //

	#ifdef __cplusplus
		#define ALLOCATEONE(type) (void*)(new type)
		#define DELETEONE(type, ptr) delete ((type*)ptr)
	#else
		#define ALLOCATEONE(type) malloc(sizeof(type))
		#define DELETEONE(type, ptr) free(ptr)
	#endif


	#ifndef COMPILE_WITH_C	
		inline void* operator new(size_t size, void *ptr, int asdf, char a)
		{
			return ptr;
		}
		
		#if _MSC_VER != 1100
			inline void operator delete(void *pDataPtr, void *ptr, int asdf, char a)
			{
			}
		#endif
	#endif


	// It adds a dummy property here so C syntax doesn't break when you have no properties..
	#define NOCOLOR DVector(0.0f, 0.0f, 0.0f)


	// If you want level designers to be able to set object flags, you should
	// use these macros so the property names are standardized.
	
	// Use the ADD_X_FLAG macros in your property list.

	#define ADD_VISIBLE_FLAG(defVal, flags) \
		ADD_PROP_FLAG(Visible, PT_BOOL, defVal, 0, flags)

	#define ADD_SHADOW_FLAG(defVal, flags) \
		ADD_PROP_FLAG(Shadow, PT_BOOL, defVal, 0, flags)

	#define ADD_ROTATEABLESPRITE_FLAG(defVal, flags) \
		ADD_PROP_FLAG(RotateableSprite, PT_BOOL, defVal, 0, flags)

	#define ADD_CHROMAKEY_FLAG(defVal, flags) \
		ADD_PROP_FLAG(Chromakey, PT_BOOL, defVal, 0, flags)

	#define ADD_SOLID_FLAG(defVal, flags) \
		ADD_PROP_FLAG(Solid, PT_BOOL, defVal, 0, flags)

	#define ADD_GRAVITY_FLAG(defVal, flags) \
		ADD_PROP_FLAG(Gravity, PT_BOOL, defVal, 0, flags)

	#define ADD_TOUCHNOTIFY_FLAG(defVal, flags) \
		ADD_PROP_FLAG(Touch Notify, PT_BOOL, defVal, 0, flags)

	#define ADD_RAYHIT_FLAG(defVal, flags) \
		ADD_PROP_FLAG(Rayhit, PT_BOOL, defVal, 0, flags)


	// Full property definitions.
	#define ADD_PROP_FLAG(name, type, valFloat, valString, flags) \
		PropDef_t(#name, type, NOCOLOR, valFloat, valString, flags),

	#define ADD_REALPROP_FLAG(name, val, flags) \
		PropDef_t(#name, PT_REAL, NOCOLOR, val, "", flags),

	#define ADD_STRINGPROP_FLAG(name, val, flags) \
		PropDef_t(#name, PT_STRING, NOCOLOR, 0.0f, val, flags),

	#define ADD_VECTORPROP_FLAG(name, flags) \
		PropDef_t(#name, PT_VECTOR, NOCOLOR, 0.0f, (char*)0, flags),

	#define ADD_VECTORPROP_VAL_FLAG(name, defX, defY, defZ, flags) \
		PropDef_t(#name, PT_VECTOR, DVector(defX, defY, defZ), 0.0f, (char*)0, flags),

	#define ADD_LONGINTPROP_FLAG(name, val, flags) \
		PropDef_t(#name, PT_LONGINT, NOCOLOR, (float)val, (char*)0, flags),

	#define ADD_ROTATIONPROP_FLAG(name, flags) \
		PropDef_t(#name, PT_ROTATION, NOCOLOR, 0.0f, (char*)0, flags),

	#define ADD_BOOLPROP_FLAG(name, val, flags) \
		PropDef_t(#name, PT_BOOL, NOCOLOR, (float)val, (char*)0, flags),

	#define ADD_COLORPROP_FLAG(name, valR, valG, valB, flags) \
		PropDef_t(#name, PT_COLOR, DVector(valR, valG, valB), 0.0f, (char*)0, flags),



	// Add properties without flags (only here for backward compatibility).
	#define ADD_PROP(name, type, valFloat, valString) \
		ADD_PROP_FLAG(name, type, valFloat, valString, 0)

	#define ADD_REALPROP(name, val) \
		ADD_REALPROP_FLAG(name, val, 0)

	#define ADD_STRINGPROP(name, val) \
		ADD_STRINGPROP_FLAG(name, val, 0)

	#define ADD_VECTORPROP(name) \
		ADD_VECTORPROP_FLAG(name, 0)

	#define ADD_VECTORPROP_VAL(name, defX, defY, defZ) \
		ADD_VECTORPROP_VAL_FLAG(name, defX, defY, defZ, 0)

	#define ADD_LONGINTPROP(name, val) \
		ADD_LONGINTPROP_FLAG(name, val, 0)

	#define ADD_ROTATIONPROP(name) \
		ADD_ROTATIONPROP_FLAG(name, 0)

	#define ADD_BOOLPROP(name, val) \
		ADD_BOOLPROP_FLAG(name, val, 0)

	#define ADD_COLORPROP(name, valR, valG, valB) \
		ADD_COLORPROP_FLAG(name, valR, valG, valB, 0)

	
	// Define a group with this.
	#define PROP_DEFINEGROUP(groupName, groupFlag) \
		PropDef_t(#groupName, PT_LONGINT, NOCOLOR, (float)0.0f, (char*)0, groupFlag|PF_GROUPOWNER), 
		

	#define BEGIN_CLASS(name) \
		static PropDef  _##name##_Props__[] = {	\
			ADD_STRINGPROP("__NOPROP__!!", "")

	
	// Define the default constructor/destructor functions.
	#ifdef COMPILE_WITH_C
		#define DO_AUTO_CLASSLIST(name)
		
		#define DO_DEFAULT_FUNCTIONS(_className) \
			void Default##_className##Constructor(void *ptr) {}\
			void Default##_className##Destructor(void *ptr) {}
	#else
		#define DO_AUTO_CLASSLIST(name) \
			static __ClassDefiner __##name##_definer(&_##name##_Class__);
		
		#define DO_DEFAULT_FUNCTIONS(_className)\
			void Default##_className##Constructor(void *ptr)\
			{\
				::new(ptr, (int)0, (char)0) _className;\
			}\
			void Default##_className##Destructor(void *ptr)\
			{\
				_className *thePtr = (_className*)ptr;\
				thePtr->~_className();\
			}
	#endif

	#define END_CLASS_SYMBOL(name, parentSymbol, flags, construct_fn, destruct_fn, enginemessage_fn, objectmessage_fn, classFlags) \
		ClassDef _##name##_Class__ = { \
			#name, parentSymbol, \
			flags,\
			construct_fn, destruct_fn, \
			(EngineMessageFn)enginemessage_fn,\
			(ObjectMessageFn)objectmessage_fn,\
			(sizeof(_##name##_Props__) / sizeof(PropDef)) - 1,\
			&_##name##_Props__[1], \
			sizeof(name),\
			(void*)0, (void*)0 }; \
			DO_AUTO_CLASSLIST(name)

	// End class macros with flags.
	#define END_CLASS_FLAGS(name, parent, construct_fn, destruct_fn, enginemessage_fn, objectmessage_fn, flags) \
		}; \
		extern ClassDef _##parent##_Class__; \
		END_CLASS_SYMBOL(name, &_##parent##_Class__, flags, construct_fn, destruct_fn, enginemessage_fn, objectmessage_fn, 0)

	#define END_CLASS_DEFAULT_FLAGS(name, parent, enginemessage_fn, objectmessage_fn, flags)\
		}; \
		extern ClassDef _##parent##_Class__; \
		DO_DEFAULT_FUNCTIONS(name)\
		END_CLASS_SYMBOL(name, &_##parent##_Class__, flags, Default##name##Constructor, Default##name##Destructor, enginemessage_fn, objectmessage_fn, 0)

	// Normal end class macros.
	#define END_CLASS(name, parent, construct_fn, destruct_fn, enginemessage_fn, objectmessage_fn) \
		END_CLASS_FLAGS(name, parent, construct_fn, destruct_fn, enginemessage_fn, objectmessage_fn, 0)

	#define END_CLASS_DEFAULT(name, parent, enginemessage_fn, objectmessage_fn)\
		END_CLASS_DEFAULT_FLAGS(name, parent, enginemessage_fn, objectmessage_fn, 0)		


	// Only used internally.
	#define END_CLASS_NOPARENT(name, construct_fn, destruct_fn, enginemessage_fn, objectmessage_fn) \
		}; \
		END_CLASS_SYMBOL(name, (ClassDef*)0, 0, construct_fn, destruct_fn, enginemessage_fn, objectmessage_fn, 0)

	#define END_CLASS_DEFAULT_NOPARENT(name, enginemessage_fn, objectmessage_fn) \
		}; \
		DO_DEFAULT_FUNCTIONS(name)\
		END_CLASS_SYMBOL(name, (ClassDef*)0, 0, Default##name##Constructor, Default##name##Destructor, enginemessage_fn, objectmessage_fn, 0)


#endif  // __SERVEROBJ_DE_H__


⌨️ 快捷键说明

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