Files
FC1/CryAnimation/cvars.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

175 lines
5.4 KiB
C++

//////////////////////////////////////////////////////////////////////
//
// CryEngine Source code
//
// File:3DEngine.cpp
// Description: Implementation of C3DEngine class
// Level loading, implementation of I3DEngine interface methods
//
// History:
// -:Created by Vladimir Kajalin
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "CryAnimationBase.h"
#include "cvars.h"
CryAnimVars::CryAnimVars ()
{
IConsole* pConsole = g_GetConsole();
// if you get an assertion here, it means some variable couldn't be registered
#define DECLARE_INT_VARIABLE_IMMEDIATE(_var, _default,_comment) m_##_var = _default; m_p_##_var = attach((#_var), &(m_##_var), _comment, VF_CHEAT|CVF_CHANGE_SOURCE);
#define DECLARE_INT_VARIABLE_IMMEDIATE_DUMP(_var, _default,_comment) m_##_var = _default; m_p_##_var = attach((#_var), &(m_##_var), _comment, VF_DUMPTODISK);
#define DECLARE_STRING_VARIABLE(_var, _default) m_##_var = pConsole->CreateVariable(#_var, (_default), VF_CHEAT); assert(m_##_var)
#define DECLARE_INT_VARIABLE(_var, _default) m_##_var = declare (#_var,_default,VF_CHEAT);
#define DECLARE_FLOAT_VARIABLE(_var, _default,_comment) m_##_var = pConsole->CreateVariable(#_var, (#_default), VF_CHEAT, _comment); assert(m_##_var)
#define DECLARE_FLOAT_VARIABLE_DUMP(_var, _default,_comment) m_##_var = pConsole->CreateVariable(#_var, (#_default), VF_DUMPTODISK, _comment); assert(m_##_var)
#include "CVars-list.h"
#undef DECLARE_STRING_VARIABLE
#undef DECLARE_INT_VARIABLE
#undef DECLARE_FLOAT_VARIABLE
#undef DECLARE_FLOAT_VARIABLE_DUMP
#undef DECLARE_INT_VARIABLE_IMMEDIATE
#undef DECLARE_INT_VARIABLE_IMMEDIATE_DUMP
}
CryAnimVars::~CryAnimVars ()
{
#define DECLARE_INT_VARIABLE_IMMEDIATE(_var, _default, _comment) detach((#_var),&(m_##_var));
#define DECLARE_INT_VARIABLE_IMMEDIATE_DUMP(_var, _default, _comment) DECLARE_INT_VARIABLE_IMMEDIATE(_var, _default, _comment)
#define DECLARE_STRING_VARIABLE(_var, _default) //m_##_var->Release()
#define DECLARE_INT_VARIABLE(_var, _default) //m_##_var->Release()
#define DECLARE_FLOAT_VARIABLE(_var, _default,_comment) //m_##_var->Release()
#define DECLARE_FLOAT_VARIABLE_DUMP(_var, _default,_comment) //m_##_var->Release()
#include "CVars-list.h"
#undef DECLARE_STRING_VARIABLE
#undef DECLARE_INT_VARIABLE
#undef DECLARE_FLOAT_VARIABLE
#undef DECLARE_FLOAT_VARIABLE_DUMP
#undef DECLARE_INT_VARIABLE_IMMEDIATE
#undef DECLARE_INT_VARIABLE_IMMEDIATE_DUMP
}
float CryAnimVars::ca_MinVertexWeightLOD (unsigned nLOD)
{
switch (nLOD)
{
case 0:
return ca_MinVertexWeightLOD0();
case 1:
return ca_MinVertexWeightLOD1();
default:
return ca_MinVertexWeightLOD2();
}
}
float CryAnimVars::ca_UpdateSpeed (unsigned nLayer)
{
switch (nLayer)
{
case 0:
return ca_UpdateSpeed0();
case 1:
return ca_UpdateSpeed1();
case 2:
return ca_UpdateSpeed2();
case 3:
return ca_UpdateSpeed3();
case 4:
return ca_UpdateSpeed4();
default:
return 1;
}
}
//////////////////////////////////////////////////////////////////////////
// declares or retrieves the pointer to the console variable
// with the given default value (used only in case the variable doesn't exist now)
// returns the pointer to the preexisting or newly created variable.
ICVar* CryAnimVars::declare (const char* szVarName, int nDefault,int nFlags)
{
IConsole* pConsole = g_GetConsole();
ICVar* pVar;
{
char szDefault[32];
sprintf (szDefault, "%d", nDefault);
pVar = pConsole->CreateVariable(szVarName, szDefault, nFlags);
}
assert (pVar);
return pVar;
}
//////////////////////////////////////////////////////////////////////////
// attaches the given variable to the given container;
// recreates the variable if necessary
ICVar* CryAnimVars::attach (const char* szVarName, int* pContainer, const char*szComment, int nFlags)
{
#ifndef WIN32
// to economize memory ... :(
szComment = "";
#endif
IConsole* pConsole = g_GetConsole();
ICVar* pOldVar = pConsole->GetCVar (szVarName);
int nDefault;
if (pOldVar)
{
nDefault = pOldVar->GetIVal();
pConsole->UnregisterVariable(szVarName, true);
}
// NOTE: maybe we should preserve the actual value of the variable across the registration,
// because of the strange architecture of IConsole that converts int->float->int
pConsole->Register(szVarName, pContainer, float(*pContainer), nFlags, szComment);
ICVar* pVar = pConsole->GetCVar(szVarName);
#ifdef _DEBUG
// test if the variable really has this container
assert (*pContainer == pVar->GetIVal());
++*pContainer;
assert (*pContainer == pVar->GetIVal());
--*pContainer;
#endif
if (pOldVar && pVar && !(pVar->GetFlags()&VF_CHEAT))
{
// carry on the default value from the old variable anyway
pVar->Set(nDefault);
}
return pVar;
}
//////////////////////////////////////////////////////////////////////////
// detaches the given variable from the container;
// recreates the variable with new value
void CryAnimVars::detach (const char* szVarName, int* pContainer)
{
IConsole* pConsole = g_GetConsole();
ICVar* pVar = pConsole->GetCVar (szVarName);
if (pVar)
{
#ifdef _DEBUG
// test if the variable really has this container
assert (*pContainer == pVar->GetIVal());
++*pContainer;
assert (*pContainer == pVar->GetIVal());
--*pContainer;
#endif
*pContainer = pVar->GetIVal();
pConsole->UnregisterVariable(szVarName, true);
char szDefault[32];
sprintf (szDefault, "%d", *pContainer);
pVar = pConsole->CreateVariable(szVarName, szDefault, 0);
}
}