aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorShauren <shauren.trinity@gmail.com>2019-05-05 17:54:39 +0200
committerShauren <shauren.trinity@gmail.com>2019-05-05 17:54:39 +0200
commitd180944f59fc4bbe1d7a2a69896ec0af18e45d61 (patch)
tree30836e83a12f24dd18267a9866107c9332d6e1c3 /src
parent91409cc77e5076e43046dc9749308afcf52f04db (diff)
Core/AreaTriggers: Document scale curve fields
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTrigger.cpp4
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.cpp13
-rw-r--r--src/server/game/Entities/AreaTrigger/AreaTriggerTemplate.h34
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;