Exemplo n.º 1
0
        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") ;
        }
Exemplo n.º 2
0
    //---------------------------------------------------------------------
    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();
    }
Exemplo n.º 3
0
void create_sentient(const int x, const int y, const int z, rltk::random_number_generator &rng, planet_t &planet, 
        region_t &region, 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;
}