Beispiel #1
0
    public static void SaveLevel()
    {
        Debug.Log("SaveLevel");
        msobjlist.Clear();
        // 场景路径

        /*
         * string scenePath = AssetDatabase.GetAssetPath(selectObject);
         *
         * Debug.Log("=====================================");
         * Debug.Log(sceneName + "   path : " + scenePath );
         * // 打开这个关卡
         * EditorApplication.OpenScene(scenePath);
         */

        MSLevelOptionDataModel od     = null;
        DataStream             stream = new DataStream(true);

        //获取场景中全部道具
        Object[] objects = Object.FindObjectsOfType(typeof(GameObject));

        foreach (GameObject sceneObject in objects)
        {
            if (sceneObject.name == "LevelOption")
            {
                LevelOption editor = sceneObject.GetComponent <LevelOption>();
                if (editor != null)
                {
                    od = new MSLevelOptionDataModel();
                    od.SetValByLevelOption(editor);

                    od.serialize(stream);

                    GameCommon.LOAD_DATA_VERSION = od.version;
                }

                ForeachObjAndSave(sceneObject);
            }
        }

        Debug.Log("save list count:" + msobjlist.Count);
        stream.WriteSInt32(msobjlist.Count);

        foreach (MSBaseObject msobj in msobjlist)
        {
            msobj.Serialize(stream);
        }

        if (od == null)
        {
            Debug.LogError("can't find the level option!");
            return;
        }

        WriteDataToFile(od, stream);
    }
Beispiel #2
0
    static void WriteDataToFile(MSLevelOptionDataModel od, DataStream data)
    {
        string filePath = GameConst.GetLevelDataFilePath(od.levelName + ".lmd");

        byte[] objData     = data.ToByteArray();
        byte[] objGzipData = GameCommon.CompressGZip(objData);
        GameCommon.WriteByteToFile(objGzipData, filePath);

        Debug.Log("save path : " + filePath);
        EditorUtility.DisplayDialog("导出关卡" + od.levelName + "成功!", filePath, "确定");
    }
Beispiel #3
0
    public static void NewLevel()
    {
        MSLevelOptionDataModel od = new MSLevelOptionDataModel();

        od.version   = GameCommon.GAME_DATA_VERSION;
        od.levelName = "newlevel";
        od.mapWidth  = 100;
        od.mapHeight = 100;


        List <GameObject> delarr = new List <GameObject>();
        bool isfind = false;

        foreach (GameObject sceneObject in Object.FindObjectsOfType(typeof(GameObject)))
        {
            if (sceneObject.name == "LevelOption")
            {
                LevelOption me = sceneObject.GetComponent <LevelOption>();
                od.SetLevelOption(me);
                GameCommon.LOAD_DATA_VERSION = od.version;

                isfind = true;
            }
            else if (sceneObject.name != "Main Camera")
            {
                delarr.Add(sceneObject);
            }
        }
        foreach (GameObject obj in delarr)
        {
            DestroyImmediate(obj);
        }
        if (!isfind)
        {
            GameObject  tGO = new GameObject("LevelOption");
            LevelOption lo  = tGO.AddComponent <LevelOption>();
            od.SetLevelOption(lo);
            GameCommon.LOAD_DATA_VERSION = od.version;
        }
    }
Beispiel #4
0
    public void ReloadScene(DataStream datastream)
    {
        Debug.Log("ReloadScene");

        MSLevelOptionDataModel od = new MSLevelOptionDataModel();

        od.deserialize(datastream);
        //od.version = (float)datastream.ReadSInt32() / 10000f;
        //od.levelName = datastream.ReadString16();
        //od.mapWidth = datastream.ReadSInt32();
        //od.mapHeight = datastream.ReadSInt32();


        List <GameObject> delarr = new List <GameObject>();
        LevelOption       me     = null;

        foreach (GameObject sceneObject in Object.FindObjectsOfType(typeof(GameObject)))
        {
            if (sceneObject.name == "LevelOption")
            {
                me = sceneObject.GetComponent <LevelOption>();
                od.SetLevelOption(me);

                GameCommon.LOAD_DATA_VERSION = od.version;
            }
            else if (sceneObject.name != "Main Camera" && sceneObject.name != "Directional light")
            {
                delarr.Add(sceneObject);
            }
        }

        //创建关卡配置物体
        if (me == null)
        {
            GameObject tGO = new GameObject("LevelOption");
            me = tGO.AddComponent <LevelOption>();
            od.SetLevelOption(me);
            GameCommon.LOAD_DATA_VERSION = od.version;
        }

        foreach (GameObject obj in delarr)
        {
            DestroyImmediate(obj);
        }
        int objcount = datastream.ReadSInt32();

        Dictionary <int, MSBaseObject> dic = new Dictionary <int, MSBaseObject>();

        Debug.Log("objcount : " + objcount);
        for (int i = 0; i < objcount; i++)
        {
            //MSBaseObject.CreateObj(datastream);
            //从字节流中获取id
            int    type = datastream.ReadSInt32();
            string id   = datastream.ReadString16();

            GameObject go;

            if (type == -1)
            {
                //组物体
                go = new GameObject("LevelOption");
            }
            else
            {
                Object tempObj = Resources.Load("Prefabs/MapObj/" + id) as GameObject;
                if (tempObj == null)
                {
                    Debug.Log(type + "/" + id + " is null!");
                }
                go = (GameObject)Instantiate(tempObj);
            }

            MSBaseObject baseobj = go.GetComponent <MSBaseObject>();

            if (baseobj == null)
            {
                baseobj = go.AddComponent <MSBaseObject>();
            }
            //baseobj.itemtype = type;
            baseobj.itemid = id;

            baseobj.Deserialize(datastream);
            baseobj.init();


            if (dic.ContainsKey(baseobj.parent))
            {
                go.transform.parent = dic[baseobj.parent].transform;
            }
            else
            {
                go.transform.parent = me.transform;
            }

            dic.Add(baseobj.myData.instanceID, baseobj);
        }
    }