public static void Insert(IPartitionObject obj) { if (obj is Component c && !c.Enabled) { return; } if (obj is GameObject go) { InsertGameObject(go); } else { SpatialPartition tile = FetchPartition(obj.PartitionPosition) ?? TakeFromPool(ToPartitionPoint(obj.PartitionPosition)); tile.Insert(obj); } }
private static void InsertGameObject(GameObject go) { if (!go.Enabled || go.IgnoreCulling) { return; } RectangleF bounds = go.Bounds; if (bounds.Width > TileSize || bounds.Height > TileSize) { largeObjectTile.Insert(go); } else { SpatialPartition tile = FetchPartition(go.PartitionPosition) ?? TakeFromPool(ToPartitionPoint(go.PartitionPosition)); tile.Insert(go); } }