Files
Noita-GPU-Vulkan/src/phys/rigid_contact_world.h
T
2026-10-19 20:59:15 +02:00

22 lines
1.2 KiB
C++

#pragma once
#include "rigid_world_toi.h"
namespace noita::cpu {
struct ContactListeners {
std::function<void(WorldToi&,int)> begin,end;
std::function<void(WorldToi&,int,const ContactManifold&)> pre_solve;
std::function<void(WorldToi&,int,std::span<const ContactImpulse>)> post_solve;
// Additional application/joint collision gate, applied with standard filters.
std::function<bool(const WorldToi&,int,int)> allow_pair;
};
void find_contact_pairs(WorldToi&,const ContactListeners& = {});
void evaluate_world_contact(WorldToi&,int,const ContactListeners& = {});
void update_world_contacts(WorldToi&,const ContactListeners& = {});
void destroy_world_contact(WorldToi&,int,const ContactListeners& = {});
// Given a joint-free discrete island and matching per-island-body forces.
// The caller supplies island traversal/order, dt ratio and original block switch.
bool solve_contact_discrete_island(WorldToi&,const ToiIsland&,std::span<const BodyForces>,
bool warm_start,double dt_ratio,bool block_solver,const ContactListeners& = {},bool synchronize=true);
void solve_contact_toi_island(WorldToi&,const ToiIsland&,bool block_solver,const ContactListeners& = {});
WorldToiHooks contact_world_hooks(bool block_solver,const ContactListeners& = {});
}