double ScriptToken::GetNumericRepresentation(bool bFromHex) { double result = 0.0; if (CanConvertTo(kTokenType_Number)) result = GetNumber(); else if (CanConvertTo(kTokenType_String)) { const char* str = GetString(); if (!bFromHex) { // if string begins with "0x", interpret as hex Tokenizer tok(str, " \t\r\n"); std::string pre; if (tok.NextToken(pre) != -1 && pre.length() >= 2 && !_stricmp(pre.substr(0, 2).c_str(), "0x")) bFromHex = true; } if (!bFromHex) result = strtod(str, NULL); else { UInt32 hexInt = 0; sscanf_s(str, "%x", &hexInt); result = (double)hexInt; } } return result; }
ScriptToken* ScriptToken::ToBasicToken() const { if (CanConvertTo(kTokenType_String)) return Create(GetString()); else if (CanConvertTo(kTokenType_Array)) return CreateArray(GetArray()); else if (CanConvertTo(kTokenType_Form)) return CreateForm(GetFormID()); else if (CanConvertTo(kTokenType_Number)) return Create(GetNumber()); else return NULL; }
ezVariant ezVariant::ConvertTo(Type::Enum type, ezResult* out_pConversionStatus /* = NULL*/) const { if (!CanConvertTo(type)) { if (out_pConversionStatus != NULL) *out_pConversionStatus = EZ_FAILURE; return ezVariant(); // creates an invalid variant } if (m_Type == type) { if (out_pConversionStatus != NULL) *out_pConversionStatus = EZ_SUCCESS; return *this; } ConvertFunc convertFunc; convertFunc.m_pThis = this; convertFunc.m_bSuccessful = true; DispatchTo(convertFunc, type); if (out_pConversionStatus != NULL) *out_pConversionStatus = convertFunc.m_bSuccessful ? EZ_SUCCESS : EZ_FAILURE; return convertFunc.m_Result; }
UInt32 ScriptToken::GetActorValue() const { UInt32 actorVal = kActorVal_NoActorValue; if (CanConvertTo(kTokenType_Number)) { int num = GetNumber(); if (num >= 0 && num < kActorVal_OblivionMax) { actorVal = num; } } else { const char* str = GetString(); if (str) { actorVal = GetActorValueForString(str, true); } } return actorVal; }
EffectSetting* ScriptToken::GetEffectSetting() const { EffectSetting* eff = NULL; if (CanConvertTo(kTokenType_Number)) { eff = EffectSetting::EffectSettingForC(GetNumber()); } else { const char* str = GetString(); if (str && strlen(str) == 4) { UInt32 code = *((UInt32*)str); eff = EffectSetting::EffectSettingForC(code); } else { eff = OBLIVION_CAST(GetTESForm(), TESForm, EffectSetting); } } return eff; }