Beispiel #1
0
        public bool CastGroup(Ray ray, TerrainBrush brush, List <TerrainChunk> colliedChunks, out Vector3 HitPoint)
        {
            RaycastHit info     = default(RaycastHit);
            bool       Collided = false;

            HitPoint = Vector3.zero;

            List <TerrainChunk> CopyChunks = Chunks;
            int nChildCount = CopyChunks.Count;

            int nCopyChunkCount = CopyChunks.Count;

            for (int idx = 0; idx < nCopyChunkCount; ++idx)
            {
                TerrainChunk Curchunk = CopyChunks[idx];

                if (Curchunk.GetMeshCollider().Raycast(ray, out info, 1000))
                {
                    if (flag != null)
                    {
                        flag.transform.position = info.point;
                    }


                    Brush(info.point, Curchunk, brush);
//                         Brush(info.point + new Vector3(0.0f,0.0f,0.2f), Curchunk, brush);
//                         Brush(info.point + new Vector3(0.0f, 0.0f, -0.2f), Curchunk, brush);
//                         Brush(info.point + new Vector3(-0.2f, 0.0f, 0.0f), Curchunk, brush);
//                         Brush(info.point + new Vector3(0.2f, 0.0f, 0.0f), Curchunk, brush);

                    //return info.point;
                    HitPoint = info.point;
                    Collided = true;
                    break;
                }
            }
            float  brushLenght = (brush.Radius + brush.BlurRadius) + 2.0f;
            Circle brushCircle = new Circle(new Vector2(info.point.x, info.point.z), brushLenght);

            colliedChunks.Clear();
            if (Collided)
            {
                for (int idx = 0; idx < nCopyChunkCount; ++idx)
                {
                    if (Circle.ColliderRect(brushCircle, CopyChunks[idx]._boxRect))
                    {
                        colliedChunks.Add(CopyChunks[idx]);
                    }
                }
            }
            int nColliderChunks = colliedChunks.Count;

            for (int idx = 0; idx < nColliderChunks; ++idx)
            {
                colliedChunks[idx].BuildChunk();
            }
            return(Collided);
        }