NAME

Physics::Balls::Outcome - what a strike did

VERSION

Version 0.03

SYNOPSIS

my $out = $strike->play($world, \@layout);
my $first = $out->first(0);          # the ball the cue ball met first, or undef
my @pots  = @{ $out->holed };        # [id, pocket, t] in time order
my $rest  = $out->rest;              # [id, x, y] for every ball in play
my $segs  = $out->segments->{0};     # the cue ball's trajectory, segment by segment

DESCRIPTION

The record of one shot. events is every event in time order as [t, kind, a, b]: roll and stop for one ball, ball for two, wall and nose with the wall or nose index, pot with the pocket number, and adjust for the struck ball when the shot carried one. A rules module reads first contact, cushions after contact and pots in order straight off it. segments is the trajectory a client plays back, per ball id, each [t0, dur, px, py, vx, vy, ax, ay] in metres and seconds, so a position at time t within a segment is p0 + v (t - t0) + a (t - t0)^2 / 2. A curving ball's trajectory is many short segments; a client plays them exactly as it plays a straight ball's, because each one is still that parabola.

ATTRIBUTES

t

Simulated seconds until the last ball stopped.

n

Events processed.

error

Undef, or events or time when the engine gave up; an outcome with an error is still returned so a caller can see how far it got.

events

rest

holed

segments

energy

Per unit mass after the strike and after every event, when the strike was traced; else empty.

shot

The shot that produced this.

METHODS

message

A sentence for error, or the empty string.

adjusted_at

The time the struck ball crossed the shot's adjust line, or undef when the shot carried no adjust or the ball never reached the line.

first

my $other = $out->first($id);

The first ball $id met, or undef when it met a wall, a nose or a pocket first or nothing at all.

walls_touched

The wall and nose events for a ball.

potted

my $h = $out->potted($id);

The [id, pocket, t] row, or undef.

contacts

The events that are contacts, without the roll, stop and adjust transitions.

to_payload

The hash a game stores and a client plays back: engine, t, n, error, events, rest, holed, segments.