/*
 * Copyright (C) 2019 Open Source Robotics Foundation
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
*/

syntax = "proto3";
package ignition.msgs;
option java_package = "com.ignition.msgs";
option java_outer_classname = "ActorProtos";

/// \ingroup ignition.msgs
/// \interface Actor
/// \brief Message for an actor

import "ignition/msgs/entity.proto";
import "ignition/msgs/header.proto";
import "ignition/msgs/pose.proto";

message Actor
{
  message Animation
  {
    /// \brief Unique name for animation
    string name           = 1;

    /// \brief Path to animation file. Accepted formats: COLLADA, BVH
    string filename       = 2;

    /// \brief Scale for the animation skeleton
    float scale           = 3;
     
    /// \brief Set to true so the animation is interpolated on X
    bool interpolate_x = 4;
  }

  message Waypoint
  {
    /// \brief Time in seconds, counted from the beginning of the script
    float time = 1;

    /// \brief Pose to be reached at the given time
    Pose pose  = 2;
  }

  message Trajectory
  {
    /// \brief Unique id for a trajectory
    uint32 id           = 1;

    /// \brief Type of an animation
    string type         = 2;

    /// \brief Tension of the trajectory spline
    float tension       = 3;

    /// \brief Points in the trajectory
    repeated Waypoint waypoints  = 4;
  }

  /// \brief Optional header data
  Header header         =  1;

  /// \brief A unique name for the actor
  Entity entity           =  2;

  /// \brief Pose of the actor
  Pose pose             =  3;

  /// \brief Skin file which defines a visual 
  /// and the underlying skeleton which moves it
  string skin_filename  =  4;

  /// \brief Scale the skin's size
  float skin_scale      =  5;

  /// \brief Animations for the skeleton in the skin
  repeated Animation animations  =  6;

  /// \brief Set this to true for the script to be repeated in a loop
  bool script_loop               =  7;

  /// \brief Time (in secs) to wait before starting the script
  float script_delay_start       = 8;

  /// \brief Set to true if the animation should start 
  /// as soon as the simulation starts playing
  bool script_auto_start         = 9;

  /// \brief A series of keyframes to be followed
  repeated Trajectory trajectories = 10;

  /// \brief Unique id of actor's parent
  Entity parent  = 11;
}
