コード例 #1
0
        public static bool EqualCheck(TriangleData point1, TriangleData point2)
        {
            bool ret = false;

            if (point1.Point[1] == point2.Point[2] && point1.Point[2] == point2.Point[1])
            {
                ret = true;
            }

            return(ret);
        }
コード例 #2
0
        public IEnumerator GroundPolygonCreate(Transform parent, List <FieldPoint> pointList, List <PointType> useTypeList,
                                               Vector3 min, Vector3 max, float ofsetY = 0f, float uvPos = -1f)
        {
            var vectorList = new List <Vector3>();
            var uvList = new List <Vector2>();
            var triangleIndexList = new List <int>();
            var colorList = new List <Color32>();
            var addColor = new Color32(255, 255, 255, 0);
            var positionList = new List <Vector3>();
            var trianglePoint = new List <TriangleData>();
            int i0, i1, i2;
            var time = System.DateTime.Now;

            for (i0 = 0; i0 < pointList.Count; ++i0)
            {
                for (i1 = 0; i1 < useTypeList.Count; ++i1)
                {
                    if (pointList[i0].Type == useTypeList[i1])
                    {
                        positionList.Add(pointList[i0].Position);
                        break;
                    }
                }
            }

            var mapSize  = max - min;
            var center   = new Vector3(mapSize.x * 0.5f + min.x, 0f, mapSize.z * 0.5f + min.z);
            var addPoint = new TriangleData();
            var length   = mapSize.x + mapSize.z;

            addPoint.SetPoint(new Vector3(center.x + length, 0f, center.z - length),
                              new Vector3(center.x - length, 0f, center.z - length),
                              new Vector3(center.x, 0f, center.z + length));
            trianglePoint.Add(addPoint);

            var candidateTriangle = new List <TriangleData>();
            var checkList         = new List <bool>();

            for (i0 = 0; i0 < positionList.Count; ++i0)
            {
                candidateTriangle.Clear();
                checkList.Clear();
                for (i1 = trianglePoint.Count - 1; i1 >= 0; --i1)
                {
                    var sub        = positionList[i0] - trianglePoint[i1].CirclePoint;
                    var sub_length = sub.x * sub.x + sub.z * sub.z;
                    if (sub_length > trianglePoint[i1].CircleRadius)
                    {
                        continue;
                    }
                    for (i2 = 0; i2 < 3; ++i2)
                    {
                        addPoint = new TriangleData();
                        addPoint.SetPoint(positionList[i0], trianglePoint[i1].Point[i2], trianglePoint[i1].Point[(i2 + 1) % 3]);
                        candidateTriangle.Add(addPoint);
                        checkList.Add(false);
                    }
                    trianglePoint.RemoveAt(i1);
                }

                for (i1 = 0; i1 < candidateTriangle.Count - 1; ++i1)
                {
                    for (i2 = i1 + 1; i2 < candidateTriangle.Count; ++i2)
                    {
                        if (checkList[i1] != false && checkList[i2] != false)
                        {
                            continue;
                        }
                        var ret = TriangleData.EqualCheck(candidateTriangle[i1], candidateTriangle[i2]);
                        if (ret != false)
                        {
                            checkList[i1] = true;
                            checkList[i2] = true;
                        }
                    }
                }
                for (i1 = 0; i1 < candidateTriangle.Count; ++i1)
                {
                    if (checkList[i1] == false)
                    {
                        trianglePoint.Add(candidateTriangle[i1]);
                    }
                }
                if (System.DateTime.Now.Subtract(time).TotalMilliseconds >= LinePolygonCreator.kElapsedTimeToInterrupt)
                {
                    yield return(null);

                    time = System.DateTime.Now;
                }
            }

            var addUv = Vector2.zero;

            Vector3[] addVector = new Vector3[3];
            float     uv        = 0.01f;

            if (uvPos > 0f)
            {
                uv = uvPos;
            }
            for (i0 = 0; i0 < trianglePoint.Count; ++i0)
            {
                for (i1 = 0; i1 < 3; ++i1)
                {
                    addVector[i1]   = trianglePoint[i0].Point[i1];
                    addVector[i1].y = ofsetY;
                }
                var clossY = CrossY(addVector[0], addVector[1], addVector[2]);
                if (clossY < 0)
                {
                    var temp = addVector[1];
                    addVector[1] = addVector[2];
                    addVector[2] = temp;
                }
                for (i1 = 0; i1 < 3; ++i1)
                {
                    vectorList.Add(addVector[i1]);
                    addUv.x = addVector[i1].x * uv;
                    addUv.y = addVector[i1].z * uv;
                    uvList.Add(addUv);
                    triangleIndexList.Add(i0 * 3 + i1);
                }
            }

            var SystemRandom   = new System.Random();
            var overwritePoint = new Vector3(0, 0, 0);

            overwritePoint.x = (float)SystemRandom.NextDouble() * mapSize.x + min.x;
            overwritePoint.z = (float)SystemRandom.NextDouble() * mapSize.z + min.z;
            float alphaLength = (float)SystemRandom.NextDouble() * 300f + 200f;

            alphaLength = alphaLength * alphaLength;
            byte alpha;

            for (i0 = 0; i0 < vectorList.Count; ++i0)
            {
                var sub = overwritePoint - vectorList[i0];
                length = sub.x * sub.x + sub.z * sub.z;
                if (length < alphaLength)
                {
                    alpha = (byte)((1f - (length / alphaLength)) * 255.1f);
                }
                else
                {
                    alpha = 0;
                }
                addColor.a = alpha;
                colorList.Add(addColor);
            }

            GameObject obj = Object.Instantiate(createObj) as GameObject;

            obj.transform.parent = parent;
            var meshScript = obj.GetComponent <MeshCreator>();

            meshScript.PolygonCreate(vectorList, triangleIndexList, uvList, colorList);
        }