ksys/phys: Introduce {First,Last}{Entity,Sensor} constants to improve clarity

This commit is contained in:
Léo Lam 2022-01-23 16:54:18 +01:00
parent bf09eea7a8
commit a33ebd2130
No known key found for this signature in database
GPG Key ID: 0DF30F9081000741
4 changed files with 15 additions and 11 deletions

View File

@ -555,7 +555,7 @@ void RigidBody::setCollidableQualityType(hkpCollidableQualityType quality) {
static int getLayerBit(int layer, ContactLayerType type) {
// This is layer for Entity layers and layer - 0x20 for Sensor layers.
// XXX: this should be using makeContactLayerMask.
return layer - ContactLayer::SensorObject * int(type);
return layer - FirstSensor * int(type);
}
void RigidBody::addContactLayer(ContactLayer layer) {

View File

@ -9,20 +9,19 @@ ContactLayerType getContactLayerType(ContactLayer layer) {
}
u32 makeContactLayerMask(ContactLayer layer) {
if (layer < ContactLayer::SensorObject)
if (layer < FirstSensor)
return 1 << layer;
return 1 << (layer - ContactLayer::SensorObject);
return 1 << (layer - FirstSensor);
}
u32 getContactLayerBase(ContactLayerType type) {
if (type == ContactLayerType::Entity)
return ContactLayer::EntityObject;
return ContactLayer::SensorObject;
return FirstEntity;
return FirstSensor;
}
u32 getContactLayerBaseRelativeValue(ContactLayer layer) {
return layer - (layer < ContactLayer::SensorObject ? ContactLayer::EntityObject :
ContactLayer::SensorObject);
return layer - (layer < FirstSensor ? FirstEntity : FirstSensor);
}
const char* contactLayerToText(ContactLayer layer) {

View File

@ -74,6 +74,12 @@ SensorEnd)
constexpr int MaxNumLayersPerType = 32;
constexpr auto FirstEntity = ContactLayer::EntityObject;
constexpr auto LastEntity = ContactLayer::EntityMeshVisualizer;
constexpr auto FirstSensor = ContactLayer::SensorObject;
constexpr auto LastSensor = ContactLayer::SensorCustomReceiver;
SEAD_ENUM(Material,
Undefined,\
Soil,\
@ -192,7 +198,7 @@ union ReceiverMask {
union EntityCollisionFilterInfo {
union Data {
ContactLayer getLayer() const { return int(layer); }
ContactLayer getLayerSensor() const { return int(layer + ContactLayer::SensorObject); }
ContactLayer getLayerSensor() const { return int(layer + FirstSensor); }
GroundHit getGroundHit() const { return int(ground_hit); }
util::BitField<0, 5, u32> layer;

View File

@ -31,9 +31,8 @@ void System::initSystemData(sead::Heap* heap) {
res::registerEntryFactory(new (heap) res::EntryFactory<RagdollControllerKeyList>(1.0, 0x4000),
"brgcon");
mEntityGroupFilter = EntityGroupFilter::make(ContactLayer::EntityObject,
ContactLayer::EntityMeshVisualizer, heap);
mSensorGroupFilter = SensorGroupFilter::make(ContactLayer::SensorCustomReceiver, heap);
mEntityGroupFilter = EntityGroupFilter::make(FirstEntity, LastEntity, heap);
mSensorGroupFilter = SensorGroupFilter::make(LastSensor, heap);
mGroupFilters.pushBack(mEntityGroupFilter);
mGroupFilters.pushBack(mSensorGroupFilter);