void basic_spaceship::draw(Wt::WPainter& painter) const { simple_rigid_body::draw(painter); /* Wt::WRectF rc( -m_half_width, -m_half_width, m_half_width * 2, m_half_width * 2 ); */ painter.save(); painter.translate(m_body->GetPosition().x, m_body->GetPosition().y); painter.rotate(m_body->GetAngle() * 360.0 / (2 * b2_pi)); // painter.drawRect(rc); thruster_config< WorldDimensionality::dim2D > const& t_cfg = *m_t_cfg; double const ThrusterSize = m_half_width * 0.3; std::array< Wt::WPointF, 3 > points = { Wt::WPointF(0, 0), Wt::WPointF(-ThrusterSize / 2, -ThrusterSize), Wt::WPointF(ThrusterSize / 2, -ThrusterSize) }; Wt::WPen pen(Wt::GlobalColor::black); for(size_t i = 0; i < m_t_cfg->num_thrusters(); ++i) { painter.save(); auto const& tpos = m_half_width * t_cfg[i].pos; painter.translate(tpos[0], tpos[1]); double dir_x = t_cfg[i].dir[0]; double dir_y = t_cfg[i].dir[1]; double theta = boost::math::copysign(std::acos(dir_y), dir_x); painter.rotate(360.0 * -theta / (2 * boost::math::double_constants::pi)); double temperature = m_t_system[i].t.temperature(); Wt::WColor color((int)(temperature * 255), 0, 0); pen.setColor(color); painter.setPen(pen); Wt::WBrush br(color); painter.setBrush(br); painter.drawPolygon(&points[0], points.size()); painter.restore(); } // double const IndicatorSize = m_half_width * 0.35; auto const IndicatorPos = b2Vec2(0.f, 1.4f * m_half_width); m_front_sensor->draw(painter, IndicatorPos); m_rear_sensor->draw(painter, IndicatorPos); m_left_sensor->draw(painter, IndicatorPos); m_right_sensor->draw(painter, IndicatorPos); painter.restore(); }