示例#1
0
    void setupWorld(XmlElement gameobject)
    {
        worldmgr             = new WorldManager();
        worldmgr.parentScene = this;
        worldmgr.name        = gameobject.GetAttribute("wname");

        foreach (XmlElement child in gameobject.ChildNodes)
        {
            if (child.GetAttribute("name") == "Terrain")
            {
                worldmgr.terrainName = child.SelectSingleNode("name").InnerText;

                string[] ssize = child.SelectSingleNode("size").InnerText.Split(new char[] { ' ' });
                worldmgr.size.x = float.Parse(ssize[0]);
                worldmgr.size.y = float.Parse(ssize[1]);
                worldmgr.size.z = float.Parse(ssize[2]);

                worldmgr.chunkSplit = int.Parse(child.SelectSingleNode("splitSize").InnerText);
                worldmgr.chunkSize  = worldmgr.size.x / worldmgr.chunkSplit;

                Common.DEBUG_MSG("name:" + worldmgr.name + ", worldsize:" + worldmgr.size + ", splitChunks:" +
                                 worldmgr.chunkSplit + ", chunkSize:" + (worldmgr.size.x / worldmgr.chunkSplit));

                foreach (XmlElement tchild in child.SelectSingleNode("splatprotos").ChildNodes)
                {
                    KeyValuePair <string, string> p = new KeyValuePair <string, string>(tchild.GetAttribute("texture"), tchild.GetAttribute("normalMap"));
                    worldmgr.load_splatPrototypes.Add(p);

                    KeyValuePair <Vector2, Vector2> p1 = new KeyValuePair <Vector2, Vector2>(
                        new Vector2(
                            float.Parse(tchild.GetAttribute("tileSizeX")),
                            float.Parse(tchild.GetAttribute("tileSizeY"))),
                        new Vector2(
                            float.Parse(tchild.GetAttribute("tileOffsetX")),
                            float.Parse(tchild.GetAttribute("tileOffsetY")))
                        );

                    worldmgr.splatPrototypes_titlesizeoffset.Add(p1);
                    Common.DEBUG_MSG("set load splatPrototype:" + tchild.GetAttribute("texture"));
                }

                foreach (XmlElement tchild in child.SelectSingleNode("treePrototypes").ChildNodes)
                {
                    worldmgr.load_treePrototypes.Add(tchild.GetAttribute("prefab"));
                    Common.DEBUG_MSG("set load treePrototype:" + tchild.GetAttribute("prefab"));
                }

                foreach (XmlElement tchild in child.SelectSingleNode("detailPrototypes").ChildNodes)
                {
                    worldmgr.load_detailPrototypes.Add(tchild.GetAttribute("prefab"));
                    Common.DEBUG_MSG("set load detailPrototype:" + tchild.GetAttribute("prefab"));
                }

                worldmgr.createWorldObjs();
            }
            else
            {
                WorldSceneObject obj = new WorldSceneObject();

                Asset newasset = findAsset(child.GetAttribute("asset"), true, child.GetAttribute("layer"));

                Vector3 pos = Vector3.zero;
                Vector3 rot = Vector3.zero;
                Vector3 sca = Vector3.zero;

                XmlNode gameobjectpos = child.SelectSingleNode("transform").SelectSingleNode("position");
                XmlNode gameobjectrot = child.SelectSingleNode("transform").SelectSingleNode("rotation");
                XmlNode gameobjectsca = child.SelectSingleNode("transform").SelectSingleNode("scale");

                pos.x = float.Parse(gameobjectpos.SelectSingleNode("x").InnerText);
                pos.y = float.Parse(gameobjectpos.SelectSingleNode("y").InnerText);
                pos.z = float.Parse(gameobjectpos.SelectSingleNode("z").InnerText);

                rot.x = float.Parse(gameobjectrot.SelectSingleNode("x").InnerText);
                rot.y = float.Parse(gameobjectrot.SelectSingleNode("y").InnerText);
                rot.z = float.Parse(gameobjectrot.SelectSingleNode("z").InnerText);

                sca.x = float.Parse(gameobjectsca.SelectSingleNode("x").InnerText);
                sca.y = float.Parse(gameobjectsca.SelectSingleNode("y").InnerText);
                sca.z = float.Parse(gameobjectsca.SelectSingleNode("z").InnerText);

                obj.name           = child.GetAttribute("name");
                obj.position       = pos;
                obj.eulerAngles    = rot;
                obj.scale          = sca;
                obj.idkey          = child.GetAttribute("id");
                obj.asset          = newasset;
                newasset.loading   = false;
                newasset.type      = Asset.TYPE.WORLD_OBJ;
                newasset.loadLevel = Asset.LOAD_LEVEL.LEVEL_SCRIPT_DYNAMIC;
                // newasset.refs.Add(obj.idkey);

                WorldManager.ChunkPos chunkpos = WorldManager.calcAtChunk(pos.x, pos.z, worldmgr.chunkSplit, worldmgr.chunkSize);
                worldmgr.worldObjs[chunkpos.x, chunkpos.y, 0].Add(obj);
            }
        }

        worldmgr.load();
    }
	void setupWorld(XmlElement gameobject)
	{
		worldmgr = new WorldManager();
		worldmgr.parentScene = this;
		worldmgr.name = gameobject.GetAttribute("wname");
		
		foreach(XmlElement child in gameobject.ChildNodes)
		{
			if(child.GetAttribute("name") == "Terrain")
			{
				worldmgr.terrainName = child.SelectSingleNode("name").InnerText;
				
				string[] ssize = child.SelectSingleNode("size").InnerText.Split(new char[]{' '});
				worldmgr.size.x = float.Parse(ssize[0]);
				worldmgr.size.y = float.Parse(ssize[1]);
				worldmgr.size.z = float.Parse(ssize[2]);
				
				worldmgr.chunkSplit = int.Parse(child.SelectSingleNode("splitSize").InnerText);
				worldmgr.chunkSize = worldmgr.size.x / worldmgr.chunkSplit;
				
				Common.DEBUG_MSG("name:" + worldmgr.name + ", worldsize:" + worldmgr.size + ", splitChunks:" + 
					worldmgr.chunkSplit + ", chunkSize:" + (worldmgr.size.x / worldmgr.chunkSplit));
				
				foreach(XmlElement tchild in child.SelectSingleNode("splatprotos").ChildNodes)
				{
					KeyValuePair<string, string> p = new KeyValuePair<string, string>(tchild.GetAttribute("texture"), tchild.GetAttribute("normalMap"));
					worldmgr.load_splatPrototypes.Add(p);
					
					KeyValuePair<Vector2, Vector2> p1 = new KeyValuePair<Vector2, Vector2>(
						new Vector2(
						float.Parse(tchild.GetAttribute("tileSizeX")), 
						float.Parse(tchild.GetAttribute("tileSizeY"))),
						new Vector2(
						float.Parse(tchild.GetAttribute("tileOffsetX")), 
						float.Parse(tchild.GetAttribute("tileOffsetY")))
						);
					
					worldmgr.splatPrototypes_titlesizeoffset.Add(p1);
					Common.DEBUG_MSG("set load splatPrototype:" + tchild.GetAttribute("texture"));
				}
				
				foreach(XmlElement tchild in child.SelectSingleNode("treePrototypes").ChildNodes)
				{
					worldmgr.load_treePrototypes.Add(tchild.GetAttribute("prefab"));
					Common.DEBUG_MSG("set load treePrototype:" + tchild.GetAttribute("prefab"));
				}
				
				foreach(XmlElement tchild in child.SelectSingleNode("detailPrototypes").ChildNodes)
				{
					worldmgr.load_detailPrototypes.Add(tchild.GetAttribute("prefab"));
					Common.DEBUG_MSG("set load detailPrototype:" + tchild.GetAttribute("prefab"));
				}
				
				worldmgr.createWorldObjs();
			}
			else
			{
				WorldSceneObject obj = new WorldSceneObject();
				
				Asset newasset = findAsset(child.GetAttribute("asset"), true, child.GetAttribute("layer"));
				
				Vector3 pos = Vector3.zero;  
				Vector3 rot = Vector3.zero;  
				Vector3 sca = Vector3.zero;   
				
				XmlNode gameobjectpos = child.SelectSingleNode("transform").SelectSingleNode("position");
				XmlNode gameobjectrot = child.SelectSingleNode("transform").SelectSingleNode("rotation");
				XmlNode gameobjectsca = child.SelectSingleNode("transform").SelectSingleNode("scale");
				
				pos.x = float.Parse(gameobjectpos.SelectSingleNode("x").InnerText);
				pos.y = float.Parse(gameobjectpos.SelectSingleNode("y").InnerText);
				pos.z = float.Parse(gameobjectpos.SelectSingleNode("z").InnerText);
				
				rot.x = float.Parse(gameobjectrot.SelectSingleNode("x").InnerText);
				rot.y = float.Parse(gameobjectrot.SelectSingleNode("y").InnerText);
				rot.z = float.Parse(gameobjectrot.SelectSingleNode("z").InnerText);
				
				sca.x = float.Parse(gameobjectsca.SelectSingleNode("x").InnerText);
				sca.y = float.Parse(gameobjectsca.SelectSingleNode("y").InnerText);
				sca.z = float.Parse(gameobjectsca.SelectSingleNode("z").InnerText);
			
				obj.name = child.GetAttribute("name");
				obj.position = pos;
				obj.eulerAngles = rot;
				obj.scale = sca;
				obj.idkey = child.GetAttribute("id");
				obj.asset = newasset;
				newasset.loading = false;
				newasset.type = Asset.TYPE.WORLD_OBJ;
				newasset.loadLevel = Asset.LOAD_LEVEL.LEVEL_SCRIPT_DYNAMIC;
				// newasset.refs.Add(obj.idkey);
				
				WorldManager.ChunkPos chunkpos = WorldManager.calcAtChunk(pos.x, pos.z, worldmgr.chunkSplit, worldmgr.chunkSize);
				worldmgr.worldObjs[chunkpos.x, chunkpos.y, 0].Add(obj);
			}
		}

		worldmgr.load();
	}