Exemple #1
0
        public ADTFile(WDTFile wdt, string fileName, uint indexX, uint indexY, bool initial = false)
        {
            bool unkFlag = (wdt.Flags & 0x84) != 0;

            if (unkFlag)
            {
                throw new Exception();
            }

            IndexX     = indexX;
            IndexY     = indexY;
            FileName   = fileName;
            mLoadEvent = new System.Threading.ManualResetEvent(false);
            if (initial == false)
            {
                Game.GameManager.ThreadManager.LaunchThread(
                    () =>
                {
                    try
                    {
                        AsyncLoadProc();
                    }
                    catch (Exception)
                    {
                    }
                }
                    );
            }
            else
            {
                AsyncLoadProc();
            }

            ADTManager.AddADT(this);
        }
Exemple #2
0
        /////////////////////////////////////////////////////////////////////////////

        public void Unload()
        {
            if (mMesh != null || mAlphaTexture != null)
            {
                Game.GameManager.GraphicsThread.CallOnThread(
                    () =>
                {
                    if (mAlphaTexture != null)
                    {
                        ADTAlphaHandler.AddFreeTexture(mAlphaTexture);
                    }

                    if (mShadowTexture != null)
                    {
                        ADTAlphaHandler.AddFreeShadowTexture(mShadowTexture);
                    }

                    if (mMesh != null)
                    {
                        mMesh.Dispose();
                        mMesh = null;
                    }
                },
                    true
                    );
            }

            foreach (var inst in mDoodadInstances)
            {
                foreach (var id in inst.Value)
                {
                    Game.GameManager.M2ModelManager.RemoveInstance(inst.Key, id);
                }
            }

            foreach (var id in mConfirmedUniqueID)
            {
                var name = mParent.DoodadNames[mParent.ModelIdentifiers[(int)mParent.ModelDefinitions[(int)id].idMMID]];
                ADTManager.RemoveUniqueMdxId(name, mParent.ModelDefinitions[(int)id].uniqueId);
            }

            mParent = null;
            mFile   = null;
            mLayers.Clear();
            mLayers     = null;
            AlphaData   = null;
            AlphaFloats = null;
        }
Exemple #3
0
        public ADTFile(string fileName, uint indexX, uint indexY, bool initial = false)
        {
            IndexX     = indexX;
            IndexY     = indexY;
            FileName   = fileName;
            mLoadEvent = new System.Threading.ManualResetEvent(false);
            if (initial == false)
            {
                Game.GameManager.ThreadManager.LaunchThread(AsyncLoadProc);
            }
            else
            {
                AsyncLoadProc();
            }

            ADTManager.AddADT(this);
        }
Exemple #4
0
 public override void Unload()
 {
     ADTManager.RemoveADT(this);
     Game.GameManager.ThreadManager.LaunchThread(() =>
     {
         mLoadEvent.WaitOne();
         foreach (var cnk in mChunks)
         {
             cnk.Unload();
         }
         mChunks.Clear();
         mChunks       = null;
         mTextureNames = null;
         foreach (var tex in mTextures)
         {
             Video.TextureManager.RemoveTexture(tex);
         }
         mTextures.Clear();
         mTextures = null;
         mOffsets  = null;
         mpqFile   = null;
     }
                                                 );
 }
Exemple #5
0
        public void Render(SlimDX.Matrix preTransform)
        {
            if (Game.GameManager.GraphicsThread.GraphicsManager.Camera.ViewFrustum.Contains(mBox, Matrix.Identity) == ContainmentType.Disjoint)
            {
                return;
            }

            if (mHeader.nLayers == 0)
            {
                return;
            }

            if (mMesh == null)
            {
                LoadMesh();
            }

            if (mAlphaTexture == null)
            {
                LoadAlphaTexture();
            }

            if (mShadowTexture == null)
            {
                LoadShadowTexture();
            }

            if (mAlphaDirty)
            {
                LoadAlphaTexture();
                mAlphaDirty = false;
            }

            foreach (var re in mRefs)
            {
                try
                {
                    var name     = mParent.DoodadNames[mParent.ModelIdentifiers[(int)mParent.ModelDefinitions[(int)re].idMMID]];
                    var uniqueID = mParent.ModelDefinitions[(int)re].uniqueId;

                    if (ADTManager.AddUniqueMDXId(name, uniqueID) == false)
                    {
                        continue;
                    }

                    mConfirmedUniqueID.Add(re);
                    var id = Game.GameManager.M2ModelManager.AddInstance(name, mParent.ModelDefinitions[(int)re]);
                    if (!mDoodadInstances.ContainsKey(name))
                    {
                        mDoodadInstances.Add(name, new List <uint>());
                    }
                    mDoodadInstances[name].Add(id);
                }
                catch (Exception)
                {
                }
            }

            foreach (var re in mWmoRefs)
            {
                try
                {
                    var modf = mParent.WMODefinitions[(int)re];
                    var name = mParent.WMONames[mParent.WMOIdentifiers[(int)modf.idMWID]];

                    var id = Models.WMO.WMOManager.AddInstance(name, mParent.WMODefinitions[(int)re].Position, modf.uniqueId, mParent.WMODefinitions[(int)re].Rotation);
                }
                catch (Exception)
                {
                }
            }

            mRefs.Clear();
            mWmoRefs.Clear();

            var shdr = Video.ShaderCollection.TerrainShader;

            shdr.SetTechnique(mHeader.nLayers - 1);
            shdr.SetTexture("alphaTexture", mAlphaTexture);
            shdr.SetTexture("shadowTexture", mShadowTexture);
            Matrix matChunk = preTransform * Matrix.Identity;

            shdr.SetValue("matrixViewProj", (matChunk * Game.GameManager.GraphicsThread.GraphicsManager.Camera.ViewProj));
            shdr.SetValue("matrixWorld", matChunk);
            for (int i = 0; i < 4; ++i)
            {
                shdr.SetValue("TextureFlags" + i, mTextureFlags[i]);
            }
            for (int i = 0; i < mLayers.Count; ++i)
            {
                shdr.SetTexture("blendTexture" + i, mParent.GetTexture((int)mLayers[i].textureId));
            }

            shdr.DoRender((SlimDX.Direct3D9.Device d) =>
            {
                mMesh.DrawSubset(0);
            }
                          );

            ADTManager.VisibleChunks.Add(this);
        }