void Image::onInit() { InternalMessage("Display","Entering Image::onInit") ; m_image_container = static_cast< ::Ogre::OverlayContainer* >( ::Ogre::OverlayManager::getSingleton().createOverlayElement( "Panel", Utility::getUniqueName())) ; getOverlay()->add2D(m_image_container) ; m_image_container->setPosition(0,0) ; m_image_container->setWidth(1) ; m_image_container->setHeight(1) ; m_image = ::Ogre::OverlayManager::getSingleton().createOverlayElement( "Panel", Utility::getUniqueName()) ; std::string texture_name(Utility::getUniqueName()) ; ::Ogre::Image image ; image.load(getObject()->getTrait<Model::Image>()->getName(),"General") ; ::Ogre::TexturePtr texture = ::Ogre::TextureManager::getSingleton().loadImage( texture_name, ::Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, image) ; // Create a material using the texture std::string material_name(Utility::getUniqueName()) ; ::Ogre::MaterialPtr material = ::Ogre::MaterialManager::getSingleton().create( material_name, ::Ogre::ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME) ; material->getTechnique(0)->getPass(0)->createTextureUnitState(texture_name) ; m_image->setMaterialName(material_name) ; m_image_container->_addChild(m_image) ; m_image->setPosition(0,0) ; m_image->setWidth(1) ; m_image->setHeight(1) ; getOverlay()->show() ; m_image_container->show() ; m_image->show() ; // create a camera and a viewport if needed. Ogre::createCamera() ; InternalMessage("Display","Leaving Image::onInit") ; }
//--------------------------------------------------------------------- void PFile::addGroup( const Group &group, ManualObject &mo ,const String &sub_name, const String &material_base_name ,const Ogre::Bone *bone ) const { size_t material_index( 0 ); if( group.has_texture ) { material_index = group.texture_index + 1; } String material_name( material_base_name + "/" + Ogre::StringConverter::toString( material_index ) ); const uint16 bone_handle( bone->getHandle() ); const Ogre::Vector3 bone_position( getPosition( bone ) ); size_t index( 0 ); size_t vertex_count( group.num_polygons * 3 ); size_t index_count( vertex_count ); size_t polygon_end_index( group.polygon_start_index + group.num_polygons ); mo.begin( sub_name, material_name, vertex_count, index_count ); for( size_t p( group.polygon_start_index ); p < polygon_end_index; ++p ) { const PolygonDefinition& polygon( m_polygon_definitions[p] ); for( int i(3); i--; ) { uint32 v( group.vertex_start_index +polygon.vertex[i] ) ,n( 0 + polygon.normal[i] ) ,t( group.texture_coordinate_start_index +polygon.vertex[i] ); Ogre::Vector3 pos( m_vertices[ v ] ); mo.position((STATIC_ROTATION * (pos / HRCFile::kDownScaler)) + bone_position); mo.colour( m_vertex_colors[ v ] ); mo.normal( STATIC_ROTATION * m_normals[ n ] ); if( group.has_texture ) { mo.textureCoord(m_texture_coordinates[t]); } mo.bone( index, bone_handle ); mo.index( index++ ); } } mo.end(); }
void create_sentient(const int x, const int y, const int z, rltk::random_number_generator &rng, planet_t &planet, region_t ®ion, const std::size_t person_id, const bool announce) { species_t species; game_stats_t stats; species.tag = planet.civs.unimportant_people[person_id].species_tag; std::cout << species.tag << "\n"; auto species_finder = get_species_def(species.tag).get(); if (planet.civs.unimportant_people[person_id].male) { species.gender = MALE; } else { species.gender = FEMALE; } stats.strength = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "str"); stats.dexterity = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "dex"); stats.constitution = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "con"); stats.intelligence = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "int"); stats.wisdom = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "wis"); stats.charisma = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "cha"); stats.comeliness = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "com"); stats.ethics = rng.roll_dice(3,6) + sentient_stat_mod(species_finder, "eth"); stats.age = planet.civs.unimportant_people[person_id].age; int base_hp = rng.roll_dice(1,10) + stat_modifier(stats.constitution); if (base_hp < 1) base_hp = 1; health_t health = create_health_component_sentient(species.tag, base_hp); int techlevel = planet.civs.civs[planet.civs.unimportant_people[person_id].civ_id].tech_level; if (techlevel > 2) techlevel = 2; const std::string profession_tag = OCCUPATION_TAGS[planet.civs.unimportant_people[person_id].occupation] + std::string("_") + std::to_string(techlevel); std::cout << profession_tag << "\n"; auto profession = get_native_professions(profession_tag).get(); const int profidx = rng.roll_dice(1,profession.size())-1; auto sentient = create_entity() ->assign(position_t{x,y,z}) ->assign(name_t{ species_finder.name, profession[profidx].name }) ->assign(renderable_t{ species_finder.glyph ,rltk::colors::WHITE, rltk::colors::BLACK }) ->assign(viewshed_t{ 6, false, false }) ->assign(std::move(stats)) ->assign(std::move(health)) ->assign(sentient_ai{stat_modifier(stats.dexterity), person_id, profession[profidx].aggression+5}) ->assign(std::move(species)); std::cout << "Sentient #" << sentient->id << "\n"; if (announce) { emit_deferred(log_message{LOG().col(rltk::colors::CYAN)->text(species_finder.name)->text(" ")->text(profession[profidx].name)->col(rltk::colors::WHITE)->text(" has arrived.")->chars}); } for (auto item : profession[profidx].starting_clothes) { if (std::get<0>(item) == 0 || (std::get<0>(item)==1 && species.gender == MALE) || (std::get<0>(item)==2 && species.gender == FEMALE) ) { std::string item_name = std::get<2>(item); std::string slot_name = std::get<1>(item); auto cs = split(item_name, '/'); item_location_t position = INVENTORY; if (slot_name == "head") position = HEAD; if (slot_name == "torso") position = TORSO; if (slot_name == "legs") position = LEGS; if (slot_name == "shoes") position = FEET; std::cout << "Created " << item_name << "\n"; item_t clothing{cs[0]}; clothing.material = get_material_by_tag(cs[1]).get(); clothing.item_name = material_name(clothing.material) + std::string(" ") + clothing.item_name; create_entity()->assign(std::move(clothing))->assign(item_carried_t{position, sentient->id}); } } if (profession[profidx].melee != "") { auto cs = split(profession[profidx].melee, '/'); const std::string item_name = cs[0]; auto finder = item_defs.find(item_name); std::cout << "Created " << item_name << "\n"; item_t w{item_name}; w.material = get_material_by_tag(cs[1]).get(); w.item_name = material_name(w.material) + std::string(" ") + w.item_name; auto weapon = create_entity()->assign(std::move(w))->assign(item_carried_t{EQUIP_MELEE, sentient->id}); weapon->component<item_t>()->stack_size = finder->second.stack_size; weapon->component<item_t>()->category = finder->second.categories; weapon->component<item_t>()->claimed = true; } if (profession[profidx].ranged != "") { auto cs = split(profession[profidx].ranged, '/'); const std::string item_name = cs[0]; auto finder = item_defs.find(item_name); std::cout << "Created " << item_name << "\n"; item_t w{item_name}; w.material = get_material_by_tag(cs[1]).get(); w.item_name = material_name(w.material) + std::string(" ") + w.item_name; auto weapon = create_entity()->assign(std::move(w))->assign(item_carried_t{EQUIP_RANGED, sentient->id}); weapon->component<item_t>()->stack_size = finder->second.stack_size; weapon->component<item_t>()->category = finder->second.categories; weapon->component<item_t>()->claimed = true; } if (profession[profidx].ammo != "") { auto cs = split(profession[profidx].ammo, '/'); const std::string item_name = cs[0]; auto finder = item_defs.find(item_name); std::cout << "Created " << item_name << "\n"; item_t w{item_name}; w.material = get_material_by_tag(cs[1]).get(); w.item_name = material_name(w.material) + std::string(" ") + w.item_name; auto ammo = create_entity()->assign(std::move(w))->assign(item_carried_t{EQUIP_AMMO, sentient->id}); ammo->component<item_t>()->stack_size = finder->second.stack_size; ammo->component<item_t>()->category = finder->second.categories; ammo->component<item_t>()->claimed = true; } planet.civs.civs[planet.civs.unimportant_people[person_id].civ_id].met_cordex = true; }