Exemplo n.º 1
0
    //填充3c场景
    static void FillScnData3C(string scnType, string scnName, string scnSubFolderPath, GameObject scnPrefab)
    {
        var trm = scnPrefab.transform;

        var mapTrm = trm.GetChild(0);

        string mapName = mapTrm.name;

        var objsTrm = trm.Find("objs");

        Tower[] towers = objsTrm.GetComponentsInChildren <Tower> ();

        //获取或创建ScnData
        string scnDataAssetPath = scnSubFolderPath + "/scnData.asset";
        //Debug.LogError ("------>scnDataAssetPath:"+scnDataAssetPath);
        string scnDataAssetReletivePath = EditorHelper.ChangeToRelativePath(scnDataAssetPath);


        Scn3CData scn3CData = new Scn3CData();

        scn3CData.ScnName       = scnName;
        scn3CData.MapName       = mapName;
        scn3CData.TowerDataList = new List <TowerData> ();
        for (int i = 0; i < towers.Length; i++)
        {
            TowerData td = new TowerData();
            td.Camp     = towers[i].Camp;
            td.Pos      = towers [i].transform.position;
            td.Priority = towers [i].Priority;
            scn3CData.TowerDataList.Add(td);
        }

        Town[] towns = objsTrm.GetComponentsInChildren <Town> ();
        scn3CData.TownDataList = new List <TownData> ();
        for (int i = 0; i < towns.Length; i++)
        {
            TownData td = new TownData();
            td.Camp = towns[i].Camp;
            td.Pos  = towns [i].transform.position;
            scn3CData.TownDataList.Add(td);
        }

        if (!EditorHelper.BeFileExist(scnDataAssetPath))
        {
            Debug.LogError("MeEditor.FillScnData3C scnData 不存在,创建新数据文件 path:" + scnDataAssetPath + " ");
            scn3CData = ScriptableHelper.CreateOrReplaceAsset <Scn3CData> (scn3CData, scnDataAssetReletivePath);
        }
        else
        {
            Scn3CData oldScn3CData = AssetDatabase.LoadAssetAtPath <Scn3CData> (scnDataAssetReletivePath);
            bool      bSame        = Scn3CData.BeSame(scn3CData, oldScn3CData);
            Debug.LogError("MeEditor.FillScnData3C scnData存在,读取数据文件,判断是否有数据变更,有就覆盖数据  path:" + scnDataAssetPath + " bSame:" + bSame);
            if (!bSame)
            {
                oldScn3CData.ScnName       = scn3CData.ScnName;
                oldScn3CData.MapName       = scn3CData.MapName;
                oldScn3CData.TowerDataList = new List <TowerData> ();
                oldScn3CData.TowerDataList.AddRange(scn3CData.TowerDataList.ToArray());
                oldScn3CData.TownDataList = new List <TownData> ();
                oldScn3CData.TownDataList.AddRange(scn3CData.TownDataList.ToArray());

                Debug.LogError("MeEditor.FillScnData3C scnName:" + oldScn3CData.ScnName + " mapName:" + oldScn3CData.MapName + " ListCount:" + oldScn3CData.TowerDataList.Count);
            }
        }
    }
Exemplo n.º 2
0
    /// <summary>
    /// 比较两个Scn3CData是否相同
    /// </summary>
    /// <returns><c>true</c>, if same was been, <c>false</c> otherwise.</returns>
    public static bool BeSame(Scn3CData a, Scn3CData b)
    {
        if (!a.ScnName.Equals(b.ScnName))
        {
            return(false);
        }

        if (!a.MapName.Equals(b.MapName))
        {
            return(false);
        }


        if (null == a.TowerDataList && null != b.TowerDataList)
        {
            return(false);
        }

        if (null == b.TowerDataList && null != a.TowerDataList)
        {
            return(false);
        }

        if (a.TowerDataList.Count != b.TowerDataList.Count)
        {
            return(false);
        }

        if (a.TownDataList.Count != b.TownDataList.Count)
        {
            return(false);
        }

        int count = a.TowerDataList.Count;

        for (int i = 0; i < count; i++)
        {
            if (a.TowerDataList[i].Camp != b.TowerDataList[i].Camp)
            {
                return(false);
            }

            if (a.TowerDataList[i].Pos != b.TowerDataList[i].Pos)
            {
                return(false);
            }

            if (a.TowerDataList[i].Priority != b.TowerDataList[i].Priority)
            {
                return(false);
            }
        }

        int townLen = a.TownDataList.Count;

        for (int i = 0; i < townLen; i++)
        {
            if (a.TownDataList [i].Camp != b.TownDataList [i].Camp)
            {
                return(false);
            }

            if (a.TownDataList [i].Pos != b.TownDataList [i].Pos)
            {
                return(false);
            }
        }

        return(true);
    }