/*
 * Copyright (C) 2021 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 gz.msgs;
option java_package = "com.gz.msgs";
option java_outer_classname = "ParticleEmitterProtos";

/// \ingroup gz.msgs
/// \interface ParticleEmitter
/// \brief Message for a particle emitter.

import "gz/msgs/boolean.proto";
import "gz/msgs/color.proto";
import "gz/msgs/float.proto";
import "gz/msgs/header.proto";
import "gz/msgs/material.proto";
import "gz/msgs/pose.proto";
import "gz/msgs/stringmsg.proto";
import "gz/msgs/vector3d.proto";

message ParticleEmitter
{
  /// \brief Optional header data.
  Header header                 = 1;

  /// \brief The emitter name.
  string name                   = 2;

  /// \brief Unique Id.
  uint32 id                     = 3;

  /// \brief All possible emitter types.
  enum EmitterType
  {
    /// \brief Point emitter.
    POINT     = 0;
    /// \brief Box emitter.
    BOX       = 1;
    /// \brief Cylinder emitter.
    CYLINDER  = 2;
    /// \brief Ellipsoid emitter.
    ELLIPSOID = 3;
  }
  /// \brief The emitter type.
  EmitterType type              = 4;

  /// \brief The position of the emitter.
  Pose pose                     = 5;

  /// The size of the emitter where the particles are sampled.
  Vector3d size                 = 6;

  /// \brief How many particles per second should be emitted.
  Float rate                    = 7;

  /// \brief The number of seconds the emitter is active.
  Float duration                = 8;

  /// \brief Whether particle emitter is enabled or not.
  Boolean emitting                 = 9;

  /// \brief The particle dimensions (width, height, depth).
  Vector3d particle_size        = 10;

  /// \brief The number of seconds each particle will ’live’ for before
  /// being destroyed.
  Float lifetime                = 11;

  /// \brief The material which all particles in the emitter will use.
  Material material             = 12;

  /// \brief The minimum velocity each particle is emitted (m/s).
  Float min_velocity            = 13;

  /// \brief The maximum velocity each particle is emitted (m/s).
  Float max_velocity            = 14;

  /// \brief The starting color of the particles.
  Color color_start             = 15;

  /// \brief The end color of the particles.
  Color color_end               = 16;

  /// \brief The amount by which to scale the particles in both x and y
  /// direction per second (screen coordinates).
  Float scale_rate              = 17;

  /// \brief The path to the color image used as an affector.
  StringMsg color_range_image      = 18;

  /// \brief The topic name used by the particle emitter for control and
  /// modification.
  StringMsg topic                  = 19;

  /// \brief The ratio of particles that will be detected by sensors.
  /// Increasing the ratio means there is a higher chance of particles
  /// reflecting and interfering with depth sensing, making the emitter
  /// appear more dense. Decreasing the ratio decreases the chance of
  /// particles reflecting and interfering with depth sensing, making it
  /// appear less dense. Value is in the range of [0, 1].
  Float particle_scatter_ratio     = 20;
}
