示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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;
}
示例#4
0
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;
}
示例#5
0
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;
}