Add Variant operator support for IntX.

This commit is contained in:
Jean-Baptiste Perrier
2021-04-08 18:44:26 +02:00
parent 1e4c07f94c
commit 0f6e204c76
2 changed files with 129 additions and 0 deletions

View File

@@ -1525,6 +1525,132 @@ Variant::operator Vector4() const
}
}
Variant::operator Int2() const
{
switch (Type.Type)
{
case VariantType::Bool:
return Int2((int32)(AsBool ? 1.0f : 0.0f));
case VariantType::Int:
return Int2((int32)AsInt);
case VariantType::Uint:
return Int2((int32)AsUint);
case VariantType::Int64:
return Int2((int32)AsInt64);
case VariantType::Uint64:
case VariantType::Enum:
return Int2((int32)AsUint64);
case VariantType::Float:
return Int2((int32)AsFloat);
case VariantType::Double:
return Int2((int32)AsDouble);
case VariantType::Pointer:
return Int2((int32)(intptr)AsPointer);
case VariantType::Vector2:
return Int2(*(Vector2*)AsData);
case VariantType::Vector3:
return Int2(*(Vector3*)AsData);
case VariantType::Vector4:
return Int2(*(Vector4*)AsData);
case VariantType::Int2:
return Int2(*(Int2*)AsData);
case VariantType::Int3:
return Int2(*(Int3*)AsData);
case VariantType::Int4:
case VariantType::Color:
return Int2(*(Int4*)AsData);
case VariantType::Structure:
if (StringUtils::Compare(Type.TypeName, Int2::TypeInitializer.GetType().Fullname.Get()) == 0)
return *(Int2*)AsBlob.Data;
default:
return Int3::Zero;
}
}
Variant::operator Int3() const
{
switch (Type.Type)
{
case VariantType::Bool:
return Int3((int32)(AsBool ? 1.0f : 0.0f));
case VariantType::Int:
return Int3((int32)AsInt);
case VariantType::Uint:
return Int3((int32)AsUint);
case VariantType::Int64:
return Int3((int32)AsInt64);
case VariantType::Uint64:
case VariantType::Enum:
return Int3((int32)AsUint64);
case VariantType::Float:
return Int3((int32)AsFloat);
case VariantType::Double:
return Int3((int32)AsDouble);
case VariantType::Pointer:
return Int3((int32)(intptr)AsPointer);
case VariantType::Vector2:
return Int3(*(Vector2*)AsData, 0.0f);
case VariantType::Vector3:
return Int3(*(Vector3*)AsData);
case VariantType::Vector4:
return Int3(*(Vector4*)AsData);
case VariantType::Int2:
return Int3(*(Int2*)AsData, 0.0f);
case VariantType::Int3:
return Int3(*(Int3*)AsData);
case VariantType::Int4:
case VariantType::Color:
return Int3(*(Int4*)AsData);
case VariantType::Structure:
if (StringUtils::Compare(Type.TypeName, Int3::TypeInitializer.GetType().Fullname.Get()) == 0)
return *(Int3*)AsBlob.Data;
default:
return Int3::Zero;
}
}
Variant::operator Int4() const
{
switch (Type.Type)
{
case VariantType::Bool:
return Int4((int32)(AsBool ? 1.0f : 0.0f));
case VariantType::Int:
return Int4((int32)AsInt);
case VariantType::Uint:
return Int4((int32)AsUint);
case VariantType::Int64:
return Int4((int32)AsInt64);
case VariantType::Uint64:
case VariantType::Enum:
return Int4((int32)AsUint64);
case VariantType::Float:
return Int4((int32)AsFloat);
case VariantType::Double:
return Int4((int32)AsDouble);
case VariantType::Pointer:
return Int4((int32)(intptr)AsPointer);
case VariantType::Vector2:
return Int4(*(Vector2*)AsData, 0.0f, 0.0f);
case VariantType::Vector3:
return Int4(*(Vector3*)AsData, 0.0f);
case VariantType::Vector4:
return Int4(*(Vector4*)AsData);
case VariantType::Int2:
return Int4(*(Int2*)AsData, 0.0f, 0.0f);
case VariantType::Int3:
return Int4(*(Int3*)AsData, 0.0f);
case VariantType::Int4:
case VariantType::Color:
return *(Int4*)AsData;
case VariantType::Structure:
if (StringUtils::Compare(Type.TypeName, Int4::TypeInitializer.GetType().Fullname.Get()) == 0)
return *(Int4*)AsBlob.Data;
default:
return Int4::Zero;
}
}
Variant::operator Color() const
{
switch (Type.Type)

View File

@@ -269,6 +269,9 @@ public:
explicit operator Vector2() const;
explicit operator Vector3() const;
explicit operator Vector4() const;
explicit operator Int2() const;
explicit operator Int3() const;
explicit operator Int4() const;
explicit operator Color() const;
explicit operator Quaternion() const;
explicit operator Guid() const;