syntax = "proto3";

option csharp_namespace = "Unity.MLAgents.CommunicatorObjects";
package communicator_objects;

enum CompressionTypeProto {
    NONE = 0;
    PNG = 1;
}

enum ObservationTypeProto {
    DEFAULT = 0;
    GOAL_SIGNAL = 1;
    reserved 2; // Reserved for potential "reward" type
    reserved 3; // Reserved for potential "message" type
}

message ObservationProto {
    message FloatData {
        repeated float data = 1;
    }

    repeated int32 shape = 1;
    CompressionTypeProto compression_type = 2;
    oneof observation_data {
        bytes compressed_data = 3;
        FloatData float_data = 4;
    }
    repeated int32 compressed_channel_mapping = 5;
    repeated int32 dimension_properties = 6;
    ObservationTypeProto observation_type = 7;
    // Optional name of the observation.
    // This will be set to the ISensor name when writing,
    // and read into the ObservationSpec in the low-level API
    string name = 8;
}
