Exemple #1
0
        private void ReleaseOldData()
        {
            Assert.IsTrue(m_objects.Count == m_renderers.Count);
            for (int i = 0; i < m_objects.Count; i++)
            {
                var go = m_objects[i];
                // If the component does not exist it means nothing else has been added as well
                if (go == null)
                {
                    continue;
                }

#if DEBUG
                go.name = m_prefabName;
#endif

                MeshFilter filter = go.GetComponent <MeshFilter>();
                filter.sharedMesh.Clear(false);
                Globals.MemPools.MeshPool.Push(filter.sharedMesh);
                filter.sharedMesh = null;

                Renderer renderer = go.GetComponent <Renderer>();
                renderer.sharedMaterial = null;

                GameObjectProvider.PushObject(m_prefabName, go);
            }

            m_objects.Clear();
            m_renderers.Clear();
        }
        /// <summary>
        ///     Creates a mesh and commits it to the engine. Bounding box set according to value passed in bounds
        /// </summary>
        public void Commit(Vector3 position, Quaternion rotation, ref Bounds bounds
#if DEBUG
                           , string debugName = null
#endif
                           )
        {
            ReleaseOldData();

            for (int j = 0; j < m_buffers.Length; j++)
            {
                var holder   = m_buffers[j];
                var material = (m_materials == null || m_materials.Length < 1) ? null : m_materials[j];

                for (int i = 0; i < holder.Count; i++)
                {
                    ColliderGeometryBuffer buffer = holder[i];

                    // No data means there's no mesh to build
                    if (buffer.IsEmpty)
                    {
                        continue;
                    }

                    // Create a game object for collider. Unfortunatelly, we can't use object pooling
                    // here. Unity3D would have to rebake the geometry of the old object because of a
                    // change in its position and that is very time consuming.
                    GameObject prefab = GameObjectProvider.GetPool(m_prefabName).Prefab;
                    GameObject go     = Object.Instantiate(prefab);
                    go.transform.parent = GameObjectProvider.Instance.ProviderGameObject.transform;

                    {
#if DEBUG
                        go.name = string.Format(debugName, "_", i.ToString());
#endif

                        Mesh mesh = Globals.MemPools.MeshPool.Pop();
                        Assert.IsTrue(mesh.vertices.Length <= 0);
                        buffer.SetupMesh(mesh, false);
                        mesh.bounds = bounds;

                        MeshCollider collider = go.GetComponent <MeshCollider>();
                        collider.enabled    = true;
                        collider.sharedMesh = null;
                        collider.sharedMesh = mesh;
                        var t = collider.transform;
                        t.position = position;
                        t.rotation = rotation;
                        collider.sharedMaterial = material;

                        m_objects.Add(go);
                    }

                    buffer.Clear();
                }
            }
        }
        /// <summary>
        ///     Finalize the draw calls
        /// </summary>
        public void Commit(Vector3 position, Quaternion rotation, PhysicMaterial material
#if DEBUG
                           , string debugName = null
#endif
                           )
        {
            ReleaseOldData();

            // No data means there's no mesh to build
            if (m_buffers[0].IsEmpty())
            {
                return;
            }

            for (int i = 0; i < m_buffers.Count; i++)
            {
                GeometryBuffer buffer = m_buffers[i];

                // Create a game object for collider. Unfortunatelly, we can't use object pooling
                // here for otherwise, unity would have to rebake because of change in object position
                // and that is very time consuming.
                GameObject prefab = GameObjectProvider.GetPool(m_prefabName).Prefab;
                GameObject go     = Object.Instantiate(prefab);
                go.transform.parent = GameObjectProvider.Instance.ProviderGameObject.transform;

                {
#if DEBUG
                    if (!string.IsNullOrEmpty(debugName))
                    {
                        go.name = debugName;
                        if (i > 0)
                        {
                            go.name = go.name + "_" + i;
                        }
                    }
#endif

                    Mesh mesh = Globals.MemPools.MeshPool.Pop();
                    Assert.IsTrue(mesh.vertices.Length <= 0);
                    UnityMeshBuilder.BuildColliderMesh(mesh, buffer);

                    MeshCollider collider = go.GetComponent <MeshCollider>();
                    collider.sharedMesh         = null;
                    collider.sharedMesh         = mesh;
                    collider.transform.position = position;
                    collider.transform.rotation = rotation;
                    collider.sharedMaterial     = material;

                    m_objects.Add(go);
                    m_colliders.Add(collider);
                }

                buffer.Clear();
            }
        }
        /// <summary>
        ///     Finalize the draw calls
        /// </summary>
        public void Commit(Vector3 position, Quaternion rotation, ref Bounds bounds
#if DEBUG
                           , string debugName = null
#endif
                           )
        {
            ReleaseOldData();

            for (int j = 0; j < Buffers.Length; j++)
            {
                var holder   = Buffers[j];
                var material = (m_materials == null || m_materials.Length < 1) ? null : m_materials[j];

                for (int i = 0; i < holder.Count; i++)
                {
                    var buffer = holder[i];

                    // No data means there's no mesh to build
                    if (buffer.IsEmpty)
                    {
                        continue;
                    }

                    var go = GameObjectProvider.PopObject(m_prefabName);
                    Assert.IsTrue(go != null);
                    if (go != null)
                    {
#if DEBUG
                        go.name = string.Format(debugName, "_", i.ToString());
#endif

                        Mesh mesh = Globals.MemPools.MeshPool.Pop();
                        Assert.IsTrue(mesh.vertices.Length <= 0);
                        buffer.SetupMesh(mesh, false);
                        mesh.bounds = bounds;

                        MeshFilter filter = go.GetComponent <MeshFilter>();
                        filter.sharedMesh = null;
                        filter.sharedMesh = mesh;
                        var t = filter.transform;
                        t.position = position;
                        t.rotation = rotation;

                        Renderer renderer = go.GetComponent <Renderer>();
                        renderer.enabled        = true;
                        renderer.sharedMaterial = material;

                        m_objects.Add(go);
                    }

                    buffer.Clear();
                }
            }
        }
        /// <summary>
        ///     Finalize the draw calls
        /// </summary>
        public void Commit(Vector3 position, Quaternion rotation, Material material
#if DEBUG
                           , string debugName = null
#endif
                           )
        {
            ReleaseOldData();

            // No data means there's no mesh to build
            if (m_buffers[0].IsEmpty())
            {
                return;
            }

            for (int i = 0; i < m_buffers.Count; i++)
            {
                GeometryBuffer buffer = m_buffers[i];

                var go = GameObjectProvider.PopObject(m_prefabName);
                Assert.IsTrue(go != null);
                if (go != null)
                {
#if DEBUG
                    if (!string.IsNullOrEmpty(debugName))
                    {
                        go.name = debugName;
                        if (i > 0)
                        {
                            go.name = go.name + "_" + i;
                        }
                    }
#endif

                    Mesh mesh = Globals.MemPools.MeshPool.Pop();
                    Assert.IsTrue(mesh.vertices.Length <= 0);
                    UnityMeshBuilder.BuildGeometryMesh(mesh, buffer);

                    MeshFilter filter = go.GetComponent <MeshFilter>();
                    filter.sharedMesh         = null;
                    filter.sharedMesh         = mesh;
                    filter.transform.position = position;
                    filter.transform.rotation = rotation;

                    Renderer renderer = go.GetComponent <Renderer>();
                    renderer.material = material;

                    m_objects.Add(go);
                    m_renderers.Add(renderer);
                }

                buffer.Clear();
            }
        }
        /// <summary>
        ///     Finalize the draw calls
        /// </summary>
        public void Commit()
        {
            ReleaseOldData();

            // No data means there's no mesh to build
            if (m_renderBuffers[0].IsEmpty())
            {
                return;
            }

            for (int i = 0; i < m_renderBuffers.Count; i++)
            {
                var go = GameObjectProvider.PopObject(GOPChunk);
                Assert.IsTrue(go != null);
                if (go != null)
                {
                    Mesh mesh = Globals.Pools.MeshPool.Pop();
                    Assert.IsTrue(mesh.vertices.Length <= 0);
                    m_meshBuilder.BuildMesh(mesh, m_renderBuffers[i]);

                    MeshFilter filter = go.GetComponent <MeshFilter>();
                    filter.sharedMesh         = null;
                    filter.sharedMesh         = mesh;
                    filter.transform.position = Vector3.zero;

                    m_drawCalls.Add(go);
                    m_drawCallRenderers.Add(go.GetComponent <Renderer>());
                }
            }

            // Make vertex data available again. We need to make this a task because our pooling system works on a per-thread
            // basis. Therefore, all Push()-es need to be called on the same thread as their respective Pop()-s.
            m_chunk.EnqueueGenericTask(
                () =>
            {
                LocalPools pools = m_chunk.Pools;

                for (int i = 0; i < m_renderBuffers.Count; i++)
                {
                    RenderBuffer buffer = m_renderBuffers[i];
                    for (int v = 0; v < buffer.Vertices.Count; v++)
                    {
                        pools.PushVertexData(buffer.Vertices[v]);
                    }

                    buffer.Clear();
                }
            });
        }
Exemple #7
0
        /// <summary>
        ///     Finalize the draw calls
        /// </summary>
        public void Commit()
        {
            ReleaseOldData();

            // No data means there's no mesh to build
            if (m_buffers[0].IsEmpty())
            {
                return;
            }

            for (int i = 0; i < m_buffers.Count; i++)
            {
                GeometryBuffer buffer = m_buffers[i];

                var go = GameObjectProvider.PopObject(GOPChunk);
                Assert.IsTrue(go != null);
                if (go != null)
                {
#if DEBUG
                    if (EngineSettings.CoreConfig.Mutlithreading == false)
                    {
                        go.name = m_chunk.Pos.ToString();
                    }
#endif

                    Mesh mesh = Globals.MemPools.MeshPool.Pop();
                    Assert.IsTrue(mesh.vertices.Length <= 0);
                    m_meshBuilder.BuildMesh(mesh, buffer);

                    MeshFilter filter = go.GetComponent <MeshFilter>();
                    filter.sharedMesh         = null;
                    filter.sharedMesh         = mesh;
                    filter.transform.position = Vector3.zero;
                    filter.transform.rotation = Quaternion.identity;

                    Renderer renderer = go.GetComponent <Renderer>();
                    //renderer.material = m_chunk.world.chunkMaterial;

                    m_objects.Add(go);
                    m_renderers.Add(renderer);
                }

                buffer.Clear();
            }
        }
        private void ReleaseOldData()
        {
            Assert.IsTrue(m_drawCalls.Count == m_drawCallRenderers.Count);
            for (int i = 0; i < m_drawCalls.Count; i++)
            {
                var go = m_drawCalls[i];
                // If the component does not exist it means nothing else has been added as well
                if (go == null)
                {
                    continue;
                }

                var filter = go.GetComponent <MeshFilter>();
                filter.sharedMesh.Clear(false);
                Globals.Pools.MeshPool.Push(filter.sharedMesh);
                filter.sharedMesh = null;

                GameObjectProvider.PushObject(GOPChunk, go);
            }

            m_drawCalls.Clear();
            m_drawCallRenderers.Clear();
        }
Exemple #9
0
 public TaskPanelItemProvider(string resourceName, int layer)
 {
     this.m_gop = new AssetBundleGameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
Exemple #10
0
 public LeagueTitleCellProvider(string resourceName, int layer)
 {
     this.m_gop = new AssetBundleGameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
 public ResourceGainImageProvider(string resourceName, int layer)
 {
     this.m_gop = new AssetBundleGameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
 public DungeonDropViewProvider(string resourceName, int layer)
 {
     this.m_gop = new GameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
Exemple #13
0
 public CharacterProvider(int layer)
 {
     this.m_gop = new GameObjectProvider(string.Empty, App.Binder.PersistentObjectRootTm, layer);
 }
 public ChestGalleryRowProvider(string resourceName, int layer)
 {
     this.m_gop = new AssetBundleGameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
 public BossHuntTickerCellProvider(string resourceName, int layer)
 {
     this.m_gop = new AssetBundleGameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
 public SkillHudButtonProvider(string resourceName, int layer)
 {
     this.m_gop = new AssetBundleGameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
 public ItemCardProvider(string resourceName, int layer)
 {
     this.m_gop = new GameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
Exemple #18
0
 public CombatTextProviderMenu(string resourceName, int layer)
 {
     this.m_gop = new GameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
 public StatusIndicatorProvider(string resourceName, int layer)
 {
     this.m_gop = new GameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }
Exemple #20
0
 public DungeonBoostProvider(int layer)
 {
     this.m_gop = new GameObjectProvider(string.Empty, App.Binder.PersistentObjectRootTm, layer);
 }
Exemple #21
0
 public MenuTreasureChestProvider(string resourceName, int layer)
 {
     this.m_gop = new GameObjectProvider(resourceName, App.Binder.PersistentObjectRootTm, layer);
 }