55 void init(b2WorldId world_id) {
57 throw std::runtime_error(
"Object::init() called twice.");
77 virtual void render(SDL_Renderer* renderer, b2WorldId world_id)
const = 0;
98 virtual void move(
float x,
float y,
float theta = NAN);
147 virtual void do_init([[maybe_unused]] b2WorldId world_id) { }
159 bool initialized =
false;
186 float _linear_damping = 0.0f,
float _angular_damping = 0.0f,
187 float _density = 10.0f,
float _friction = 0.3f,
float _restitution = 0.5f,
188 std::string
const& _category =
"objects");
202 std::string
const& _category =
"objects");
248 virtual void render(SDL_Renderer* renderer, b2WorldId world_id)
const override = 0 ;
257 virtual void move(
float x,
float y,
float theta = NAN)
override;
302 virtual void do_init([[maybe_unused]] b2WorldId world_id)
override;
361 float _linear_damping = 0.0f,
float _angular_damping = 0.0f,
362 float _density = 10.0f,
float _friction = 0.3f,
float _restitution = 0.5f,
363 std::string _colormap =
"rainbow",
364 std::string
const& _category =
"objects");
378 std::string
const& _category =
"objects");
386 void render(SDL_Renderer* renderer, b2WorldId world_id)
const override;
421void get_cmap_val(std::string
const name, uint8_t
const value, uint8_t* r, uint8_t* g, uint8_t* b);
Class for managing hierarchical configuration parameters.
Definition configuration.h:64
DataLogger class for writing data to a Feather file using Apache Arrow.
Definition data_logger.h:24
A discretized 2D grid representing light intensities over a simulation area.
Definition lights.h:20
Geometry of an object.
Definition objects_geometry.h:40
Base class of any object contained within the simulation.
Definition objects.h:23
virtual void parse_configuration(Configuration const &config, Simulation *simulation)
Parse a provided configuration and set associated members values.
Definition objects.cpp:33
virtual void do_init(b2WorldId world_id)
Perform the base initialization (e.g. create Box2D objects). Called once by init(world_id).
Definition objects.h:147
float y
Y position.
Definition objects.h:134
virtual void create_serialization_fields(DataLogger *data_logger)
Create serialization fields of the data logger.
Definition objects.cpp:48
virtual bool is_tangible() const
Returns whether this object is tangible (e.g. collisions, etc) or not.
Definition objects.h:103
std::string category
Category of the object.
Definition objects.h:138
float x
X position.
Definition objects.h:133
virtual void move(float x, float y, float theta=NAN)
Move the object to a given coordinate.
Definition objects.cpp:41
ObjectGeometry * get_geometry()
Return the object's geometry.
Definition objects.h:89
bool is_initialized() const noexcept
Check if the object was correctly initialized yet.
Definition objects.h:66
virtual void launch_user_step(float f)
Launches the user-defined step function.
Definition objects.cpp:29
void init(b2WorldId world_id)
Launch virtual function 'do_init' that will perform base initialization (e.g. create Box2D objects).
Definition objects.h:55
ObjectGeometry * geom
Geometry of the object.
Definition objects.h:156
virtual void render(SDL_Renderer *renderer, b2WorldId world_id) const =0
Renders the object on the given SDL renderer.
virtual ~Object()
Destructor.
Definition objects.cpp:27
virtual void serialize_base_values(DataLogger *data_logger, double t)
Save base values of the object into a data logger row.
Definition objects.cpp:53
float theta
Orientation (in rad).
Definition objects.h:135
virtual arena_polygons_t generate_contours(std::size_t points_per_contour=0) const
Return one or more polygonal contours that represent the geometry of the object.
Definition objects.cpp:65
Object(float _x, float _y, ObjectGeometry &_geom, std::string const &_category="objects")
Constructs an Object.
Definition objects.cpp:16
virtual void parse_configuration(Configuration const &config, Simulation *simulation) override
Parse a provided configuration and set associated members values.
Definition objects.cpp:270
void render(SDL_Renderer *renderer, b2WorldId world_id) const override
Renders the object on the given SDL renderer.
Definition objects.cpp:246
std::string colormap
Definition objects.h:389
PassiveObject(uint16_t _id, float _x, float _y, ObjectGeometry &geom, float _linear_damping=0.0f, float _angular_damping=0.0f, float _density=10.0f, float _friction=0.3f, float _restitution=0.5f, std::string _colormap="rainbow", std::string const &_category="objects")
Constructs a PassiveObject.
Definition objects.cpp:225
float friction
Definition objects.h:325
virtual void launch_user_step(float t) override
Launches the user-defined step function. For PhysicalObject, it is also used to compute acceleration ...
Definition objects.cpp:97
virtual b2Vec2 get_position() const
Retrieves the object's current position.
Definition objects.cpp:116
virtual void do_init(b2WorldId world_id) override
Perform the base initialization (e.g. create Box2D objects). Called once by init(world_id).
Definition objects.cpp:93
PhysicalObject(uint16_t _id, float _x, float _y, ObjectGeometry &geom, float _linear_damping=0.0f, float _angular_damping=0.0f, float _density=10.0f, float _friction=0.3f, float _restitution=0.5f, std::string const &_category="objects")
Constructs a PhysicalObject.
Definition objects.cpp:73
virtual void move(float x, float y, float theta=NAN) override
Move the object to a given coordinate.
Definition objects.cpp:181
float linear_damping
Definition objects.h:322
float _last_time
Definition objects.h:331
float get_angle() const
Retrieves the object's current orientation angle.
Definition objects.cpp:124
virtual void parse_configuration(Configuration const &config, Simulation *simulation) override
Parse a provided configuration and set associated members values.
Definition objects.cpp:145
b2Vec2 get_linear_acceleration() const
Retrieves the object's current angular velocity.
Definition objects.cpp:141
float restitution
Definition objects.h:326
float angular_damping
Definition objects.h:323
float density
Definition objects.h:324
b2Vec2 _lin_acc
Definition objects.h:333
b2BodyId body_id
Box2D body identifier.
Definition objects.h:327
virtual void create_serialization_fields(DataLogger *data_logger) override
Create serialization fields of the data logger.
Definition objects.cpp:194
virtual void render(SDL_Renderer *renderer, b2WorldId world_id) const override=0
Renders the object on the given SDL renderer.
b2Vec2 _prev_v
Definition objects.h:332
virtual void create_body(b2WorldId world_id)
Creates the object's physical body in the simulation.
Definition objects.cpp:154
virtual arena_polygons_t generate_contours(std::size_t points_per_contour=0) const override
Return one or more polygonal contours that represent the geometry of the object.
Definition objects.cpp:217
uint16_t id
Object identifier.
Definition objects.h:292
float get_angular_velocity() const
Retrieves the object's current angular velocity.
Definition objects.cpp:133
virtual bool is_tangible() const override
Returns whether this object is tangible (e.g. collisions, etc) or not.
Definition objects.h:262
float _estimated_dt
Definition objects.h:330
virtual void serialize_base_values(DataLogger *data_logger, double t) override
Save base values of the object into a data logger row.
Definition objects.cpp:202
Class representing the simulation environment.
Definition simulator.h:43
std::vector< std::vector< b2Vec2 > > arena_polygons_t
Definition geometry.h:13
void get_cmap_val(std::string const name, uint8_t const value, uint8_t *r, uint8_t *g, uint8_t *b)
Interface to colormaps.
Definition objects.cpp:335
Object * object_factory(Simulation *simulation, uint16_t id, float x, float y, b2WorldId world_id, Configuration const &config, LightLevelMap *light_map, size_t userdatasize=0, std::string const &category="objects")
Factory of simulation Objects. Return a constructed object from configuration.
Definition objects.cpp:280
std::unique_ptr< Simulation > simulation
Global simulation instance.
Definition simulator.cpp:74