boiii-scripts/shared/ai/systems/animation_state_machine_mocomp.gsc
2023-04-13 17:30:38 +02:00

80 lines
12 KiB
Plaintext

// Created and Implemented by Sumeet Jakatdar
#namespace AnimationStateNetwork;
// ------------- AnimationMocomp Initialization ----------- //
function autoexec InitAnimationMocomps()
{
level._AnimationMocomps = [];
}
// ------------- AnimationMocomp Utility ----------- //
function RunAnimationMocomp( mocompName, mocompStatus, asmEntity, mocompAnim, mocompAnimBlendOutTime, mocompDuration )
{
Assert( ( mocompStatus >= 0 && mocompStatus <= 2 ), "ASM - Unsupported MocompStatus " + mocompStatus + " for RunAnimationMocomp." );
Assert( IsDefined( level._AnimationMocomps[mocompName] ), "BT - RegisterAnimationMocomps with " + mocompName + " does not exists." );
if( mocompStatus == 0 )
mocompStatus = "asm_mocomp_start";
else if( mocompStatus == 1 )
mocompStatus = "asm_mocomp_update";
else
mocompStatus = "asm_mocomp_terminate";
animationMocompResult = asmEntity [[level._AnimationMocomps[mocompName][mocompStatus]]]( asmEntity, mocompAnim, mocompAnimBlendOutTime, "", mocompDuration );
return animationMocompResult;
}
// ------------- AnimationMocomp API ----------- //
function RegisterAnimationMocomp( mocompName, startFuncPtr, updateFuncPtr, terminateFuncPtr )
{
mocompName = ToLower( mocompName );
Assert( IsString( mocompName ), "ASM - mocompName for RegisterAnimationMocomps is not a string." );
Assert( !IsDefined(level._AnimationMocomps[mocompName]), "mocomp with name " + mocompName + " is already registered." );
level._AnimationMocomps[mocompName] = array();
// ASM_MOCOMP_START
Assert( IsDefined( startFuncPtr ) && IsFunctionPtr( startFuncPtr ), "BT - RegisterAnimationMocomps must have startFunctionPtr and it must be of type functionPtr." );
level._AnimationMocomps[mocompName]["asm_mocomp_start"] = startFuncPtr;
// ASM_MOCOMP_UPDATE
if( IsDefined( updateFuncPtr ) )
{
Assert( IsFunctionPtr( updateFuncPtr ), "BT - RegisterAnimationMocomps must have updateFuncPtr and it must be of type functionPtr." );
level._AnimationMocomps[mocompName]["asm_mocomp_update"] = updateFuncPtr;
}
else
{
level._AnimationMocomps[mocompName]["asm_mocomp_update"] = &AnimationMocompEmptyFunc;
}
// ASM_MOCOMP_UPDATE
if( IsDefined( terminateFuncPtr ) )
{
Assert( IsFunctionPtr( terminateFuncPtr ), "BT - RegisterAnimationMocomps must have terminateFuncPtr and it must be of type functionPtr." );
level._AnimationMocomps[mocompName]["asm_mocomp_terminate"] = terminateFuncPtr;
}
else
{
level._AnimationMocomps[mocompName]["asm_mocomp_terminate"] = &AnimationMocompEmptyFunc;
}
}
function AnimationMocompEmptyFunc( entity, mocompAnim, mocompAnimBlendOutTime, mocompAnimFlag, mocompDuration )
{
}