From: <tz...@us...> - 2009-02-07 18:51:33
|
Revision: 2799 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2799&view=rev Author: tzlaine Date: 2009-02-07 18:51:31 +0000 (Sat, 07 Feb 2009) Log Message: ----------- Added experimental code to CombatWnd to read the planets and star type from a text config file, so experiments can be run without a recompile. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-07 03:16:35 UTC (rev 2798) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-07 18:51:31 UTC (rev 2799) @@ -512,23 +512,102 @@ // NOTE: Below is temporary code for combat system prototyping! // ////////////////////////////////////////////////////////////////// + int system_id = 0; + StarType star_type = STAR_BLUE; + std::vector<int> planet_ids(10); + for (int i = 0; i < 10; ++i) { + planet_ids[i] = i; + } + std::vector<PlanetType> planet_types(10); + planet_types[0] = PT_SWAMP; + planet_types[1] = PT_TOXIC; + planet_types[2] = PT_TERRAN; + planet_types[3] = PT_INFERNO; + planet_types[4] = PT_RADIATED; + planet_types[5] = PT_BARREN; + planet_types[6] = PT_TUNDRA; + planet_types[7] = PT_GASGIANT; + planet_types[8] = PT_DESERT; + planet_types[9] = PT_OCEAN; + std::vector<PlanetSize> planet_sizes(10); + planet_sizes[0] = SZ_SMALL; + planet_sizes[1] = SZ_LARGE; + planet_sizes[2] = SZ_LARGE; + planet_sizes[3] = SZ_MEDIUM; + planet_sizes[4] = SZ_LARGE; + planet_sizes[5] = SZ_SMALL; + planet_sizes[6] = SZ_MEDIUM; + planet_sizes[7] = SZ_GASGIANT; + planet_sizes[8] = SZ_TINY; + planet_sizes[9] = SZ_HUGE; + +#if 1 + std::map<PlanetType, std::size_t> textures_available; + std::size_t max_textures_available = 0; + { + namespace fs = boost::filesystem; + fs::path dir = ClientUI::ArtDir() / "combat" / "meshes" / "planets"; + assert(fs::is_directory(dir)); + fs::directory_iterator end_it; + for (std::map<PlanetType, std::string>::const_iterator type_it = + ClientUI::PlanetTypeFilePrefixes().begin(); + type_it != ClientUI::PlanetTypeFilePrefixes().end(); + ++type_it) { + std::set<std::string> current_textures; + for (fs::directory_iterator it(dir); it != end_it; ++it) { + try { + if (fs::exists(*it) && + !fs::is_directory(*it) && + boost::algorithm::starts_with(it->filename(), type_it->second)) { + current_textures.insert(it->filename().substr(0, type_it->second.size() + 2)); + } + } catch (const fs::filesystem_error& e) { + // ignore files for which permission is denied, and rethrow other exceptions + if (e.code() != boost::system::posix_error::permission_denied) + throw; + } + } + textures_available[type_it->first] = current_textures.size(); + max_textures_available = std::max(max_textures_available, current_textures.size()); + } + } + std::size_t planet_id_interval = 100 * max_textures_available; + + std::ifstream ifs("demo_planet_params.txt"); + if (ifs) { + ifs >> system_id >> star_type; + std::cout << system_id << " " << star_type << "\n"; + for (std::size_t i = 0; ifs && i < planet_ids.size(); ++i) { + ifs >> planet_ids[i] >> planet_types[i] >> planet_sizes[i]; + std::cout << planet_ids[i] << " " << planet_types[i] << " " << planet_sizes[i] << "\n"; + int offset = + planet_id_interval * i / + textures_available[planet_types[i]] * + textures_available[planet_types[i]]; + planet_ids[i] += offset; + std::cout << planet_ids[i] << " " + << (planet_ids[i] % textures_available[planet_types[i]]) << "\n"; + } + } +#endif + // a sample system std::vector<Planet*> planets; - planets.push_back(new Planet(PT_SWAMP, SZ_SMALL)); - planets.push_back(new Planet(PT_TOXIC, SZ_LARGE)); - planets.push_back(new Planet(PT_TERRAN, SZ_LARGE)); - planets.push_back(new Planet(PT_INFERNO, SZ_MEDIUM)); - planets.push_back(new Planet(PT_RADIATED, SZ_LARGE)); - planets.push_back(new Planet(PT_BARREN, SZ_SMALL)); - planets.push_back(new Planet(PT_TUNDRA, SZ_MEDIUM)); - planets.push_back(new Planet(PT_GASGIANT, SZ_GASGIANT)); - planets.push_back(new Planet(PT_DESERT, SZ_TINY)); - planets.push_back(new Planet(PT_OCEAN, SZ_HUGE)); + planets.push_back(new Planet(planet_types[0], planet_sizes[0])); + planets.push_back(new Planet(planet_types[1], planet_sizes[1])); + planets.push_back(new Planet(planet_types[2], planet_sizes[2])); + planets.push_back(new Planet(planet_types[3], planet_sizes[3])); + planets.push_back(new Planet(planet_types[4], planet_sizes[4])); + planets.push_back(new Planet(planet_types[5], planet_sizes[5])); + planets.push_back(new Planet(planet_types[6], planet_sizes[6])); + planets.push_back(new Planet(planet_types[7], planet_sizes[7])); + planets.push_back(new Planet(planet_types[8], planet_sizes[8])); + planets.push_back(new Planet(planet_types[9], planet_sizes[9])); - System system(STAR_BLUE, planets.size(), "Sample", 0.0, 0.0); + System system(star_type, planets.size(), "Sample", 0.0, 0.0); for (std::size_t i = 0; i < planets.size(); ++i) { - GetUniverse().InsertID(planets[i], i); - system.Insert(i, i); + GetUniverse().InsertID(planets[i], planet_ids[i]); + system.Insert(planet_ids[i], i); assert(system.Contains(i)); assert(system.begin() != system.end()); } |
From: <tz...@us...> - 2009-02-09 04:10:41
|
Revision: 2804 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2804&view=rev Author: tzlaine Date: 2009-02-09 04:10:39 +0000 (Mon, 09 Feb 2009) Log Message: ----------- Added code to derive the level of city lights to render on a planet's night- side from the Planet object being represented. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-09 03:53:27 UTC (rev 2803) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-09 04:10:39 UTC (rev 2804) @@ -902,11 +902,12 @@ } else { assert(material_name == "atmosphereless_planet"); material->getTechnique(0)->getPass(0)->getTextureUnitState(2)->setTextureName(base_name + "Normal.png"); - // TODO: Get the integer city lights level of - // NO_CITY_LIGHTS or in the range [0, 9] somehow, and - // supply it here. Right now, we're using a hardcoded 2 - // just for demo purposes. - Ogre::TexturePtr texture = PlanetLightsTexture(base_name, 2); + double pop = planet->GetMeter(METER_POPULATION)->Current(); + unsigned int lights_level = NO_CITY_LIGHTS; + const double MIN_POP_FOR_LIGHTS = 5.0; + if (MIN_POP_FOR_LIGHTS < pop) + lights_level = std::fmod(pop - 5.0, (100.0 - MIN_POP_FOR_LIGHTS) / 10.0); + Ogre::TexturePtr texture = PlanetLightsTexture(base_name, lights_level); m_city_lights_textures.push_back(texture); material->getTechnique(0)->getPass(0)->getTextureUnitState(3)->setTextureName(texture->getName()); } |
From: <tz...@us...> - 2009-02-21 03:10:34
|
Revision: 2838 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2838&view=rev Author: tzlaine Date: 2009-02-21 03:10:27 +0000 (Sat, 21 Feb 2009) Log Message: ----------- Changed CombatWnd::LDoubleClick() to check if a repositionioning animation is already active before starting one by calling LookAt(). This fixes a crash that occurs when double-clicking too frequently. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-21 02:46:28 UTC (rev 2837) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-21 03:10:27 UTC (rev 2838) @@ -95,6 +95,8 @@ const unsigned int NO_CITY_LIGHTS = std::numeric_limits<unsigned int>::max(); + const unsigned short LOOKAT_NODE_TRACK_HANDLE = 0; + Ogre::Real OrbitRadius(unsigned int orbit) { assert(orbit < 10); @@ -1057,7 +1059,8 @@ m_look_at_point = look_at_point; UpdateCameraPosition(); m_camera_animation_state->setTimePosition(0.0); - Ogre::NodeAnimationTrack* track = m_camera_animation->createNodeTrack(0, m_camera_node); + Ogre::NodeAnimationTrack* track = + m_camera_animation->createNodeTrack(LOOKAT_NODE_TRACK_HANDLE, m_camera_node); const int STEPS = 8; const Ogre::Real TIME_INCREMENT = CAMERA_RECENTER_TIME / STEPS; const Ogre::Vector3 DISTANCE_INCREMENT = DISTANCE / STEPS; @@ -1135,7 +1138,7 @@ void CombatWnd::LDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { - if (!m_mouse_dragged) { + if (!m_mouse_dragged && !m_camera_animation->hasNodeTrack(LOOKAT_NODE_TRACK_HANDLE)) { if (Ogre::MovableObject* movable_object = GetObjectUnderPt(pt)) { Ogre::SceneNode* clicked_scene_node = movable_object->getParentSceneNode(); assert(clicked_scene_node); |
From: <tz...@us...> - 2009-02-21 05:34:34
|
Revision: 2839 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2839&view=rev Author: tzlaine Date: 2009-02-21 05:34:29 +0000 (Sat, 21 Feb 2009) Log Message: ----------- Added a call to SceneManager::clearScene() to ~CombatWnd(), so that creating and destroying CombatWnds will no longre cause trouble. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-21 03:10:27 UTC (rev 2838) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-21 05:34:29 UTC (rev 2839) @@ -724,6 +724,8 @@ m_scene_manager->destroyQuery(m_volume_scene_query); Ogre::CompositorManager::getSingleton().removeCompositor(m_viewport, "effects/glow"); + m_scene_manager->clearScene(); + for (std::map<int, std::pair<Ogre::SceneNode*, btTriangleMesh*> >::iterator it = m_ship_assets.begin(); it != m_ship_assets.end(); ++it) { // TODO: either delete these SceneNodes, or use an Ogre clear-everything function @@ -743,9 +745,6 @@ delete m_collision_configuration; RemoveAccelerators(); - - // TODO: delete nodes and materials in m_planet_assets (or maybe everything - // via some Ogre function?) } void CombatWnd::InitCombat(const System& system) |
From: <geo...@us...> - 2009-02-21 14:28:06
|
Revision: 2842 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2842&view=rev Author: geoffthemedio Date: 2009-02-21 14:27:56 +0000 (Sat, 21 Feb 2009) Log Message: ----------- Fixed compile errors in CombatWnd.cpp with mixed types being passed to std::pow Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-21 06:48:56 UTC (rev 2841) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-21 14:27:56 UTC (rev 2842) @@ -850,10 +850,11 @@ const Ogre::Real THIRD_ORBIT_RADIUS = OrbitRadius(2); const Ogre::Real ORBIT_RADIUS = OrbitRadius(it->first); // Kepler's third law. - const Ogre::Real ORBIT_PERIOD = - std::sqrt(std::pow(THIRD_ORBIT_PERIOD, 2.0) / - std::pow(THIRD_ORBIT_RADIUS, 3.0) * - std::pow(ORBIT_RADIUS, 3.0)); + const Ogre::Real ORBIT_PERIOD = static_cast<Ogre::Real>( + std::sqrt(std::pow(static_cast<float>(THIRD_ORBIT_PERIOD), 2.0f) / + std::pow(static_cast<float>(THIRD_ORBIT_RADIUS), 3.0f) * + std::pow(static_cast<float>(ORBIT_RADIUS), 3.0f))); + const Ogre::Real ORBIT_ANGULAR_VELOCITY = 2.0 * 3.14159 / ORBIT_PERIOD; Ogre::Real rotation = turn_offset * ORBIT_ANGULAR_VELOCITY; |
From: <tz...@us...> - 2009-02-23 00:24:25
|
Revision: 2862 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2862&view=rev Author: tzlaine Date: 2009-02-23 00:24:23 +0000 (Mon, 23 Feb 2009) Log Message: ----------- Moved the code that looks for star, planet, and asteroid texture sets out of CombatWnd::InitCombat() to ensure that this only happens once, rather than at the beginning of every combat. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-22 22:55:29 UTC (rev 2861) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-23 00:24:23 UTC (rev 2862) @@ -74,8 +74,8 @@ const int SELECTION_HILITING_FILLED_2_RENDER_QUEUE = Ogre::RENDER_QUEUE_7 + 2; const std::set<int> STENCIL_OP_RENDER_QUEUES = - boost::assign::list_of - (SELECTION_HILITING_OBJECT_RENDER_QUEUE) + boost::assign::list_of + (SELECTION_HILITING_OBJECT_RENDER_QUEUE) (SELECTION_HILITING_OUTLINED_RENDER_QUEUE) (SELECTION_HILITING_FILLED_1_RENDER_QUEUE) (SELECTION_HILITING_FILLED_2_RENDER_QUEUE); @@ -277,6 +277,96 @@ "")); } + const std::map<StarType, std::set<std::string> >& StarTextures() + { + static std::map<StarType, std::set<std::string> > star_textures; + if (star_textures.empty()) + { + namespace fs = boost::filesystem; + fs::path dir = ClientUI::ArtDir() / "combat" / "backgrounds"; + assert(fs::is_directory(dir)); + fs::directory_iterator end_it; + for (std::map<StarType, std::string>::const_iterator type_it = + ClientUI::StarTypeFilePrefixes().begin(); + type_it != ClientUI::StarTypeFilePrefixes().end(); + ++type_it) { + std::set<std::string>& current_textures = star_textures[type_it->first]; + for (fs::directory_iterator it(dir); it != end_it; ++it) { + try { + if (fs::exists(*it) && + !fs::is_directory(*it) && + boost::algorithm::starts_with(it->filename(), type_it->second)) { + current_textures.insert(it->filename().substr(0, type_it->second.size() + 2)); + } + } catch (const fs::filesystem_error& e) { + // ignore files for which permission is denied, and rethrow other exceptions + if (e.code() != boost::system::posix_error::permission_denied) + throw; + } + } + } + } + return star_textures; + } + + const std::map<PlanetType, std::set<std::string> >& PlanetTextures() + { + static std::map<PlanetType, std::set<std::string> > planet_textures; + if (planet_textures.empty()) + { + namespace fs = boost::filesystem; + fs::path dir = ClientUI::ArtDir() / "combat" / "meshes" / "planets"; + assert(fs::is_directory(dir)); + fs::directory_iterator end_it; + for (std::map<PlanetType, std::string>::const_iterator type_it = + ClientUI::PlanetTypeFilePrefixes().begin(); + type_it != ClientUI::PlanetTypeFilePrefixes().end(); + ++type_it) { + std::set<std::string>& current_textures = planet_textures[type_it->first]; + for (fs::directory_iterator it(dir); it != end_it; ++it) { + try { + if (fs::exists(*it) && + !fs::is_directory(*it) && + boost::algorithm::starts_with(it->filename(), type_it->second)) { + current_textures.insert(it->filename().substr(0, type_it->second.size() + 2)); + } + } catch (const fs::filesystem_error& e) { + // ignore files for which permission is denied, and rethrow other exceptions + if (e.code() != boost::system::posix_error::permission_denied) + throw; + } + } + } + } + return planet_textures; + } + + const std::set<std::string>& AsteroidSets() + { + static std::set<std::string> asteroid_sets; + if (asteroid_sets.empty()) + { + const std::string ASTEROID_BASE_NAME = "Asteroid"; + namespace fs = boost::filesystem; + fs::path dir = ClientUI::ArtDir() / "combat" / "meshes" / "planets"; + fs::directory_iterator end_it; + for (fs::directory_iterator it(dir); it != end_it; ++it) { + try { + if (fs::exists(*it) && + !fs::is_directory(*it) && + boost::algorithm::starts_with(it->filename(), ASTEROID_BASE_NAME)) { + asteroid_sets.insert(it->filename().substr(0, ASTEROID_BASE_NAME.size() + 2)); + } + } catch (const fs::filesystem_error& e) { + // ignore files for which permission is denied, and rethrow other exceptions + if (e.code() != boost::system::posix_error::permission_denied) + throw; + } + } + } + return asteroid_sets; + } + void AddOptions(OptionsDB& db) { db.AddFlag("tech-demo", "Try out the 3D combat tech demo.", false); @@ -775,28 +865,9 @@ SetAccelerators(); - // build list of available star textures, by type - std::set<std::string> star_textures; - { - namespace fs = boost::filesystem; - fs::path dir = ClientUI::ArtDir() / "combat" / "backgrounds"; - assert(fs::is_directory(dir)); - fs::directory_iterator end_it; - std::string type_str = ClientUI::StarTypeFilePrefixes()[m_system->Star()]; - for (fs::directory_iterator it(dir); it != end_it; ++it) { - try { - if (fs::exists(*it) && - !fs::is_directory(*it) && - boost::algorithm::starts_with(it->filename(), type_str)) { - star_textures.insert(it->filename().substr(0, type_str.size() + 2)); - } - } catch (const fs::filesystem_error& e) { - // ignore files for which permission is denied, and rethrow other exceptions - if (e.code() != boost::system::posix_error::permission_denied) - throw; - } - } - } + assert(StarTextures().find(m_system->Star()) != StarTextures().end()); + const std::set<std::string>& star_textures = StarTextures().find(m_system->Star())->second; + const std::set<std::string>& asteroid_sets = AsteroidSets(); // pick and assign star textures { @@ -824,56 +895,6 @@ false); } - // build list of available planet textures, by type - std::map<PlanetType, std::set<std::string> > planet_textures; - { - namespace fs = boost::filesystem; - fs::path dir = ClientUI::ArtDir() / "combat" / "meshes" / "planets"; - assert(fs::is_directory(dir)); - fs::directory_iterator end_it; - for (std::map<PlanetType, std::string>::const_iterator type_it = - ClientUI::PlanetTypeFilePrefixes().begin(); - type_it != ClientUI::PlanetTypeFilePrefixes().end(); - ++type_it) { - std::set<std::string>& current_textures = planet_textures[type_it->first]; - for (fs::directory_iterator it(dir); it != end_it; ++it) { - try { - if (fs::exists(*it) && - !fs::is_directory(*it) && - boost::algorithm::starts_with(it->filename(), type_it->second)) { - current_textures.insert(it->filename().substr(0, type_it->second.size() + 2)); - } - } catch (const fs::filesystem_error& e) { - // ignore files for which permission is denied, and rethrow other exceptions - if (e.code() != boost::system::posix_error::permission_denied) - throw; - } - } - } - } - - // build list of available asteroid textures and meshes - std::set<std::string> asteroid_sets; - { - const std::string ASTEROID_BASE_NAME = "Asteroid"; - namespace fs = boost::filesystem; - fs::path dir = ClientUI::ArtDir() / "combat" / "meshes" / "planets"; - fs::directory_iterator end_it; - for (fs::directory_iterator it(dir); it != end_it; ++it) { - try { - if (fs::exists(*it) && - !fs::is_directory(*it) && - boost::algorithm::starts_with(it->filename(), ASTEROID_BASE_NAME)) { - asteroid_sets.insert(it->filename().substr(0, ASTEROID_BASE_NAME.size() + 2)); - } - } catch (const fs::filesystem_error& e) { - // ignore files for which permission is denied, and rethrow other exceptions - if (e.code() != boost::system::posix_error::permission_denied) - throw; - } - } - } - // create planets for (System::const_orbit_iterator it = m_system->begin(); it != m_system->end(); ++it) { const Planet* planet = 0; @@ -906,9 +927,11 @@ light_dir.normalise(); light_dir = node->getOrientation().Inverse() * light_dir; + assert(PlanetTextures().find(planet->Type()) != PlanetTextures().end()); + const std::set<std::string>& planet_textures = + PlanetTextures().find(planet->Type())->second; std::string base_name = - *boost::next(planet_textures[planet->Type()].begin(), - planet->ID() % planet_textures[planet->Type()].size()); + *boost::next(planet_textures.begin(), planet->ID() % planet_textures.size()); // set up a sphere in the collision detection system m_collision_shapes.push_back(new btSphereShape(planet_radius)); |
From: <tz...@us...> - 2009-02-23 01:15:04
|
Revision: 2863 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2863&view=rev Author: tzlaine Date: 2009-02-23 01:15:00 +0000 (Mon, 23 Feb 2009) Log Message: ----------- Altered the tech demo to show a Stonehenge-like ring of asteroids in the 4th orbit. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-23 00:24:23 UTC (rev 2862) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-02-23 01:15:00 UTC (rev 2863) @@ -138,14 +138,15 @@ std::string PlanetNodeMaterial(PlanetType type) { + assert(INVALID_PLANET_TYPE < type && type < NUM_PLANET_TYPES); if (type == PT_GASGIANT) return "gas_giant"; else if (type == PT_RADIATED || type == PT_BARREN) return "atmosphereless_planet"; - else if (type != PT_ASTEROIDS && type != INVALID_PLANET_TYPE) + else if (type == PT_ASTEROIDS) + return "asteroid"; + else return "planet"; - else - return "don't create"; } std::string AtmosphereMaterialName(const std::string& base_name) @@ -367,6 +368,29 @@ return asteroid_sets; } + const std::vector<Ogre::MaterialPtr>& AsteroidMaterials() + { + static std::vector<Ogre::MaterialPtr> asteroid_materials; + if (asteroid_materials.empty()) + { + const std::set<std::string>& asteroid_sets = AsteroidSets(); + for (std::set<std::string>::const_iterator it = asteroid_sets.begin(); + it != asteroid_sets.end(); + ++it) { + std::string new_material_name = "asteroid_" + *it; + Ogre::MaterialPtr material = + Ogre::MaterialManager::getSingleton().getByName("asteroid"); + material = material->clone(new_material_name); + material->getTechnique(0)->getPass(0)->getTextureUnitState(0)-> + setTextureName(*it + "Color.png"); + material->getTechnique(0)->getPass(0)->getTextureUnitState(1)-> + setTextureName(*it + "Normal.png"); + asteroid_materials.push_back(material); + } + } + return asteroid_materials; + } + void AddOptions(OptionsDB& db) { db.AddFlag("tech-demo", "Try out the 3D combat tech demo.", false); @@ -676,7 +700,7 @@ planet_types[0] = PT_SWAMP; planet_types[1] = PT_TOXIC; planet_types[2] = PT_TERRAN; - planet_types[3] = PT_INFERNO; + planet_types[3] = PT_ASTEROIDS;//PT_INFERNO; planet_types[4] = PT_RADIATED; planet_types[5] = PT_BARREN; planet_types[6] = PT_TUNDRA; @@ -687,7 +711,7 @@ planet_sizes[0] = SZ_SMALL; planet_sizes[1] = SZ_LARGE; planet_sizes[2] = SZ_LARGE; - planet_sizes[3] = SZ_MEDIUM; + planet_sizes[3] = SZ_ASTEROIDS;//SZ_MEDIUM; planet_sizes[4] = SZ_LARGE; planet_sizes[5] = SZ_SMALL; planet_sizes[6] = SZ_MEDIUM; @@ -904,125 +928,213 @@ planet = universe_object_cast<Planet*>(m_combat_universe[it->second]); if (planet) { std::string material_name = PlanetNodeMaterial(planet->Type()); - if (material_name == "don't create") - continue; + if (material_name != "asteroid") { + std::string planet_name = + "orbit " + boost::lexical_cast<std::string>(it->first) + " planet"; - std::string planet_name = "orbit " + boost::lexical_cast<std::string>(it->first) + " planet"; + Ogre::SceneNode* node = + m_scene_manager->getRootSceneNode()->createChildSceneNode( + planet_name + " node"); + Ogre::Real planet_radius = PlanetRadius(planet->Size()); + node->setScale(planet_radius, planet_radius, planet_radius); + node->yaw(Ogre::Degree(planet->AxialTilt())); + Ogre::Vector3 position(OrbitalRadius(it->first), 0.0, 0.0); + Ogre::Quaternion position_rotation( + Ogre::Radian(planet->OrbitalPositionOnTurn( + ClientApp::GetApp()->CurrentTurn())), + Ogre::Vector3::UNIT_Z); + position = position_rotation * position; + node->setPosition(position); - Ogre::SceneNode* node = - m_scene_manager->getRootSceneNode()->createChildSceneNode(planet_name + " node"); - Ogre::Real planet_radius = PlanetRadius(planet->Size()); - node->setScale(planet_radius, planet_radius, planet_radius); - node->yaw(Ogre::Degree(planet->AxialTilt())); - Ogre::Vector3 position(OrbitalRadius(it->first), 0.0, 0.0); - Ogre::Quaternion position_rotation( - Ogre::Radian(planet->OrbitalPositionOnTurn( - ClientApp::GetApp()->CurrentTurn())), - Ogre::Vector3::UNIT_Z); - position = position_rotation * position; - node->setPosition(position); + // light comes from the star, and the star is at the origin + Ogre::Vector3 light_dir = -node->getPosition(); + light_dir.normalise(); + light_dir = node->getOrientation().Inverse() * light_dir; - // light comes from the star, and the star is at the origin - Ogre::Vector3 light_dir = -node->getPosition(); - light_dir.normalise(); - light_dir = node->getOrientation().Inverse() * light_dir; + assert(PlanetTextures().find(planet->Type()) != PlanetTextures().end()); + const std::set<std::string>& planet_textures = + PlanetTextures().find(planet->Type())->second; + std::string base_name = + *boost::next(planet_textures.begin(), planet->ID() % planet_textures.size()); - assert(PlanetTextures().find(planet->Type()) != PlanetTextures().end()); - const std::set<std::string>& planet_textures = - PlanetTextures().find(planet->Type())->second; - std::string base_name = - *boost::next(planet_textures.begin(), planet->ID() % planet_textures.size()); + // set up a sphere in the collision detection system + m_collision_shapes.push_back(new btSphereShape(planet_radius)); + m_collision_objects.push_back(new btCollisionObject); + btMatrix3x3 identity; + identity.setIdentity(); + m_collision_objects.back().getWorldTransform().setBasis(identity); + m_collision_objects.back().getWorldTransform().setOrigin( + ToCollisionVector(position)); + m_collision_objects.back().setCollisionShape(&m_collision_shapes.back()); + m_collision_world->addCollisionObject(&m_collision_objects.back()); - // set up a sphere in the collision detection system - m_collision_shapes.push_back(new btSphereShape(planet_radius)); - m_collision_objects.push_back(new btCollisionObject); - btMatrix3x3 identity; - identity.setIdentity(); - m_collision_objects.back().getWorldTransform().setBasis(identity); - m_collision_objects.back().getWorldTransform().setOrigin(ToCollisionVector(position)); - m_collision_objects.back().setCollisionShape(&m_collision_shapes.back()); - m_collision_world->addCollisionObject(&m_collision_objects.back()); + if (material_name == "gas_giant") { + Ogre::Entity* entity = + m_scene_manager->createEntity(planet_name, "sphere.mesh"); + entity->setMaterialName("gas_giant_core"); + assert(entity->getNumSubEntities() == 1u); + entity->setCastShadows(true); + entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); + node->attachObject(entity); - if (material_name == "gas_giant") { - Ogre::Entity* entity = m_scene_manager->createEntity(planet_name, "sphere.mesh"); - entity->setMaterialName("gas_giant_core"); - assert(entity->getNumSubEntities() == 1u); - entity->setCastShadows(true); - entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); - node->attachObject(entity); + m_collision_objects.back().setUserPointer( + static_cast<Ogre::MovableObject*>(entity)); - m_collision_objects.back().setUserPointer(static_cast<Ogre::MovableObject*>(entity)); - - entity = m_scene_manager->createEntity(planet_name + " atmosphere", "sphere.mesh"); - entity->setRenderQueueGroup(ALPHA_OBJECTS_QUEUE); - entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); - entity->setQueryFlags(UNSELECTABLE_OBJECT_MASK); - std::string new_material_name = - material_name + "_" + boost::lexical_cast<std::string>(it->first); - Ogre::MaterialPtr material = - Ogre::MaterialManager::getSingleton().getByName(material_name); - material = material->clone(new_material_name); - m_planet_assets[it->first].second.push_back(material); - material->getTechnique(0)->getPass(0)->getVertexProgramParameters()->setNamedConstant("light_dir", light_dir); - material->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName(base_name + ".png"); - entity->setMaterialName(new_material_name); - node->attachObject(entity); - } else { - Ogre::Entity* entity = m_scene_manager->createEntity(planet_name, "sphere.mesh"); - entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); - std::string new_material_name = - material_name + "_" + boost::lexical_cast<std::string>(it->first); - Ogre::MaterialPtr material = - Ogre::MaterialManager::getSingleton().getByName(material_name == "planet" ? - PlanetMaterialName(base_name) : - material_name); - material = material->clone(new_material_name); - m_planet_assets[it->first].second.push_back(material); - assert(entity->getNumSubEntities() == 1u); - material->getTechnique(0)->getPass(0)->getVertexProgramParameters()->setNamedConstant("light_dir", light_dir); - material->getTechnique(0)->getPass(0)->getTextureUnitState(0)->setTextureName(base_name + "Day.png"); - material->getTechnique(0)->getPass(0)->getTextureUnitState(1)->setTextureName(base_name + "Night.png"); - entity->setMaterialName(new_material_name); - entity->setCastShadows(true); - node->attachObject(entity); - - m_collision_objects.back().setUserPointer(static_cast<Ogre::MovableObject*>(entity)); - - if (material_name == "planet") { - material->getTechnique(0)->getPass(0)->getTextureUnitState(2)->setTextureName(base_name + "CloudGloss.png"); - entity = m_scene_manager->createEntity(planet_name + " atmosphere", "sphere.mesh"); + entity = m_scene_manager->createEntity( + planet_name + " atmosphere", "sphere.mesh"); entity->setRenderQueueGroup(ALPHA_OBJECTS_QUEUE); entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); entity->setQueryFlags(UNSELECTABLE_OBJECT_MASK); std::string new_material_name = - material_name + "_atmosphere_" + boost::lexical_cast<std::string>(it->first); + material_name + "_" + boost::lexical_cast<std::string>(it->first); Ogre::MaterialPtr material = - Ogre::MaterialManager::getSingleton().getByName(AtmosphereMaterialName(base_name)); + Ogre::MaterialManager::getSingleton().getByName(material_name); material = material->clone(new_material_name); m_planet_assets[it->first].second.push_back(material); - material->getTechnique(0)->getPass(0)->getVertexProgramParameters()->setNamedConstant("light_dir", light_dir); + material->getTechnique(0)->getPass(0)->getVertexProgramParameters()-> + setNamedConstant("light_dir", light_dir); + material->getTechnique(0)->getPass(0)->getTextureUnitState(0)-> + setTextureName(base_name + ".png"); entity->setMaterialName(new_material_name); node->attachObject(entity); } else { - assert(material_name == "atmosphereless_planet"); - material->getTechnique(0)->getPass(0)->getTextureUnitState(2)->setTextureName(base_name + "Normal.png"); - double pop = planet->GetMeter(METER_POPULATION)->Current(); - unsigned int lights_level = NO_CITY_LIGHTS; - const double MIN_POP_FOR_LIGHTS = 5.0; - if (MIN_POP_FOR_LIGHTS < pop) - lights_level = std::fmod(pop - 5.0, (100.0 - MIN_POP_FOR_LIGHTS) / 10.0); - Ogre::TexturePtr texture = PlanetLightsTexture(base_name, lights_level); - m_city_lights_textures.push_back(texture); - material->getTechnique(0)->getPass(0)->getTextureUnitState(3)->setTextureName(texture->getName()); + Ogre::Entity* entity = + m_scene_manager->createEntity(planet_name, "sphere.mesh"); + entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); + std::string new_material_name = + material_name + "_" + boost::lexical_cast<std::string>(it->first); + Ogre::MaterialPtr material = + Ogre::MaterialManager::getSingleton().getByName( + material_name == "planet" ? + PlanetMaterialName(base_name) : + material_name); + material = material->clone(new_material_name); + m_planet_assets[it->first].second.push_back(material); + assert(entity->getNumSubEntities() == 1u); + material->getTechnique(0)->getPass(0)->getVertexProgramParameters()-> + setNamedConstant("light_dir", light_dir); + material->getTechnique(0)->getPass(0)->getTextureUnitState(0)-> + setTextureName(base_name + "Day.png"); + material->getTechnique(0)->getPass(0)->getTextureUnitState(1)-> + setTextureName(base_name + "Night.png"); + entity->setMaterialName(new_material_name); + entity->setCastShadows(true); + node->attachObject(entity); + + m_collision_objects.back().setUserPointer( + static_cast<Ogre::MovableObject*>(entity)); + + if (material_name == "planet") { + material->getTechnique(0)->getPass(0)->getTextureUnitState(2)-> + setTextureName(base_name + "CloudGloss.png"); + entity = m_scene_manager->createEntity( + planet_name + " atmosphere", "sphere.mesh"); + entity->setRenderQueueGroup(ALPHA_OBJECTS_QUEUE); + entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); + entity->setQueryFlags(UNSELECTABLE_OBJECT_MASK); + std::string new_material_name = + material_name + "_atmosphere_" + + boost::lexical_cast<std::string>(it->first); + Ogre::MaterialPtr material = + Ogre::MaterialManager::getSingleton().getByName( + AtmosphereMaterialName(base_name)); + material = material->clone(new_material_name); + m_planet_assets[it->first].second.push_back(material); + material->getTechnique(0)->getPass(0)->getVertexProgramParameters()-> + setNamedConstant("light_dir", light_dir); + entity->setMaterialName(new_material_name); + node->attachObject(entity); + } else { + assert(material_name == "atmosphereless_planet"); + material->getTechnique(0)->getPass(0)->getTextureUnitState(2)-> + setTextureName(base_name + "Normal.png"); + double pop = planet->GetMeter(METER_POPULATION)->Current(); + unsigned int lights_level = NO_CITY_LIGHTS; + const double MIN_POP_FOR_LIGHTS = 5.0; + if (MIN_POP_FOR_LIGHTS < pop) { + lights_level = + std::fmod(pop - 5.0, (100.0 - MIN_POP_FOR_LIGHTS) / 10.0); + } + Ogre::TexturePtr texture = PlanetLightsTexture(base_name, lights_level); + m_city_lights_textures.push_back(texture); + material->getTechnique(0)->getPass(0)->getTextureUnitState(3)-> + setTextureName(texture->getName()); + } } + + m_planet_assets[it->first].first = node; + } else { + const int ASTEROIDS_IN_BELT_AT_FOURTH_ORBIT = 50; + const int ORBITAL_RADIUS = OrbitalRadius(it->first); + const int ASTEROIDS = + ORBITAL_RADIUS / OrbitalRadius(3) * ASTEROIDS_IN_BELT_AT_FOURTH_ORBIT; + + std::string planet_name = + "orbit " + boost::lexical_cast<std::string>(it->first) + " planet"; + + const Ogre::Real DELTA_THETA = 2.0 * 3.1415926 / ASTEROIDS; + Ogre::Real theta = 0.0; + for (int i = 0; i < ASTEROIDS; ++i, theta += DELTA_THETA) { + std::string i_string = boost::lexical_cast<std::string>(i); + Ogre::SceneNode* node = + m_scene_manager->getRootSceneNode()->createChildSceneNode( + planet_name + " node " + i_string); + node->roll(Ogre::Degree(360.0 * RandZeroToOne())); + node->pitch(Ogre::Degree(360.0 * RandZeroToOne())); + node->yaw(Ogre::Degree(360.0 * RandZeroToOne())); + Ogre::Vector3 position(ORBITAL_RADIUS, 0.0, 0.0); + Ogre::Quaternion position_rotation(Ogre::Radian(theta), + Ogre::Vector3::UNIT_Z); + position = position_rotation * position; + // bump position a bit + node->setPosition(position); + + // light comes from the star, and the star is at the origin + Ogre::Vector3 light_dir = -node->getPosition(); + light_dir.normalise(); + light_dir = node->getOrientation().Inverse() * light_dir; + + std::string base_name = + *boost::next(asteroid_sets.begin(), i % asteroid_sets.size()); + + Ogre::Entity* entity = + m_scene_manager->createEntity(planet_name + " " + i_string, + base_name + ".mesh"); + entity->setVisibilityFlags(REGULAR_OBJECTS_MASK); + Ogre::MaterialPtr material = + AsteroidMaterials()[i % AsteroidMaterials().size()]; + std::string new_material_name = planet_name + " material " + i_string; + material = material->clone(new_material_name); + material->getTechnique(0)->getPass(0)->getVertexProgramParameters()-> + setNamedConstant("light_dir", light_dir); + entity->setMaterialName(new_material_name); + entity->setCastShadows(true); + node->attachObject(entity); + } + +#if 0 + // set up a sphere in the collision detection system + m_collision_shapes.push_back(new btSphereShape(planet_radius)); + m_collision_objects.push_back(new btCollisionObject); + btMatrix3x3 identity; + identity.setIdentity(); + m_collision_objects.back().getWorldTransform().setBasis(identity); + m_collision_objects.back().getWorldTransform().setOrigin( + ToCollisionVector(position)); + m_collision_objects.back().setCollisionShape(&m_collision_shapes.back()); + m_collision_world->addCollisionObject(&m_collision_objects.back()); + + m_collision_objects.back().setUserPointer( + static_cast<Ogre::MovableObject*>(entity)); +#endif } - - m_planet_assets[it->first].first = node; } } // create starlane entrance points - for (System::const_lane_iterator it = m_system->begin_lanes(); it != m_system->begin_lanes(); ++it) { + for (System::const_lane_iterator it = m_system->begin_lanes(); + it != m_system->begin_lanes(); + ++it) { // TODO } } |
From: <tz...@us...> - 2009-03-11 03:56:18
|
Revision: 2917 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2917&view=rev Author: tzlaine Date: 2009-03-11 03:56:07 +0000 (Wed, 11 Mar 2009) Log Message: ----------- Fixed some minor things that were bothering me in CombatWnd. - Rewrote the Project() free function to be *much* simpler. - Added attenuation to the "spark" lens flares, so that tehy are much less prominent when zoomed way out. - Fixed the side-flares on the star. They no longer show through the outer edges of objects. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-03-09 02:09:11 UTC (rev 2916) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-03-11 03:56:07 UTC (rev 2917) @@ -104,35 +104,9 @@ Ogre::Vector3 Project(const Ogre::Camera& camera, const Ogre::Vector3& world_pt) { Ogre::Vector3 retval(-5.0, -5.0, 1.0); - - Ogre::Matrix4 modelview_ = camera.getViewMatrix(); - if ((modelview_ * world_pt).z < 0.0) { - GLdouble modelview[16]; - for (std::size_t i = 0; i < 16; ++i) { - modelview[i] = modelview_[i % 4][i / 4]; - } - GLdouble projection[16]; - Ogre::Matrix4 projection_ = camera.getProjectionMatrixWithRSDepth(); - // TODO: Use _m member of transposed projection_ instead of doing - // this "manual" copy. - for (std::size_t i = 0; i < 16; ++i) { - projection[i] = projection_[i % 4][i / 4]; - } - Ogre::Viewport* viewport_ = camera.getViewport(); - GLint viewport[4] = { - static_cast<GLint>(viewport_->getLeft()), - static_cast<GLint>(viewport_->getTop()), - static_cast<GLint>(viewport_->getWidth()), - static_cast<GLint>(viewport_->getHeight()) - }; - GLdouble x, y, z; - if (gluProject(world_pt.x, world_pt.y, world_pt.z, - modelview, projection, viewport, - &x, &y, &z)) { - retval = Ogre::Vector3(x * 2 - 1.0, y * 2 - 1.0, z * 2 - 1.0); - } - } - + Ogre::Vector3 eye_space_pt = camera.getViewMatrix() * world_pt; + if (eye_space_pt.z < 0.0) + retval = camera.getProjectionMatrixWithRSDepth() * eye_space_pt; return retval; } @@ -1130,8 +1104,6 @@ if (!GetOptionsDB().Get<bool>("combat.enable-lens-flare")) return; - // TODO: When zoomed far out, make these lens flares much smaller. - // render two small lens flares that oppose the star's position relative to // the center of the viewport GG::Pt star_pt = ProjectToPixel(*m_camera, Ogre::Vector3(0.0, 0.0, 0.0)); @@ -1142,19 +1114,31 @@ GG::Pt center(Width() / 2, Height() / 2); GG::Pt star_to_center = center - star_pt; - int big_flare_width = static_cast<int>(180 * m_star_brightness_factor); - int small_flare_width = static_cast<int>(120 * m_star_brightness_factor); + const Ogre::Real QUADRATIC_ATTENUATION_FACTOR = 5.0e-6; + Ogre::Real attenuation = + QUADRATIC_ATTENUATION_FACTOR * m_camera->getRealPosition().squaredLength(); - GG::Pt big_flare_ul = center + GG::Pt(star_to_center.x / 2, star_to_center.y / 2) - + int big_flare_width = + static_cast<int>(180 * m_star_brightness_factor / (1 + attenuation)); + int small_flare_width = + static_cast<int>(120 * m_star_brightness_factor / (1 + attenuation)); + + GG::Pt big_flare_ul = + center + GG::Pt(star_to_center.x / 2, star_to_center.y / 2) - GG::Pt(GG::X(big_flare_width / 2), GG::Y(big_flare_width / 2)); - GG::Pt small_flare_ul = center + GG::Pt(3 * star_to_center.x / 4, 3 * star_to_center.y / 4) - + GG::Pt small_flare_ul = + center + GG::Pt(3 * star_to_center.x / 4, 3 * star_to_center.y / 4) - GG::Pt(GG::X(small_flare_width / 2), GG::Y(small_flare_width / 2)); - GG::Pt big_flare_lr = big_flare_ul + GG::Pt(GG::X(big_flare_width), GG::Y(big_flare_width)); - GG::Pt small_flare_lr = small_flare_ul + GG::Pt(GG::X(small_flare_width), GG::Y(small_flare_width)); + GG::Pt big_flare_lr = + big_flare_ul + GG::Pt(GG::X(big_flare_width), GG::Y(big_flare_width)); + GG::Pt small_flare_lr = + small_flare_ul + GG::Pt(GG::X(small_flare_width), GG::Y(small_flare_width)); glBlendFunc(GL_SRC_ALPHA, GL_ONE); - m_big_flare->OrthoBlit(big_flare_ul, big_flare_lr, m_big_flare->DefaultTexCoords()); - m_small_flare->OrthoBlit(small_flare_ul, small_flare_lr, m_small_flare->DefaultTexCoords()); + m_big_flare->OrthoBlit(big_flare_ul, big_flare_lr, + m_big_flare->DefaultTexCoords()); + m_small_flare->OrthoBlit(small_flare_ul, small_flare_lr, + m_small_flare->DefaultTexCoords()); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); } } @@ -1425,15 +1409,18 @@ Ogre::MaterialManager::getSingleton().getByName("backgrounds/star_core"); const Ogre::Real STAR_CORE_SCALE_FACTOR = core_material->getTechnique(0)->getPass(0)->getTextureUnitState(0)->getTextureUScale(); - // HACK! The currently-used star cores only cover part of the texture. Here, we adjust for this, so that the edge - // of the star as it appears onscreen is actually what we use for the star radius below. - const Ogre::Real RADIUS_ADJUSTMENT_FACTOR = 155.0 / 250.0; - const Ogre::Real SAMPLE_INCREMENT = StarRadius() * RADIUS_ADJUSTMENT_FACTOR * STAR_CORE_SCALE_FACTOR / SAMPLES_PER_SIDE; + // HACK! The currently-used star cores only cover part of the texture. + // Here, we adjust for this, so that the edge of the star as it + // appears onscreen is actually what we use for the star radius below. + const Ogre::Real RADIUS_ADJUSTMENT_FACTOR = 0.45; + const Ogre::Real SAMPLE_INCREMENT = + StarRadius() * RADIUS_ADJUSTMENT_FACTOR * STAR_CORE_SCALE_FACTOR / SAMPLES_PER_SIDE; bool occlusions[TOTAL_SAMPLES]; // left side positions for (int i = 0; i < SAMPLES_PER_SIDE; ++i) { - Ogre::Vector3 direction = SUN_CENTER + (SAMPLES_PER_SIDE - i) * SAMPLE_INCREMENT * -RIGHT - CAMERA_POS; + Ogre::Vector3 direction = + SUN_CENTER + (SAMPLES_PER_SIDE - i) * SAMPLE_INCREMENT * -RIGHT - CAMERA_POS; Ogre::Ray ray(CAMERA_POS, direction); RayIntersectionHit hit = RayIntersection(*m_collision_world, ray); occlusions[i] = false; @@ -1457,13 +1444,15 @@ // right side positions for (int i = 0; i < SAMPLES_PER_SIDE; ++i) { - Ogre::Vector3 direction = SUN_CENTER + (i + 1) * SAMPLE_INCREMENT * RIGHT - CAMERA_POS; + Ogre::Vector3 direction = + SUN_CENTER + (i + 1) * SAMPLE_INCREMENT * RIGHT - CAMERA_POS; Ogre::Ray ray(CAMERA_POS, direction); RayIntersectionHit hit = RayIntersection(*m_collision_world, ray); occlusions[SAMPLES_PER_SIDE + 1 + i] = false; if (hit.m_object) { Ogre::Real distance_squared = (hit.m_point - CAMERA_POS).squaredLength(); - occlusions[SAMPLES_PER_SIDE + 1 + i] = distance_squared < direction.squaredLength(); + occlusions[SAMPLES_PER_SIDE + 1 + i] = + distance_squared < direction.squaredLength(); } } @@ -1515,8 +1504,12 @@ }; OcclusionParams occlusion_params = OCCLUSION_PARAMS[occlusion_index]; - m_left_horizontal_flare_scroll_offset = (SAMPLES_PER_SIDE - occlusion_params.get<0>()) * SAMPLE_INCREMENT / RADIUS_ADJUSTMENT_FACTOR / (2.0 * StarRadius()); - m_right_horizontal_flare_scroll_offset = -(SAMPLES_PER_SIDE - occlusion_params.get<1>()) * SAMPLE_INCREMENT / RADIUS_ADJUSTMENT_FACTOR / (2.0 * StarRadius()); + m_left_horizontal_flare_scroll_offset = + (SAMPLES_PER_SIDE - occlusion_params.get<0>()) * SAMPLE_INCREMENT / + RADIUS_ADJUSTMENT_FACTOR / (2.0 * StarRadius()); + m_right_horizontal_flare_scroll_offset = + -(SAMPLES_PER_SIDE - occlusion_params.get<1>()) * SAMPLE_INCREMENT / + RADIUS_ADJUSTMENT_FACTOR / (2.0 * StarRadius()); if (occlusion_params.get<0>() < 0) m_left_horizontal_flare_scroll_offset = 1.0; if (occlusion_params.get<1>() < 0) @@ -1532,12 +1525,14 @@ Ogre::Math::ACos(m_camera->getRealDirection().dotProduct(star_direction)); Ogre::Real BRIGHTNESS_AT_MAX_FOVY = 0.25; Ogre::Real center_nearness_factor = - 1.0 - angle_at_view_center_to_star.valueRadians() / (m_camera->getFOVy() / 2.0).valueRadians(); + 1.0 - angle_at_view_center_to_star.valueRadians() / + (m_camera->getFOVy() / 2.0).valueRadians(); m_star_brightness_factor = BRIGHTNESS_AT_MAX_FOVY + center_nearness_factor * (1.0 - BRIGHTNESS_AT_MAX_FOVY); // Raise the factor to a (smallish) power to create some nonlinearity in the scaling. m_star_brightness_factor = Ogre::Math::Pow(m_star_brightness_factor, 1.5); - m_star_back_billboard->setColour(Ogre::ColourValue(1.0, 1.0, 1.0, m_star_brightness_factor)); + m_star_back_billboard->setColour( + Ogre::ColourValue(1.0, 1.0, 1.0, m_star_brightness_factor)); Ogre::MaterialPtr back_material = Ogre::MaterialManager::getSingleton().getByName("backgrounds/star_back"); |
From: <tz...@us...> - 2009-03-15 21:41:02
|
Revision: 2921 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=2921&view=rev Author: tzlaine Date: 2009-03-15 21:40:39 +0000 (Sun, 15 Mar 2009) Log Message: ----------- Made local const bool TEST_STATIC_OPENSTEER_OBSTACLES in CombatWnd.cpp a macro, so that the test code is not even compiled in when not needed. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2009-03-15 19:26:29 UTC (rev 2920) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2009-03-15 21:40:39 UTC (rev 2921) @@ -56,8 +56,9 @@ #include <boost/system/system_error.hpp> +#define TEST_STATIC_OPENSTEER_OBSTACLES 0 + namespace { - const bool TEST_STATIC_OPENSTEER_OBSTACLES = false; PathingEngine g_pathing_engine; std::map<const OpenSteer::AbstractObstacle*, std::string> g_obstacle_names; class FakeVehicle : public OpenSteer::SimpleVehicle @@ -821,13 +822,13 @@ planets.push_back(new Planet(planet_types[8], planet_sizes[8])); planets.push_back(new Planet(planet_types[9], planet_sizes[9])); - if (TEST_STATIC_OPENSTEER_OBSTACLES) { - OpenSteer::AbstractObstacle* o = - new OpenSteer::SphereObstacle(STAR_RADIUS_ADJUSTMENT_FACTOR * StarRadius(), - OpenSteer::Vec3()); - g_obstacle_names[o] = "Star"; - g_pathing_engine.AddObstacle(o); - } +#if TEST_STATIC_OPENSTEER_OBSTACLES + OpenSteer::AbstractObstacle* o = + new OpenSteer::SphereObstacle(STAR_RADIUS_ADJUSTMENT_FACTOR * StarRadius(), + OpenSteer::Vec3()); + g_obstacle_names[o] = "Star"; + g_pathing_engine.AddObstacle(o); +#endif System system(star_type, planets.size(), "Sample", 0.0, 0.0); std::map<int, UniverseObject*> combat_universe; @@ -837,27 +838,27 @@ combat_universe[planet_ids[i]] = planet; system.Insert(planet_ids[i], i); assert(system.Contains(i)); - if (TEST_STATIC_OPENSTEER_OBSTACLES) { - double orbit_radius = OrbitalRadius(i); - if (planet->Type() == PT_ASTEROIDS) { - OpenSteer::AbstractObstacle* o = - new AsteroidBeltObstacle(orbit_radius, AsteroidBeltRadius()); - g_obstacle_names[o] = - "Asteroids in orbit " + boost::lexical_cast<std::string>(i); - g_pathing_engine.AddObstacle(o); - } else { - double rads = - planet->OrbitalPositionOnTurn(ClientApp::GetApp()->CurrentTurn()); - OpenSteer::Vec3 position(orbit_radius * std::cos(rads), - orbit_radius * std::sin(rads), - 0); - OpenSteer::AbstractObstacle* o = - new OpenSteer::SphereObstacle(PlanetRadius(planet->Size()), position); - g_obstacle_names[o] = - "Planet in orbit " + boost::lexical_cast<std::string>(i); - g_pathing_engine.AddObstacle(o); - } +#if TEST_STATIC_OPENSTEER_OBSTACLES + double orbit_radius = OrbitalRadius(i); + if (planet->Type() == PT_ASTEROIDS) { + OpenSteer::AbstractObstacle* o = + new AsteroidBeltObstacle(orbit_radius, AsteroidBeltRadius()); + g_obstacle_names[o] = + "Asteroids in orbit " + boost::lexical_cast<std::string>(i); + g_pathing_engine.AddObstacle(o); + } else { + double rads = + planet->OrbitalPositionOnTurn(ClientApp::GetApp()->CurrentTurn()); + OpenSteer::Vec3 position(orbit_radius * std::cos(rads), + orbit_radius * std::sin(rads), + 0); + OpenSteer::AbstractObstacle* o = + new OpenSteer::SphereObstacle(PlanetRadius(planet->Size()), position); + g_obstacle_names[o] = + "Planet in orbit " + boost::lexical_cast<std::string>(i); + g_pathing_engine.AddObstacle(o); } +#endif } InitCombat(&system, combat_universe); @@ -1159,21 +1160,21 @@ glEnable(GL_TEXTURE_2D); } - if (TEST_STATIC_OPENSTEER_OBSTACLES) { - glDisable(GL_TEXTURE_2D); - glColor4f(1.0, 0.0, 0.0, 0.67); - glBegin(GL_QUADS); - glVertex(GG::GUI::GetGUI()->AppWidth() / 2 - 1, - GG::GUI::GetGUI()->AppHeight() / 2 - 1); - glVertex(GG::GUI::GetGUI()->AppWidth() / 2 - 1, - GG::GUI::GetGUI()->AppHeight() / 2 + 1); - glVertex(GG::GUI::GetGUI()->AppWidth() / 2 + 1, - GG::GUI::GetGUI()->AppHeight() / 2 + 1); - glVertex(GG::GUI::GetGUI()->AppWidth() / 2 + 1, - GG::GUI::GetGUI()->AppHeight() / 2 - 1); - glEnd(); - glEnable(GL_TEXTURE_2D); - } +#if TEST_STATIC_OPENSTEER_OBSTACLES + glDisable(GL_TEXTURE_2D); + glColor4f(1.0, 0.0, 0.0, 0.67); + glBegin(GL_QUADS); + glVertex(GG::GUI::GetGUI()->AppWidth() / 2 - 1, + GG::GUI::GetGUI()->AppHeight() / 2 - 1); + glVertex(GG::GUI::GetGUI()->AppWidth() / 2 - 1, + GG::GUI::GetGUI()->AppHeight() / 2 + 1); + glVertex(GG::GUI::GetGUI()->AppWidth() / 2 + 1, + GG::GUI::GetGUI()->AppHeight() / 2 + 1); + glVertex(GG::GUI::GetGUI()->AppWidth() / 2 + 1, + GG::GUI::GetGUI()->AppHeight() / 2 - 1); + glEnd(); + glEnable(GL_TEXTURE_2D); +#endif } void CombatWnd::RenderLensFlare() @@ -1468,25 +1469,25 @@ m_camera->pitch(m_pitch); m_camera->moveRelative(Ogre::Vector3(0, 0, m_distance_to_look_at_point)); UpdateStarFromCameraPosition(); - if (TEST_STATIC_OPENSTEER_OBSTACLES) { - std::cout << "testing...\n"; - Ogre::Ray ray = m_camera->getCameraToViewportRay(0.5, 0.5); - FakeVehicle vehicle; - vehicle.reset(); - vehicle.regenerateOrthonormalBasis(ToOpenSteer(ray.getDirection()), - OpenSteer::Vec3(0, 0, 1)); - vehicle.setPosition(ToOpenSteer(ray.getOrigin())); - const PathingEngine::ObstacleVec& obstacles = g_pathing_engine.m_obstacles; - for (PathingEngine::ObstacleVec::const_iterator it = obstacles.begin(); - it != obstacles.end(); - ++it) { - OpenSteer::AbstractObstacle::PathIntersection pi; - it->findIntersectionWithVehiclePath(vehicle, pi); - if (pi.intersect) - std::cout << " Hit " << g_obstacle_names[&*it] << "\n"; - } - std::cerr << '\n'; +#if TEST_STATIC_OPENSTEER_OBSTACLES + std::cout << "testing...\n"; + Ogre::Ray ray = m_camera->getCameraToViewportRay(0.5, 0.5); + FakeVehicle vehicle; + vehicle.reset(); + vehicle.regenerateOrthonormalBasis(ToOpenSteer(ray.getDirection()), + OpenSteer::Vec3(0, 0, 1)); + vehicle.setPosition(ToOpenSteer(ray.getOrigin())); + const PathingEngine::ObstacleVec& obstacles = g_pathing_engine.m_obstacles; + for (PathingEngine::ObstacleVec::const_iterator it = obstacles.begin(); + it != obstacles.end(); + ++it) { + OpenSteer::AbstractObstacle::PathIntersection pi; + it->findIntersectionWithVehiclePath(vehicle, pi); + if (pi.intersect) + std::cout << " Hit " << g_obstacle_names[&*it] << "\n"; } + std::cerr << '\n'; +#endif } void CombatWnd::UpdateStarFromCameraPosition() |
From: <tz...@us...> - 2010-03-11 03:15:47
|
Revision: 3384 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3384&view=rev Author: tzlaine Date: 2010-03-11 03:15:41 +0000 (Thu, 11 Mar 2010) Log Message: ----------- Extension of 3382. Now, instead of ignoring double clicks that are too far from the originiating/first click, the double click is treated as a regular click. Before this change, it seemed as though regular clicks were being lost while rapidly clicking around. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-03-10 05:08:49 UTC (rev 3383) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-03-11 03:15:41 UTC (rev 3384) @@ -1414,18 +1414,20 @@ void CombatWnd::LDoubleClick(const GG::Pt& pt, GG::Flags<GG::ModKey> mod_keys) { - if (!m_mouse_dragged && - CloseTo(pt, m_last_click_pos) && - !m_camera_animation->hasNodeTrack(LOOKAT_NODE_TRACK_HANDLE)) { - if (Ogre::MovableObject* movable_object = GetObjectUnderPt(pt)) { - Ogre::SceneNode* clicked_scene_node = movable_object->getParentSceneNode(); - assert(clicked_scene_node); - LookAt(clicked_scene_node); - } else { - std::pair<bool, Ogre::Vector3> intersection = IntersectMouseWithEcliptic(pt); - if (intersection.first) - LookAt(intersection.second); + if (CloseTo(pt, m_last_click_pos)) { + if (!m_mouse_dragged && !m_camera_animation->hasNodeTrack(LOOKAT_NODE_TRACK_HANDLE)) { + if (Ogre::MovableObject* movable_object = GetObjectUnderPt(pt)) { + Ogre::SceneNode* clicked_scene_node = movable_object->getParentSceneNode(); + assert(clicked_scene_node); + LookAt(clicked_scene_node); + } else { + std::pair<bool, Ogre::Vector3> intersection = IntersectMouseWithEcliptic(pt); + if (intersection.first) + LookAt(intersection.second); + } } + } else { + LClick(pt, mod_keys); } m_last_click_pos = GG::Pt(); } |
From: <geo...@us...> - 2010-03-27 18:01:53
|
Revision: 3408 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3408&view=rev Author: geoffthemedio Date: 2010-03-27 18:01:47 +0000 (Sat, 27 Mar 2010) Log Message: ----------- Small patch by tomboy64 to remove the dependence in CombatWnd.cpp for Boost GIL headers to be located within the GG directory which was required to be located within the FreeOrion directory. Now the GIL headers are found within the Boost headers directory. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-03-26 02:41:29 UTC (rev 3407) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-03-27 18:01:47 UTC (rev 3408) @@ -52,8 +52,8 @@ #include <btBulletCollisionCommon.h> #include <GG/GUI.h> -#include "../GG/src/GIL/image.hpp" -#include "../GG/src/GIL/extension/io/png_dynamic_io.hpp" +#include "boost/gil/image.hpp" +#include "boost/gil/extension/io/png_dynamic_io.hpp" #include <boost/cast.hpp> #include <boost/algorithm/string/case_conv.hpp> |
From: <tz...@us...> - 2010-04-14 17:42:11
|
Revision: 3490 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3490&view=rev Author: tzlaine Date: 2010-04-14 17:42:05 +0000 (Wed, 14 Apr 2010) Log Message: ----------- Tweaks to camera behavior in CombatWnd: far clipping plane moved back so that the far side of the system is never clipped; double-clicks on non-objects clears the current "look-at" object, so that zooming works as designed before you click on any object; and the minimum zoom distance is set to the radius of the largest planet type plus a 5% margin. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-14 16:47:00 UTC (rev 3489) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-14 17:42:05 UTC (rev 3490) @@ -99,10 +99,10 @@ const GG::Pt INVALID_SELECTION_DRAG_POS(-GG::X1, -GG::Y1); const Ogre::Real NEAR_CLIP = 0.01; - const Ogre::Real FAR_CLIP = 3020.0; + const Ogre::Real FAR_CLIP = 3.0 * SystemRadius(); const Ogre::Real MAX_ZOOM_OUT_DISTANCE = 2.0 * SystemRadius(); - const Ogre::Real MIN_ZOOM_IN_DISTANCE = 0.5; + const Ogre::Real MIN_ZOOM_IN_DISTANCE = PlanetRadius(SZ_GASGIANT) * 1.05; // collision dection system params btVector3 WORLD_AABB_MIN(-SystemRadius(), -SystemRadius(), -SystemRadius() / 10.0); @@ -1417,10 +1417,16 @@ { Ogre::Sphere bounding_sphere(Ogre::Vector3(), 0.0); if (m_look_at_scene_node) + {std::cerr << m_look_at_scene_node->getName() << " " + << m_look_at_scene_node->getAttachedObject(0)->getWorldBoundingSphere().getRadius() << '\n'; bounding_sphere = m_look_at_scene_node->getAttachedObject(0)->getWorldBoundingSphere(); + } const Ogre::Real EFFECTIVE_MIN_DISTANCE = std::max(bounding_sphere.getRadius() * Ogre::Real(1.05), MIN_ZOOM_IN_DISTANCE); + std::cerr << "MIN_ZOOM_IN_DISTANCE=" << MIN_ZOOM_IN_DISTANCE << '\n' + << "EFFECTIVE_MIN_DISTANCE=" << EFFECTIVE_MIN_DISTANCE << '\n'; + Ogre::Real move_incr = m_distance_to_look_at_point * 0.25; Ogre::Real scale_factor = 1.0; if (mod_keys & GG::MOD_KEY_SHIFT) @@ -1487,8 +1493,10 @@ LookAtNode(clicked_scene_node); } else { std::pair<bool, Ogre::Vector3> intersection = IntersectMouseWithEcliptic(pt); - if (intersection.first) + if (intersection.first) { + m_look_at_scene_node = 0; LookAtPosition(intersection.second); + } } } } else { |
From: <tz...@us...> - 2010-04-14 17:48:36
|
Revision: 3491 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3491&view=rev Author: tzlaine Date: 2010-04-14 17:48:30 +0000 (Wed, 14 Apr 2010) Log Message: ----------- Removed instrumentation accidentally committed in the previous commit, and increased the far clip distance a bit more; it was not working at the lowest zoom level. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-14 17:42:05 UTC (rev 3490) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-14 17:48:30 UTC (rev 3491) @@ -99,7 +99,7 @@ const GG::Pt INVALID_SELECTION_DRAG_POS(-GG::X1, -GG::Y1); const Ogre::Real NEAR_CLIP = 0.01; - const Ogre::Real FAR_CLIP = 3.0 * SystemRadius(); + const Ogre::Real FAR_CLIP = 4.0 * SystemRadius(); const Ogre::Real MAX_ZOOM_OUT_DISTANCE = 2.0 * SystemRadius(); const Ogre::Real MIN_ZOOM_IN_DISTANCE = PlanetRadius(SZ_GASGIANT) * 1.05; @@ -1417,16 +1417,10 @@ { Ogre::Sphere bounding_sphere(Ogre::Vector3(), 0.0); if (m_look_at_scene_node) - {std::cerr << m_look_at_scene_node->getName() << " " - << m_look_at_scene_node->getAttachedObject(0)->getWorldBoundingSphere().getRadius() << '\n'; bounding_sphere = m_look_at_scene_node->getAttachedObject(0)->getWorldBoundingSphere(); - } const Ogre::Real EFFECTIVE_MIN_DISTANCE = std::max(bounding_sphere.getRadius() * Ogre::Real(1.05), MIN_ZOOM_IN_DISTANCE); - std::cerr << "MIN_ZOOM_IN_DISTANCE=" << MIN_ZOOM_IN_DISTANCE << '\n' - << "EFFECTIVE_MIN_DISTANCE=" << EFFECTIVE_MIN_DISTANCE << '\n'; - Ogre::Real move_incr = m_distance_to_look_at_point * 0.25; Ogre::Real scale_factor = 1.0; if (mod_keys & GG::MOD_KEY_SHIFT) |
From: <tz...@us...> - 2010-04-15 18:01:14
|
Revision: 3505 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3505&view=rev Author: tzlaine Date: 2010-04-15 18:01:07 +0000 (Thu, 15 Apr 2010) Log Message: ----------- Corrected CombatWnd::GetShipMaterial(), which was coloring all ships in the palyer's color, instead of in their respective owners' colors. This fixes the "bug" noted in an earlier commit about enemy ships not showing up. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-15 16:27:49 UTC (rev 3504) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-15 18:01:07 UTC (rev 3505) @@ -1964,7 +1964,8 @@ modified_material->getTechnique(0)->getPass(1)->getFragmentProgramParameters()-> setNamedConstant("skybox_light_color", GetSystemColor("sky_box_1")); - GG::Clr color = Empires().Lookup(ClientApp::GetApp()->PlayerID())->Color(); + assert(ship.Owners().size() == 1u); + GG::Clr color = Empires().Lookup(*ship.Owners().begin())->Color(); modified_material->getTechnique(0)->getPass(1)->getFragmentProgramParameters()-> setNamedConstant("decal_color", Ogre::Vector3(color.r / 255.0, color.g / 255.0, color.b / 255.0)); |
From: <tz...@us...> - 2010-04-15 18:23:16
|
Revision: 3506 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3506&view=rev Author: tzlaine Date: 2010-04-15 18:23:10 +0000 (Thu, 15 Apr 2010) Log Message: ----------- Fixed broken box-selection code. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-15 18:01:07 UTC (rev 3505) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-15 18:23:10 UTC (rev 3506) @@ -1881,12 +1881,12 @@ const GG::X APP_WIDTH = GG::GUI::GetGUI()->AppWidth(); const GG::Y APP_HEIGHT = GG::GUI::GetGUI()->AppHeight(); - float left = Value(std::min(m_selection_drag_start.x, m_selection_drag_stop.x) / APP_WIDTH); - float right = Value(std::max(m_selection_drag_start.x, m_selection_drag_stop.x) / APP_WIDTH); - float top = Value(std::min(m_selection_drag_start.y, m_selection_drag_stop.y) / APP_HEIGHT); - float bottom = Value(std::max(m_selection_drag_start.y, m_selection_drag_stop.y) / APP_HEIGHT); + double left = Value(1.0 * std::min(m_selection_drag_start.x, m_selection_drag_stop.x) / APP_WIDTH); + double right = Value(1.0 * std::max(m_selection_drag_start.x, m_selection_drag_stop.x) / APP_WIDTH); + double top = Value(1.0 * std::min(m_selection_drag_start.y, m_selection_drag_stop.y) / APP_HEIGHT); + double bottom = Value(1.0 * std::max(m_selection_drag_start.y, m_selection_drag_stop.y) / APP_HEIGHT); - const float MIN_SELECTION_VOLUME = 0.0001; + const double MIN_SELECTION_VOLUME = 0.0001; if ((right - left) * (bottom - top) < MIN_SELECTION_VOLUME) return; |
From: <tz...@us...> - 2010-04-23 18:50:40
|
Revision: 3530 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3530&view=rev Author: tzlaine Date: 2010-04-23 18:50:34 +0000 (Fri, 23 Apr 2010) Log Message: ----------- Implemented smooth zoom-out. Still needs tweaking, in the same way alluded to for zoom-panning in the previous commit. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-23 18:33:33 UTC (rev 3529) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-23 18:50:34 UTC (rev 3530) @@ -119,16 +119,18 @@ const Ogre::uint32 UNSELECTABLE_OBJECT_MASK = 1 << 0; // The time it takes to recenter on a new point, in seconds. - const Ogre::Real CAMERA_RECENTER_TIME = 0.33333; + const Ogre::Real CAMERA_MOVE_TIME = 0.33333; + const int CAMERA_ANIMATION_STEPS = 8; + const Ogre::Real TIME_INCREMENT = CAMERA_MOVE_TIME / CAMERA_ANIMATION_STEPS; - const unsigned int NO_CITY_LIGHTS = std::numeric_limits<unsigned int>::max(); - - const Ogre::Real IGNORE_DISTANCE = FLT_MAX; - const unsigned short CAMERA_NODE_TRACK_HANDLE = 0; const unsigned short DISTANCE_TRACK_HANDLE = 1; const unsigned short CAMERA_TRACK_HANDLE = 2; + const Ogre::Real IGNORE_DISTANCE = FLT_MAX; + + const unsigned int NO_CITY_LIGHTS = std::numeric_limits<unsigned int>::max(); + // HACK! The currently-used star cores only cover part of the texture. // Here, we adjust for this, so that the edge of the star as it appears // onscreen is actually what we use for the star radius below. @@ -739,7 +741,7 @@ m_camera_node(m_scene_manager->getRootSceneNode()->createChildSceneNode()), m_viewport(viewport), m_volume_scene_query(m_scene_manager->createPlaneBoundedVolumeQuery(Ogre::PlaneBoundedVolumeList())), - m_camera_animation(m_scene_manager->createAnimation("CameraTrack", CAMERA_RECENTER_TIME)), + m_camera_animation(m_scene_manager->createAnimation("CameraTrack", CAMERA_MOVE_TIME)), m_camera_animation_state(m_scene_manager->createAnimationState("CameraTrack")), m_distance_to_look_at_point(SystemRadius() / 2.0), m_pitch(0.0), @@ -1478,56 +1480,37 @@ { if (distance == IGNORE_DISTANCE) distance = m_distance_to_look_at_point; - else - m_camera_animation->destroyAllTracks(); + // We interpolate three things in our animation: the position of + // m_camera_node, which always stays on the ecliptic; the value of + // m_distance_to_look_at_point, which determines how far back m_camera is + // from its parent m_camera_node; and the parent-relative position of + // m_camera (which includes the interpolated value of + // m_distance_to_look_at_point). The latter two are interpolated in + // ZoomImpl(). It is necessary to track m_distance_to_look_at_point + // separately, so that we can maintain its value during animated camera + // moves, even if we interrupt an animation in the middle to start a new + // one (as we do when the user rapidly rolls the mouse wheel). + + ZoomImpl(distance - m_distance_to_look_at_point); + Ogre::Vector3 node_start = m_look_at_point; Ogre::Vector3 node_stop = look_at_point; - Ogre::Vector3 camera_start = CameraPositionAndOrientation(m_distance_to_look_at_point).first; - Ogre::Vector3 camera_stop = CameraPositionAndOrientation(distance).first; - const Ogre::Vector3 NODE_POS_DELTA = node_stop - node_start; - const Ogre::Real DISTANCE_DELTA = distance - m_distance_to_look_at_point; - const Ogre::Vector3 CAMERA_DELTA = camera_stop - camera_start; m_look_at_point = look_at_point; - // We interpolate three things in our animation: the position of - // m_camera_node, which always stays on the ecliptic; the value of - // m_distance_to_look_at_point, which determines how far back m_camera is - // from its parent m_camera_node; and the parent-relative position of - // m_camera (which includes the interpolated value of - // m_distance_to_look_at_point). It is necessary to track - // m_distance_to_look_at_point separately, so that we can maintain its - // value during animated camera moves, even if we interrupt an animation - // in the middle to start a new one (as we do when the user rapidly rolls - // the mouse wheel). - m_camera_animation_state->setTimePosition(0.0); Ogre::NodeAnimationTrack* node_track = m_camera_animation->createNodeTrack(CAMERA_NODE_TRACK_HANDLE, m_camera_node); - Ogre::AnimableValuePtr animable_distance(new AnimableReal(m_distance_to_look_at_point)); - Ogre::NumericAnimationTrack* distance_track = - m_camera_animation->createNumericTrack(DISTANCE_TRACK_HANDLE, animable_distance); - Ogre::AnimableValuePtr animable_camera_pos(new AnimableCamera(*m_camera, camera_start)); - Ogre::NumericAnimationTrack* camera_track = - m_camera_animation->createNumericTrack(CAMERA_TRACK_HANDLE, animable_camera_pos); - const int STEPS = 8; - const Ogre::Real TIME_INCREMENT = CAMERA_RECENTER_TIME / STEPS; - const Ogre::Vector3 NODE_POS_INCREMENT = NODE_POS_DELTA / STEPS; - const Ogre::Real DISTANCE_INCREMENT = DISTANCE_DELTA / STEPS; - const Ogre::Vector3 CAMERA_INCREMENT = CAMERA_DELTA / STEPS; + const Ogre::Vector3 NODE_POS_INCREMENT = NODE_POS_DELTA / CAMERA_ANIMATION_STEPS; // the loop extends an extra 2 steps in either direction, to // ensure smoothness (since splines are being used) - for (int i = -2; i < STEPS + 2; ++i) { + for (int i = -2; i < CAMERA_ANIMATION_STEPS + 2; ++i) { Ogre::TransformKeyFrame* node_key = node_track->createNodeKeyFrame(i * TIME_INCREMENT); node_key->setTranslate(node_stop - NODE_POS_DELTA + i * NODE_POS_INCREMENT); - Ogre::NumericKeyFrame* distance_key = distance_track->createNumericKeyFrame(i * TIME_INCREMENT); - distance_key->setValue(distance - DISTANCE_DELTA + i * DISTANCE_INCREMENT); - Ogre::NumericKeyFrame* camera_key = camera_track->createNumericKeyFrame(i * TIME_INCREMENT); - camera_key->setValue(camera_stop - CAMERA_DELTA + i * CAMERA_INCREMENT); } } @@ -1551,8 +1534,35 @@ void CombatWnd::ZoomImpl(Ogre::Real total_move) { - m_distance_to_look_at_point = ZoomResult(total_move); - UpdateCameraPosition(); + m_camera_animation->destroyAllTracks(); + + Ogre::Real distance = ZoomResult(total_move); + + Ogre::Vector3 camera_start = CameraPositionAndOrientation(m_distance_to_look_at_point).first; + Ogre::Vector3 camera_stop = CameraPositionAndOrientation(distance).first; + + const Ogre::Real DISTANCE_DELTA = distance - m_distance_to_look_at_point; + const Ogre::Vector3 CAMERA_DELTA = camera_stop - camera_start; + + m_camera_animation_state->setTimePosition(0.0); + Ogre::AnimableValuePtr animable_distance(new AnimableReal(m_distance_to_look_at_point)); + Ogre::NumericAnimationTrack* distance_track = + m_camera_animation->createNumericTrack(DISTANCE_TRACK_HANDLE, animable_distance); + Ogre::AnimableValuePtr animable_camera_pos(new AnimableCamera(*m_camera, camera_start)); + Ogre::NumericAnimationTrack* camera_track = + m_camera_animation->createNumericTrack(CAMERA_TRACK_HANDLE, animable_camera_pos); + + const Ogre::Real DISTANCE_INCREMENT = DISTANCE_DELTA / CAMERA_ANIMATION_STEPS; + const Ogre::Vector3 CAMERA_INCREMENT = CAMERA_DELTA / CAMERA_ANIMATION_STEPS; + + // the loop extends an extra 2 steps in either direction, to + // ensure smoothness (since splines are being used) + for (int i = -2; i < CAMERA_ANIMATION_STEPS + 2; ++i) { + Ogre::NumericKeyFrame* distance_key = distance_track->createNumericKeyFrame(i * TIME_INCREMENT); + distance_key->setValue(distance - DISTANCE_DELTA + i * DISTANCE_INCREMENT); + Ogre::NumericKeyFrame* camera_key = camera_track->createNumericKeyFrame(i * TIME_INCREMENT); + camera_key->setValue(camera_stop - CAMERA_DELTA + i * CAMERA_INCREMENT); + } } void CombatWnd::HandleRotation(const GG::Pt& delta) |
From: <tz...@us...> - 2010-04-28 21:00:23
|
Revision: 3557 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3557&view=rev Author: tzlaine Date: 2010-04-28 21:00:17 +0000 (Wed, 28 Apr 2010) Log Message: ----------- Hid the CombatWnd Turn button during combat setup. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-28 20:55:11 UTC (rev 3556) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-28 21:00:17 UTC (rev 3557) @@ -716,6 +716,7 @@ m_end_turn_button->MoveTo( GG::Pt(GG::X(5), GG::GUI::GetGUI()->AppHeight() - m_end_turn_button->Height() - GG::Y(5))); GG::Connect(m_end_turn_button->ClickedSignal, boost::bind(&CombatWnd::EndTurn, this)); + m_end_turn_button->Hide(); AttachChild(m_end_turn_button); AttachChild(m_fps_text); @@ -1159,6 +1160,8 @@ m_end_turn_button->Disable(false); m_time_since_last_turn_update = 0.0; + m_end_turn_button->Show(); + // TODO: Handle object removals. } |
From: <tz...@us...> - 2010-04-30 04:03:10
|
Revision: 3567 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3567&view=rev Author: tzlaine Date: 2010-04-30 04:03:04 +0000 (Fri, 30 Apr 2010) Log Message: ----------- Removed certain bits of testing cruft from CombatWnd. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-30 04:02:20 UTC (rev 3566) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-30 04:03:04 UTC (rev 3567) @@ -1059,22 +1059,6 @@ position, yaw, scale ); } - -#if 0 - // set up a sphere in the collision detection system - m_collision_shapes.push_back(new btSphereShape(planet_radius)); - m_collision_objects.push_back(new btCollisionObject); - btMatrix3x3 identity; - identity.setIdentity(); - m_collision_objects.back().getWorldTransform().setBasis(identity); - m_collision_objects.back().getWorldTransform().setOrigin( - ToCollision(position)); - m_collision_objects.back().setCollisionShape(&m_collision_shapes.back()); - m_collision_world->addCollisionObject(&m_collision_objects.back()); - - m_collision_objects.back().setUserPointer( - static_cast<Ogre::MovableObject*>(entity)); -#endif } } } @@ -1118,16 +1102,6 @@ void CombatWnd::CombatTurnUpdate(CombatData& combat_data) { -#if 0 // TODO: this may be necessary when not in turn-at-a-time mode - if (!m_combat_order_set.empty()) { - HumanClientApp::GetApp()->Networking().SendMessage( - CombatTurnOrdersMessage( - HumanClientApp::GetApp()->PlayerID(), - m_combat_order_set)); - m_combat_order_set.clear(); - } -#endif - m_combat_data = &combat_data; if (m_combat_setup_wnd) { @@ -1164,20 +1138,6 @@ void CombatWnd::Render() { -#if 0 // TODO: Remove this. It makes the planets all rotate, to test normal and parallax mapping. - for (std::map<int, std::pair<Ogre::SceneNode*, std::vector<Ogre::MaterialPtr> > >::iterator it = - m_planet_assets.begin(); - it != m_planet_assets.end(); - ++it) { - it->second.first->yaw(Ogre::Radian(3.14159 / 180.0 / 3.0)); - } - for (std::map<int, ShipData>::iterator it = m_ship_assets.begin(); - it != m_ship_assets.end(); - ++it) { - it->second.get<0>()->yaw(Ogre::Radian(3.14159 / 180.0 / 3.0)); - } -#endif - RenderLensFlare(); if (m_selection_rect.ul != m_selection_rect.lr) { @@ -1900,12 +1860,6 @@ m_collision_objects.insert(collision_object); btMatrix3x3 identity; identity.setIdentity(); -#if 0 - // TODO: Remove this when it's removal can be verified as correct - // (i.e. after placement of ships is implemented). - btMatrix3x3 scaled = identity.scaled(btVector3(1.0, 1.0, -1.0)); - collision_object->getWorldTransform().setBasis(scaled); -#endif collision_object->getWorldTransform().setOrigin(ToCollision(node->getPosition())); collision_object->getWorldTransform().setRotation(ToCollision(node->getOrientation())); collision_object->setCollisionShape(collision_shape); |
From: <tz...@us...> - 2010-04-30 20:00:23
|
Revision: 3571 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3571&view=rev Author: tzlaine Date: 2010-04-30 20:00:13 +0000 (Fri, 30 Apr 2010) Log Message: ----------- Fixed the bug that was causing all (or at least nearly all) of the disagreement between the server and client object positions. The CombatObject added as user data to each Ogre::SceneNode was not being set to the new incoming CombatObject in CombatWnd::CombatTurnUpdate(), causing old object state to be used. This is now fixed. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-30 15:16:49 UTC (rev 3570) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2010-04-30 20:00:13 UTC (rev 3571) @@ -1118,10 +1118,12 @@ combat_ship->SetListener(*this); Ship& ship = combat_ship->GetShip(); std::map<int, ShipData>::iterator ship_data_it = m_ship_assets.find(ship.ID()); - if (ship_data_it == m_ship_assets.end()) + if (ship_data_it == m_ship_assets.end()) { AddCombatShip(combat_ship); - else + } else { + ship_data_it->second.m_node->setUserAny(Ogre::Any(*it)); UpdateObjectPosition(*it); + } } } |
From: <geo...@us...> - 2011-02-20 23:56:33
|
Revision: 3985 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=3985&view=rev Author: geoffthemedio Date: 2011-02-20 23:56:27 +0000 (Sun, 20 Feb 2011) Log Message: ----------- CombatWnd.cpp minor code groominging / layout tweak. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2011-02-20 23:55:54 UTC (rev 3984) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2011-02-20 23:56:27 UTC (rev 3985) @@ -407,14 +407,10 @@ void AddOptions(OptionsDB& db) { db.AddFlag("tech-demo", "OPTIONS_DB_TECH_DEMO", false); - db.Add("combat.enable-glow", "OPTIONS_DB_COMBAT_ENABLE_GLOW", - true, Validator<bool>()); - db.Add("combat.enable-skybox", "OPTIONS_DB_COMBAT_ENABLE_SKYBOX", - true, Validator<bool>()); - db.Add("combat.enable-lens-flare", "OPTIONS_DB_COMBAT_ENABLE_LENS_FLARE", - true, Validator<bool>()); - db.Add("combat.filled-selection", "OPTIONS_DB_COMBAT_FILLED_SELECTION", - false, Validator<bool>()); + db.Add("combat.enable-glow", "OPTIONS_DB_COMBAT_ENABLE_GLOW", true, Validator<bool>()); + db.Add("combat.enable-skybox", "OPTIONS_DB_COMBAT_ENABLE_SKYBOX", true, Validator<bool>()); + db.Add("combat.enable-lens-flare", "OPTIONS_DB_COMBAT_ENABLE_LENS_FLARE", true, Validator<bool>()); + db.Add("combat.filled-selection", "OPTIONS_DB_COMBAT_FILLED_SELECTION", false, Validator<bool>()); } bool temp_bool = RegisterOptions(&AddOptions); } |
From: <geo...@us...> - 2011-06-20 01:36:22
|
Revision: 4002 http://freeorion.svn.sourceforge.net/freeorion/revision/?rev=4002&view=rev Author: geoffthemedio Date: 2011-06-20 01:36:16 +0000 (Mon, 20 Jun 2011) Log Message: ----------- Made PagedGeometry save imposter files in PagedGeometry directory within user directory, so as to avoid default location in the binary directory, which is generally not appropriate to modify. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2011-06-19 07:28:55 UTC (rev 4001) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2011-06-20 01:36:16 UTC (rev 4002) @@ -19,6 +19,7 @@ #include "../util/MultiplayerCommon.h" #include "../util/OptionsDB.h" #include "../util/Version.h" +#include "../util/Directories.h" #include "OptionsWnd.h" // TODO: Remove this later, once the InGameMenu is in use for F10 presses instead. @@ -370,6 +371,7 @@ { if (!paged_geometry) { paged_geometry = new Forests::PagedGeometry; + paged_geometry->setTempDir((GetUserDir() / "PagedGeometry").string() + "/"); // PagedGeometry internally saves by to tempdir + fileNamePNG so the "/" must be specified here to make "PagedGeometry" a directory and not a prefix to the filename paged_geometry->setCoordinateSystem(Ogre::Vector3::UNIT_Z); paged_geometry->setCamera(camera); paged_geometry->setPageSize(250); @@ -673,6 +675,12 @@ } } + // Also add resource path for user directory + boost::filesystem::path pg_dir(GetUserDir() / "PagedGeometry"); + if (!exists(pg_dir)) + boost::filesystem::create_directories(pg_dir); + Ogre::ResourceGroupManager::getSingleton().addResourceLocation(pg_dir.string(), "FileSystem", "General"); + // Initialise, parse scripts etc Ogre::ResourceGroupManager::getSingleton().initialiseAllResourceGroups(); |
From: <mar...@us...> - 2013-08-23 13:39:12
|
Revision: 6369 http://sourceforge.net/p/freeorion/code/6369 Author: marcel_metz Date: 2013-08-23 13:39:09 +0000 (Fri, 23 Aug 2013) Log Message: ----------- Reenable --tech-demo client parameter. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2013-08-23 12:52:11 UTC (rev 6368) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2013-08-23 13:39:09 UTC (rev 6369) @@ -816,31 +816,28 @@ #endif // a sample system - std::vector<Planet*> planets; - // This code is basically never used, and it's in my way right now, so I'm just commenting it out. ~ Bigjoe5 - //planets.push_back(new Planet(planet_types[0], planet_sizes[0])); - //planets.push_back(new Planet(planet_types[1], planet_sizes[1])); - //planets.push_back(new Planet(planet_types[2], planet_sizes[2])); - //planets.push_back(new Planet(planet_types[3], planet_sizes[3])); - //planets.push_back(new Planet(planet_types[4], planet_sizes[4])); - //planets.push_back(new Planet(planet_types[5], planet_sizes[5])); - //planets.push_back(new Planet(planet_types[6], planet_sizes[6])); - //planets.push_back(new Planet(planet_types[7], planet_sizes[7])); - //planets.push_back(new Planet(planet_types[8], planet_sizes[8])); - //planets.push_back(new Planet(planet_types[9], planet_sizes[9])); + std::vector<TemporaryPtr<Planet> > planets; + planets.push_back(GetUniverse().CreatePlanet(planet_types[0], planet_sizes[0])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[1], planet_sizes[1])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[2], planet_sizes[2])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[3], planet_sizes[3])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[4], planet_sizes[4])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[5], planet_sizes[5])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[6], planet_sizes[6])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[7], planet_sizes[7])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[8], planet_sizes[8])); + planets.push_back(GetUniverse().CreatePlanet(planet_types[9], planet_sizes[9])); CombatData* combat_data = new CombatData; - // This too. - /*combat_data->m_system = new System(star_type, planets.size(), "Sample", 0.0, 0.0); - TemporaryPtr<System> system = combat_data->m_system; - std::map<int, UniverseObject*>& combat_universe = combat_data->m_combat_universe; + combat_data->m_system = GetUniverse().CreateSystem(star_type, planets.size(), "Sample", 0.0, 0.0); + std::map<int, TemporaryPtr<UniverseObject> >& combat_universe = combat_data->m_combat_universe; for (std::size_t i = 0; i < planets.size(); ++i) { - Planet* planet = planets[i]; - GetUniverse().InsertID(planet, planet_ids[i]); + TemporaryPtr<Planet> planet = planets[i]; + //GetUniverse().InsertID(planet, planet_ids[i]); combat_universe[planet_ids[i]] = planet; - system.Insert(planet_ids[i], i); - assert(system.Contains(i)); - }*/ + combat_data->m_system->Insert(planet_ids[i], i); + assert(combat_data->m_system->Contains(i)); + } std::vector<CombatSetupGroup> setup_groups; InitCombat(*combat_data, setup_groups); |
From: <geo...@us...> - 2014-02-02 00:45:41
|
Revision: 6797 http://sourceforge.net/p/freeorion/code/6797 Author: geoffthemedio Date: 2014-02-02 00:45:35 +0000 (Sun, 02 Feb 2014) Log Message: ----------- grooming Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2014-02-01 23:53:51 UTC (rev 6796) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2014-02-02 00:45:35 UTC (rev 6797) @@ -2023,17 +2023,17 @@ void CombatWnd::ConnectKeyboardAcceleratorSignals() { HotkeyManager * hkm = HotkeyManager::GetManager(); - hkm->Connect(this, &CombatWnd::OpenChatWindow, "combat.open_chat"); - hkm->Connect(this, &CombatWnd::ShowMenu, "combat.menu"); - hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in"); - hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in_alt"); - hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out"); - hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out_alt"); - hkm->Connect(this, &CombatWnd::ZoomToPrevUnit, "combat.zoom_prev_unit"); - hkm->Connect(this, &CombatWnd::ZoomToNextUnit, "combat.zoom_next_unit"); - hkm->Connect(this, &CombatWnd::ZoomToPrevIdleUnit, "combat.zoom_prev_idle_unit"); - hkm->Connect(this, &CombatWnd::ZoomToNextIdleUnit, "combat.zoom_next_idle_unit"); - + hkm->Connect(this, &CombatWnd::OpenChatWindow, "combat.open_chat"); + hkm->Connect(this, &CombatWnd::ShowMenu, "combat.menu"); + hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in"); + hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in_alt"); + hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out"); + hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out_alt"); + hkm->Connect(this, &CombatWnd::ZoomToPrevUnit, "combat.zoom_prev_unit"); + hkm->Connect(this, &CombatWnd::ZoomToNextUnit, "combat.zoom_next_unit"); + hkm->Connect(this, &CombatWnd::ZoomToPrevIdleUnit, "combat.zoom_prev_idle_unit"); + hkm->Connect(this, &CombatWnd::ZoomToNextIdleUnit, "combat.zoom_next_idle_unit"); + hkm->RebuildShortcuts(); } |
From: <mar...@us...> - 2014-02-18 18:36:48
|
Revision: 6918 http://sourceforge.net/p/freeorion/code/6918 Author: marcel_metz Date: 2014-02-18 18:36:37 +0000 (Tue, 18 Feb 2014) Log Message: ----------- Ogre 1.9 added an parameter to RenderSystem::setStencilBufferParams. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2014-02-18 07:23:29 UTC (rev 6917) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2014-02-18 18:36:37 UTC (rev 6918) @@ -538,21 +538,33 @@ render_system->setStencilBufferParams( Ogre::CMPF_ALWAYS_PASS, OUTLINE_SELECTION_HILITING_STENCIL_VALUE, 0xFFFFFFFF, +#if (OGRE_VERSION >= ((1 << 16 | 9 << 8))) + 0xFFFFFFFF, +#endif Ogre::SOP_KEEP, Ogre::SOP_KEEP, Ogre::SOP_REPLACE, false); } else if (queue_group_id == SELECTION_HILITING_OUTLINED_RENDER_QUEUE) { // outline object's selection hiliting render_system->setStencilBufferParams( Ogre::CMPF_NOT_EQUAL, OUTLINE_SELECTION_HILITING_STENCIL_VALUE, 0xFFFFFFFF, +#if (OGRE_VERSION >= ((1 << 16 | 9 << 8))) + 0xFFFFFFFF, +#endif Ogre::SOP_KEEP, Ogre::SOP_KEEP, Ogre::SOP_REPLACE, false); } else if (queue_group_id == SELECTION_HILITING_FILLED_1_RENDER_QUEUE) { // fully-hilited object's stencil-writing pass render_system->setStencilBufferParams( Ogre::CMPF_ALWAYS_PASS, FULL_SELECTION_HILITING_STENCIL_VALUE, 0xFFFFFFFF, +#if (OGRE_VERSION >= ((1 << 16 | 9 << 8))) + 0xFFFFFFFF, +#endif Ogre::SOP_KEEP, Ogre::SOP_KEEP, Ogre::SOP_REPLACE, false); } else if (queue_group_id == SELECTION_HILITING_FILLED_2_RENDER_QUEUE) { // fully-hilited object's rendering pass render_system->setStencilBufferParams( Ogre::CMPF_EQUAL, FULL_SELECTION_HILITING_STENCIL_VALUE, 0xFFFFFFFF, +#if (OGRE_VERSION >= ((1 << 16 | 9 << 8))) + 0xFFFFFFFF, +#endif Ogre::SOP_KEEP, Ogre::SOP_KEEP, Ogre::SOP_ZERO, false); } } |
From: <geo...@us...> - 2014-03-06 23:10:31
|
Revision: 6951 http://sourceforge.net/p/freeorion/code/6951 Author: geoffthemedio Date: 2014-03-06 23:10:27 +0000 (Thu, 06 Mar 2014) Log Message: ----------- Commented out connections of CombatWnd hotkeys to prevent possible bugs with them. Modified Paths: -------------- trunk/FreeOrion/UI/CombatWnd.cpp Modified: trunk/FreeOrion/UI/CombatWnd.cpp =================================================================== --- trunk/FreeOrion/UI/CombatWnd.cpp 2014-03-06 23:00:27 UTC (rev 6950) +++ trunk/FreeOrion/UI/CombatWnd.cpp 2014-03-06 23:10:27 UTC (rev 6951) @@ -407,18 +407,17 @@ // We also register shortcut names/default values, for the // context "map". - Hotkey::AddHotkey("combat.open_chat", GG::GGK_RETURN); - Hotkey::AddHotkey("combat.end_turn", GG::GGK_RETURN, GG::MOD_KEY_CTRL); - Hotkey::AddHotkey("combat.menu", GG::GGK_F10); - Hotkey::AddHotkey("combat.zoom_in", GG::GGK_e); - Hotkey::AddHotkey("combat.zoom_in_alt", GG::GGK_KP_PLUS); - Hotkey::AddHotkey("combat.zoom_out", GG::GGK_r); - Hotkey::AddHotkey("combat.zoom_out_alt", GG::GGK_KP_MINUS); - Hotkey::AddHotkey("combat.zoom_prev_unit", GG::GGK_v); - Hotkey::AddHotkey("combat.zoom_next_unit", GG::GGK_b); + Hotkey::AddHotkey("combat.open_chat", GG::GGK_RETURN); + Hotkey::AddHotkey("combat.end_turn", GG::GGK_RETURN, GG::MOD_KEY_CTRL); + Hotkey::AddHotkey("combat.menu", GG::GGK_F10); + Hotkey::AddHotkey("combat.zoom_in", GG::GGK_e); + Hotkey::AddHotkey("combat.zoom_in_alt", GG::GGK_KP_PLUS); + Hotkey::AddHotkey("combat.zoom_out", GG::GGK_r); + Hotkey::AddHotkey("combat.zoom_out_alt", GG::GGK_KP_MINUS); + Hotkey::AddHotkey("combat.zoom_prev_unit", GG::GGK_v); + Hotkey::AddHotkey("combat.zoom_next_unit", GG::GGK_b); Hotkey::AddHotkey("combat.zoom_prev_idle_unit", GG::GGK_f); Hotkey::AddHotkey("combat.zoom_next_idle_unit", GG::GGK_g); - } bool temp_bool = RegisterOptions(&AddOptions); } @@ -2025,17 +2024,20 @@ void CombatWnd::ConnectKeyboardAcceleratorSignals() { HotkeyManager * hkm = HotkeyManager::GetManager(); - hkm->Connect(this, &CombatWnd::OpenChatWindow, "combat.open_chat"); - hkm->Connect(this, &CombatWnd::ShowMenu, "combat.menu"); - hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in"); - hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in_alt"); - hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out"); - hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out_alt"); - hkm->Connect(this, &CombatWnd::ZoomToPrevUnit, "combat.zoom_prev_unit"); - hkm->Connect(this, &CombatWnd::ZoomToNextUnit, "combat.zoom_next_unit"); - hkm->Connect(this, &CombatWnd::ZoomToPrevIdleUnit, "combat.zoom_prev_idle_unit"); - hkm->Connect(this, &CombatWnd::ZoomToNextIdleUnit, "combat.zoom_next_idle_unit"); + // disable combat hotkeys for now to prevent potential crashes. + // need conditions specified when connecting these... + //hkm->Connect(this, &CombatWnd::OpenChatWindow, "combat.open_chat"); + //hkm->Connect(this, &CombatWnd::ShowMenu, "combat.menu"); + //hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in"); + //hkm->Connect(this, &CombatWnd::KeyboardZoomIn, "combat.zoom_in_alt"); + //hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out"); + //hkm->Connect(this, &CombatWnd::KeyboardZoomOut, "combat.zoom_out_alt"); + //hkm->Connect(this, &CombatWnd::ZoomToPrevUnit, "combat.zoom_prev_unit"); + //hkm->Connect(this, &CombatWnd::ZoomToNextUnit, "combat.zoom_next_unit"); + //hkm->Connect(this, &CombatWnd::ZoomToPrevIdleUnit, "combat.zoom_prev_idle_unit"); + //hkm->Connect(this, &CombatWnd::ZoomToNextIdleUnit, "combat.zoom_next_idle_unit"); + hkm->RebuildShortcuts(); } |