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); } }
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; }