Example #1
0
        private void LateUpdate()
        {
            Rect  cameraRect  = MapCamera.GetComponent <CameraController>().GetCameraRect();
            float pixelWidth  = MapCamera.GetComponent <CameraController>().GetPixelWidth();
            float masterAlpha = Mathf.Lerp(1, 0, (MapCamera.GetComponent <Camera>().orthographicSize - StartAlpha) / (EndAlpha - StartAlpha));

            Rect[,] spriteRects = Helpers.SubdivideRect(cameraRect, SpriteColumns, SpriteRows);
            for (int spriteColumn = 0; spriteColumn < SpriteColumns; spriteColumn++)
            {
                for (int spriteRow = 0; spriteRow < SpriteRows; spriteRow++)
                {
                    Sprites[spriteColumn, spriteRow].transform.position   = spriteRects[spriteColumn, spriteRow].min;
                    Sprites[spriteColumn, spriteRow].transform.localScale = spriteRects[spriteColumn, spriteRow].size;
                    Rect[,] shaderRects = Helpers.SubdivideRect(spriteRects[spriteColumn, spriteRow], ColumnsPerShader, RowsPerShader);

                    for (int shaderColumn = 0; shaderColumn < ColumnsPerShader; shaderColumn++)
                    {
                        for (int shaderRow = 0; shaderRow < RowsPerShader; shaderRow++)
                        {
                            int offset = RowsPerShader * shaderColumn + shaderRow;
                            int count  = 0;
                            Contents.GetLocalBodies(shaderRects[shaderColumn, shaderRow], BodyVectors[spriteColumn, spriteRow], MaxObjectsPerShaderSegment * offset, ref count);
                            NumberOfBodies[spriteColumn, spriteRow][offset] = count;
                        }
                    }

                    Sprites[spriteColumn, spriteRow].GetComponent <SpriteRenderer>().material.SetVectorArray("bodies", BodyVectors[spriteColumn, spriteRow]);
                    Sprites[spriteColumn, spriteRow].GetComponent <SpriteRenderer>().material.SetFloatArray("numberOfBodies", NumberOfBodies[spriteColumn, spriteRow]);
                    Sprites[spriteColumn, spriteRow].GetComponent <SpriteRenderer>().material.SetFloat("pixelWidth", pixelWidth);
                    Sprites[spriteColumn, spriteRow].GetComponent <SpriteRenderer>().material.SetFloat("masterAlpha", masterAlpha);
                }
            }
        }
Example #2
0
 /// <summary>
 /// Get all bodies who's rect overlaps with the provided worldRect (Cull).
 /// </summary>
 /// <param name="worldRect"></param>
 /// <param name="minimumSize"></param>
 /// <returns></returns>
 public void GetLocalBodies(Rect worldRect, Vector4[] output, int offset, ref int index)
 {
     foreach (Vector4 celestialBody in Contents)
     {
         float top    = celestialBody.y + celestialBody.z;
         float bottom = celestialBody.y - celestialBody.z;
         float left   = celestialBody.x - celestialBody.z;
         float right  = celestialBody.x + celestialBody.z;
         if (top > worldRect.yMin && bottom < worldRect.yMax && left < worldRect.xMax && right > worldRect.xMin)
         {
             if (index < 100)
             {
                 output[offset + index++] = celestialBody;
             }
             else
             {
                 return;
             }
         }
     }
     if (QuadOne != null)
     {
         if (QuadOne.Rect.Overlaps(worldRect))
         {
             QuadOne.GetLocalBodies(worldRect, output, offset, ref index);
         }
         if (QuadTwo.Rect.Overlaps(worldRect))
         {
             QuadTwo.GetLocalBodies(worldRect, output, offset, ref index);
         }
         if (QuadThree.Rect.Overlaps(worldRect))
         {
             QuadThree.GetLocalBodies(worldRect, output, offset, ref index);
         }
         if (QuadFour.Rect.Overlaps(worldRect))
         {
             QuadFour.GetLocalBodies(worldRect, output, offset, ref index);
         }
     }
 }