Let custom CVar handlers to be called on cloned cvars
This commit is contained in:
parent
82b7e93d26
commit
b50d7f4db5
4 changed files with 184 additions and 31 deletions
|
|
@ -852,7 +852,22 @@ DEFINE_ACTION_FUNCTION(_CVar, SetInt)
|
|||
PARAM_INT(val);
|
||||
UCVarValue v;
|
||||
v.Int = val;
|
||||
self->SetGenericRep(v, CVAR_Int);
|
||||
|
||||
if(self->GetFlags() & CVAR_ZS_CUSTOM_CLONE)
|
||||
{
|
||||
auto realCVar = (FBaseCVar*)(self->GetExtraDataPointer());
|
||||
assert(realCVar->GetFlags() & CVAR_ZS_CUSTOM);
|
||||
|
||||
v = realCVar->GenericZSCVarCallback(v, CVAR_Int);
|
||||
self->SetGenericRep(v, realCVar->GetRealType());
|
||||
|
||||
if(realCVar->GetRealType() == CVAR_String) delete[] v.String;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->SetGenericRep(v, CVAR_Int);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -870,7 +885,22 @@ DEFINE_ACTION_FUNCTION(_CVar, SetFloat)
|
|||
PARAM_FLOAT(val);
|
||||
UCVarValue v;
|
||||
v.Float = (float)val;
|
||||
self->SetGenericRep(v, CVAR_Float);
|
||||
|
||||
if(self->GetFlags() & CVAR_ZS_CUSTOM_CLONE)
|
||||
{
|
||||
auto realCVar = (FBaseCVar*)(self->GetExtraDataPointer());
|
||||
assert(realCVar->GetFlags() & CVAR_ZS_CUSTOM);
|
||||
|
||||
v = realCVar->GenericZSCVarCallback(v, CVAR_Float);
|
||||
self->SetGenericRep(v, realCVar->GetRealType());
|
||||
|
||||
if(realCVar->GetRealType() == CVAR_String) delete[] v.String;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->SetGenericRep(v, CVAR_Float);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
@ -889,7 +919,22 @@ DEFINE_ACTION_FUNCTION(_CVar, SetString)
|
|||
PARAM_STRING(val);
|
||||
UCVarValue v;
|
||||
v.String = val.GetChars();
|
||||
self->SetGenericRep(v, CVAR_String);
|
||||
|
||||
if(self->GetFlags() & CVAR_ZS_CUSTOM_CLONE)
|
||||
{
|
||||
auto realCVar = (FBaseCVar*)(self->GetExtraDataPointer());
|
||||
assert(realCVar->GetFlags() & CVAR_ZS_CUSTOM);
|
||||
|
||||
v = realCVar->GenericZSCVarCallback(v, CVAR_String);
|
||||
self->SetGenericRep(v, realCVar->GetRealType());
|
||||
|
||||
if(realCVar->GetRealType() == CVAR_String) delete[] v.String;
|
||||
}
|
||||
else
|
||||
{
|
||||
self->SetGenericRep(v, CVAR_String);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue