private void ProcessSpriteRender(MinMaxAABB sceneBounds, UnityEngine.SpriteRenderer spriteRenderer)
        {
            var entity = GetPrimaryEntity(spriteRenderer);

            SpriteUtility.CreateSpriteComponent(DstEntityManager, entity, spriteRenderer);
            sceneBounds.Encapsulate(spriteRenderer.bounds.ToAABB());
        }
Beispiel #2
0
            public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex)
            {
                if (!chunk.DidChange(RectTransformType, LastSystemVersion) && !chunk.DidChange(LocalToWorldType, LastSystemVersion))
                {
                    return;
                }

                var rectTransforms = chunk.GetNativeArray(RectTransformType);
                var localToWorld   = chunk.GetNativeArray(LocalToWorldType);

                var        worldRectTransforms = chunk.GetNativeArray(WorldRectTransformType);
                MinMaxAABB combined            = MinMaxAABB.Empty;

                for (int i = 0; i != rectTransforms.Length; i++)
                {
                    var transformed = AABB.Transform(localToWorld[i].Value, rectTransforms[i].Value);
                    worldRectTransforms[i] = new WorldRectTransform {
                        Value = transformed
                    };
                    combined.Encapsulate(transformed);
                }
                chunk.SetChunkComponentData(ChunkWorldRectTransformType, new ChunkWorldRectTransform {
                    Value = combined
                });
            }
            public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex)
            {
                if (!chunk.DidChange(RendererBounds, LastSystemVersion) && !chunk.DidChange(LocalToWorld, LastSystemVersion))
                {
                    return;
                }

                //@TODO: Delta change...
                var        worldBounds  = chunk.GetNativeArray(WorldRenderBounds);
                var        localBounds  = chunk.GetNativeArray(RendererBounds);
                var        localToWorld = chunk.GetNativeArray(LocalToWorld);
                MinMaxAABB combined     = MinMaxAABB.Empty;

                for (int i = 0; i != localBounds.Length; i++)
                {
                    var transformed = AABB.Transform(localToWorld[i].Value, localBounds[i].Value);

                    worldBounds[i] = new WorldRenderBounds {
                        Value = transformed
                    };
                    combined.Encapsulate(transformed);
                }

                chunk.SetChunkComponentData(ChunkWorldRenderBounds, new ChunkWorldRenderBounds {
                    Value = combined
                });
            }
Beispiel #4
0
        public static void Encapsulate_float3_new_min()
        {
            var aabb = new MinMaxAABB();

            aabb.Encapsulate(new float3(-1.0f));
            TestUtils.AreEqual(float3.zero, aabb.Max);
            TestUtils.AreEqual(new float3(-1.0f), aabb.Min);
        }
Beispiel #5
0
        public static void IsEmpty_min_gt_max()
        {
            var aabb = new MinMaxAABB {
                Min = new float3(1.0f), Max = new float3(-1.0f)
            };

            TestUtils.IsFalse(aabb.IsEmpty);
        }
Beispiel #6
0
        public static void Encapsulate_float3_new_miny_maxxz()
        {
            var aabb = new MinMaxAABB();

            aabb.Encapsulate(new float3(1.0f, -1.0f, 1.0f));
            TestUtils.AreEqual(new float3(0.0f, -1.0f, 0.0f), aabb.Min);
            TestUtils.AreEqual(new float3(1.0f, 0.0f, 1.0f), aabb.Max);
        }
Beispiel #7
0
        public static void ContainsAabb()
        {
            var aabb1 = new MinMaxAABB(new float3(-1.0f), new float3(1.0f));
            var aabb2 = new MinMaxAABB(new float3(-0.5f), new float3(0.5f));

            TestUtils.IsTrue(aabb1.Contains(aabb2));
            TestUtils.IsFalse(aabb2.Contains(aabb1));
        }
Beispiel #8
0
        public static void Encapsulate_MinMaxAABB_trivial()
        {
            var aabb = new MinMaxAABB();

            aabb.Encapsulate(new MinMaxAABB());
            TestUtils.AreEqual(float3.zero, aabb.Min);
            TestUtils.AreEqual(float3.zero, aabb.Max);
        }
Beispiel #9
0
        public static void ContainsAabb_Trivial()
        {
            var aabb1 = new MinMaxAABB();
            var aabb2 = new MinMaxAABB();

            TestUtils.IsTrue(aabb1.Contains(aabb2));
            TestUtils.IsTrue(aabb2.Contains(aabb1));
        }
Beispiel #10
0
        public static void Constructor()
        {
            var min  = new float3(38.95940399169921875f, -24.644245147705078125f, 27.7903194427490234375f);
            var max  = new float3(71.30234527587890625f, 52.2211151123046875f, 99.07735443115234375f);
            var aabb = new MinMaxAABB(min, max);

            TestUtils.AreEqual(min, aabb.Min);
            TestUtils.AreEqual(max, aabb.Max);
        }
Beispiel #11
0
        public static void Expand_NegativeDistance()
        {
            var aabb = new MinMaxAABB(new float3(-0.5f), new float3(0.5f));

            aabb.Expand(-1.0f);

            TestUtils.AreEqual(new float3(0.5f), aabb.Min);
            TestUtils.AreEqual(new float3(-0.5f), aabb.Max);
        }
Beispiel #12
0
        public static AABB GetEncompassingAABB(MinMaxAABB a, MinMaxAABB b)
        {
            MinMaxAABB returnAABB = new MinMaxAABB();

            returnAABB.Min = math.min(a.Min, b.Min);
            returnAABB.Max = math.max(a.Max, b.Max);

            return(returnAABB);
        }
Beispiel #13
0
 public static void GrowAABB(ref MinMaxAABB sourceAABB, float3 includePoint)
 {
     sourceAABB.Min.x = math.min(sourceAABB.Min.x, includePoint.x);
     sourceAABB.Min.y = math.min(sourceAABB.Min.y, includePoint.y);
     sourceAABB.Min.z = math.min(sourceAABB.Min.z, includePoint.z);
     sourceAABB.Max.x = math.max(sourceAABB.Max.x, includePoint.x);
     sourceAABB.Max.y = math.max(sourceAABB.Max.y, includePoint.y);
     sourceAABB.Max.z = math.max(sourceAABB.Max.z, includePoint.z);
 }
        public static void Convert_AABB_to_MinMaxAABB()
        {
            AABB aabb = new AABB {
                Center = new float3(1.5f), HalfExtents = new float3(0.5f)
            };
            MinMaxAABB minmax = aabb;

            TestUtils.AreEqual(new float3(1.0f), minmax.Min);
            TestUtils.AreEqual(new float3(2.0f), minmax.Max);
        }
Beispiel #15
0
        public static void SurfaceArea()
        {
            var min  = new float3(-47.989063262939453125f, 28.037994384765625f, -9.756519317626953125f);
            var max  = new float3(43.84253692626953125f, 101.54019927978515625f, -7.03227138519287109375f);
            var aabb = new MinMaxAABB {
                Min = min, Max = max
            };

            TestUtils.AreEqual(14400.470703125f, aabb.SurfaceArea, 1, true);
        }
Beispiel #16
0
        public static void Equals_diff_maxz()
        {
            MinMaxAABB aabb1 = new MinMaxAABB();
            MinMaxAABB aabb2 = new MinMaxAABB {
                Max = new float3(0.0f, 0.0f, 1.0f)
            };

            TestUtils.IsFalse(aabb1.Equals(aabb2));
            TestUtils.IsFalse(aabb2.Equals(aabb1));
        }
Beispiel #17
0
        public static void Equals()
        {
            MinMaxAABB aabb1 = new MinMaxAABB {
                Min = new float3(-123.0f, 0.5182f, 20.0f), Max = new float3(1.0f, -1.0f, 0.99191f)
            };
            MinMaxAABB aabb2 = aabb1;

            TestUtils.IsTrue(aabb1.Equals(aabb2));
            TestUtils.IsTrue(aabb2.Equals(aabb1));
        }
Beispiel #18
0
        public static void Encapsulate_MinMaxAABB_new_minz_maxxy()
        {
            var aabb = new MinMaxAABB();

            aabb.Encapsulate(new MinMaxAABB {
                Min = new float3(0.0f, 0.0f, -1.0f), Max = new float3(1.0f, 1.0f, 0.0f)
            });
            TestUtils.AreEqual(new float3(0.0f, 0.0f, -1.0f), aabb.Min);
            TestUtils.AreEqual(new float3(1.0f, 1.0f, 0.0f), aabb.Max);
        }
        public static void Convert_MinMaxAABB_to_AABB()
        {
            var minmax = new MinMaxAABB {
                Min = new float3(1.0f), Max = new float3(2.0f)
            };
            AABB aabb = minmax;

            TestUtils.AreEqual(new float3(1.5f), aabb.Center);
            TestUtils.AreEqual(new float3(0.5f), aabb.HalfExtents);
        }
Beispiel #20
0
        public static void Encapsulate_MinMaxAABB_new_min()
        {
            var aabb = new MinMaxAABB();
            var p    = new float3(-1.0f);

            aabb.Encapsulate(new MinMaxAABB {
                Min = p
            });
            TestUtils.AreEqual(float3.zero, aabb.Max);
            TestUtils.AreEqual(p, aabb.Min);
        }
Beispiel #21
0
        MinMaxAABB GetMinMax()
        {
            MinMaxAABB bounds = MinMaxAABB.Empty;

            foreach (SubScene subScene in targets)
            {
                bounds.Encapsulate(subScene.SceneBoundingVolume);
            }

            return(bounds);
        }
Beispiel #22
0
        public static void Extents()
        {
            var min  = new float3(48.152984619140625f, -33.58978271484375f, -37.498805999755859375f);
            var max  = new float3(111.2894439697265625f, -9.473724365234375f, 25.39115142822265625f);
            var aabb = new MinMaxAABB {
                Min = min, Max = max
            };
            var expected = new float3(63.1364593505859375f, 24.116058349609375f, 62.889957427978515625f);

            TestUtils.AreEqual(expected, aabb.Extents);
        }
Beispiel #23
0
        public static void Center()
        {
            var min  = new float3(47.902675628662109375f, -34.302494049072265625f, 22.7147884368896484375f);
            var max  = new float3(84.1039886474609375f, 23.274578094482421875f, 58.204532623291015625f);
            var aabb = new MinMaxAABB {
                Min = min, Max = max
            };
            var expected = new float3(66.00333404541015625f, -5.513957977294921875f, 40.459659576416015625f);

            TestUtils.AreEqual(expected, aabb.Center);
        }
Beispiel #24
0
        public static void CreateFromCenterAndHalfExtents()
        {
            var center      = new float3(-29.2458133697509765625f, 1.21094369888305664063f, 34.281322479248046875f);
            var halfExtents = new float3(8.8238582611083984375f, 72.26158905029296875f, 47.658290863037109375f);
            var expectedMin = new float3(-38.069671630859375f, -71.0506439208984375f, -13.3769683837890625f);
            var expectedMax = new float3(-20.421955108642578125f, 73.4725341796875f, 81.93961334228515625f);
            var aabb        = MinMaxAABB.CreateFromCenterAndHalfExtents(center, halfExtents);

            TestUtils.AreEqual(expectedMin, aabb.Min);
            TestUtils.AreEqual(expectedMax, aabb.Max);
        }
Beispiel #25
0
        public static void CreateFromCenterAndExtents()
        {
            var center      = new float3(-29.2458133697509765625f, 1.21094369888305664063f, 34.281322479248046875f);
            var extents     = new float3(71.5140533447265625f, 33.691967010498046875f, 29.8891429901123046875f);
            var expectedMin = new float3(-65.002838134765625f, -15.635040283203125f, 19.336750030517578125f);
            var expectedMax = new float3(6.5112133026123046875f, 18.056926727294921875f, 49.225894927978515625f);
            var aabb        = MinMaxAABB.CreateFromCenterAndExtents(center, extents);

            TestUtils.AreEqual(expectedMin, aabb.Min);
            TestUtils.AreEqual(expectedMax, aabb.Max);
        }
Beispiel #26
0
        public static void HalfExtents()
        {
            var min  = new float3(-14.3485383987426757813f, 28.68161773681640625f, -40.28060150146484375f);
            var max  = new float3(4.26444864273071289063f, 99.3212738037109375f, 27.9023494720458984375f);
            var aabb = new MinMaxAABB {
                Min = min, Max = max
            };
            var expected = new float3(9.3064937591552734375f, 35.319828033447265625f, 34.0914764404296875f);

            TestUtils.AreEqual(expected, aabb.HalfExtents);
        }
Beispiel #27
0
 public void Execute()
 {
     for (var i = 0; i < Chunks.Length; ++i)
     {
         if (SharedComponentIndex == Chunks[i].GetSharedComponentIndex(FilterType))
         {
             MinMaxAABB bounds = ChunkWorldBounds.Value;
             bounds.Encapsulate(Chunks[i].GetChunkComponentData(ChunkWorldRenderBoundsType).Value);
             ChunkWorldBounds.Value = bounds;
         }
     }
 }
        void IJob.Execute()
        {
            MinMaxAABB combined = MinMaxAABB.Empty;

            for (int i = InputLength - 1; i != -1; i--)
            {
                combined.Encapsulate(Input[i].c0);
                combined.Encapsulate(Input[i].c1);
            }
            Output[OutputIndex] = !combined.IsEmpty
                                ?       new Bounds {
                min = combined.Min, max = combined.Max
            }
                                :       default(Bounds);
        }
Beispiel #29
0
        public static void ContainsAabb_BarelyNotContained()
        {
            var aabb1 = new MinMaxAABB(new float3(-1.0f), new float3(1.0f));
            var aabb2 = new MinMaxAABB(new float3(-1.0f), new float3(1.0f + EPSILON, 1.0f, 1.0f));
            var aabb3 = new MinMaxAABB(new float3(-1.0f), new float3(1.0f, 1.0f + EPSILON, 1.0f));
            var aabb4 = new MinMaxAABB(new float3(-1.0f), new float3(1.0f, 1.0f, 1.0f + EPSILON));
            var aabb5 = new MinMaxAABB(new float3(-1.0f - EPSILON, -1.0f, -1.0f), new float3(1.0f));
            var aabb6 = new MinMaxAABB(new float3(-1.0f, -1.0f - EPSILON, -1.0f), new float3(1.0f));
            var aabb7 = new MinMaxAABB(new float3(-1.0f, -1.0f, -1.0f - EPSILON), new float3(1.0f));

            TestUtils.IsFalse(aabb1.Contains(aabb2));
            TestUtils.IsFalse(aabb1.Contains(aabb3));
            TestUtils.IsFalse(aabb1.Contains(aabb4));
            TestUtils.IsFalse(aabb1.Contains(aabb5));
            TestUtils.IsFalse(aabb1.Contains(aabb6));
            TestUtils.IsFalse(aabb1.Contains(aabb7));
        }
Beispiel #30
0
        public static MinMaxAABB GetActiveWorldMinMax(World world, UnityEngine.Object[] targets)
        {
            MinMaxAABB bounds = MinMaxAABB.Empty;

            if (world == null)
                return bounds;

            var entities = world.EntityManager;
            foreach (SubScene subScene in targets)
            {
                foreach (var section in GetActiveWorldSections(World.DefaultGameObjectInjectionWorld, subScene.SceneGUID))
                {
                    if (entities.HasComponent<SceneBoundingVolume>(section))
                        bounds.Encapsulate(entities.GetComponentData<SceneBoundingVolume>(section).Value);
                }
            }

            return bounds;
        }