Example #1
0
        public void RegistBoundaryPointData(int _key, GameBoundaryPointData _boundaryPointData)
        {
            if (!IsRegistedBoundaryDetector(_key))
            {
                m_dicBoundaryPointData.Add(_key, _boundaryPointData);
            }

            if (_key == 0)
            {
                SelectBoundary(0);
            }
        }
Example #2
0
 public void SetDetectorData_Renewal(int _key, GameBoundaryPointData _boundaryPointData)
 {
     ID = _key;
     boundaryPointData = _boundaryPointData;
     RecalculateMaxAndMin();
 }
Example #3
0
 public BoundaryDetector(int _key, GameBoundaryPointData _boundaryPointData)
 {
     SetDetectorData_Renewal(_key, _boundaryPointData);
 }
Example #4
0
            public void SetBoundaryMesh_Renewal(GameBoundaryPointData _pointData)
            {
                boundaryRoot           = _pointData.BoundaryRoot;
                GameLoop.onLateUpdate -= GameLoop_onLateUpdate;
                if (_pointData.BoundaryRoot != null)
                {
                    boundaryRoot             = _pointData.BoundaryRoot;
                    m_refTmBoundary.position = boundaryRoot.position;
                    m_refTmBoundary.rotation = boundaryRoot.rotation;
                    GameLoop.onLateUpdate   += GameLoop_onLateUpdate;
                }
                else
                {
                    m_refTmBoundary.position = Vector3.zero;
                    m_refTmBoundary.rotation = Quaternion.identity;
                }

                m_refMeshBoundary.Clear();


                Vector3[] _points = new Vector3[_pointData.BoundaryPoints.Length];
                for (int i = 0; i < _points.Length; i++)
                {
                    _points[i] = _pointData.BoundaryPoints[i].position - m_refTmBoundary.position;
                }
                int resX = _points.Length; // 2 minimum
                int resY = 2;

                #region Vertices
                Vector3[] vertices;
                vertices = new Vector3[(resX) * (resY)];
                int vertexIndex = 0;
                for (int y = 0; y < resY; y++)
                {
                    for (int x = 0; x < resX; x++)
                    {
                        vertices[vertexIndex] = new Vector3(_points[x].x, _points[x].y + y * height, _points[x].z);
                        vertexIndex++;
                    }
                }
                #endregion

                #region UVs
                Vector2[] uvs;
                uvs = new Vector2[vertices.Length];
                Vector3 lastPosition = _points[0];
                for (int v = 0; v < resY; v++)
                {
                    float calculateDistance = 0;
                    for (int u = 0; u < resX; u++)
                    {
                        float dist = Vector3.Distance(_points[u], lastPosition);
                        calculateDistance += dist;
                        uvs[u + v * resX]  = new Vector2(calculateDistance, v * height);
                        lastPosition       = _points[u];
                    }
                }

                #endregion
                #region Triangles

                int   triangleCount = (resX - 1) * (resY - 1);
                int[] triangles     = new int[triangleCount * 6];
                for (int i = 0; i < triangleCount; i++)
                {
                    int triangleIndex = i * 6;

                    triangles[triangleIndex]     = i;
                    triangles[triangleIndex + 1] = i + resX;
                    triangles[triangleIndex + 2] = i + 1;

                    triangles[triangleIndex + 3] = i + 1;
                    triangles[triangleIndex + 4] = i + resX;
                    triangles[triangleIndex + 5] = resX + i + 1;
                }
                #endregion

                m_refMeshBoundary.vertices  = vertices;
                m_refMeshBoundary.uv        = uvs;
                m_refMeshBoundary.triangles = triangles;

                m_refMeshBoundary.RecalculateBounds();
            }