Core/AreaTriggers: Document scale curve fields

This commit is contained in:
Shauren
2019-05-05 17:54:39 +02:00
parent 91409cc77e
commit d180944f59
3 changed files with 33 additions and 16 deletions

View File

@@ -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);

View File

@@ -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;
}

View File

@@ -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];
struct
{
uint32 StartTimeOffset;
float Points[4];
struct
{
uint32 NoData : 1;
uint32 InterpolationMode : 3;
uint32 FirstPointOffset : 23;
uint32 PointCount : 5;
} CurveParameters;
uint32 OverrideActive;
} Structured;
union
{
int32 AsInt32;
float AsFloat;
} ExtraScale[MAX_AREATRIGGER_SCALE];
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;