Ejemplo n.º 1
0
        void Map::addLayer(VLayer* layer,bool sort)
        {
            _layers.emplace_back(layer);
            if(sort)
                sortLayers();

            if(layer->getType() == "entity")
                _entityLayers.emplace_back(static_cast<Layer<Entity*>*>(layer));
        }
bool cSDL2DSceneManager::loadFromXMLFile(std::string Filename)
{
   XMLDocument doc(Filename.c_str());

   std::list<c2DLayer*> List;

    if(doc.LoadFile(Filename.c_str()) == XML_NO_ERROR)
    {
        //Find resources node
        XMLNode* ResourceTree = doc.RootElement();

        if(ResourceTree)
        {
            //Enumerate resource objects
            for(XMLNode* child = ResourceTree->FirstChild(); child; child = child->NextSibling())
            {
                XMLElement *Element = child->ToElement();

                if(Element)
                {
                    c2DLayer *Layer = new c2DLayer();
                    Layer->m_ZOrder = m_Layers.size();

                    for(XMLAttribute* ElementAttrib = const_cast<XMLAttribute*>(Element->FirstAttribute()); ElementAttrib; ElementAttrib = const_cast<XMLAttribute*>(ElementAttrib->Next()))
					{
                        //Examine layers
                        std::string AttribName = ElementAttrib->Name();
                        std::string AttribValue = ElementAttrib->Value();

                        //Detect resource type. Graphic? Audio? Text?
                        if(AttribName=="name")
                        {
                            Layer->m_Name=AttribValue;
                            continue;
                        }

                        if(AttribName=="posx")
                        {
                            Layer->m_PosX = atof(AttribValue.c_str());
                        }

                        if(AttribName=="posy")
                        {
                            Layer->m_PosY = atof(AttribValue.c_str());
                        }

                        if(AttribName=="visible")
                        {
                            if(AttribValue=="true")
                                Layer->m_bVisible=true;
                            else
                                Layer->m_bVisible=false;
                        }
					}

					m_Layers.push_back(Layer);

					//Cycle through layer objects
					for(XMLNode* objs = child->FirstChild(); objs; objs = objs->NextSibling())
					{
					    if(std::string(objs->Value())=="objects")
					    {
					        for(XMLNode* obj = objs->FirstChild(); obj; obj = obj->NextSibling())
					        {
                                XMLElement *ObjElement = obj->ToElement();

                                addLayerObjects(Layer, ObjElement);
					        }
                        }
					}
                }
            }

             sortLayers();
             return true;
        }
    }



    return false;
}