22 lines
1.2 KiB
C++
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& = {});
|
|
}
|