Core/AreaTriggers: Code cleanup

Port From (https://github.com/TrinityCore/TrinityCore/commit/7851cd3a9618b245c9b425dcaf71bbadbfecd054)
This commit is contained in:
hondacrx
2021-02-04 12:03:23 -05:00
parent e59acb792e
commit 0784e38a06
6 changed files with 187 additions and 151 deletions
+36 -38
View File
@@ -100,9 +100,9 @@ namespace Game.Entities
_areaTriggerTemplate = _areaTriggerMiscTemplate.Template;
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), GetTemplate().Id, caster.GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), GetTemplate().Id.Id, caster.GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
SetEntry(GetTemplate().Id);
SetEntry(GetTemplate().Id.Id);
SetDuration(duration);
SetObjectScale(1.0f);
@@ -212,20 +212,20 @@ namespace Game.Entities
return at;
}
bool LoadFromDB(uint spawnId, Map map, bool addToMap, bool allowDuplicate)
public override bool LoadFromDB(ulong spawnId, Map map, bool addToMap, bool allowDuplicate)
{
AreaTriggerServerPosition position = Global.AreaTriggerDataStorage.GetAreaTriggerServerPosition(spawnId);
AreaTriggerSpawn position = Global.AreaTriggerDataStorage.GetAreaTriggerSpawn(spawnId);
if (position == null)
return false;
AreaTriggerTemplate areaTriggerTemplate = Global.AreaTriggerDataStorage.GetAreaTriggerServerTemplate(position.Id);
AreaTriggerTemplate areaTriggerTemplate = Global.AreaTriggerDataStorage.GetAreaTriggerTemplate(position.Id);
if (areaTriggerTemplate == null)
return false;
return CreateServer(map, areaTriggerTemplate, position);
}
bool CreateServer(Map map, AreaTriggerTemplate areaTriggerTemplate, AreaTriggerServerPosition position)
bool CreateServer(Map map, AreaTriggerTemplate areaTriggerTemplate, AreaTriggerSpawn position)
{
SetMap(map);
Relocate(position.Location);
@@ -237,19 +237,21 @@ namespace Game.Entities
_areaTriggerTemplate = areaTriggerTemplate;
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), areaTriggerTemplate.Id, GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
_Create(ObjectGuid.Create(HighGuid.AreaTrigger, GetMapId(), areaTriggerTemplate.Id.Id, GetMap().GenerateLowGuid(HighGuid.AreaTrigger)));
SetEntry(areaTriggerTemplate.Id);
SetEntry(areaTriggerTemplate.Id.Id);
SetObjectScale(1.0f);
if (position.PhaseId != 0 || position.PhaseGroup != 0 || position.PhaseUseFlags != 0)
if (position.PhaseUseFlags != 0 || position.PhaseId != 0 || position.PhaseGroup != 0)
PhasingHandler.InitDbPhaseShift(GetPhaseShift(), (PhaseUseFlagsValues)position.PhaseUseFlags, position.PhaseId, position.PhaseGroup);
UpdateShape();
AI_Initialize();
_ai.OnCreate();
return true;
}
@@ -258,34 +260,31 @@ namespace Game.Entities
base.Update(diff);
_timeSinceCreated += diff;
if (IsServerSide())
if (!IsServerSide())
{
UpdateTargetList();
return;
}
// "If" order matter here, Orbit > Attached > Splines
if (HasOrbit())
{
UpdateOrbitPosition(diff);
}
else if(GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
{
Unit target = GetTarget();
if (target)
GetMap().AreaTriggerRelocation(this, target.GetPositionX(), target.GetPositionY(), target.GetPositionZ(), target.GetOrientation());
}
else
UpdateSplinePosition(diff);
if (GetDuration() != -1)
{
if (GetDuration() > diff)
_UpdateDuration((int)(_duration - diff));
else
// "If" order matter here, Orbit > Attached > Splines
if (HasOrbit())
{
Remove(); // expired
return;
UpdateOrbitPosition(diff);
}
else if (GetTemplate().HasFlag(AreaTriggerFlags.HasAttached))
{
Unit target = GetTarget();
if (target)
GetMap().AreaTriggerRelocation(this, target.GetPositionX(), target.GetPositionY(), target.GetPositionZ(), target.GetOrientation());
}
else
UpdateSplinePosition(diff);
if (GetDuration() != -1)
{
if (GetDuration() > diff)
_UpdateDuration((int)(_duration - diff));
else
{
Remove(); // expired
return;
}
}
}
@@ -967,7 +966,7 @@ namespace Game.Entities
AreaTriggerAI GetAI() { return _ai; }
public bool IsServerSide() { return _areaTriggerTemplate.IsServerSide; }
public bool IsServerSide() { return _areaTriggerTemplate.Id.IsServerSide; }
public override bool IsNeverVisibleFor(WorldObject seer) { return IsServerSide(); }
@@ -1034,10 +1033,9 @@ namespace Game.Entities
Optional<AreaTriggerOrbitInfo> _orbitInfo;
AreaTriggerMiscTemplate _areaTriggerMiscTemplate;
AreaTriggerTemplate _areaTriggerTemplate;
List<ObjectGuid> _insideUnits = new List<ObjectGuid>();
AreaTriggerAI _ai;
AreaTriggerTemplate _areaTriggerTemplate;
}
}
@@ -187,24 +187,28 @@ namespace Game.Entities
}
}
struct AreaTriggerTemplateKey
public struct AreaTriggerId
{
public uint Id;
public bool IsServer;
public bool IsServerSide;
public AreaTriggerTemplateKey(uint id, bool isServer)
public override int GetHashCode()
{
Id = id;
IsServer = isServer;
return Id.GetHashCode() ^ IsServerSide.GetHashCode();
}
public static bool operator ==(AreaTriggerTemplateKey A, AreaTriggerTemplateKey B)
public override bool Equals(object obj)
{
return A.Id == B.Id && A.IsServer == B.IsServer;
return Equals((AreaTriggerId)obj);
}
public static bool operator !=(AreaTriggerTemplateKey A, AreaTriggerTemplateKey B)
public static bool operator ==(AreaTriggerId left, AreaTriggerId right)
{
return A.Id != B.Id && A.IsServer != B.IsServer;
return left.Id == right.Id && left.IsServerSide == right.IsServerSide;
}
public static bool operator !=(AreaTriggerId left, AreaTriggerId right)
{
return !(left == right);
}
}
@@ -256,7 +260,7 @@ namespace Game.Entities
public bool IsPolygon() { return TriggerType == AreaTriggerTypes.Polygon; }
public bool IsCylinder() { return TriggerType == AreaTriggerTypes.Cylinder; }
public uint Id;
public AreaTriggerId Id;
public AreaTriggerTypes TriggerType;
public AreaTriggerFlags Flags;
public uint ScriptId;
@@ -265,7 +269,6 @@ namespace Game.Entities
public List<Vector2> PolygonVertices = new List<Vector2>();
public List<Vector2> PolygonVerticesTarget = new List<Vector2>();
public List<AreaTriggerAction> Actions = new List<AreaTriggerAction>();
public bool IsServerSide;
}
public unsafe class AreaTriggerMiscTemplate
@@ -305,11 +308,10 @@ namespace Game.Entities
public List<Vector3> SplinePoints = new List<Vector3>();
}
public class AreaTriggerServerPosition
public class AreaTriggerSpawn
{
public ulong SpawnId;
public uint Id;
public bool IsServer;
public AreaTriggerId Id;
public WorldLocation Location;
public uint PhaseId;
public uint PhaseGroup;