73 custom_condition_ = predicate;
85 if (intake_count_ == 0) {
95 return recent_events_;
105 recent_events_.clear();
108 if (config_.robot_index >= sim.
robots().size()) {
109 recent_events_.clear();
113 const auto& robot = sim.
robots()[config_.robot_index];
114 const Vector3 intake_world = robot.position_m;
116 recent_events_.clear();
117 for (std::size_t i = 0; i < sim.
balls().size(); ++i) {
118 const auto& ball = sim.
balls()[i];
119 if (ball.sim.state().held) {
122 if (!config_.targeted_type.empty() &&
127 const double distance =
128 (ball.sim.state().position_m - intake_world).norm();
129 if (distance <= robot.intake_radius_m) {
134 processIntakeQueue(sim);
139 if (intake_count_ >= config_.
capacity) {
143 for (
const auto& event : recent_events_) {
147 if (intake_count_ >= config_.capacity) {
150 if (event.gamepiece_index >= sim.
balls().size()) {
153 if (custom_condition_ && !custom_condition_(event.gamepiece_index, sim)) {
163 bool running_{
false};
164 std::size_t intake_count_{0};
166 std::function<bool(std::size_t,
const BallGamepieceSim&)> custom_condition_{};
167 std::deque<ContactEvent> recent_events_{};
Resolves robot-ball contact response. projectiles.
Definition ball_gamepiece_sim.hpp:38
std::vector< RobotState > & robots()
Mutable robot state list.
Definition ball_gamepiece_sim.hpp:388
static constexpr std::size_t kNoBall
Definition ball_gamepiece_sim.hpp:52
bool removeBall(std::size_t ball_index)
Removes a ball by index and remaps carried-ball indices accordingly.
Definition ball_gamepiece_sim.hpp:477
std::vector< BallEntity > & balls()
Mutable grounded-ball list.
Definition ball_gamepiece_sim.hpp:395
std::string ballTypeName(std::size_t ball_index) const
Returns the registered type label for a ball index, or empty string if out of range.
Definition ball_gamepiece_sim.hpp:436
void setCustomIntakeCondition(const std::function< bool(std::size_t, const BallGamepieceSim &)> &predicate)
Sets optional custom acceptance predicate for candidate balls.
Definition intake_simulation.hpp:70
IntakeSimulation()=default
void setConfig(const Config &config)
Replaces intake configuration.
Definition intake_simulation.hpp:54
bool isRunning() const
Returns whether intake processing is active.
Definition intake_simulation.hpp:64
const Config & config() const
Returns current configuration.
Definition intake_simulation.hpp:57
IntakeSimulation(const Config &config)
Constructs intake simulation with explicit config.
Definition intake_simulation.hpp:51
std::size_t gamePiecesInIntakeCount() const
Returns current intake inventory count.
Definition intake_simulation.hpp:78
void update(BallGamepieceSim &sim)
Performs proximity scanning and intake processing for one simulation step.
Definition intake_simulation.hpp:103
void setRunning(bool running)
Enables/disables intake processing.
Definition intake_simulation.hpp:61
const std::deque< ContactEvent > & recentEvents() const
Returns contact events generated during the most recent update call.
Definition intake_simulation.hpp:94
bool obtainGamePieceFromIntake()
Removes one stored piece from intake inventory.
Definition intake_simulation.hpp:84
Runtime configuration for intake behavior.
Definition intake_simulation.hpp:21
std::string targeted_type
Definition intake_simulation.hpp:25
std::size_t robot_index
Definition intake_simulation.hpp:23
std::size_t capacity
Definition intake_simulation.hpp:27
3D vector utility used throughout JSim physics.
Definition vector.hpp:22