Program Listing for File base_block_pickup.hpp

Return to documentation for file (cosm/controller/operations/base_block_pickup.hpp)

#pragma once

/*******************************************************************************
 * Includes
 ******************************************************************************/
#include "rcppsw/types/type_uuid.hpp"
#include "rcppsw/types/timestep.hpp"
#include "rcppsw/er/client.hpp"

#include "cosm/controller/block_carrying_controller.hpp"

/*******************************************************************************
 * Namespaces
 ******************************************************************************/
namespace cosm::controller::operations {

/*******************************************************************************
 * Class Definitions
 ******************************************************************************/
class base_block_pickup : public rer::client<base_block_pickup> {
 public:
  base_block_pickup(crepr::base_block3D* block,
                    const rtypes::type_uuid& robot_id,
                    const rtypes::timestep& t);

  virtual ~base_block_pickup(void) = default;

  /* not copy constructible/assignable by default */
  base_block_pickup(const base_block_pickup&) = delete;
  base_block_pickup& operator=(const base_block_pickup&) = delete;

  void visit(controller::block_carrying_controller& controller);

  crepr::base_block3D* block(void) const { return m_block; }
  const rtypes::type_uuid& robot_id(void) const { return mc_robot_id; }

 private:
  /* clang-format off */
  const rtypes::timestep  mc_timestep;
  const rtypes::type_uuid mc_robot_id;

  crepr::base_block3D*    m_block;
  /* clang-format on */
};

} /* namespace cosm::controller::operations */