Convert FirefliesItemFlags enum to enum class

This commit is contained in:
Sezz 2025-03-18 18:21:11 +11:00
parent d21bbc499d
commit b2570cb3ec
3 changed files with 42 additions and 42 deletions

View file

@ -53,15 +53,15 @@ namespace TEN::Effects::Fireflies
item.HitPoints = FIREFLY_COUNT_DEFAULT; item.HitPoints = FIREFLY_COUNT_DEFAULT;
item.ItemFlags[FirefliesItemFlags::TargetItemPtr] = item.Index; item.ItemFlags[(int)FirefliesItemFlags::TargetItemPtr] = item.Index;
item.ItemFlags[FirefliesItemFlags::Light] = 1; // 1 = light effect, 0 = no light effect. item.ItemFlags[(int)FirefliesItemFlags::Light] = 1; // 1 = light effect, 0 = no light effect.
item.ItemFlags[FirefliesItemFlags::TriggerFlags] = std::clamp((int)item.TriggerFlags, -FIREFLY_RANGE_MAX, FIREFLY_RANGE_MAX); item.ItemFlags[(int)FirefliesItemFlags::TriggerFlags] = std::clamp((int)item.TriggerFlags, -FIREFLY_RANGE_MAX, FIREFLY_RANGE_MAX);
item.ItemFlags[FirefliesItemFlags::SpawnCounter] = 0; item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter] = 0;
item.ItemFlags[FirefliesItemFlags::RemoveFliesEffect] = 0; item.ItemFlags[(int)FirefliesItemFlags::RemoveFliesEffect] = 0;
// Firefly IDs with light. // Firefly IDs with light.
item.ItemFlags[FirefliesItemFlags::LightID0] = NO_VALUE; item.ItemFlags[(int)FirefliesItemFlags::LightID0] = NO_VALUE;
item.ItemFlags[FirefliesItemFlags::LightID1] = NO_VALUE; item.ItemFlags[(int)FirefliesItemFlags::LightID1] = NO_VALUE;
} }
void SpawnFireflySwarm(ItemInfo& item, int triggerFlags) void SpawnFireflySwarm(ItemInfo& item, int triggerFlags)
@ -114,7 +114,7 @@ namespace TEN::Effects::Fireflies
// TODO: Demagic. // TODO: Demagic.
firefly.Life = Random::GenerateFloat(1.0f, 400.0f); firefly.Life = Random::GenerateFloat(1.0f, 400.0f);
firefly.TargetItem = &g_Level.Items[item.ItemFlags[FirefliesItemFlags::TargetItemPtr]]; firefly.TargetItem = &g_Level.Items[item.ItemFlags[(int)FirefliesItemFlags::TargetItemPtr]];
int& nextFireflyID = NextFireflyIDMap[item.Index]; int& nextFireflyID = NextFireflyIDMap[item.Index];
firefly.ID = nextFireflyID++; // TODO: Increment should be on separate line for clarity. firefly.ID = nextFireflyID++; // TODO: Increment should be on separate line for clarity.
@ -133,11 +133,11 @@ namespace TEN::Effects::Fireflies
// Reset ItemFlags. // Reset ItemFlags.
if (item.HitPoints == NOT_TARGETABLE) if (item.HitPoints == NOT_TARGETABLE)
item.HitPoints = item.ItemFlags[FirefliesItemFlags::SpawnCounter]; item.HitPoints = item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter];
item.ItemFlags[FirefliesItemFlags::SpawnCounter] = 0; item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter] = 0;
item.ItemFlags[FirefliesItemFlags::LightID0] = NO_VALUE; item.ItemFlags[(int)FirefliesItemFlags::LightID0] = NO_VALUE;
item.ItemFlags[FirefliesItemFlags::LightID1] = NO_VALUE; item.ItemFlags[(int)FirefliesItemFlags::LightID1] = NO_VALUE;
return; return;
} }
@ -149,7 +149,7 @@ namespace TEN::Effects::Fireflies
if (item.HitPoints != NOT_TARGETABLE) if (item.HitPoints != NOT_TARGETABLE)
{ {
int fireflyCount = item.HitPoints - item.ItemFlags[FirefliesItemFlags::SpawnCounter]; int fireflyCount = item.HitPoints - item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter];
if (fireflyCount < 0) if (fireflyCount < 0)
{ {
@ -174,7 +174,7 @@ namespace TEN::Effects::Fireflies
} }
} }
item.ItemFlags[FirefliesItemFlags::SpawnCounter] = item.HitPoints; item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter] = item.HitPoints;
item.HitPoints = NOT_TARGETABLE; item.HitPoints = NOT_TARGETABLE;
} }
@ -188,14 +188,14 @@ namespace TEN::Effects::Fireflies
if (targetItem == &item) if (targetItem == &item)
{ {
// Choose one available firefly ID that has light. // Choose one available firefly ID that has light.
if (targetItem->ItemFlags[FirefliesItemFlags::LightID0] == NO_VALUE && targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] >= 0) if (targetItem->ItemFlags[(int)FirefliesItemFlags::LightID0] == NO_VALUE && targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] >= 0)
{ {
targetItem->ItemFlags[FirefliesItemFlags::LightID0] = Random::GenerateInt(0, targetItem->TriggerFlags); targetItem->ItemFlags[(int)FirefliesItemFlags::LightID0] = Random::GenerateInt(0, targetItem->TriggerFlags);
} }
// Two lights max for each cluster. // Two lights max for each cluster.
if (targetItem->ItemFlags[FirefliesItemFlags::LightID1] == NO_VALUE && targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] >= 0) if (targetItem->ItemFlags[(int)FirefliesItemFlags::LightID1] == NO_VALUE && targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] >= 0)
{ {
targetItem->ItemFlags[FirefliesItemFlags::LightID1] = Random::GenerateInt(0, targetItem->TriggerFlags); targetItem->ItemFlags[(int)FirefliesItemFlags::LightID1] = Random::GenerateInt(0, targetItem->TriggerFlags);
} }
auto posBase = firefly.Position; auto posBase = firefly.Position;
@ -204,7 +204,7 @@ namespace TEN::Effects::Fireflies
auto dir0 = Geometry::RotatePoint(posBase, EulerAngles::Identity); auto dir0 = Geometry::RotatePoint(posBase, EulerAngles::Identity);
short orient2D = firefly.Orientation.z; short orient2D = firefly.Orientation.z;
if (targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] >= 0) if (targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] >= 0)
{ {
StreamerEffect.Spawn( StreamerEffect.Spawn(
targetItem->Index, firefly.ID, pos, dir0, orient2D, targetItem->Index, firefly.ID, pos, dir0, orient2D,
@ -212,7 +212,7 @@ namespace TEN::Effects::Fireflies
Vector4::Zero, Vector4::Zero,
6.3f - (firefly.zVel / 12), ((firefly.Velocity / 8) + firefly.zVel * 3) / (float)UCHAR_MAX, 0.0f, -0.1f, 90.0f, StreamerFeatherMode::None, BlendMode::Additive); 6.3f - (firefly.zVel / 12), ((firefly.Velocity / 8) + firefly.zVel * 3) / (float)UCHAR_MAX, 0.0f, -0.1f, 90.0f, StreamerFeatherMode::None, BlendMode::Additive);
} }
else if (targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] < 0) else if (targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] < 0)
{ {
StreamerEffect.Spawn( StreamerEffect.Spawn(
targetItem->Index, firefly.ID, pos, dir0, orient2D, targetItem->Index, firefly.ID, pos, dir0, orient2D,
@ -221,8 +221,8 @@ namespace TEN::Effects::Fireflies
0.0f, 0.4f, 0.0f, 0.2f, 0.0f, StreamerFeatherMode::None, BlendMode::Subtractive); 0.0f, 0.4f, 0.0f, 0.2f, 0.0f, StreamerFeatherMode::None, BlendMode::Subtractive);
} }
if ((targetItem->ItemFlags[FirefliesItemFlags::LightID0] == firefly.ID || targetItem->ItemFlags[FirefliesItemFlags::LightID1] == firefly.ID) && if ((targetItem->ItemFlags[(int)FirefliesItemFlags::LightID0] == firefly.ID || targetItem->ItemFlags[(int)FirefliesItemFlags::LightID1] == firefly.ID) &&
targetItem->ItemFlags[FirefliesItemFlags::Light] == 1) targetItem->ItemFlags[(int)FirefliesItemFlags::Light] == 1)
{ {
float totalCycleDuration = 2 * (FIREFLY_LIGHT_ALPHA_CYCLE_DURATION + ALPHA_PAUSE_DURATION); float totalCycleDuration = 2 * (FIREFLY_LIGHT_ALPHA_CYCLE_DURATION + ALPHA_PAUSE_DURATION);
float alphaTime = fmod(frameCounter, totalCycleDuration); float alphaTime = fmod(frameCounter, totalCycleDuration);
@ -238,8 +238,8 @@ namespace TEN::Effects::Fireflies
else if (alphaTime < 2 * ALPHA_PAUSE_DURATION + FIREFLY_LIGHT_ALPHA_CYCLE_DURATION) else if (alphaTime < 2 * ALPHA_PAUSE_DURATION + FIREFLY_LIGHT_ALPHA_CYCLE_DURATION)
{ {
alphaFactor = 0.0f; // Pause on Alpha 0. alphaFactor = 0.0f; // Pause on Alpha 0.
targetItem->ItemFlags[FirefliesItemFlags::LightID0] = NO_VALUE; targetItem->ItemFlags[(int)FirefliesItemFlags::LightID0] = NO_VALUE;
targetItem->ItemFlags[FirefliesItemFlags::LightID1] = NO_VALUE; targetItem->ItemFlags[(int)FirefliesItemFlags::LightID1] = NO_VALUE;
} }
else else
{ {
@ -279,7 +279,7 @@ namespace TEN::Effects::Fireflies
auto targetItem = firefly.TargetItem; auto targetItem = firefly.TargetItem;
if (targetItem->ItemFlags[FirefliesItemFlags::RemoveFliesEffect]) if (targetItem->ItemFlags[(int)FirefliesItemFlags::RemoveFliesEffect])
{ {
firefly.r = 0; firefly.r = 0;
firefly.g = 0; firefly.g = 0;
@ -292,9 +292,9 @@ namespace TEN::Effects::Fireflies
firefly.PositionTarget = Random::GeneratePointInSphere(SPHERE); firefly.PositionTarget = Random::GeneratePointInSphere(SPHERE);
auto spheroidAxis = Vector3( auto spheroidAxis = Vector3(
CLICK(targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] * 2), CLICK(targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] * 2),
CLICK(targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] * 4), CLICK(targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] * 4),
CLICK(targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] * 2)); CLICK(targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] * 2));
auto itemPos = Vector3i(targetItem->Pose.Position.x, targetItem->Pose.Position.y - FIREFLY_ASCENT_FACTOR, targetItem->Pose.Position.z); auto itemPos = Vector3i(targetItem->Pose.Position.x, targetItem->Pose.Position.y - FIREFLY_ASCENT_FACTOR, targetItem->Pose.Position.z);
@ -377,8 +377,8 @@ namespace TEN::Effects::Fireflies
firefly.Velocity -= std::min(FLEE_VEL, firefly.TargetItem->Animation.Velocity.z - 1.0f); firefly.Velocity -= std::min(FLEE_VEL, firefly.TargetItem->Animation.Velocity.z - 1.0f);
if (Random::TestProbability(1.0f / 700.0f) && if (Random::TestProbability(1.0f / 700.0f) &&
targetItem->ItemFlags[FirefliesItemFlags::Light] == 1 && targetItem->ItemFlags[(int)FirefliesItemFlags::Light] == 1 &&
targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] >= 0) targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] >= 0)
{ {
if (firefly.zVel == 0.3f) if (firefly.zVel == 0.3f)
{ {
@ -408,10 +408,10 @@ namespace TEN::Effects::Fireflies
firefly.RoomNumber = pointColl.GetRoomNumber(); firefly.RoomNumber = pointColl.GetRoomNumber();
} }
if (targetItem->ItemFlags[FirefliesItemFlags::Light] == 1 && if (targetItem->ItemFlags[(int)FirefliesItemFlags::Light] == 1 &&
targetItem->ItemFlags[FirefliesItemFlags::TriggerFlags] >= 0) targetItem->ItemFlags[(int)FirefliesItemFlags::TriggerFlags] >= 0)
{ {
if (Random::TestProbability(1.0f / (700.0f - float(targetItem->ItemFlags[FirefliesItemFlags::SpawnCounter] * 2)))) if (Random::TestProbability(1.0f / (700.0f - float(targetItem->ItemFlags[(int)FirefliesItemFlags::SpawnCounter] * 2))))
firefly.zVel = 100.0f; firefly.zVel = 100.0f;
if (firefly.zVel > 1.0f) if (firefly.zVel > 1.0f)

View file

@ -10,7 +10,7 @@ using namespace TEN::Math;
namespace TEN::Effects::Fireflies namespace TEN::Effects::Fireflies
{ {
enum FirefliesItemFlags enum class FirefliesItemFlags
{ {
TargetItemPtr, TargetItemPtr,
Light, Light,

View file

@ -67,13 +67,13 @@ namespace TEN::Entities::TR3
item.Animation.ActiveState = CORPSE_STATE_GROUNDED; item.Animation.ActiveState = CORPSE_STATE_GROUNDED;
} }
item.ItemFlags[FirefliesItemFlags::RemoveFliesEffect] = 0; item.ItemFlags[(int)FirefliesItemFlags::RemoveFliesEffect] = 0;
AddActiveItem(itemNumber); AddActiveItem(itemNumber);
item.Status = ITEM_ACTIVE; item.Status = ITEM_ACTIVE;
item.ItemFlags[FirefliesItemFlags::TargetItemPtr] = item.Index; item.ItemFlags[(int)FirefliesItemFlags::TargetItemPtr] = item.Index;
item.ItemFlags[FirefliesItemFlags::TriggerFlags] = NO_VALUE; item.ItemFlags[(int)FirefliesItemFlags::TriggerFlags] = NO_VALUE;
item.HitPoints = FLY_COUNT; item.HitPoints = FLY_COUNT;
} }
@ -109,7 +109,7 @@ namespace TEN::Entities::TR3
// Remove fly effect when in water. // Remove fly effect when in water.
if (isWater || isSwamp) if (isWater || isSwamp)
item.ItemFlags[FirefliesItemFlags::RemoveFliesEffect] = 1; item.ItemFlags[(int)FirefliesItemFlags::RemoveFliesEffect] = 1;
auto bounds = GameBoundingBox(&item); auto bounds = GameBoundingBox(&item);
@ -150,7 +150,7 @@ namespace TEN::Entities::TR3
AnimateItem(&item); AnimateItem(&item);
if (!TriggerActive(&item) || item.ItemFlags[FirefliesItemFlags::RemoveFliesEffect] == 1) if (!TriggerActive(&item) || item.ItemFlags[(int)FirefliesItemFlags::RemoveFliesEffect] == 1)
{ {
// Remove all fireflies associated with this item. // Remove all fireflies associated with this item.
ClearInactiveFireflies(item); ClearInactiveFireflies(item);
@ -159,7 +159,7 @@ namespace TEN::Entities::TR3
if (item.HitPoints == NOT_TARGETABLE) if (item.HitPoints == NOT_TARGETABLE)
item.HitPoints = FLY_COUNT; item.HitPoints = FLY_COUNT;
item.ItemFlags[FirefliesItemFlags::SpawnCounter] = 0; item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter] = 0;
return; return;
} }
else else
@ -171,7 +171,7 @@ namespace TEN::Entities::TR3
// Spawn fly effect. // Spawn fly effect.
if (item.HitPoints != NOT_TARGETABLE) if (item.HitPoints != NOT_TARGETABLE)
{ {
int fireflyCount = item.HitPoints - item.ItemFlags[FirefliesItemFlags::SpawnCounter]; int fireflyCount = item.HitPoints - item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter];
if (fireflyCount < 0) if (fireflyCount < 0)
{ {
@ -196,7 +196,7 @@ namespace TEN::Entities::TR3
} }
} }
item.ItemFlags[FirefliesItemFlags::SpawnCounter] = item.HitPoints; item.ItemFlags[(int)FirefliesItemFlags::SpawnCounter] = item.HitPoints;
item.HitPoints = NOT_TARGETABLE; item.HitPoints = NOT_TARGETABLE;
} }
} }