Core/AreaTriggers: Update areatrigger shape enum

This commit is contained in:
luis
2026-09-17 15:36:02 -03:00
parent 18cf0e7fb0
commit 2cf2860cec
4 changed files with 21 additions and 14 deletions
+5 -3
View File
@@ -196,11 +196,13 @@ enum class AreaTriggerShapeType : int8
{ {
Sphere = 0, Sphere = 0,
Box = 1, Box = 1,
Unk = 2, Quad2D = 2,
Polygon = 3, Polygon = 3,
Cylinder = 4, Cylinder = 4,
Disk = 5, Script = 5,
BoundedPlane = 6, FromUnit = 6,
Disk = 7,
BoundedPlane = 8,
Max Max
}; };
@@ -1113,21 +1113,21 @@ void AreaTrigger::SetShape(AreaTriggerShapeInfo const& shape)
if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Sphere>) if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Sphere>)
{ {
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 0); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), uint8(AreaTriggerShapeType::Sphere));
auto sphere = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerSphere>); auto sphere = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerSphere>);
SetUpdateFieldValue(sphere.ModifyValue(&UF::AreaTriggerSphere::Radius), shapeData.Radius); SetUpdateFieldValue(sphere.ModifyValue(&UF::AreaTriggerSphere::Radius), shapeData.Radius);
SetUpdateFieldValue(sphere.ModifyValue(&UF::AreaTriggerSphere::RadiusTarget), shapeData.RadiusTarget); SetUpdateFieldValue(sphere.ModifyValue(&UF::AreaTriggerSphere::RadiusTarget), shapeData.RadiusTarget);
} }
else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Box>) else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Box>)
{ {
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 1); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), uint8(AreaTriggerShapeType::Box));
auto box = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerBox>); auto box = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerBox>);
SetUpdateFieldValue(box.ModifyValue(&UF::AreaTriggerBox::Extents), shapeData.Extents); SetUpdateFieldValue(box.ModifyValue(&UF::AreaTriggerBox::Extents), shapeData.Extents);
SetUpdateFieldValue(box.ModifyValue(&UF::AreaTriggerBox::ExtentsTarget), shapeData.ExtentsTarget); SetUpdateFieldValue(box.ModifyValue(&UF::AreaTriggerBox::ExtentsTarget), shapeData.ExtentsTarget);
} }
else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Polygon>) else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Polygon>)
{ {
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 3); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), uint8(shapeData.Type));
auto polygon = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerPolygon>); auto polygon = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerPolygon>);
auto vertices = polygon.ModifyValue(&UF::AreaTriggerPolygon::Vertices); auto vertices = polygon.ModifyValue(&UF::AreaTriggerPolygon::Vertices);
ClearDynamicUpdateFieldValues(vertices); ClearDynamicUpdateFieldValues(vertices);
@@ -1142,7 +1142,7 @@ void AreaTrigger::SetShape(AreaTriggerShapeInfo const& shape)
} }
else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Cylinder>) else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Cylinder>)
{ {
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 4); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), uint8(AreaTriggerShapeType::Cylinder));
auto cylinder = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerCylinder>); auto cylinder = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerCylinder>);
SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::Radius), shapeData.Radius); SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::Radius), shapeData.Radius);
SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::RadiusTarget), shapeData.RadiusTarget); SetUpdateFieldValue(cylinder.ModifyValue(&UF::AreaTriggerCylinder::RadiusTarget), shapeData.RadiusTarget);
@@ -1153,7 +1153,7 @@ void AreaTrigger::SetShape(AreaTriggerShapeInfo const& shape)
} }
else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Disk>) else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::Disk>)
{ {
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 7); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), uint8(AreaTriggerShapeType::Disk));
auto disk = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerDisk>); auto disk = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerDisk>);
SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::InnerRadius), shapeData.InnerRadius); SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::InnerRadius), shapeData.InnerRadius);
SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::InnerRadiusTarget), shapeData.InnerRadiusTarget); SetUpdateFieldValue(disk.ModifyValue(&UF::AreaTriggerDisk::InnerRadiusTarget), shapeData.InnerRadiusTarget);
@@ -1166,7 +1166,7 @@ void AreaTrigger::SetShape(AreaTriggerShapeInfo const& shape)
} }
else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::BoundedPlane>) else if constexpr (std::is_same_v<ShapeType, AreaTriggerShapeInfo::BoundedPlane>)
{ {
SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), 8); SetUpdateFieldValue(areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeType), uint8(AreaTriggerShapeType::BoundedPlane));
auto boundedPlane = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerBoundedPlane>); auto boundedPlane = areaTriggerData.ModifyValue(&UF::AreaTriggerData::ShapeData, UF::VariantCase<UF::AreaTriggerBoundedPlane>);
SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsY), shapeData.ExtentsY); SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsY), shapeData.ExtentsY);
SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsZ), shapeData.ExtentsZ); SetUpdateFieldValue(boundedPlane.ModifyValue(&UF::AreaTriggerBoundedPlane::ExtentsZ), shapeData.ExtentsZ);
@@ -18,6 +18,7 @@
#ifndef TRINITYCORE_AREATRIGGER_TEMPLATE_H #ifndef TRINITYCORE_AREATRIGGER_TEMPLATE_H
#define TRINITYCORE_AREATRIGGER_TEMPLATE_H #define TRINITYCORE_AREATRIGGER_TEMPLATE_H
#include "DBCEnums.h"
#include "Define.h" #include "Define.h"
#include "EnumFlag.h" #include "EnumFlag.h"
#include "ObjectGuid.h" #include "ObjectGuid.h"
@@ -121,14 +122,17 @@ struct AreaTriggerShapeInfo
struct Polygon struct Polygon
{ {
Polygon() Polygon()
: PolygonVertices(), PolygonVerticesTarget(), Height(0.0f), HeightTarget(0.0f) { } : PolygonVertices(), PolygonVerticesTarget(), Height(0.0f), HeightTarget(0.0f), Type(AreaTriggerShapeType::Polygon) {
explicit Polygon(std::array<float, MAX_AREATRIGGER_ENTITY_DATA> const& raw) }
: PolygonVertices(), PolygonVerticesTarget(), Height(raw[0]), HeightTarget(raw[1]) { } explicit Polygon(AreaTriggerShapeType type, std::array<float, MAX_AREATRIGGER_ENTITY_DATA> const& raw)
: PolygonVertices(), PolygonVerticesTarget(), Height(raw[0]), HeightTarget(raw[1]), Type(type) {
}
std::vector<TaggedPosition<Position::XY>> PolygonVertices; std::vector<TaggedPosition<Position::XY>> PolygonVertices;
std::vector<TaggedPosition<Position::XY>> PolygonVerticesTarget; std::vector<TaggedPosition<Position::XY>> PolygonVerticesTarget;
float Height; float Height;
float HeightTarget; float HeightTarget;
AreaTriggerShapeType Type;
float GetMaxSearchRadius() const; float GetMaxSearchRadius() const;
bool IsDynamic() const; bool IsDynamic() const;
@@ -199,7 +199,7 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates()
continue; continue;
} }
if (shape == AreaTriggerShapeType::Unk || shape >= AreaTriggerShapeType::Max) if (shape == AreaTriggerShapeType::Script || shape == AreaTriggerShapeType::FromUnit || shape >= AreaTriggerShapeType::Max)
{ {
TC_LOG_ERROR("sql.sql", "Table `areatrigger_create_properties` has listed AreaTriggerCreatePropertiesId (Id: {}, IsCustom: {}) with invalid shape {}.", TC_LOG_ERROR("sql.sql", "Table `areatrigger_create_properties` has listed AreaTriggerCreatePropertiesId (Id: {}, IsCustom: {}) with invalid shape {}.",
createPropertiesId.Id, uint32(createPropertiesId.IsCustom), uint32(shape)); createPropertiesId.Id, uint32(createPropertiesId.IsCustom), uint32(shape));
@@ -277,9 +277,10 @@ void AreaTriggerDataStore::LoadAreaTriggerTemplates()
case AreaTriggerShapeType::Box: case AreaTriggerShapeType::Box:
createProperties.Shape.Data.emplace<AreaTriggerShapeInfo::Box>(shapeData); createProperties.Shape.Data.emplace<AreaTriggerShapeInfo::Box>(shapeData);
break; break;
case AreaTriggerShapeType::Quad2D:
case AreaTriggerShapeType::Polygon: case AreaTriggerShapeType::Polygon:
{ {
AreaTriggerShapeInfo::Polygon& polygon = createProperties.Shape.Data.emplace<AreaTriggerShapeInfo::Polygon>(shapeData); AreaTriggerShapeInfo::Polygon& polygon = createProperties.Shape.Data.emplace<AreaTriggerShapeInfo::Polygon>(shape, shapeData);
if (polygon.Height <= 0.0f) if (polygon.Height <= 0.0f)
{ {
polygon.Height = 1.0f; polygon.Height = 1.0f;