Exemple #1
0
Ogre::String ConfigManager::getFullscreenStr() const
{
  Ogre::String str = cf.getSetting("Fullscreen", "Settings", "false");
  if (str.compare("false") == 0)
    return Ogre::String("No");
  else if (str.compare("true") == 0)
    return Ogre::String("Yes");
  return Ogre::String("No");
}
void HealthManager::receive(const HitEvent &event)
{
    std::cout<<"ricevuto"<<std::endl;
    entityx::ptr<entityx::EntityManager> entities = ScreenManager::getPtr()->getCurrentEntities();
    for(auto entity : entities->entities_with_components<Destroyable, Renderable>())
    {
        ptr<Destroyable> points = entity.component<Destroyable>();
        std::string entName = entity.component<Name>()->name;
        Ogre::String name;

        if(entName != "Block"){
            ptr<Children> child = entity.component<Children>();
            name = child->children["body"].component<Renderable>()->sceneNode->getName();
        }else{
            ptr<Renderable> rend = entity.component<Renderable>();
            name = rend->sceneNode->getName();
        }

        std::cout<<"name: "<<name<<std::endl;


        int max = points->maxHealth;

        if(name.compare(event.targetName)==0)
        {
            points->health-=event.points;
            if(points->health<=0)
            {
                MessageManager::getPtr()->emit<ObjectDestroyed>(entity);
                if(entity.valid()){
                    if(entity.component<Name>()->name == "Block")
                    {
                        MapManager::getPtr()->deletePosition(entity.component<Position>()->position);
                        RenderManager::getPtr()->getSceneManager()->destroySceneNode(entity.component<Renderable>()->sceneNode);
                        entity.destroy();
                    }else{
                        entity.assign<Position>(MapManager::getPtr()->getFreePos());
                        entity.assign<Destroyable>(max,max);
                    }
                }
                return;
            }else{
                std::cout<<"punti"<<points->health<<std::endl;
                entity.assign<Destroyable>(points->health,max);
            }
            return;
        }

    }
    return;
}
 bool ConfigurationManager::shouldUseStaticGeometry()
 {
     Ogre::String mode = getSystemConfig()->getSetting( "use_static_geometry" );
     
     if( mode == Ogre::StringUtil::BLANK )
         mode = "auto";
     
     if( mode.compare("yes") == 0 )
     {
         return true;
     }
     else if( mode.compare("no") == 0 )
     {
         return false;
     }        
     else
     {
         // Überprüfen ob der Renderer VertexBuffer unterstützt
         return Ogre::Root::getSingleton().getRenderSystem()
             ->getCapabilities()->hasCapability( Ogre::RSC_VBO );
     }
     
 }
	/// __DATE__ sieht ca. so aus : Nov 08 2005
	long parseDate(char* date)
	{   
		Ogre::String dateStr = Ogre::String(date);
		Ogre::String monthStr = dateStr.substr(0,3);
		int day = Ogre::StringConverter::parseInt( dateStr.substr(4,2) );
		int year = Ogre::StringConverter::parseInt( dateStr.substr(7,4) );
		int month = 0;

		while( month < 12 && monthStr.compare(sMonths[month]) != 0 )
			month++;

		return /* Jahr */		  year * 100000 +
			   /* Monat */	 (month+1) * 1000 + 
			   /* Tag */		   day * 10 + 
			   /* Sub-Version */	 0;	
	}
bool SceneLoader::parseNode(TiXmlElement *XMLNode)
{
	TiXmlElement *XMLRotation;
	TiXmlElement *XMLPosition;
	TiXmlElement *XMLEntity;
	TiXmlElement *XMLScale;
	TiXmlElement *XMLProperty;

	Ogre::String  nodeName;
	Ogre::String  meshName;
	Ogre::String  meshFile;
	Ogre::Vector3 vec3Position;
	Ogre::Vector3 vec3Scale;
	Ogre::Quaternion quatRotation;

	Ogre::Entity *ent;


	//Get the name of the node
	nodeName = XMLNode->Attribute("name");
	std::cout << "NodeName: " << nodeName << std::endl;

	//Get the position element;
	XMLPosition = XMLNode->FirstChildElement("position");
	vec3Position.x = Ogre::StringConverter::parseReal(XMLPosition->Attribute("x"));
	vec3Position.y = Ogre::StringConverter::parseReal(XMLPosition->Attribute("y"));
	vec3Position.z = Ogre::StringConverter::parseReal(XMLPosition->Attribute("z"));
	//Debug text
	std::cout << "Position: " << "x: " << XMLPosition->Attribute("x");
	std::cout << " y: " << XMLPosition->Attribute("y");
	std::cout << " z: " << XMLPosition->Attribute("z") << std::endl;

	//Get the rotation
	XMLRotation = XMLNode->FirstChildElement("quaternion");
	quatRotation.x = Ogre::StringConverter::parseReal(XMLRotation->Attribute("x"));
	quatRotation.y = Ogre::StringConverter::parseReal(XMLRotation->Attribute("y"));
	quatRotation.z = Ogre::StringConverter::parseReal(XMLRotation->Attribute("z"));
	quatRotation.w = Ogre::StringConverter::parseReal(XMLRotation->Attribute("w"));
	//Debug text
	std::cout << "Quat: " << "qx: " << XMLRotation->Attribute("x");
	std::cout << "qy: " << XMLRotation->Attribute("y");
	std::cout << "qz: " << XMLRotation->Attribute("z");
	std::cout << "qw: " << XMLRotation->Attribute("w") << std::endl;

	//Get the scale
	XMLScale = XMLNode->FirstChildElement("scale");
	vec3Scale.x = Ogre::StringConverter::parseReal(XMLScale->Attribute("x"));
	vec3Scale.y = Ogre::StringConverter::parseReal(XMLScale->Attribute("y"));
	vec3Scale.z = Ogre::StringConverter::parseReal(XMLScale->Attribute("z")); 
	//Degub text
	std::cout << "Scale: " << "x: " << XMLScale->Attribute("x");
	std::cout << " y: " << XMLScale->Attribute("y");
	std::cout << " z: " << XMLScale->Attribute("z") << std::endl;



	//Get the entity
	XMLEntity = XMLNode->FirstChildElement("entity");
	meshName = XMLEntity->Attribute("name");
	meshFile = XMLEntity->Attribute("meshFile");
	std::cout << "meshname: " << meshName << " meshFile: " << meshFile << std::endl;

	//Create the entity
	ent = mvpSceneMgr->createEntity(meshName,meshFile);
	//if(Ogre::StringConverter::parseBool(XMLEntity->Attribute("castShadows")))
	ent->setCastShadows(false);
	//if(ent->getCastShadows())
	//	std::cout << "ent casts shadows"<< std::endl;
	std::cout << "nodeName + Node";
	Ogre::String str = nodeName;
	str += "Node";
	
	//vec3Position.y = mvpTerrain->getHeightAtWorldPosition(vec3Position);
	//vec3Position.y -= 0.3; //@todo wtf!
	Ogre::SceneNode *node = mvpSceneMgr->getRootSceneNode()->createChildSceneNode(str,vec3Position,quatRotation);
	std::cout << "createChildNode";
	node->scale(vec3Scale);
	std::cout << "scale";
	node->attachObject(ent);

	//Get physicsproperties
	std::vector<Ogre::Vector3> posList;

	TiXmlElement * XMLUserData = XMLNode->FirstChildElement("userData");
	XMLProperty = XMLUserData->FirstChildElement("property");
	bool EntityIsStatic = false;
	int collisionGroup;
	int mass  = 0;
	Ogre::String posString;
	Ogre::Vector3 tempVec(0,0,0);
	Ogre::Real speed;
	double tempDouble;
	while(XMLProperty)
	{
		Ogre::String propName = XMLProperty->Attribute("name");
		if (propName.compare("isStatic") == 0)
			if (Ogre::StringConverter::parseInt(XMLProperty->Attribute("data")) == 1)
				EntityIsStatic = true;

		if (propName.compare("mass") == 0)
			mass = Ogre::StringConverter::parseInt(XMLProperty->Attribute("data"));
					
		if(propName.compare("collisionGroup") == 0)
			collisionGroup = Ogre::StringConverter::parseInt(XMLProperty->Attribute("data"));

		if(propName.compare("position") == 0)
		{
			std::stringstream ost;
			posString = XMLProperty->Attribute("data");
			ost << posString;
			ost >> tempDouble;
			tempVec.x = tempDouble;
			ost >> tempDouble;
			tempVec.y = tempDouble;
			ost >> tempDouble;
			tempVec.z = tempDouble;
			posList.push_back(tempVec);
			ost.clear();
		}

		if(propName.compare("speed") == 0)
			speed = Ogre::StringConverter::parseReal(XMLProperty->Attribute("data"));
		
		XMLProperty = XMLProperty->NextSiblingElement("property");
	}
    void Actor::doAttach(
        Actor* actor,
        const Ogre::String& slot, 
        const Ogre::String& childSlot, 
        const Ogre::Vector3& offsetPosition,
        const Ogre::Quaternion& offsetOrientation ) 
    {
        Ogre::Vector3 offsetPositionMod = offsetPosition;
        Ogre::Quaternion offsetOrientationMod = offsetOrientation;

        if( actor == NULL )
            Throw(NullPointerException, 
            "Aktor "+mName+": Der anzufügende Aktor darf nicht NULL sein." );
        if( actor->mParent != NULL )
            Throw(NullPointerException, 
            "Aktor "+mName+": Der Aktor ist bereits an einen anderen Aktor angefügt." );

        // Verschiebung durch den Child-Slot berechnen
        // Ist es ein nicht Standard-Slot && Kontrolliert der Aktor ein Objekt && Ist dieses ein Mesh
        if( childSlot.compare(DEFAULT_SLOT_NAME) != 0 &&
            actor->getControlledObject() != NULL && 
            actor->getControlledObject()->isMeshObject() )
        {
            Entity* ent = dynamic_cast<MeshObject*>(actor->getControlledObject())->getEntity();

            // Braucht ein Skelett
            if( !ent->hasSkeleton() )
                Throw(IllegalArgumentException, 
                "Aktor "+mName+": Das kontrollierte MeshObject des ChildAktor hat kein Skeleton." );

            // Der Slot muss existieren
            try
            {
                Bone* bone = ent->getSkeleton()->getBone( childSlot );

                Vector3 vec = bone->_getDerivedPosition();
                Quaternion quat = bone->_getDerivedOrientation();

                // Durch den Bone ExtraOffset hinzufügen
                offsetOrientationMod = offsetOrientation *  quat;
                offsetPositionMod = ( offsetOrientationMod * (-vec) ) + offsetPosition;
            }
            catch (Ogre::Exception) {
                Throw(IllegalArgumentException, 
                    "Aktor "+mName+": Der geforderte Slot '"+childSlot+"' am ChildAktor existiert nicht." );
            }
        }

        // Das wirkliche Anfügen
        // Ist es ein nicht Standard-Slot && Kontrolliert der Aktor ein Objekt && Ist dieses ein Mesh
        if( slot.compare(DEFAULT_SLOT_NAME) != 0 && 
            getControlledObject() != NULL && 
            getControlledObject()->isMeshObject() )
        {
            if( actor->getControlledObject() == NULL )
                Throw(IllegalArgumentException, 
                "Aktor "+mName+": Der zu befestigende Aktor darf bei SLOTs nicht leer sein." );

            MovableObject* movObj = actor->getControlledObject()->getMovableObject();
            Entity* ent = dynamic_cast<MeshObject*>(getControlledObject())->getEntity();

            // Braucht ein Skelett
            if( !ent->hasSkeleton() )
                Throw(IllegalArgumentException, 
                "Aktor "+mName+": Das kontrollierte MeshObject hat kein Skeleton." );

            // Der Slot muss existieren
            try
            {
                ent->getSkeleton()->getBone( slot );
            }
            catch (Ogre::Exception) {
                Throw(IllegalArgumentException, 
                    "Aktor "+mName+": Der geforderte Slot '"+slot+"' existiert nicht." );
            }

            // Am Bone befestigen
            ent->attachObjectToBone( slot, movObj, offsetOrientationMod, offsetPositionMod );
            // Der Aktor wurde an einem Bone befestigt
            actor->mBone = ent->getSkeleton()->getBone( slot );

            return;
        }
        // Wenn hier kein MeshObjekt dran ist, trotzdem irgendwie zusammenfügen
        else
        {
            actor->placeIntoNode( mSceneNode,  offsetPositionMod, offsetOrientationMod );

            // Der Aktor wurde nicht an einem Bone befestigt
            actor->mBone = 0;
            return;      
        }
    }