1
0
mirror of https://github.com/ncblakely/GiantsTools synced 2024-11-24 23:25:37 +01:00
GiantsTools/Sdk/Include/ECS/Public/Component.h

57 lines
1.1 KiB
C
Raw Normal View History

2021-01-24 00:40:09 +01:00
#pragma once
namespace ECS
{
#ifdef ENABLE_DEBUG
template<typename TComponent>
void EntityComponentEditor(TComponent& component)
{
static_assert(false, "No specialization has been defined for the component.");
}
template <typename T>
inline T EntityValueParser(const std::string& inputValue)
{
static_assert(false, "No parser is defined for the property type.");
}
template<>
inline float EntityValueParser(const std::string& inputValue)
{
return std::stof(inputValue);
}
template<>
inline int EntityValueParser(const std::string& inputValue)
{
return std::stoi(inputValue);
}
template<>
inline SBYTE EntityValueParser(const std::string& inputValue)
{
return std::stoi(inputValue);
}
template <typename T>
inline void EntityPropertyEditor(const char* propertyName, T& value)
{
std::string valueAsString = fmt::format("{0}", value);
if (ImGui::InputText(propertyName, &valueAsString))
{
if (!valueAsString.empty())
{
try
{
value = EntityValueParser<T>(valueAsString);
}
catch (const std::exception&)
{
// Ignore
}
}
}
}
#endif
}