Пример #1
0
        public M2RenderInstance AddInstance(int uuid, Vector3 position, Vector3 rotation, Vector3 scaling)
        {
            M2RenderInstance inst;

            // ReSharper disable once InconsistentlySynchronizedField
            if (mFullInstances.TryGetValue(uuid, out inst))
            {
                ++inst.NumReferences;
                return(inst);
            }

            var instance = new M2RenderInstance(uuid, position, rotation, scaling, this);

            lock (mFullInstances)
            {
                mFullInstances.Add(uuid, instance);
                if (!instance.IsVisible(WorldFrame.Instance.ActiveCamera))
                {
                    return(instance);
                }

                lock (VisibleInstances)
                    VisibleInstances.Add(instance);
                return(instance);
            }
        }
Пример #2
0
        public bool RemoveInstance(int uuid)
        {
            if (mFullInstances == null || VisibleInstances == null)
            {
                return(false);
            }

            lock (mFullInstances)
            {
                M2RenderInstance inst;
                if (mFullInstances.TryGetValue(uuid, out inst) == false)
                {
                    return(false);
                }

                --inst.NumReferences;
                if (inst.NumReferences > 0)
                {
                    ++inst.NumReferences;
                    return(false);
                }

                mFullInstances.Remove(uuid);
                inst.Dispose();
            }

            lock (VisibleInstances)
                VisibleInstances.RemoveAll(inst => inst.Uuid == uuid);

            return(mFullInstances.Count == 0);
        }
Пример #3
0
        public void ViewChanged()
        {
            lock (VisibleInstances)
                VisibleInstances.Clear();

            lock (mFullInstances)
            {
                foreach (var pair in mFullInstances)
                {
                    pair.Value.IsUpdated = false;
                }
            }
        }
Пример #4
0
        public void PushMapReference(M2Instance instance)
        {
            var renderInstance = instance.RenderInstance;

            if (Model.HasBlendPass)
            {
                renderInstance.UpdateDepth();
            }

            renderInstance.IsUpdated = true;
            lock (VisibleInstances)
                VisibleInstances.Add(renderInstance);
        }