#include "supertux/sector.hpp"
BicyclePlatform::BicyclePlatform(const Reader& reader) :
- MovingSprite(reader, LAYER_OBJECTS, COLGROUP_STATIC),
+ MovingSprite(reader, LAYER_OBJECTS, COLGROUP_STATIC),
master(0),
- slave(0),
- radius(128),
- angle(0),
- angular_speed(0),
+ slave(0),
+ center(),
+ radius(128),
+ angle(0),
+ angular_speed(0),
+ contacts(),
momentum(0)
{
center = get_pos();
}
-BicyclePlatform::BicyclePlatform(BicyclePlatform* master) :
- MovingSprite(*master),
- master(master),
- slave(this),
- center(master->center),
- radius(master->radius),
- angle(master->angle + M_PI),
- angular_speed(0),
+BicyclePlatform::BicyclePlatform(BicyclePlatform* master_) :
+ MovingSprite(*master_),
+ master(master_),
+ slave(this),
+ center(master->center),
+ radius(master->radius),
+ angle(master->angle + M_PI),
+ angular_speed(0),
+ contacts(),
momentum(0)
{
set_pos(get_pos() + Vector(master->get_bbox().get_width(), 0));
master->slave = this;
}
-BicyclePlatform::~BicyclePlatform()
+BicyclePlatform::~BicyclePlatform()
{
if ((this == master) && (master)) {
slave->master = 0;
BicyclePlatform::update(float elapsed_time)
{
if (!slave) {
- Sector::current()->add_object(new BicyclePlatform(this));
+ Sector::current()->add_object(std::make_shared<BicyclePlatform>(this));
return;
}
if (!master) {
}
if (this == slave) {
angle = master->angle + M_PI;
- while (angle < 0) { angle += 2*M_PI; }
- while (angle > 2*M_PI) { angle -= 2*M_PI; }
- Vector dest = center + Vector(cosf(angle), sinf(angle)) * radius - (bbox.get_size() * 0.5);
- movement = dest - get_pos();
+ while (angle < 0) { angle += 2*M_PI; }
+ while (angle > 2*M_PI) { angle -= 2*M_PI; }
+ Vector dest_ = center + Vector(cosf(angle), sinf(angle)) * radius - (bbox.get_size().as_vector() * 0.5);
+ movement = dest_ - get_pos();
}
if (this == master) {
float momentum_diff = momentum - slave->momentum;
angular_speed += (angular_momentum * elapsed_time) * M_PI;
angular_speed *= 1 - elapsed_time * 0.2;
angle += angular_speed * elapsed_time;
- while (angle < 0) { angle += 2*M_PI; }
- while (angle > 2*M_PI) { angle -= 2*M_PI; }
+ while (angle < 0) { angle += 2*M_PI; }
+ while (angle > 2*M_PI) { angle -= 2*M_PI; }
angular_speed = std::min(std::max(angular_speed, static_cast<float>(-128*M_PI*elapsed_time)), static_cast<float>(128*M_PI*elapsed_time));
- Vector dest = center + Vector(cosf(angle), sinf(angle)) * radius - (bbox.get_size() * 0.5);
- movement = dest - get_pos();
+ Vector dest_ = center + Vector(cosf(angle), sinf(angle)) * radius - (bbox.get_size().as_vector() * 0.5);
+ movement = dest_ - get_pos();
center += Vector(angular_speed, 0) * elapsed_time * 32;
slave->center += Vector(angular_speed, 0) * elapsed_time * 32;
}
}
-IMPLEMENT_FACTORY(BicyclePlatform, "bicycle-platform");
-
/* EOF */