static public void RegisterDisplayListEntryMaker(IExternalDisplayListEntryMaker m) { for (int i = 0; i < dlMakerReg.Count; i++) { if (dlMakerReg[i].GetRendererComponent() == m.GetRendererComponent()) { Assert.IsTrue(false, "Duplicate entry."); return; } } dlMakerReg.Add(m); }
protected void AddItemsToListByType(IExternalDisplayListEntryMaker dlm, DisplayListCamera dlc, Camera2D c2d, DynamicBuffer <DisplayListEntry> dest, DynamicBuffer <SortedEntity> destSorted) { var mgr = EntityManager; dlm.Update(this); var cachedGetLayerSorting = GetComponentDataFromEntity <LayerSorting>(true); bool doNotClip = dlm.DoNotClip(); var query = Entities; // build the query: Add base filter and dlm, then add per - camera filter dlm.Filter(ref query); // add camera 'layer' filter AddLayerFilter(ref query, c2d); // run query query.ForEach((Entity e, ref PrivateTransformData ptd, ref LocalToWorld tx) => { DisplayListEntry de = default; de.e = e; if (!dlm.MakeEntry(mgr, ref de)) { return; } if (!FinishDisplayListEntry(ref de, ref dlc, ref tx, ref ptd, doNotClip)) { return; } float z = math.dot(de.finalMatrix[3], dlc.sortingDot); // = Dot(de.finalMatrix.GetColumn(3), dlc.camSortingDot); TODO CHECK SortedEntity se = new SortedEntity { e = de.e, idx = dest.Length }; if (cachedGetLayerSorting.Exists(de.e)) { var sortEx = cachedGetLayerSorting[de.e]; se.CombineKey(z, sortEx.layer, sortEx.order); } else { se.CombineKey(z); } se.e = de.e; se.idx = dest.Length; dest.Add(de); destSorted.Add(se); }); }