Exemple #1
0
 static void CountLineFunc()
 {
     int[,] test =
     {
         { 1, 2, 3 },
         { 4, 5, 6 },
         { 7, 8, 9 },
     };
     CRuntimeLogger.Log(test[0, 0].ToString() + test[1, 0].ToString() + test[2, 0]);
 }
Exemple #2
0
    public bool Load(string sFileNameWithoutSurfix)
    {
        m_pElement = new List <T>();
        TextAsset txtAsset = ResourcesManager.Load <TextAsset>(sFileNameWithoutSurfix);

        if (null == txtAsset)
        {
            CRuntimeLogger.Log("Data not found at " + sFileNameWithoutSurfix + ", Create a new one");
            return(false);
        }

        return(LoadFromString(txtAsset.text));
    }
Exemple #3
0
    static void CountLineFunc()
    {
        int iFileNumber = 0;
        int iLineNumber = 0;

        string[] filePaths = Directory.GetFiles(Application.dataPath + "/Fundament/", "*.cs",
                                                SearchOption.AllDirectories);
        if (null != filePaths)
        {
            foreach (string filePath in filePaths)
            {
                ++iFileNumber;
                string[] lines = File.ReadAllLines(filePath);
                iLineNumber += lines.Length;
            }
        }

        filePaths = Directory.GetFiles(Application.dataPath + "/GameAssets/", "*.cs",
                                       SearchOption.AllDirectories);
        if (null != filePaths)
        {
            foreach (string filePath in filePaths)
            {
                ++iFileNumber;
                string[] lines = File.ReadAllLines(filePath);
                iLineNumber += lines.Length;
            }
        }

        filePaths = Directory.GetFiles(Application.dataPath + "/Games/", "*.cs",
                                       SearchOption.AllDirectories);
        if (null != filePaths)
        {
            foreach (string filePath in filePaths)
            {
                ++iFileNumber;
                string[] lines = File.ReadAllLines(filePath);
                iLineNumber += lines.Length;
            }
        }

        CRuntimeLogger.Log(string.Format("cs: {0}Files,{1}Lines", iFileNumber, iLineNumber));
    }
 public void AReset()
 {
     m_eCurrentAnimState = EAnimationState.EAS_Move;
     if (m_sAnimList != null)
     {
         if (m_pAnim != null && (EAnimationType.EAT_Born != m_eAnimType))
         {
             if (!string.IsNullOrEmpty(m_sAnimList[(int)EAnimationType.EAT_Idle]))
             {
                 m_pAnim.Play(m_sAnimList[(int)EAnimationType.EAT_Idle], PlayMode.StopAll);
                 m_pAnim[m_sAnimList[(int)EAnimationType.EAT_Idle]].time     = 0.001f;
                 m_pAnim[m_sAnimList[(int)EAnimationType.EAT_Idle]].wrapMode = WrapMode.Loop;
                 m_pAnim[m_sAnimList[(int)EAnimationType.EAT_Idle]].speed    = 1.0f * m_fAnimSpeed[(int)EAnimationType.EAT_Idle];
                 m_pAnim.Sample();
             }
             else
             {
                 CRuntimeLogger.Log(m_pOwner.gameObject.name + " m_sAnimList does not have EAnimationType.EAT_Idle");
             }
         }
     }
 }
Exemple #5
0
    void Update()
    {
        #region Editor test

        if (TestPath)
        {
            TestPath = false;

            if (null != m_pStart && null != m_pEnd)
            {
                switch (m_eGizmo)
                {
                case EPathGizmoShow.EPGS_StrictAStar:
                {
                    m_bHasStrictAStarPath = true;
                    float      flength = 0.0f;
                    S2DPoint[] res     = GridMath.StrictAStar(
                        new Vector2(m_pStart.transform.position.x, m_pStart.transform.position.z),
                        new Vector2(m_pEnd.transform.position.x, m_pEnd.transform.position.z),
                        m_pPathData.m_byGridStateData,
                        out flength
                        );

                    m_v2PathStrictAStar = new Vector2[res.Length];
                    for (int i = 0; i < res.Length; ++i)
                    {
                        m_v2PathStrictAStar[i] = res[i].ToV2();
                    }
                    CRuntimeLogger.Log(flength);
                }
                break;

/*
 *                  case EPathGizmoShow.EPGS_Swamp:
 *                      {
 *                      m_pPathData.ResetGrids();
 *                      EPathRes eres = EPathRes.EPR_NoPath;
 *                      m_v2PathSwamp = m_pPathData.FindPathAStar(
 *                          new Vector2(m_pStart.transform.position.x, m_pStart.transform.position.z),
 *                          new Vector2(m_pEnd.transform.position.x, m_pEnd.transform.position.z),
 *                          -1,
 *                          out eres
 *                          );
 *                      m_bSwampPath = true;
 *                      }
 *                      break;
 */
                case EPathGizmoShow.EPGS_JPS:
                {
                    m_pPathData.BakePruningRule();
                    m_pPathData.InitialBlockbasedGrid();
                    m_pPathData.ResetGrids();

                    EPathRes eres = EPathRes.EPR_NoPath;
                    m_v2PathJPS = m_pPathData.FindPathJPS(
                        new Vector2(m_pStart.transform.position.x, m_pStart.transform.position.z),
                        new Vector2(m_pEnd.transform.position.x, m_pEnd.transform.position.z),
                        30,
                        out eres
                        );
                    m_bJPSPath = true;
                }
                break;

/*
 *                  case EPathGizmoShow.EPGS_BlockAStar:
 *                      {
 *                          m_pPathData.ResetBlockAStarBlocks();
 *
 *                          EPathRes eres = EPathRes.EPR_NoPath;
 *                          m_v2PathBlockAStar = m_pPathData.FindPathBlockAStar(
 *                                  new Vector2(m_pStart.transform.position.x, m_pStart.transform.position.z),
 *                                  new Vector2(m_pEnd.transform.position.x, m_pEnd.transform.position.z),
 *                                  -1,
 *                                  out eres
 *                                  );
 *                          m_bBlockAStarPath = true;
 *                      }
 *                      break;
 */
                }
            }
        }

        #endregion

        #region Running Test

        if (StartPerformanceTest)
        {
            for (int i = 0; i < 200; ++i)
            {
                S2DPoint p1   = S2DPoint.random;
                S2DPoint p2   = S2DPoint.random;
                EPathRes eres = EPathRes.EPR_NoPath;

                //m_pPathData.FindPathAStarOld(p1.ToV2(), p2.ToV2(), -1, out eres);
                //m_pPathData.FindPathAStar(p1.ToV2(), p2.ToV2(), -1, out eres);
                //m_pPathData.FindPathBlockAStar(p1.ToV2(), p2.ToV2(), -1, out eres);
                //m_pPathData.FindPathJPSOld(p1.ToV2(), p2.ToV2(), -1, out eres);
                //m_pPathData.FindPathJPS(p1.ToV2(), p2.ToV2(), -1, out eres);
                //m_pPathData.FindPathJPSMJ(p1.ToV2(), p2.ToV2(), -1, out eres);
                //blocked jps without multi-jump is the best, it expand more open-list at same time!(so it should be slower..but, not...)

                //for a partial path, or non-reachable, expand more open-list is even better!
                m_pPathData.FindPathJPS(p1.ToV2(), p2.ToV2(), 30, out eres);
                m_pPathData.FindPathJPSMJ(p1.ToV2(), p2.ToV2(), 7, out eres);
            }
        }

        #endregion
    }
Exemple #6
0
    protected void BuildTextureDataWithFolder()
    {
        #region Step1: Find all files

        string sFolderTx = Application.dataPath + "/"
                           + SceneConstant.m_sArtworkPath
                           + TypeName
                           + SceneConstant.m_sSceneTexturesPath;
        string sFolderDoc = Application.dataPath + "/"
                            + SceneConstant.m_sArtworkPath
                            + TypeName
                            + SceneConstant.m_sDecoratesPath;

        CRuntimeLogger.Log("将从" + sFolderTx + "和" + sFolderDoc + "收集信息");
        DirectoryInfo dirtx  = new DirectoryInfo(sFolderTx);
        DirectoryInfo dirdoc = new DirectoryInfo(sFolderDoc);
        if (!dirtx.Exists || !dirdoc.Exists)
        {
            CRuntimeLogger.LogWarning("你选择目录内容不太对吧!");
            return;
        }

        List <FileInfo> allTextures = new List <FileInfo>();
        allTextures.AddRange(dirtx.GetFiles("*.png", SearchOption.AllDirectories));
        allTextures.AddRange(dirdoc.GetFiles("*.png", SearchOption.AllDirectories));
        List <FileInfo> allModels = dirdoc.GetFiles("*.fbx", SearchOption.AllDirectories).ToList();

        #endregion

        #region Step2: Create SceneType

        CSceneType scenetypes = new CSceneType();
        scenetypes.Load();
        if (null == scenetypes[TypeName])
        {
            CSceneTypeElement newType = scenetypes.CreateElement(TypeName);
            newType.m_bCanRot          = CanRotate;
            newType.m_eEdgeType        = EdgeType;
            newType.m_iCliffType       = CliffType;
            newType.m_bHasGroundOffset = HasGroundOffset;
        }
        else
        {
            scenetypes[TypeName].m_bCanRot          = CanRotate;
            scenetypes[TypeName].m_eEdgeType        = EdgeType;
            scenetypes[TypeName].m_iCliffType       = CliffType;
            scenetypes[TypeName].m_bHasGroundOffset = HasGroundOffset;
        }
        scenetypes.Save();

        #endregion

        #region Step3: Bake Texture Atlas

        Dictionary <int, int>          codes = new Dictionary <int, int>(new IntEqualityComparer());
        Dictionary <string, Texture2D> txDic = new Dictionary <string, Texture2D>();
        foreach (FileInfo fileInfo in allTextures)
        {
            string    sFileName  = CommonFunctions.GetLastName(fileInfo.FullName);
            string[]  twoparts   = sFileName.Split('_');
            string    sAssetPath = "Assets" + fileInfo.FullName.Replace("\\", "/").Replace(Application.dataPath.Replace("\\", "/"), "");
            Texture2D t1         = AssetDatabase.LoadAssetAtPath(sAssetPath, typeof(Texture2D)) as Texture2D;
            txDic.Add(sFileName, (Texture2D)EditorCommonFunctions.GetReadWritable(t1));

            //Check whether is a template texture
            int iCode, iRepeat;
            if (2 == twoparts.Length &&
                !string.IsNullOrEmpty(twoparts[0]) &&
                int.TryParse(twoparts[0].Substring(1, twoparts[0].Length - 1), out iCode) &&
                int.TryParse(twoparts[1], out iRepeat))
            {
                if (codes.ContainsKey(iCode))
                {
                    if (codes[iCode] < iRepeat)
                    {
                        codes[iCode] = iRepeat;
                    }
                }
                else
                {
                    codes.Add(iCode, iRepeat);
                }
            }
        }

        Dictionary <string, Rect> textureDic = EditorCommonFunctions.PackTexture(
            txDic,
            SceneConstant.m_sArtworkPath
            + TypeName
            + SceneConstant.m_sSceneTexturesPath,
            Shader.Find("Mobile/Unlit (Supports Lightmap)"), EditorCommonFunctions.EPackColorFormat.ForcePng);

        #endregion

        #region Step4: Make template

        CSceneGroudTemplate tamplate = new CSceneGroudTemplate {
            m_sSceneType = TypeName
        };

        foreach (KeyValuePair <string, Rect> kvp in textureDic)
        {
            CSceneGroudTemplateElement newGT = tamplate.CreateElement();
            tamplate.ChangeName(newGT.m_sElementName, kvp.Key);
            newGT.m_vUV = CommonFunctions.Rect2V4(kvp.Value);
        }
        tamplate.Save();

        #endregion

        #region Step5: Make Scene Texture

        CSceneTexture newT = new CSceneTexture {
            m_sSceneType = TypeName
        };

        for (int lt = 0; lt < 3; ++lt)
        {
            for (int rt = 0; rt < 3; ++rt)
            {
                for (int rb = 0; rb < 3; ++rb)
                {
                    for (int lb = 0; lb < 3; ++lb)
                    {
                        int  iCode, iRots;
                        bool bFlip;
                        FindCodeAndRot(codes, lt, rt, rb, lb, out iCode, out iRots, out bFlip);
                        if (iCode < 0)
                        {
                            CRuntimeLogger.LogError(string.Format("组合没有找到{0}-{1}-{2}-{3}", lt, rt, rb, lb));
                            return;
                        }

                        CSceneTextureElement newE = newT.CreateElement();

                        int iCode2 = lt * CommonFunctions.IntPow(3, 0)
                                     + rt * CommonFunctions.IntPow(3, 1)
                                     + rb * CommonFunctions.IntPow(3, 2)
                                     + lb * CommonFunctions.IntPow(3, 3);
                        newT.ChangeName(newE.m_sElementName, "T" + iCode2);
                        if (iCode2 != newE.m_iID)
                        {
                            newT.ChangeId(newE.m_iID, iCode2);
                        }

                        newE.m_iTemplate     = iCode;
                        newE.m_iRotNumber    = iRots;
                        newE.m_iTextureCount = codes[iCode];
                        newE.m_bReflect      = bFlip;
                    }
                }
            }
        }

        newT.Save();

        #endregion

        #region Step6: Make Decorate

        Dictionary <int, string> modelTemplates = new Dictionary <int, string>(new IntEqualityComparer());
        Dictionary <int, int>    modelRepeates  = new Dictionary <int, int>(new IntEqualityComparer());
        foreach (FileInfo fileInfo in allModels)
        {
            string   sFileName  = CommonFunctions.GetLastName(fileInfo.FullName);
            string[] twoparts   = sFileName.Split('_');
            string   sAssetPath = "Assets" + fileInfo.FullName.Replace("\\", "/").Replace(Application.dataPath.Replace("\\", "/"), "");

            //Check whether is a template texture
            int iCode, iRepeat;
            if (3 == twoparts.Length &&
                int.TryParse(twoparts[1], out iCode) &&
                int.TryParse(twoparts[2], out iRepeat) &&
                iCode < 3 && iCode >= 0)
            {
                //Make template data
                if (!modelTemplates.ContainsKey(iCode))
                {
                    modelTemplates.Add(iCode, twoparts[0] + "_" + iCode);
                }

                if (!modelRepeates.ContainsKey(iCode))
                {
                    modelRepeates.Add(iCode, iRepeat);
                }
                else if (modelRepeates[iCode] < iRepeat)
                {
                    modelRepeates[iCode] = iRepeat;
                }

                //Make the mesh
                List <Vector3> verts    = new List <Vector3>();
                List <Vector2> uvs      = new List <Vector2>();
                List <int>     trangles = new List <int>();

                GameObject go = AssetDatabase.LoadMainAssetAtPath(sAssetPath) as GameObject;
                if (null != go)
                {
                    foreach (MeshFilter mf in go.GetComponentsInChildren <MeshFilter>(true))
                    {
                        Mesh editablemesh = (Mesh)EditorCommonFunctions.GetReadWritable(mf.sharedMesh);
                        int  iVertCount   = verts.Count;
                        Rect rct;

                        MeshRenderer mr = mf.gameObject.GetComponent <MeshRenderer>();
                        if (null != mr && null != mr.sharedMaterial && null != mr.sharedMaterial.mainTexture &&
                            textureDic.ContainsKey(mr.sharedMaterial.mainTexture.name))
                        {
                            rct = textureDic[mr.sharedMaterial.mainTexture.name];
                        }
                        else if (textureDic.ContainsKey(editablemesh.name))
                        {
                            rct = textureDic[editablemesh.name];
                        }
                        else
                        {
                            CRuntimeLogger.LogWarning("Mesh找不到贴图:" + sAssetPath);
                            return;
                        }

                        if (mf.transform == go.transform)
                        {
                            verts.AddRange(editablemesh.vertices);
                        }
                        else
                        {
                            for (int i = 0; i < editablemesh.vertices.Length; ++i)
                            {
                                Vector3 worldPos = mf.transform.localToWorldMatrix.MultiplyVector(editablemesh.vertices[i]) + mf.transform.position;
                                verts.Add(go.transform.worldToLocalMatrix.MultiplyVector(worldPos - go.transform.position));
                            }
                        }
                        for (int i = 0; i < editablemesh.uv.Length; ++i)
                        {
                            float fX = Mathf.Clamp01(editablemesh.uv[i].x);
                            float fY = Mathf.Clamp01(editablemesh.uv[i].y);
                            uvs.Add(new Vector2(rct.xMin + rct.width * fX, rct.yMin + rct.height * fY));
                        }
                        for (int i = 0; i < editablemesh.triangles.Length; ++i)
                        {
                            trangles.Add(iVertCount + editablemesh.triangles[i]);
                        }
                    }
                }
                Mesh theMesh = new Mesh {
                    vertices = verts.ToArray(), uv = uvs.ToArray(), triangles = trangles.ToArray()
                };
                theMesh.RecalculateNormals();
                Unwrapping.GenerateSecondaryUVSet(theMesh);
                ;
                AssetDatabase.CreateAsset(theMesh, "Assets/"
                                          + SceneConstant.m_sArtworkPath + TypeName
                                          + SceneConstant.m_sDecoratesPath
                                          + "/Generate/" + sFileName + ".asset");
            }
        }

        CSceneDecorate doc = new CSceneDecorate {
            m_sSceneType = TypeName
        };
        CSceneDecorate olddoc = new CSceneDecorate {
            m_sSceneType = TypeName
        };
        olddoc.Load();
        foreach (KeyValuePair <int, string> kvp in modelTemplates)
        {
            CSceneDecorateElement element = doc.CreateElement(kvp.Value);
            if (element.m_iID != kvp.Key)
            {
                doc.ChangeId(element.m_iID, kvp.Key);
            }
            element.m_iDecrateRepeat = modelRepeates[kvp.Key];
            if (null != olddoc[kvp.Key])
            {
                element.m_bBlockPathfinding = olddoc[kvp.Key].m_bBlockPathfinding;
                element.m_iDecrateSize      = olddoc[kvp.Key].m_iDecrateSize;
                element.m_bOnlyRotateY      = olddoc[kvp.Key].m_bOnlyRotateY;
            }
        }
        doc.Save();
        AssetDatabase.Refresh();

        #endregion
    }
 static void CountLineFunc()
 {
     ResourcesManager.Clear();
     AssetDatabase.Refresh();
     CRuntimeLogger.Log("Done!");
 }