syntax = "proto3"; package serialized_shot; message Box { float left = 1; float top = 2; float width = 3; float height = 4; } message Point { float x = 1; float y = 2; } message BallDetection { Point plane_position = 1; Box annotation = 2; bool interpolated = 3; } message RLEBallDetection { BallDetection detection = 1; uint32 count = 2; } message RLEDetectionHistory { repeated RLEBallDetection detections = 1; } message DetectionHistory { repeated BallDetection detections = 1; } message CollisionInfo { uint32 source = 1; map ball_identifiers = 2; uint32 wall_identifier = 3; uint32 frame_index = 4; bool static = 5; } message Path { uint32 start_frame = 1; uint32 end_frame = 2; oneof detection_history { DetectionHistory detections = 3; RLEDetectionHistory rle_detections = 4; bool not_present = 5; } bool is_static = 6; CollisionInfo start_info = 7; CollisionInfo end_info = 8; } message IdentifierHistory { uint32 ball_identifier = 1; repeated Path paths = 2; } message KeyBallIdentifiers { uint32 cue_ball = 1; uint32 object_ball = 2; uint32 target_ball = 3; // For now this will just be cue->object/target->target // Long term this will potentially represent a linked list // of all balls in a shot. repeated uint32 contact_sequence = 4; optional uint32 cue_ball_id = 5; optional uint32 object_ball_id = 6; optional uint32 target_ball_id = 7; } message Shot { repeated IdentifierHistory identifier_histories = 3; KeyBallIdentifiers key_balls = 4; uint32 start_index = 5; uint32 end_index = 6; }