object_info_ptr ctrl::create(kernel::object_create_t const& oc, dict_copt dict)
{
    if (dict)
        return object_info_ptr(new ctrl(oc, dict));

    //auto chart_sys = dynamic_cast<kernel::ext_ctrl_sys *>(oc.sys);
    //auto polylin = std::move(polyline_chart_t::create(chart_sys->doc()->default_chart()));

    //if (!polylin)
    //    return object_info_ptr();

    //return object_info_ptr(new ctrl(oc, std::move(app::to_geo_points_2(polylin->get_points()))));
    std::vector<geo_point_2> p;
    p.push_back(geo_point_2(0,0));
    return object_info_ptr(new ctrl(oc, std::move(p)));
}
Exemple #2
0
    void ctrl::attach_tow()
    {
        aircraft::info_ptr towair;
        bool reverse = false;

        visit_objects<aircraft::info_ptr>(collection_, [this, &towair,&reverse](aircraft::info_ptr air)->bool
        {       
            geo_point_3 tow_pos = geo_base_3(air->pos())(cg::rotation_3(cpr(air->orien().course, 0, 0)) * (point_3(0, 5., 0) + point_3(air->tow_point_transform().translation())));
            if (cg::distance2d(tow_pos, this->pos()) < 25)
            {   
                double dist_tp  = tow_point_node_ ?cg::distance2d(tow_pos,tow_point_node_->get_global_pos()) :10000.0;
                double dist_rtp = rtow_point_node_?cg::distance2d(tow_pos,rtow_point_node_->get_global_pos()):10000.0;

                if ( dist_rtp < dist_tp)
                {
                    reverse = true;
                }

                towair = air;
                return false;
            }
            
            return true;
        });

        if (towair)
            send_cmd(msg::attach_tow_msg_t(object_info_ptr(towair)->object_id(), reverse));
    }
    void ctrl::attach_tow()
    {
        aircraft::info_ptr towair;

        visit_objects<aircraft::info_ptr>(collection_, [this, &towair](aircraft::info_ptr air)->bool
        {       
            geo_point_3 tow_pos = geo_base_3(air->pos())(cg::rotation_3(cpr(air->orien().course, 0, 0)) * (point_3(0, 5., 0) + point_3(air->tow_point_transform().translation())));
            if (cg::distance2d(tow_pos, this->pos()) < 25)
            {              
                towair = air;
                return false;
            }

            return true;
        });

        if (towair)
            send_cmd(msg::attach_tow_msg_t(object_info_ptr(towair)->object_id()));
    }
Exemple #4
0
	void ctrl::fire_fight()
	{
		aircraft::info_ptr burning_plane;
		bool reverse = false;

		visit_objects<aircraft::info_ptr>(collection_, [this, &burning_plane](aircraft::info_ptr air)->bool
		{       
			geo_point_3 tow_pos = geo_base_3(air->pos())(cg::rotation_3(cpr(air->orien().course, 0, 0)) * (point_3(0, 5., 0) ));
			if (cg::distance2d(tow_pos, this->pos()) < 25)
			{   
				burning_plane = air;
				return false;
			}

			return true;
		});

		if (burning_plane)
			send_cmd(msg::fight_fire_msg_t(object_info_ptr(burning_plane)->object_id(), 1));
	}
object_info_ptr view::create(object_create_t const& oc, dict_copt dict)
{
    return object_info_ptr(new view(oc, dict));
}
object_info_ptr ext_model::create(kernel::object_create_t const& oc, dict_copt dict)
{
    return object_info_ptr(new ext_model(oc,dict));
}
object_info_ptr vis::create(object_create_t const& oc, dict_copt dict)
{
    Verify(dict);
    return object_info_ptr(new vis(oc, dict));
}
	object_info_ptr visual::create(kernel::object_create_t const& oc, dict_copt dict)
	{   
		return object_info_ptr(new visual(oc, dict));
	}
object_info_ptr ctrl::create(kernel::object_create_t const& oc, dict_copt dict)
{
    return object_info_ptr(new ctrl(oc, dict));
}