Пример #1
0
	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();
	}