User:00zX/Using The Unreal Engine 3 Preprocessor

From Unreal Wiki, The Unreal Engine Documentation Site
Jump to navigation Jump to search

Including Macro Files

<uscript> class YourPawn extends UTPawn config(YourConfig);

`include(YourMacroFile.uci) </uscript>

Example Macro File

When compiling with the -debug command line switch, the debug macro will then be defined and will switch our blank spaces to config/exec respectively.

<uscript> `if(`notdefined(Debug))

`define dconf
`define dexec

`else

`define dconf config
`define dexec exec

`endif </uscript>

Copy the above template into a blank text document and call the file YourMacroFile.uci

Example of usage

If we want to add a variable thats configurable only when the macro `DevBuild is defined.

<uscript> class YourPawn extends UTPawn config(YourConfig);

`include(YourMacroFile.uci)

var `{dconf} bool bCanDodge;

function bool Dodge(eDoubleClickDir DoubleClickMove) { if(bCanDodge) return Super.Dodge(DoubleClickMove); else return false; }

defaultproperties { `if(`notdefined(Debug)) bCanDodge=True `endif } </uscript>

YourConfig

[YourPackage.YourPawn]
bCanDodge=True

Example of usage

If we want to add a variable that already exists but is not config editable. (PostBeginPlay) <uscript> class YourPawn extends UTPawn config(YourConfig);

`include(YourMacroFile.uci)

`if(`isdefined(Debug)) var `{dconf} float newGroundSpeed;

function PossessedBy(Controller C, bool bVehicleTransition) { Super.PossessedBy(C, bVehicleTransition);

GroundSpeed = newGroundSpeed; } `endif

</uscript>

Useful Macros

<uscript> /**

* 2005-2011 Daniel Batten (aka 00zX or MonsOlympus)
*/

/** UDK HELPERS */

/*`define redef(OldDef, NewDef) `undefine `{OldDef} `define `{OldDef} `{NewDef}*/

/* Globals */ `define sWorld_Info class'WorldInfo'.static.GetWorldInfo() `define sGame_RepInfo `{sWorldInfo}.GRI `define sGravity `{sWorldInfo}.WorldGravityZ `define sEngine class'Engine'.static


/** Timers - checks the timers to see if they are active before setting or clearing them. */ `define CheckClearTimer(name) if(IsTimerActive(nameof(`name))){ClearTimer(nameof(`name));} `define CheckSetTimer(time, loop, name) if(!IsTimerActive(nameof(`name))){SetTimer(`time, `loop, nameof(`name));} `define ResetTimer(time, loop, name) SetTimer(`time, `loop, nameof(`name))

/** Variables and Defaults */ `define SetToDefault(Obj, Var) `{Obj}.`{Var} = `{Obj}.Default.`{Var} `define SetVar(Obj, Var) `{Obj}.`{Var} = `{Var}

          //Usage: `SetVar(`P, MaxMultiJump) ~ where `P is UTPawn(Pawn) cast.
          //Outputs: UTPawn(Pawn).MaxMultiJump = MaxMultiJump; ~ Where UT Prefix can be a macro also.

`define CheckRet(Obj) if(`Obj == none) return

/** Save/Load Object */ `define SaveObj(Obj, FileName, Bool, Ver) `sEngine().BasicSaveObject(`{Obj}, `{FileName}, `{Bool}, `{Ver}) `define LoadObj(Obj, FileName, Bool, Ver) `sEngine().BasicSaveObject(`{Obj}, `{FileName}, `{Bool}, `{Ver})

/** MetaTags */ `define mUI(min, max) <UIMin=`min | UIMax=`max> `define mClamp(min, max) <ClampMin=`min | ClampMax=`max> `define mUIClamp(min, max) <UIMin=`min | UIMax=`max | ClampMin=`min | ClampMax=`max>

/* Debugging */ `define LogName 'Debug' `define LogdLine() `logd("------------------------------------------------------",,`{LogName}); `define LogFunc(Name) `log(Self$"."$class.name$"."$GetFuncName()$"()",,`Name); `define LogdFunc() `logd(Self$"."$class.name$"."$GetFuncName()$"()",,`{LogName}); `define LogF(string) `logd(GetFuncName()$"(): "$`{string},,`{LogName});

/* Pawn */ `define ColHeight CylinderComponent.CollisionHeight `define ColRadius CylinderComponent.CollisionRadius `define DefColHeight CylinderComponent.Default.CollisionHeight `define DefColRadius CylinderComponent.Default.CollisionRadius </uscript>