Ejemplo n.º 1
0
        public M2RenderInstance AddInstance(string model, int uuid, Vector3 position, Vector3 rotation, Vector3 scaling)
        {
            var hash = model.ToUpperInvariant().GetHashCode();

            lock (mRenderer)
            {
                M2Renderer renderer;
                if (mRenderer.TryGetValue(hash, out renderer))
                {
                    return(renderer.AddInstance(uuid, position, rotation, scaling));
                }

                var file = LoadModel(model);
                if (file == null)
                {
                    return(null);
                }

                var render = new M2Renderer(file);
                lock (mAddLock)
                    mRenderer.Add(hash, render);

                return(render.AddInstance(uuid, position, rotation, scaling));
            }
        }
Ejemplo n.º 2
0
        private void UnloadProc()
        {
            while (mIsRunning)
            {
                M2Renderer element = null;
                lock (mUnloadList)
                {
                    if (mUnloadList.Count > 0)
                    {
                        element = mUnloadList[0];
                        mUnloadList.RemoveAt(0);
                    }
                }

                if (element != null)
                {
                    element.Dispose();
                }

                if (element == null)
                {
                    Thread.Sleep(200);
                }
            }
        }
Ejemplo n.º 3
0
        void LoadModel()
        {
            string model;

            mModels.TryDequeue(out model);

            var file = ModelFactory.Instance.CreateM2(model);

            if (file.Load() == false)
            {
                if (mModels.Count > 0)
                {
                    LoadModel();
                }
                else
                {
                    return;
                }
            }

            mRenderer = new M2Renderer(file);
            var bboxMin = file.BoundingBox.Minimum.Z;
            var bboxMax = file.BoundingBox.Maximum.Z;

            WorldFrame.Instance.Dispatcher.BeginInvoke(() =>
            {
                mCamera.SetParameters(new Vector3(file.BoundingRadius * 1.5f, 0, bboxMin + (bboxMax - bboxMin) / 2),
                                      new Vector3(0, 0, bboxMin + (bboxMax - bboxMin) / 2), Vector3.UnitZ, Vector3.UnitY);
            });

            mThumbnailCaptureFrame = CAPTURE_FRAME;
            renderTimer.Start();
        }
Ejemplo n.º 4
0
        public void SetModel(string model, int variation = 0)
        {
            var file = ModelFactory.Instance.CreateM2(model);

            file.DisplayOptions.TextureVariation = variation;
            if (file.Load() == false)
            {
                return;
            }

            mRenderer = new M2Renderer(file);
            SetModelCameraParameters(file);
        }
Ejemplo n.º 5
0
        public void SetCreatureDisplayEntry(int entry)
        {
            var displayInfo = DbcStorage.CreatureDisplayInfo.GetRowById(entry);

            if (displayInfo == null)
            {
                return;
            }

            var modelId   = displayInfo.GetInt32(1);
            var modelData = DbcStorage.CreatureModelData.GetRowById(modelId);

            if (modelData == null)
            {
                return;
            }

            var modelPath = string.Empty;

            if (FileManager.Instance.Version <= FileDataVersion.Warlords)
            {
                var fileDataId     = modelData.GetInt32(2);
                var modelPathEntry = DbcStorage.FileData.GetRowById(fileDataId);
                if (modelPathEntry != null)
                {
                    modelPath = Path.Combine(modelPathEntry.GetString(2), modelPathEntry.GetString(1));
                }
            }
            else
            {
                modelPath = modelData.GetString(2);
            }

            if (string.IsNullOrEmpty(modelPath))
            {
                return;
            }

            if (modelPath.ToUpperInvariant().EndsWith(".MDX"))
            {
                modelPath = Path.ChangeExtension(modelPath, ".m2");
            }

            if (FileManager.Instance.Provider.Exists(modelPath) == false)
            {
                return;
            }

            var file = ModelFactory.Instance.CreateM2(modelPath);

            try
            {
                if (file.Load() == false)
                {
                    return;
                }
            }
            catch (Exception)
            {
                return;
            }

            mRenderer = new M2Renderer(file);
            for (var i = 0; i < mRenderer.PortraitRenderer.Textures.Length; ++i)
            {
                var tex  = mRenderer.PortraitRenderer.Textures[i];
                var root = mRenderer.Model.ModelRoot;

                switch (tex.TextureType)
                {
                case TextureType.MonsterSkin3:
                case TextureType.MonsterSkin2:
                case TextureType.MonsterSkin1:
                    tex.Texture = TextureManager.Instance.GetTexture(GetSkinName(root, displayInfo, (int)tex.TextureType - 11));
                    break;
                }
            }

            SetModelCameraParameters(file);
        }