/
redgpu
/
ezEngine
Обзор
Документация
Войти
/
redgpu
/
ezEngine
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
Code/Engine/GameEngine/Gameplay/Implementation/MarkerComponent.cpp
117 строк
3 KB
Jan Krassnigg
Migrate code to use Make* functions (#1022)
03 авг 2023, 08:07
Не верифицирован
03 авг 2023, 08:07
c42cf1d
Код
Авторство
О чём код?
#include <GameEngine/GameEnginePCH.h> #include <Core/Interfaces/PhysicsWorldModule.h> #include <Core/Messages/UpdateLocalBoundsMessage.h> #include <Core/WorldSerializer/WorldReader.h> #include <Core/WorldSerializer/WorldWriter.h> #include <Foundation/Serialization/AbstractObjectGraph.h> #include <GameEngine/Gameplay/MarkerComponent.h> #include <GameEngine/Messages/DamageMessage.h> // clang-format off EZ_BEGIN_COMPONENT_TYPE(ezMarkerComponent, 1, ezComponentMode::Static) { EZ_BEGIN_PROPERTIES { EZ_ACCESSOR_PROPERTY("Marker", GetMarkerType, SetMarkerType)->AddAttributes(new ezDynamicStringEnumAttribute("SpatialDataCategoryEnum")), EZ_ACCESSOR_PROPERTY("Radius", GetRadius, SetRadius)->AddAttributes(new ezDefaultValueAttribute(0.1)), } EZ_END_PROPERTIES; EZ_BEGIN_MESSAGEHANDLERS { EZ_MESSAGE_HANDLER(ezMsgUpdateLocalBounds, OnMsgUpdateLocalBounds) } EZ_END_MESSAGEHANDLERS; EZ_BEGIN_ATTRIBUTES { new ezCategoryAttribute("Gameplay"), new ezSphereVisualizerAttribute("Radius", ezColor::LightSkyBlue), } EZ_END_ATTRIBUTES; } EZ_END_DYNAMIC_REFLECTED_TYPE; // clang-format on ezMarkerComponent::ezMarkerComponent() = default; ezMarkerComponent::~ezMarkerComponent() = default; void ezMarkerComponent::SetMarkerType(const char* szType) { m_sMarkerType.Assign(szType); UpdateMarker(); } const char* ezMarkerComponent::GetMarkerType() const { return m_sMarkerType; } void ezMarkerComponent::SetRadius(float fRadius) { m_fRadius = fRadius; UpdateMarker(); } float ezMarkerComponent::GetRadius() const { return m_fRadius; } void ezMarkerComponent::OnMsgUpdateLocalBounds(ezMsgUpdateLocalBounds& msg) const { msg.AddBounds(ezBoundingSphere::MakeFromCenterAndRadius(ezVec3(0), m_fRadius), m_SpatialCategory); } void ezMarkerComponent::UpdateMarker() { if (!m_sMarkerType.IsEmpty()) { m_SpatialCategory = ezSpatialData::RegisterCategory(m_sMarkerType.GetString(), ezSpatialData::Flags::None); } else { m_SpatialCategory = ezInvalidSpatialDataCategory; } if (IsActiveAndInitialized()) { GetOwner()->UpdateLocalBounds(); } } void ezMarkerComponent::SerializeComponent(ezWorldWriter& inout_stream) const { SUPER::SerializeComponent(inout_stream); auto& s = inout_stream.GetStream(); s << m_sMarkerType; s << m_fRadius; } void ezMarkerComponent::DeserializeComponent(ezWorldReader& inout_stream) { SUPER::DeserializeComponent(inout_stream); // const ezUInt32 uiVersion = stream.GetComponentTypeVersion(GetStaticRTTI()); auto& s = inout_stream.GetStream(); s >> m_sMarkerType; s >> m_fRadius; } void ezMarkerComponent::OnActivated() { SUPER::OnActivated(); UpdateMarker(); } void ezMarkerComponent::OnDeactivated() { SUPER::OnDeactivated(); GetOwner()->UpdateLocalBounds(); } EZ_STATICLINK_FILE(GameEngine, GameEngine_Gameplay_Implementation_MarkerComponent);