From c18d9dc4b5eb7262fedeee81fa3c5d290b52411f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?L=C3=A9o=20Lam?= Date: Mon, 28 Feb 2022 21:31:30 +0100 Subject: [PATCH] ksys: Add constants NumRegular{Entity,Sensor}Layers to reduce magic numbers --- src/KingSystem/Physics/physDefines.h | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/src/KingSystem/Physics/physDefines.h b/src/KingSystem/Physics/physDefines.h index 72a12317..398712b9 100644 --- a/src/KingSystem/Physics/physDefines.h +++ b/src/KingSystem/Physics/physDefines.h @@ -80,6 +80,13 @@ constexpr auto LastEntity = ContactLayer::EntityMeshVisualizer; constexpr auto FirstSensor = ContactLayer::SensorObject; constexpr auto LastSensor = ContactLayer::SensorCustomReceiver; +// If the values of the two following constants are changed, most of the BitFields defined +// in this file will need to be updated. +constexpr int NumRegularEntityLayers = ContactLayer::EntityHitOnlyGround - FirstEntity + 1; +constexpr int NumRegularSensorLayers = ContactLayer::SensorMeshVisualizer - FirstSensor + 1; +static_assert(NumRegularEntityLayers == 17); +static_assert(NumRegularSensorLayers == 21); + constexpr bool isEntityGroundLayer(ContactLayer::ValueType layer) { return layer == ContactLayer::EntityGround || layer == ContactLayer::EntityGroundSmooth || layer == ContactLayer::EntityGroundRough; @@ -216,7 +223,7 @@ union ReceiverMask { }; union CustomReceiverData { - util::BitField<0, 21, u32> layer; + util::BitField<0, NumRegularSensorLayers, u32> layer; }; constexpr ReceiverMask() : raw(0) {} @@ -248,8 +255,7 @@ union ReceiverMask { Data data; CustomReceiverData custom_receiver_data; /// Sensor layer mask. - // TODO: add a constant for 21. - util::BitField<0, 21, u32> layer_mask; + util::BitField<0, NumRegularSensorLayers, u32> layer_mask; util::BitField<21, 10, u32> group_handler_index; util::BitField<31, 1, bool, u32> is_custom_receiver; }; @@ -266,8 +272,7 @@ union EntityCollisionFilterInfo { util::BitField<5, 5, u32> unk5; util::BitField<10, 5, u32> unk10; /// Layers to collide with for EntityQueryCustomReceiver entities. - // XXX: was 17 chosen because ContactLayer::EntityQueryCustomReceiver = 17? - util::BitField<5, 17, u32> query_custom_receiver_layer_mask; + util::BitField<5, NumRegularEntityLayers, u32> query_custom_receiver_layer_mask; util::BitField<24, 1, u32> unk24; util::BitField<25, 1, u32> unk25; util::BitField<26, 4, u32> ground_hit; @@ -343,7 +348,7 @@ union RayCastCollisionMask { constexpr bool operator==(RayCastCollisionMask rhs) const { return raw == rhs.raw; } constexpr bool operator!=(RayCastCollisionMask rhs) const { return raw != rhs.raw; } - util::BitField<0, 17, u32> layer_mask; + util::BitField<0, NumRegularEntityLayers, u32> layer_mask; util::BitField<17, 1, u32> unk; util::BitField<18, 10, u32> group_handler_index; util::BitField<28, 4, GroundHit::ValueType, u32> ground_hit_type; @@ -361,8 +366,7 @@ union SensorQueryCollisionMask { constexpr bool operator==(SensorQueryCollisionMask rhs) const { return raw == rhs.raw; } constexpr bool operator!=(SensorQueryCollisionMask rhs) const { return raw != rhs.raw; } - // TODO: add a constant for 21. - util::BitField<0, 21, u32> layer_mask; + util::BitField<0, NumRegularSensorLayers, u32> layer_mask; util::BitField<22, 10, u32> group_handler_index; u32 raw; };