?? unobjbas.h
字號:
#define IMPLEMENT_CLASS(TClass) \
UClass TClass::PrivateStaticClass \
( \
EC_NativeConstructor, \
sizeof(TClass), \
TClass::StaticClassFlags, \
TClass::Super::StaticClass(), \
TClass::WithinClass::StaticClass(), \
FGuid(TClass::GUID1,TClass::GUID2,TClass::GUID3,TClass::GUID4), \
TEXT(#TClass)+1, \
GPackage, \
StaticConfigName(), \
RF_Public | RF_Standalone | RF_Transient | RF_Native, \
(void(*)(void*))TClass::InternalConstructor, \
(void(UObject::*)())TClass::StaticConstructor \
); \
extern "C" DLL_EXPORT UClass* autoclass##TClass;\
DLL_EXPORT UClass* autoclass##TClass = TClass::StaticClass(); \
// Define the package of the current DLL being compiled.
#define IMPLEMENT_PACKAGE(pkg) \
extern "C" DLL_EXPORT TCHAR GPackage[]; \
DLL_EXPORT TCHAR GPackage[] = TEXT(#pkg); \
IMPLEMENT_PACKAGE_PLATFORM(pkg)
/*-----------------------------------------------------------------------------
UObject.
-----------------------------------------------------------------------------*/
//
// The base class of all objects.
//
class CORE_API UObject : public FUnknown
{
// Declarations.
DECLARE_BASE_CLASS(UObject,UObject,CLASS_Abstract)
typedef UObject WithinClass;
enum {GUID1=0,GUID2=0,GUID3=0,GUID4=0};
static const TCHAR* StaticConfigName() {return TEXT("System");}
// Friends.
friend class FObjectIterator;
friend class ULinkerLoad;
friend class ULinkerSave;
friend class FPackageMap;
friend class FArchiveTagUsed;
private:
// Internal per-object variables.
INT Index; // Index of object into table.
UObject* HashNext; // Next object in this hash bin.
FStateFrame* StateFrame; // Main script execution stack.
ULinkerLoad* _Linker; // Linker it came from, or NULL if none.
INT _LinkerIndex; // Index of this object in the linker's export map.
UObject* Outer; // Object this object resides in.
DWORD ObjectFlags; // Private EObjectFlags used by object manager.
FName Name; // Name of the object.
UClass* Class; // Class the object belongs to.
// Private systemwide variables.
static UBOOL GObjInitialized; // Whether initialized.
static UBOOL GObjNoRegister; // Registration disable.
static INT GObjBeginLoadCount; // Count for BeginLoad multiple loads.
static INT GObjRegisterCount; // ProcessRegistrants entry counter.
static UObject* GObjHash[4096]; // Object hash.
static UObject* GAutoRegister; // Objects to automatically register.
static TArray<UObject*> GObjLoaded; // Objects that might need preloading.
static TArray<UObject*> GObjRoot; // Top of active object graph.
static TArray<UObject*> GObjObjects; // List of all objects.
static TArray<INT> GObjAvailable; // Available object indices.
static TArray<UObject*> GObjLoaders; // Array of loaders.
static UPackage* GObjTransientPkg; // Transient package.
static TCHAR GObjCachedLanguage[32]; // Language;
static TArray<UObject*> GObjRegistrants; // Registrants during ProcessRegistrants call.
static TArray<FPreferencesInfo> GObjPreferences; // Prefereces cache.
static TArray<FRegistryObjectInfo> GObjDrivers; // Drivers cache.
static TMap<FName,FName>* GObjPackageRemap; // Remap table for loading renamed packages.
static TCHAR GLanguage[64];
// Private functions.
void AddObject( INT Index );
void HashObject();
void UnhashObject( INT OuterIndex );
void SetLinker( ULinkerLoad* L, INT I );
// Private systemwide functions.
static ULinkerLoad* GetLoader( INT i );
static FName MakeUniqueObjectName( UObject* Outer, UClass* Class );
static UBOOL ResolveName( UObject*& Outer, const TCHAR*& Name, UBOOL Create, UBOOL Throw );
static void SafeLoadError( DWORD LoadFlags, const TCHAR* Error, const TCHAR* Fmt, ... );
static void PurgeGarbage();
static void CacheDrivers( UBOOL ForceRefresh );
public:
// Constructors.
UObject();
UObject( const UObject& Src );
UObject( ENativeConstructor, UClass* InClass, const TCHAR* InName, const TCHAR* InPackageName, DWORD InFlags );
UObject( EInPlaceConstructor, UClass* InClass, UObject* InOuter, FName InName, DWORD InFlags );
UObject& operator=( const UObject& );
void StaticConstructor();
static void InternalConstructor( void* X )
{ new( (EInternal*)X )UObject(); }
// Destructors.
virtual ~UObject();
void operator delete( void* Object, size_t Size )
{guard(UObject::operator delete); appFree( Object ); unguard;}
// FUnknown interface.
virtual DWORD STDCALL QueryInterface( const FGuid& RefIID, void** InterfacePtr );
virtual DWORD STDCALL AddRef();
virtual DWORD STDCALL Release();
// UObject interface.
virtual void ProcessEvent( UFunction* Function, void* Parms, void* Result=NULL );
virtual void ProcessState( FLOAT DeltaSeconds );
virtual UBOOL ProcessRemoteFunction( UFunction* Function, void* Parms, FFrame* Stack );
virtual void Modify();
virtual void PostLoad();
virtual void Destroy();
virtual void Serialize( FArchive& Ar );
virtual UBOOL IsPendingKill() {return 0;}
virtual EGotoState GotoState( FName State );
virtual INT GotoLabel( FName Label );
virtual void InitExecution();
virtual void ShutdownAfterError();
virtual void PostEditChange();
virtual void CallFunction( FFrame& TheStack, RESULT_DECL, UFunction* Function );
virtual UBOOL ScriptConsoleExec( const TCHAR* Cmd, FOutputDevice& Ar, UObject* Executor );
virtual void Register();
virtual void LanguageChange();
// Systemwide functions.
static UObject* StaticFindObject( UClass* Class, UObject* InOuter, const TCHAR* Name, UBOOL ExactClass=0 );
static UObject* StaticFindObjectChecked( UClass* Class, UObject* InOuter, const TCHAR* Name, UBOOL ExactClass=0 );
static UObject* StaticLoadObject( UClass* Class, UObject* InOuter, const TCHAR* Name, const TCHAR* Filename, DWORD LoadFlags, FPackageMap* Sandbox );
static UClass* StaticLoadClass( UClass* BaseClass, UObject* InOuter, const TCHAR* Name, const TCHAR* Filename, DWORD LoadFlags, FPackageMap* Sandbox );
static UObject* StaticAllocateObject( UClass* Class, UObject* InOuter=(UObject*)GetTransientPackage(), FName Name=NAME_None, DWORD SetFlags=0, UObject* Template=NULL, FOutputDevice* Error=GError, UObject* Ptr=NULL );
static UObject* StaticConstructObject( UClass* Class, UObject* InOuter=(UObject*)GetTransientPackage(), FName Name=NAME_None, DWORD SetFlags=0, UObject* Template=NULL, FOutputDevice* Error=GError );
static void StaticInit();
static void StaticExit();
static UBOOL StaticExec( const TCHAR* Cmd, FOutputDevice& Ar=*GLog );
static void StaticTick();
static UObject* LoadPackage( UObject* InOuter, const TCHAR* Filename, DWORD LoadFlags );
static UBOOL SavePackage( UObject* InOuter, UObject* Base, DWORD TopLevelFlags, const TCHAR* Filename, FOutputDevice* Error=GError, ULinkerLoad* Conform=NULL );
static void CollectGarbage( DWORD KeepFlags );
static void SerializeRootSet( FArchive& Ar, DWORD KeepFlags, DWORD RequiredFlags );
static UBOOL IsReferenced( UObject*& Res, DWORD KeepFlags, UBOOL IgnoreReference );
static UBOOL AttemptDelete( UObject*& Res, DWORD KeepFlags, UBOOL IgnoreReference );
static void BeginLoad();
static void EndLoad();
static void InitProperties( BYTE* Data, INT DataCount, UClass* DefaultsClass, BYTE* Defaults, INT DefaultsCount );
static void ExitProperties( BYTE* Data, UClass* Class );
static void ResetLoaders( UObject* InOuter, UBOOL DynamicOnly, UBOOL ForceLazyLoad );
static UPackage* CreatePackage( UObject* InOuter, const TCHAR* PkgName );
static ULinkerLoad* GetPackageLinker( UObject* InOuter, const TCHAR* Filename, DWORD LoadFlags, FPackageMap* Sandbox, FGuid* CompatibleGuid );
static void StaticShutdownAfterError();
static UObject* GetIndexedObject( INT Index );
static void GlobalSetProperty( const TCHAR* Value, UClass* Class, UProperty* Property, INT Offset, UBOOL Immediate );
static void ExportProperties( FOutputDevice& Out, UClass* ObjectClass, BYTE* Object, INT Indent, UClass* DiffClass, BYTE* Diff );
static void ResetConfig( UClass* Class );
static void GetRegistryObjects( TArray<FRegistryObjectInfo>& Results, UClass* Class, UClass* MetaClass, UBOOL ForceRefresh );
static void GetPreferences( TArray<FPreferencesInfo>& Results, const TCHAR* Category, UBOOL ForceRefresh );
static UBOOL GetInitialized();
static UPackage* GetTransientPackage();
static void VerifyLinker( ULinkerLoad* Linker );
static void ProcessRegistrants();
static void BindPackage( UPackage* Pkg );
static const TCHAR* GetLanguage();
static void SetLanguage( const TCHAR* LanguageExt );
static INT GetObjectHash( FName ObjName, INT Outer )
{
return (ObjName.GetIndex() ^ Outer) & (ARRAY_COUNT(GObjHash)-1);
}
// Functions.
void AddToRoot();
void RemoveFromRoot();
const TCHAR* GetFullName( TCHAR* Str=NULL ) const;
const TCHAR* GetPathName( UObject* StopOuter=NULL, TCHAR* Str=NULL ) const;
UBOOL IsValid();
void ConditionalRegister();
void ConditionalDestroy();
void ConditionalPostLoad();
void ConditionalShutdownAfterError();
UBOOL IsA( UClass* SomeBaseClass ) const;
UBOOL IsIn( UObject* SomeOuter ) const;
UBOOL IsProbing( FName ProbeName );
void Rename();
UField* FindObjectField( FName InName, UBOOL Global=0 );
UFunction* FindFunction( FName InName, UBOOL Global=0 );
UFunction* FindFunctionChecked( FName InName, UBOOL Global=0 );
UState* FindState( FName InName );
void SaveConfig( DWORD Flags=CPF_Config, const TCHAR* Filename=NULL );
void LoadConfig( UBOOL Propagate=0, UClass* Class=NULL, const TCHAR* Filename=NULL );
void LoadLocalized( UBOOL Propagate=0, UClass* Class=NULL );
void InitClassDefaultObject( UClass* InClass );
void ProcessInternal( FFrame& TheStack, void*const Result );
void ParseParms( const TCHAR* Parms );
// Accessors.
UClass* GetClass() const
{
return Class;
}
DWORD GetFlags() const
{
return ObjectFlags;
}
void SetFlags( DWORD NewFlags )
{
ObjectFlags |= NewFlags;
checkSlow(Name!=NAME_None || !(ObjectFlags&RF_Public));
}
void ClearFlags( DWORD NewFlags )
{
ObjectFlags &= ~NewFlags;
checkSlow(Name!=NAME_None || !(ObjectFlags&RF_Public));
}
const TCHAR* GetName() const
{
return *Name;
}
const FName GetFName() const
{
return Name;
}
UObject* GetOuter() const
{
return Outer;
}
DWORD GetIndex() const
{
return Index;
}
ULinkerLoad* GetLinker()
{
return _Linker;
}
FStateFrame* GetStateFrame()
{
return StateFrame;
}
// UnrealScript intrinsics.
#define DECLARE_FUNCTION(func) void func( FFrame& TheStack, RESULT_DECL );
DECLARE_FUNCTION(execUndefined)
DECLARE_FUNCTION(execLocalVariable)
DECLARE_FUNCTION(execInstanceVariable)
DECLARE_FUNCTION(execDefaultVariable)
DECLARE_FUNCTION(execArrayElement)
DECLARE_FUNCTION(execDynArrayElement)
DECLARE_FUNCTION(execBoolVariable)
DECLARE_FUNCTION(execClassDefaultVariable)
DECLARE_FUNCTION(execEndFunctionParms)
DECLARE_FUNCTION(execNothing)
DECLARE_FUNCTION(execStop)
DECLARE_FUNCTION(execEndCode)
DECLARE_FUNCTION(execSwitch)
DECLARE_FUNCTION(execCase)
DECLARE_FUNCTION(execJump)
DECLARE_FUNCTION(execJumpIfNot)
DECLARE_FUNCTION(execAssert)
DECLARE_FUNCTION(execGotoLabel)
DECLARE_FUNCTION(execLet)
DECLARE_FUNCTION(execLetBool)
DECLARE_FUNCTION(execEatString)
DECLARE_FUNCTION(execSelf)
DECLARE_FUNCTION(execContext)
DECLARE_FUNCTION(execVirtualFunction)
DECLARE_FUNCTION(execFinalFunction)
DECLARE_FUNCTION(execGlobalFunction)
DECLARE_FUNCTION(execStructCmpEq)
DECLARE_FUNCTION(execStructCmpNe)
DECLARE_FUNCTION(execStructMember)
DECLARE_FUNCTION(execIntConst)
DECLARE_FUNCTION(execFloatConst)
DECLARE_FUNCTION(execStringConst)
DECLARE_FUNCTION(execUnicodeStringConst)
DECLARE_FUNCTION(execObjectConst)
DECLARE_FUNCTION(execNameConst)
DECLARE_FUNCTION(execByteConst)
DECLARE_FUNCTION(execIntZero)
DECLARE_FUNCTION(execIntOne)
DECLARE_FUNCTION(execTrue)
DECLARE_FUNCTION(execFalse)
DECLARE_FUNCTION(execNoObject)
DECLARE_FUNCTION(execIntConstByte)
DECLARE_FUNCTION(execDynamicCast)
DECLARE_FUNCTION(execMetaCast)
DECLARE_FUNCTION(execByteToInt)
DECLARE_FUNCTION(execByteToBool)
DECLARE_FUNCTION(execByteToFloat)
DECLARE_FUNCTION(execByteToString)
DECLARE_FUNCTION(execIntToByte)
DECLARE_FUNCTION(execIntToBool)
DECLARE_FUNCTION(execIntToFloat)
DECLARE_FUNCTION(execIntToString)
DECLARE_FUNCTION(execBoolToByte)
DECLARE_FUNCTION(execBoolToInt)
DECLARE_FUNCTION(execBoolToFloat)
DECLARE_FUNCTION(execBoolToString)
DECLARE_FUNCTION(execFloatToByte)
DECLARE_FUNCTION(execFloatToInt)
DECLARE_FUNCTION(execFloatToBool)
DECLARE_FUNCTION(execFloatToString)
DECLARE_FUNCTION(execRotationConst)
DECLARE_FUNCTION(execVectorConst)
DECLARE_FUNCTION(execStringToVector)
DECLARE_FUNCTION(execStringToRotator)
DECLARE_FUNCTION(execVectorToBool)
DECLARE_FUNCTION(execVectorToString)
DECLARE_FUNCTION(execVectorToRotator)
DECLARE_FUNCTION(execRotatorToBool)
DECLARE_FUNCTION(execRotatorToVector)
DECLARE_FUNCTION(execRotatorToString)
DECLARE_FUNCTION(execRotRand)
DECLARE_FUNCTION(execGetUnAxes)
DECLARE_FUNCTION(execGetAxes)
DECLARE_FUNCTION(execSubtractEqual_RotatorRotator)
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -