#pragma once #include "rigid_world_toi.h" namespace noita::cpu { struct ContactListeners { std::function begin,end; std::function pre_solve; std::function)> post_solve; // Additional application/joint collision gate, applied with standard filters. std::function 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, 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& = {}); }