mirror of
https://github.com/zeldaret/botw
synced 2026-08-17 05:01:25 -04:00
ksys/phys: Rename collision filter info structs for more clarity
And consistency.
This commit is contained in:
@@ -112,7 +112,7 @@ void ContactMgr::freeContactPoints(IRigidContactPoints* points) {
|
||||
delete points;
|
||||
}
|
||||
|
||||
bool ContactMgr::getSensorLayerMask(ReceiverMask* mask,
|
||||
bool ContactMgr::getSensorLayerMask(SensorCollisionMask* mask,
|
||||
const sead::SafeString& receiver_type) const {
|
||||
const auto& receivers = mContactInfoTables[int(ContactLayerType::Sensor)].receivers;
|
||||
for (int i = 0; i < receivers.size(); ++i) {
|
||||
|
||||
@@ -77,7 +77,7 @@ public:
|
||||
void loadContactInfoTable(sead::Heap* heap, agl::utl::ResParameterArchive archive,
|
||||
ContactLayerType type);
|
||||
|
||||
bool getSensorLayerMask(ReceiverMask* mask, const sead::SafeString& receiver_type) const;
|
||||
bool getSensorLayerMask(SensorCollisionMask* mask, const sead::SafeString& receiver_type) const;
|
||||
|
||||
RigidContactPoints* allocContactPoints(sead::Heap* heap, int num, const sead::SafeString& name,
|
||||
int a, int b, int c);
|
||||
|
||||
@@ -21,16 +21,16 @@ namespace ksys::phys {
|
||||
constexpr int NumEntityHandlersInList0 = 0x10;
|
||||
constexpr int NumEntityHandlers = 0x400;
|
||||
|
||||
void receiverMaskEnableLayer(ReceiverMask* mask, ContactLayer layer) {
|
||||
void receiverMaskEnableLayer(SensorCollisionMask* mask, ContactLayer layer) {
|
||||
mask->raw |= 1 << getContactLayerBaseRelativeValue(layer);
|
||||
}
|
||||
|
||||
bool receiverMaskGetSensorLayerMaskForType(ReceiverMask* mask,
|
||||
bool receiverMaskGetSensorLayerMaskForType(SensorCollisionMask* mask,
|
||||
const sead::SafeString& receiver_type) {
|
||||
return System::instance()->getContactMgr()->getSensorLayerMask(mask, receiver_type);
|
||||
}
|
||||
|
||||
void receiverMaskSetSensorLayerMask(ReceiverMask* mask, u32 layer_mask) {
|
||||
void receiverMaskSetSensorLayerMask(SensorCollisionMask* mask, u32 layer_mask) {
|
||||
*mask = {};
|
||||
mask->layer_mask = layer_mask;
|
||||
mask->is_custom_receiver = true;
|
||||
@@ -56,10 +56,10 @@ void EntityGroupFilter::doInit_(sead::Heap* heap) {
|
||||
hkBool EntityGroupFilter::shouldHandleGroundCollision(u32 infoA, u32 infoB,
|
||||
ContactLayer::ValueType layerA,
|
||||
ContactLayer::ValueType layerB) const {
|
||||
const EntityCollisionFilterInfo a{infoA};
|
||||
const EntityCollisionFilterInfo b{infoB};
|
||||
const EntityCollisionMask a{infoA};
|
||||
const EntityCollisionMask b{infoB};
|
||||
|
||||
if (EntityCollisionFilterInfo(infoA | infoB).ground_col_mode != GroundCollisionMode::Normal) {
|
||||
if (EntityCollisionMask(infoA | infoB).ground_col_mode != GroundCollisionMode::Normal) {
|
||||
if (a.ground_col_mode != GroundCollisionMode::Normal) {
|
||||
bool ground = isEntityGroundLayer(layerB);
|
||||
if (a.ground_col_mode == GroundCollisionMode::IgnoreNonGround && !ground)
|
||||
@@ -82,10 +82,10 @@ hkBool EntityGroupFilter::shouldHandleGroundCollision(u32 infoA, u32 infoB,
|
||||
hkBool EntityGroupFilter::shouldHandleWaterCollision(u32 infoA, u32 infoB,
|
||||
ContactLayer::ValueType layerA,
|
||||
ContactLayer::ValueType layerB) const {
|
||||
const EntityCollisionFilterInfo a{infoA};
|
||||
const EntityCollisionFilterInfo b{infoB};
|
||||
const EntityCollisionMask a{infoA};
|
||||
const EntityCollisionMask b{infoB};
|
||||
|
||||
if (EntityCollisionFilterInfo(infoA | infoB).water_col_mode != WaterCollisionMode::Normal) {
|
||||
if (EntityCollisionMask(infoA | infoB).water_col_mode != WaterCollisionMode::Normal) {
|
||||
if (a.water_col_mode == WaterCollisionMode::IgnoreWater &&
|
||||
layerB == ContactLayer::EntityWater) {
|
||||
return false;
|
||||
@@ -108,13 +108,13 @@ hkBool EntityGroupFilter::testCollisionForEntities(u32 infoA, u32 infoB) const {
|
||||
if (mInhibitCollisions)
|
||||
return false;
|
||||
|
||||
const EntityCollisionFilterInfo a{infoA};
|
||||
const EntityCollisionFilterInfo b{infoB};
|
||||
const EntityCollisionMask a{infoA};
|
||||
const EntityCollisionMask b{infoB};
|
||||
|
||||
constexpr auto GroupHandlerIdxMask = decltype(a.group_handler_index)::GetMask();
|
||||
constexpr auto GroupHandlerIdxShift = decltype(a.group_handler_index)::StartBit();
|
||||
|
||||
if (!EntityCollisionFilterInfo(infoA | infoB).is_ground_hit_mask) {
|
||||
if (!EntityCollisionMask(infoA | infoB).is_ground_hit_mask) {
|
||||
if (a.unk30 && b.unk30) {
|
||||
if (((infoA ^ infoB) & GroupHandlerIdxMask) != 0) {
|
||||
if (testHandler(a.group_handler_index) || testHandler(b.group_handler_index))
|
||||
@@ -171,7 +171,7 @@ hkBool EntityGroupFilter::testCollisionForEntities(u32 infoA, u32 infoB) const {
|
||||
return !a.ground_hit.unk23 && !b.ground_hit.unk23;
|
||||
}
|
||||
|
||||
EntityCollisionFilterInfo entity_mask, ground_hit_mask;
|
||||
EntityCollisionMask entity_mask, ground_hit_mask;
|
||||
|
||||
if (a.is_ground_hit_mask && !b.is_ground_hit_mask) {
|
||||
const auto layerA = static_cast<ContactLayer::ValueType>(a.ground_hit.layer.Value());
|
||||
@@ -212,8 +212,8 @@ hkBool EntityGroupFilter::testCollisionForPhantom(u32 infoPhantom, u32 infoB) co
|
||||
if (mInhibitCollisions)
|
||||
return false;
|
||||
|
||||
RayCastCollisionMask infoPhantomData{infoPhantom};
|
||||
const EntityCollisionFilterInfo info{infoB};
|
||||
EntityQueryCollisionMask infoPhantomData{infoPhantom};
|
||||
const EntityCollisionMask info{infoB};
|
||||
if (info.is_ground_hit_mask)
|
||||
return infoPhantomData.raw & (1 << info.ground_hit.getLayer());
|
||||
return infoPhantomData.layer_mask & (1 << info.data.layer);
|
||||
@@ -311,9 +311,8 @@ end:
|
||||
return testCollisionForEntities(infoA, infoB);
|
||||
}
|
||||
|
||||
static hkBool
|
||||
checkCollisionWithGroundHitMask(EntityCollisionFilterInfo::GroundHitMask ground_hit_mask,
|
||||
RayCastCollisionMask ray_cast) {
|
||||
static hkBool checkCollisionWithGroundHitMask(EntityCollisionMask::GroundHitMask ground_hit_mask,
|
||||
EntityQueryCollisionMask ray_cast) {
|
||||
if (!(ray_cast.layer_mask & (1 << ground_hit_mask.getLayer())))
|
||||
return false;
|
||||
|
||||
@@ -330,8 +329,8 @@ hkBool EntityGroupFilter::testCollisionForRayCasting(u32 infoRayCast, u32 info)
|
||||
if (mInhibitCollisions)
|
||||
return false;
|
||||
|
||||
RayCastCollisionMask a{infoRayCast};
|
||||
EntityCollisionFilterInfo b{info};
|
||||
EntityQueryCollisionMask a{infoRayCast};
|
||||
EntityCollisionMask b{info};
|
||||
|
||||
if (b.is_ground_hit_mask)
|
||||
return checkCollisionWithGroundHitMask(b.ground_hit, a);
|
||||
@@ -393,7 +392,7 @@ int EntityGroupFilter::getFreeListIndex(const SystemGroupHandler* handler) {
|
||||
}
|
||||
|
||||
u32 orEntityGroundHitMask(u32 mask, GroundHit type) {
|
||||
EntityCollisionFilterInfo info{mask};
|
||||
EntityCollisionMask info{mask};
|
||||
info.ground_hit.ground_hit_types |= 1 << type;
|
||||
return info.raw;
|
||||
}
|
||||
@@ -403,9 +402,9 @@ u32 orEntityGroundHitMask(u32 mask, const sead::SafeString& type) {
|
||||
}
|
||||
|
||||
template <bool WithUnk>
|
||||
static EntityCollisionFilterInfo makeEntityGroundHitMaskImpl(ContactLayer layer, u32 mask) {
|
||||
const EntityCollisionFilterInfo current{mask};
|
||||
EntityCollisionFilterInfo info{};
|
||||
static EntityCollisionMask makeEntityGroundHitMaskImpl(ContactLayer layer, u32 mask) {
|
||||
const EntityCollisionMask current{mask};
|
||||
EntityCollisionMask info{};
|
||||
info.ground_hit.layer.SetUnsafe(layer);
|
||||
info.ground_hit.ground_hit_types = current.ground_hit.ground_hit_types;
|
||||
info.is_ground_hit_mask = true;
|
||||
@@ -419,7 +418,7 @@ u32 makeEntityGroundHitMask(ContactLayer layer, u32 mask) {
|
||||
}
|
||||
|
||||
u32 makeEntityCollisionMask(ContactLayer layer, u32 mask) {
|
||||
EntityCollisionFilterInfo current{mask};
|
||||
EntityCollisionMask current{mask};
|
||||
if (current.is_ground_hit_mask) {
|
||||
return makeEntityGroundHitMaskImpl<true>(layer, mask).raw;
|
||||
} else {
|
||||
@@ -429,7 +428,7 @@ u32 makeEntityCollisionMask(ContactLayer layer, u32 mask) {
|
||||
}
|
||||
|
||||
u32 setEntityCollisionMaskGroundHit(GroundHit ground_hit, u32 mask) {
|
||||
EntityCollisionFilterInfo current{mask};
|
||||
EntityCollisionMask current{mask};
|
||||
if (current.is_ground_hit_mask) {
|
||||
// This shouldn't happen: this function is not supposed to be called on ground hit masks.
|
||||
} else {
|
||||
|
||||
@@ -81,10 +81,10 @@ private:
|
||||
sead::SafeArray<u32, ContactLayer::size()> mMasks;
|
||||
};
|
||||
|
||||
void receiverMaskEnableLayer(ReceiverMask* mask, ContactLayer layer);
|
||||
bool receiverMaskGetSensorLayerMaskForType(ReceiverMask* mask,
|
||||
void receiverMaskEnableLayer(SensorCollisionMask* mask, ContactLayer layer);
|
||||
bool receiverMaskGetSensorLayerMaskForType(SensorCollisionMask* mask,
|
||||
const sead::SafeString& receiver_type);
|
||||
void receiverMaskSetSensorLayerMask(ReceiverMask* mask, u32 layer_mask);
|
||||
void receiverMaskSetSensorLayerMask(SensorCollisionMask* mask, u32 layer_mask);
|
||||
|
||||
u32 orEntityGroundHitMask(u32 mask, GroundHit type);
|
||||
u32 orEntityGroundHitMask(u32 mask, const sead::SafeString& type);
|
||||
@@ -102,8 +102,8 @@ u32 setEntityCollisionMaskGroundHit(GroundHit ground_hit, u32 mask);
|
||||
|
||||
inline u32 EntitySystemGroupHandler::makeCollisionFilterInfo(u32 info, ContactLayer layer,
|
||||
GroundHit ground_hit) {
|
||||
const EntityCollisionFilterInfo current_info{info};
|
||||
EntityCollisionFilterInfo result;
|
||||
const EntityCollisionMask current_info{info};
|
||||
EntityCollisionMask result;
|
||||
|
||||
if (layer == ContactLayer::EntityRagdoll) {
|
||||
result.data.layer.Init(layer);
|
||||
@@ -123,7 +123,7 @@ inline u32 EntitySystemGroupHandler::makeCollisionFilterInfo(u32 info, ContactLa
|
||||
|
||||
inline u32 EntitySystemGroupHandler::makeQueryCollisionMask(u32 layer_mask, GroundHit ground_hit,
|
||||
bool unk) {
|
||||
RayCastCollisionMask mask;
|
||||
EntityQueryCollisionMask mask;
|
||||
mask.layer_mask = layer_mask;
|
||||
mask.group_handler_index.Init(getIndex());
|
||||
mask.ground_hit_type.Init(static_cast<GroundHit::ValueType>(int(ground_hit)));
|
||||
@@ -132,7 +132,7 @@ inline u32 EntitySystemGroupHandler::makeQueryCollisionMask(u32 layer_mask, Grou
|
||||
}
|
||||
|
||||
inline u32 EntitySystemGroupHandler::makeRagdollCollisionFilterInfo(GroundHit ground_hit) {
|
||||
EntityCollisionFilterInfo info;
|
||||
EntityCollisionMask info;
|
||||
info.data.layer.Init(ContactLayer::EntityRagdoll);
|
||||
info.group_handler_index.Init(getIndex());
|
||||
info.data.ground_hit.Init(ground_hit);
|
||||
@@ -148,16 +148,16 @@ inline bool EntityGroupFilter::m2(ContactLayer layerA, ContactLayer layerB) {
|
||||
}
|
||||
|
||||
inline u32 EntityGroupFilter::makeCollisionFilterInfo(ContactLayer layer, GroundHit ground_hit) {
|
||||
return EntityCollisionFilterInfo::make(layer, ground_hit).raw;
|
||||
return EntityCollisionMask::make(layer, ground_hit).raw;
|
||||
}
|
||||
|
||||
inline ContactLayer EntityGroupFilter::getCollisionFilterInfoLayer(u32 info) {
|
||||
return EntityCollisionFilterInfo(info).getLayer();
|
||||
return EntityCollisionMask(info).getLayer();
|
||||
}
|
||||
|
||||
inline u32 EntityGroupFilter::makeQueryCollisionMask(u32 layer_mask, GroundHit ground_hit,
|
||||
bool unk) {
|
||||
RayCastCollisionMask mask;
|
||||
EntityQueryCollisionMask mask;
|
||||
mask.layer_mask = layer_mask;
|
||||
mask.ground_hit_type = ground_hit.value();
|
||||
mask.unk.SetBit(unk);
|
||||
@@ -165,19 +165,19 @@ inline u32 EntityGroupFilter::makeQueryCollisionMask(u32 layer_mask, GroundHit g
|
||||
}
|
||||
|
||||
inline GroundHit EntityGroupFilter::getQueryCollisionMaskGroundHit(u32 info) {
|
||||
return RayCastCollisionMask(info).ground_hit_type.Value();
|
||||
return EntityQueryCollisionMask(info).ground_hit_type.Value();
|
||||
}
|
||||
|
||||
inline void EntityGroupFilter::getCollisionFilterInfoLayerAndGroundHit(u32 info,
|
||||
ContactLayer* layer,
|
||||
GroundHit* ground_hit) {
|
||||
EntityCollisionFilterInfo info_{info};
|
||||
EntityCollisionMask info_{info};
|
||||
*layer = info_.getLayer();
|
||||
*ground_hit = info_.getGroundHit();
|
||||
}
|
||||
|
||||
inline const char* EntityGroupFilter::getCollisionFilterInfoLayerText(u32 info) {
|
||||
EntityCollisionFilterInfo info_{info};
|
||||
EntityCollisionMask info_{info};
|
||||
if (info_.is_ground_hit_mask) {
|
||||
return "GroundHitMaskMode";
|
||||
}
|
||||
@@ -189,12 +189,12 @@ inline void EntityGroupFilter::setLayerCustomMask(ContactLayer layer, u32 mask)
|
||||
}
|
||||
|
||||
inline u32 EntityGroupFilter::getCollisionFilterInfoGroupHandlerIdx(u32 info) {
|
||||
return EntityCollisionFilterInfo(info).group_handler_index;
|
||||
return EntityCollisionMask(info).group_handler_index;
|
||||
}
|
||||
|
||||
inline u32 EntityGroupFilter::makeCollisionFilterInfo(ContactLayer layer, GroundHit ground_hit,
|
||||
u32 unk5, u32 unk10) {
|
||||
EntityCollisionFilterInfo info;
|
||||
EntityCollisionMask info;
|
||||
info.data.layer.Init(layer);
|
||||
info.data.unk5.Init(unk5);
|
||||
info.data.unk10.Init(unk10);
|
||||
|
||||
@@ -73,10 +73,10 @@ int SensorGroupFilter::getFreeListIndex(const SystemGroupHandler* handler) {
|
||||
return handler->getIndex() < NumSensorHandlersInList0;
|
||||
}
|
||||
|
||||
u32 sensorReceiverMaskSetLayer(ContactLayer layer, u32 mask) {
|
||||
u32 sensorCollisionMaskSetLayer(ContactLayer layer, u32 mask) {
|
||||
SEAD_ASSERT(getContactLayerType(layer) == ContactLayerType::Sensor);
|
||||
|
||||
ReceiverMask info{mask};
|
||||
SensorCollisionMask info{mask};
|
||||
|
||||
if (layer == ContactLayer::SensorCustomReceiver) {
|
||||
info.is_custom_receiver = true;
|
||||
@@ -98,10 +98,10 @@ u32 sensorReceiverMaskSetLayer(ContactLayer layer, u32 mask) {
|
||||
return info.raw;
|
||||
}
|
||||
|
||||
u32 sensorReceiverMaskSetLayer2(bool set, ContactLayer layer, u32 mask) {
|
||||
u32 sensorCollisionMaskSetLayer2(bool set, ContactLayer layer, u32 mask) {
|
||||
SEAD_ASSERT(getContactLayerType(layer) == ContactLayerType::Sensor);
|
||||
|
||||
ReceiverMask info{mask};
|
||||
SensorCollisionMask info{mask};
|
||||
if (info.is_custom_receiver)
|
||||
return info.raw;
|
||||
|
||||
|
||||
@@ -58,23 +58,23 @@ protected:
|
||||
void doInit_(sead::Heap* heap) override;
|
||||
};
|
||||
|
||||
/// Set the contact layer in a sensor receiver mask.
|
||||
/// Set the contact layer in a sensor collision mask.
|
||||
/// @param layer A sensor contact layer
|
||||
/// @param mask An existing receiver mask
|
||||
u32 sensorReceiverMaskSetLayer(ContactLayer layer, u32 mask);
|
||||
/// @param mask An existing sensor collision mask
|
||||
u32 sensorCollisionMaskSetLayer(ContactLayer layer, u32 mask);
|
||||
|
||||
/// Set or clear a second contact layer in a sensor receiver mask.
|
||||
/// Set or clear a second contact layer in a sensor collision mask.
|
||||
/// This function does nothing when using a custom receiver.
|
||||
/// @param set If true, set the specified layer. Clear it otherwise
|
||||
/// @param layer A sensor contact layer
|
||||
/// @param mask An existing receiver mask
|
||||
/// @param mask An existing sensor collision mask
|
||||
// TODO: rename once we figure out what this layer is used for
|
||||
u32 sensorReceiverMaskSetLayer2(bool set, ContactLayer layer, u32 mask);
|
||||
u32 sensorCollisionMaskSetLayer2(bool set, ContactLayer layer, u32 mask);
|
||||
|
||||
inline u32 SensorSystemGroupHandler::makeCollisionFilterInfo(u32 info, ContactLayer layer,
|
||||
GroundHit ground_hit) {
|
||||
const ReceiverMask current_info{info};
|
||||
ReceiverMask result;
|
||||
const SensorCollisionMask current_info{info};
|
||||
SensorCollisionMask result;
|
||||
|
||||
if (layer == ContactLayer::SensorCustomReceiver) {
|
||||
result.is_custom_receiver = true;
|
||||
@@ -101,11 +101,11 @@ inline bool SensorSystemGroupHandler::m8() {
|
||||
}
|
||||
|
||||
inline u32 SensorGroupFilter::makeCollisionFilterInfo(ContactLayer layer, GroundHit ground_hit) {
|
||||
return ReceiverMask::make(layer).raw;
|
||||
return SensorCollisionMask::make(layer).raw;
|
||||
}
|
||||
|
||||
inline ContactLayer SensorGroupFilter::getCollisionFilterInfoLayer(u32 info) {
|
||||
return ReceiverMask(info).getLayer();
|
||||
return SensorCollisionMask(info).getLayer();
|
||||
}
|
||||
|
||||
inline u32 SensorGroupFilter::makeQueryCollisionMask(u32 layer_mask, GroundHit ground_hit,
|
||||
@@ -122,7 +122,7 @@ inline GroundHit SensorGroupFilter::getQueryCollisionMaskGroundHit(u32 info) {
|
||||
inline void SensorGroupFilter::getCollisionFilterInfoLayerAndGroundHit(u32 info,
|
||||
ContactLayer* layer,
|
||||
GroundHit* ground_hit) {
|
||||
ReceiverMask mask{info};
|
||||
SensorCollisionMask mask{info};
|
||||
*layer = mask.getLayer();
|
||||
*ground_hit = {};
|
||||
}
|
||||
@@ -132,7 +132,7 @@ inline const char* SensorGroupFilter::getCollisionFilterInfoLayerText(u32 info)
|
||||
}
|
||||
|
||||
inline u32 SensorGroupFilter::getCollisionFilterInfoGroupHandlerIdx(u32 info) {
|
||||
return ReceiverMask(info).group_handler_index;
|
||||
return SensorCollisionMask(info).group_handler_index;
|
||||
}
|
||||
|
||||
inline u32 SensorGroupFilter::makeCollisionFilterInfo(ContactLayer layer, GroundHit ground_hit,
|
||||
|
||||
Reference in New Issue
Block a user