unit_vehicle::unit_vehicle(const object_params &p, const location_params &lp): m_params(p)
{
    if (p.ai == "air_to_air")
        m_ai = ai_air_to_air;
    else if (p.ai == "air_to_ground")
        m_ai = ai_air_to_ground;
    else if (p.ai == "air_multirole")
        m_ai = ai_air_multirole;

    for (auto &d: p.weapons)
    {
        wpn w;
        w.params = wpn_params(d.id, d.model);
        w.mdl.load((std::string("w_") + d.model).c_str(), lp);
        m_weapons.push_back(w);
    }
}
Example #2
0
plane_ptr world::add_plane(const char *preset, const char *player_name, int color, bool player, net_plane_ptr ptr)
{
    if (!preset)
        return plane_ptr();

    plane_ptr p(new plane());
    const bool add_to_world = !(ptr && !ptr->source);
    p->phys = m_phys_world.add_plane(preset, add_to_world);

    p->render = m_render_world.add_aircraft(preset, color, player);
    p->phys->nose_offset = p->render->get_bone_pos("clv1");

    p->sounds.load(renderer::aircraft::get_sound_name(preset));

    p->hp = p->max_hp = int(p->phys->params.misc.maxHp);

    p->hit_radius = preset[0] == 'b' ? 12.0f : 7.0f;

    time_t now = time(NULL);
    struct tm *tm_now = localtime(&now);
    p->render->set_time(tm_now->tm_sec + tm_now->tm_min * 60 + tm_now->tm_hour * 60 * 60); //ToDo

    auto wi = weapon_information::get().get_aircraft_weapons(preset);
    if (wi)
    {
        p->name = wi->short_name;

        if (!wi->special.empty())
        {
            p->render->load_special(wi->special[0].model.c_str(), m_render_world.get_location_params());
            p->special = wpn_params(wi->special[0].id, wi->special[0].model);
            p->special_max_count = wi->special[0].count;
        }

        p->render->load_missile(wi->missile.model.c_str(), m_render_world.get_location_params());
        p->missile = wpn_params(wi->missile.id, wi->missile.model);
        p->missile_max_count = wi->missile.count;
    }

    p->missile_count = p->missile_max_count;
    p->special_count = p->special_max_count;

    if (player)
    {
        m_hud.load(preset, m_render_world.get_location_name());
        m_hud.set_missiles(p->missile.id.c_str(), 0);
        m_hud.set_missiles_count(p->missile_count);
        m_player = p;
    }

    if (m_network)
        p->net = ptr ? ptr : m_network->add_plane(preset, player_name ? player_name : "", color);

    if (player_name && player_name[0])
    {
        std::string name(player_name);
        std::transform(name.begin() + 1, name.end(), name.begin() + 1, ::tolower);
        p->player_name = std::wstring(name.begin(), name.end());
    }

    m_planes.push_back(p);
    get_arms_param(); //cache
    return p;
}