diff options
author | Shauren <shauren.trinity@gmail.com> | 2019-05-05 17:54:39 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2019-05-05 17:54:39 +0200 |
commit | d180944f59fc4bbe1d7a2a69896ec0af18e45d61 (patch) | |
tree | 30836e83a12f24dd18267a9866107c9332d6e1c3 /src | |
parent | 91409cc77e5076e43046dc9749308afcf52f04db (diff) |
Core/AreaTriggers: Document scale curve fields
Diffstat (limited to 'src')
3 files changed, 34 insertions, 17 deletions
diff --git a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp index c22962f8d18..64ac5d0694e 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTrigger.cpp @@ -125,8 +125,8 @@ bool AreaTrigger::Create(uint32 spellMiscId, Unit* caster, Unit* target, SpellIn SetUInt32Value(AREATRIGGER_DECAL_PROPERTIES_ID, GetMiscTemplate()->DecalPropertiesId); for (uint8 scaleCurveIndex = 0; scaleCurveIndex < MAX_AREATRIGGER_SCALE; ++scaleCurveIndex) - if (GetMiscTemplate()->ScaleInfo.ExtraScale[scaleCurveIndex].AsInt32) - SetUInt32Value(AREATRIGGER_EXTRA_SCALE_CURVE + scaleCurveIndex, GetMiscTemplate()->ScaleInfo.ExtraScale[scaleCurveIndex].AsInt32); + if (GetMiscTemplate()->ExtraScale.Data.Raw[scaleCurveIndex]) + SetUInt32Value(AREATRIGGER_EXTRA_SCALE_CURVE + scaleCurveIndex, GetMiscTemplate()->ExtraScale.Data.Raw[scaleCurveIndex]); PhasingHandler::InheritPhaseShift(this, caster); diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp index c8ff4b232e6..60796815630 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp @@ -23,11 +23,7 @@ AreaTriggerScaleInfo::AreaTriggerScaleInfo() { - memset(OverrideScale, 0, sizeof(OverrideScale)); - memset(ExtraScale, 0, sizeof(ExtraScale)); - - ExtraScale[5].AsFloat = 1.0000001f; - ExtraScale[6].AsInt32 = 1; + memset(Data.Raw, 0, sizeof(Data.Raw)); } AreaTriggerTemplate::AreaTriggerTemplate() @@ -104,6 +100,13 @@ AreaTriggerMiscTemplate::AreaTriggerMiscTemplate() TimeToTarget = 0; TimeToTargetScale = 0; + // legacy code from before it was known what each curve field does + // wtf? thats not how you pack curve data + float tmp = 1.0000001f; + memcpy(&ExtraScale.Data.Raw[5], &tmp, sizeof(tmp)); + // also OverrideActive does nothing on ExtraScale + ExtraScale.Data.Structured.OverrideActive = 1; + Template = nullptr; } diff --git a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h index c515a8173f0..995bc419967 100644 --- a/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h +++ b/src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h @@ -78,21 +78,34 @@ struct AreaTriggerAction AreaTriggerActionUserTypes TargetType; }; +// Scale array definition +// 0 - time offset from creation for starting of scaling +// 1+2,3+4 are values for curve points Vector2[2] +// 5 is packed curve information (has_no_data & 1) | ((interpolation_mode & 0x7) << 1) | ((first_point_offset & 0x7FFFFF) << 4) | ((point_count & 0x1F) << 27) +// 6 bool is_override, only valid for AREATRIGGER_OVERRIDE_SCALE_CURVE, if true then use data from AREATRIGGER_OVERRIDE_SCALE_CURVE instead of ScaleCurveId from CreateObject + struct AreaTriggerScaleInfo { AreaTriggerScaleInfo(); union { - int32 AsInt32; - float AsFloat; - } OverrideScale[MAX_AREATRIGGER_SCALE]; - - union - { - int32 AsInt32; - float AsFloat; - } ExtraScale[MAX_AREATRIGGER_SCALE]; + struct + { + uint32 StartTimeOffset; + float Points[4]; + struct + { + uint32 NoData : 1; + uint32 InterpolationMode : 3; + uint32 FirstPointOffset : 23; + uint32 PointCount : 5; + } CurveParameters; + uint32 OverrideActive; + } Structured; + + uint32 Raw[MAX_AREATRIGGER_SCALE]; + } Data; }; struct AreaTriggerCircularMovementInfo @@ -199,7 +212,8 @@ public: uint32 TimeToTarget; uint32 TimeToTargetScale; - AreaTriggerScaleInfo ScaleInfo; + AreaTriggerScaleInfo OverrideScale; + AreaTriggerScaleInfo ExtraScale; AreaTriggerCircularMovementInfo CircularMovementInfo; AreaTriggerTemplate const* Template; |