public void RegistBoundaryPointData(int _key, GameBoundaryPointData _boundaryPointData) { if (!IsRegistedBoundaryDetector(_key)) { m_dicBoundaryPointData.Add(_key, _boundaryPointData); } if (_key == 0) { SelectBoundary(0); } }
public void SetDetectorData_Renewal(int _key, GameBoundaryPointData _boundaryPointData) { ID = _key; boundaryPointData = _boundaryPointData; RecalculateMaxAndMin(); }
public BoundaryDetector(int _key, GameBoundaryPointData _boundaryPointData) { SetDetectorData_Renewal(_key, _boundaryPointData); }
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(); }