From 38197f79966f403ca18f2fa35ac172eebccaee38 Mon Sep 17 00:00:00 2001 From: hondacrx Date: Sat, 17 Dec 2022 17:16:08 -0500 Subject: [PATCH] Core/AreaTriggers: Implemented new areatrigger type: bounded plane Port From (https://github.com/TrinityCore/TrinityCore/commit/6856b248836205f3567d27848541859b93d93469) --- .../Framework/Constants/AreaTriggerConst.cs | 1 + Source/Framework/Database/DatabaseUpdater.cs | 4 ++-- .../Game/Entities/AreaTrigger/AreaTrigger.cs | 22 +++++++++++++++++++ .../AreaTrigger/AreaTriggerTemplate.cs | 12 ++++++++++ 4 files changed, 37 insertions(+), 2 deletions(-) diff --git a/Source/Framework/Constants/AreaTriggerConst.cs b/Source/Framework/Constants/AreaTriggerConst.cs index 1d8ff6437..4c3f473c1 100644 --- a/Source/Framework/Constants/AreaTriggerConst.cs +++ b/Source/Framework/Constants/AreaTriggerConst.cs @@ -41,6 +41,7 @@ namespace Framework.Constants Polygon = 3, Cylinder = 4, Disk = 5, + BoundedPlane = 6, Max } diff --git a/Source/Framework/Database/DatabaseUpdater.cs b/Source/Framework/Database/DatabaseUpdater.cs index 481ba53d2..8f445d8d0 100644 --- a/Source/Framework/Database/DatabaseUpdater.cs +++ b/Source/Framework/Database/DatabaseUpdater.cs @@ -54,10 +54,10 @@ namespace Framework.Database fileName = @"/sql/base/characters_database.sql"; break; case "WorldDatabase": - fileName = @"/sql/TDB_full_world_927.22082_2022_08_21.sql"; + fileName = @"/sql/TDB_full_world_927.22111_2022_11_20.sql"; break; case "HotfixDatabase": - fileName = @"/sql/TDB_full_hotfixes_927.22082_2022_08_21.sql"; + fileName = @"/sql/TDB_full_hotfixes_927.22111_2022_11_20.sql"; break; } diff --git a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs index 312374073..f4954f569 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTrigger.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTrigger.cs @@ -376,6 +376,9 @@ namespace Game.Entities case AreaTriggerTypes.Disk: SearchUnitInDisk(targetList); break; + case AreaTriggerTypes.BoundedPlane: + SearchUnitInBoundedPlane(targetList); + break; default: break; } @@ -470,6 +473,25 @@ namespace Game.Entities targetList.RemoveAll(unit => unit.IsInDist2d(this, innerRadius) || unit.GetPositionZ() < minZ || unit.GetPositionZ() > maxZ); } + void SearchUnitInBoundedPlane(List targetList) + { + SearchUnits(targetList, GetMaxSearchRadius(), false); + + Position boxCenter = GetPosition(); + float extentsX, extentsY; + + unsafe + { + extentsX = _shape.BoxDatas.Extents[0]; + extentsY = _shape.BoxDatas.Extents[1]; + } + + targetList.RemoveAll(unit => + { + return !unit.IsWithinBox(boxCenter, extentsX, extentsY, MapConst.MapSize); + }); + } + void HandleUnitEnterExit(List newTargetList) { List exitUnits = _insideUnits; diff --git a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs index a5323bb06..113e464d0 100644 --- a/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs +++ b/Source/Game/Entities/AreaTrigger/AreaTriggerTemplate.cs @@ -47,6 +47,9 @@ namespace Game.Entities [FieldOffset(0)] public diskDatas DiskDatas; + [FieldOffset(0)] + public boundedPlaneDatas BoundedPlaneDatas; + public struct defaultdatas { public fixed float Data[SharedConst.MaxAreatriggerEntityData]; @@ -95,6 +98,12 @@ namespace Game.Entities public float LocationZOffset; public float LocationZOffsetTarget; } + // AREATRIGGER_TYPE_BOUNDED_PLANE + public struct boundedPlaneDatas + { + public fixed float Extents[2]; + public fixed float ExtentsTarget[2]; + } } /// @@ -218,6 +227,8 @@ namespace Game.Entities return Math.Max(CylinderDatas.Radius, CylinderDatas.RadiusTarget); case AreaTriggerTypes.Disk: return Math.Max(DiskDatas.OuterRadius, DiskDatas.OuterRadiusTarget); + case AreaTriggerTypes.BoundedPlane: + return MathF.Sqrt(BoundedPlaneDatas.Extents[0] * BoundedPlaneDatas.Extents[0] / 4 + BoundedPlaneDatas.Extents[1] * BoundedPlaneDatas.Extents[1] / 4); } return 0.0f; @@ -228,6 +239,7 @@ namespace Game.Entities public bool IsPolygon() { return TriggerType == AreaTriggerTypes.Polygon; } public bool IsCylinder() { return TriggerType == AreaTriggerTypes.Cylinder; } public bool IsDisk() { return TriggerType == AreaTriggerTypes.Disk; } + public bool IsBoudedPlane() { return TriggerType == AreaTriggerTypes.BoundedPlane; } } public class AreaTriggerOrbitInfo