Пример #1
0
        public void EnterWorld(uint mapid, string continent, float x, float y)
        {
            MapID = mapid;
            foreach (var file in mFiles)
            {
                file.Unload();
            }

            mFiles.Clear();

            int ix = (int)(x / Utils.Metrics.Tilesize);
            int iy = (int)(y / Utils.Metrics.Tilesize);

            for (int i = -1; i < 2; ++i)
            {
                for (int j = -1; j < 2; ++j)
                {
                    int valX = (int)ix + j;
                    int valY = (int)iy + i;
                    if (valX < 0 || valY < 0)
                    {
                        continue;
                    }

                    ADT.IADTFile file = ADT.ADTManager.CreateADT(mWdtManager.getWDT(continent), @"World\Maps\" + continent + @"\" + continent + "_" + valX + "_" + valY + ".adt",
                                                                 (uint)valX, (uint)valY, (i == 0 && j == 0));

                    file.Continent = continent;

                    if (file != null)
                    {
                        mFiles.Add(file);
                    }
                }
            }

            float h = 0.0f;

            GetLandHeightFast(-Utils.Metrics.MidPoint + x, -Utils.Metrics.MidPoint + y, ref h);
            h += 100.0f;
            var inpos = new SlimDX.Vector3(x, y, h);

            inpos.X = -Utils.Metrics.MidPoint + inpos.X;
            inpos.Y = -Utils.Metrics.MidPoint + inpos.Y;
            Game.GameManager.GraphicsThread.GraphicsManager.Camera.SetPosition(inpos);
            isInWorld  = true;
            mContinent = continent;
            Game.GameManager.InformPropertyChanged(GameProperties.Map);
        }
Пример #2
0
        public void EnterWorld(string continent, uint x, uint y)
        {
            foreach (var file in mFiles)
            {
                file.Unload();
            }

            mFiles.Clear();

            for (int i = -1; i < 2; ++i)
            {
                for (int j = -1; j < 2; ++j)
                {
                    int valX = (int)x + j;
                    int valY = (int)y + i;
                    if (valX < 0 || valY < 0)
                    {
                        continue;
                    }

                    ADT.IADTFile file = ADT.ADTManager.CreateADT(mWdtManager.getWDT(continent), @"World\Maps\" + continent + @"\" + continent + "_" + valX + "_" + valY + ".adt",
                                                                 (uint)valX, (uint)valY);

                    file.Continent = continent;

                    if (file != null)
                    {
                        mFiles.Add(file);
                    }
                }
            }

            foreach (var file in mFiles)
            {
                file.WaitLoad();
            }

            var inpos = new SlimDX.Vector3(x * Utils.Metrics.Tilesize + 0.5f * Utils.Metrics.Tilesize, y * Utils.Metrics.Tilesize + 0.5f * Utils.Metrics.Tilesize, 100.0f);

            inpos.X = -Utils.Metrics.MidPoint + inpos.X;
            inpos.Y = -Utils.Metrics.MidPoint + inpos.Y;
            Game.GameManager.GraphicsThread.GraphicsManager.Camera.SetPosition(inpos);
            isInWorld  = true;
            mContinent = continent;
        }
Пример #3
0
        public void CreateMinimap(ADT.IADTFile file)
        {
            string fileName = "";

            if (!gMinimapDir.getMinimapEntry(file.Continent, (int)file.IndexX, (int)file.IndexY, ref fileName))
            {
                return;
            }

            Video.ShaderCollection.TerrainShader.SetValue("minimapMode", true);
            var oldCamera = Game.GameManager.GraphicsThread.GraphicsManager.Camera;
            var oldTarget = Game.GameManager.GraphicsThread.GraphicsManager.Device.GetRenderTarget(0);

            Game.GameManager.GraphicsThread.GraphicsManager.Device.SetRenderTarget(0, mRenderSurface);
            Game.GameManager.GraphicsThread.GraphicsManager.Device.Clear(ClearFlags.Target | ClearFlags.ZBuffer, System.Drawing.Color.CornflowerBlue, 1, 0);

            var newCamera = new Video.OrthogonalCamera(1, 1, false);

            newCamera.ViewFrustum.PassAllTests = true;
            newCamera.PreventWorldUpdate       = true;
            Game.GameManager.GraphicsThread.GraphicsManager.Camera = newCamera;
            Game.GameManager.GraphicsThread.GraphicsManager.Camera.SetPosition(new Vector3(Utils.Metrics.Tilesize / 2.0f, Utils.Metrics.Tilesize / 2.0f, 1000.0f), true);

            file.RenderADT(Matrix.Translation(-file.IndexX * Utils.Metrics.Tilesize + Utils.Metrics.MidPoint, -file.IndexY * Utils.Metrics.Tilesize + Utils.Metrics.MidPoint, 0));
            Game.GameManager.GraphicsThread.GraphicsManager.Device.SetRenderTarget(0, oldTarget);

            Game.GameManager.WorldManager.FogStart = 530.0f;
            Game.GameManager.GraphicsThread.GraphicsManager.Camera = oldCamera;

            Texture saveTexture = new Texture(mRenderSurface.Device, 256, 256, 1, Usage.None, Format.X8R8G8B8, Pool.Managed);
            Surface surf        = saveTexture.GetSurfaceLevel(0);

            Surface.FromSurface(surf, mRenderSurface, Filter.Box, 0);
            surf.Dispose();

            Video.TextureConverter.SaveTextureAsBlp(Video.TextureConverter.BlpCompression.Dxt3, saveTexture, fileName);
            saveTexture.Dispose();
            Video.ShaderCollection.TerrainShader.SetValue("minimapMode", false);
        }
Пример #4
0
        public void Update(Video.ICamera cam)
        {
            if (isInWorld == false)
            {
                return;
            }

            var pos = cam.Position;

            pos.X = Utils.Metrics.MidPoint + pos.X;
            pos.Y = Utils.Metrics.MidPoint + pos.Y;
            int myX = (int)(pos.X / Utils.Metrics.Tilesize);
            int myY = (int)(pos.Y / Utils.Metrics.Tilesize);

            var qry = from file in mFiles
                      where (
                file.IndexX > myX + 1 ||
                file.IndexX <myX - 1 ||
                             file.IndexY> myY + 1 ||
                file.IndexY < myY - 1
                )
                      select file;

            foreach (var old in qry)
            {
                old.Unload();
            }

            mFiles.RemoveAll((ADT.IADTFile af) => { return(qry.Contains(af)); });

            uint        indexValue = 0;
            List <uint> indices    = new List <uint>();

            for (int i = -1; i < 2; ++i)
            {
                for (int j = -1; j < 2; ++j)
                {
                    if (myX + j < 0 || myY + i < 0)
                    {
                        continue;
                    }

                    indexValue = ((uint)(myX + j)) * 1000 + ((uint)(myY + i));
                    indices.Add(indexValue);
                }
            }

            var sel = from index in indices
                      where (mFiles.Exists((ADT.IADTFile file) =>
            {
                var adtIndex = file.IndexX * 1000 + file.IndexY;
                return(adtIndex == index);
            }
                                           ) == false)
                      select index;

            foreach (var index in sel)
            {
                uint         ix   = index / 1000;
                uint         iy   = index % 1000;
                var          str  = @"World\Maps\" + mContinent + "\\" + mContinent + "_" + ix + "_" + iy + ".adt";
                ADT.IADTFile file = ADT.ADTManager.CreateADT(mWdtManager.getWDT(mContinent), str, ix, iy);
                file.Continent = mContinent;
                if (file != null)
                {
                    mFiles.Add(file);
                }
            }

            var curTile = GetCurrentTile();

            if (curTile != mHoveredTile)
            {
                mHoveredTile = curTile;
                Game.GameManager.InformPropertyChanged(GameProperties.HoveredADT);
            }
            var curChunk = GetCurrentChunk();

            if (curChunk != mHoveredChunk)
            {
                mHoveredChunk = curChunk;
                Game.GameManager.InformPropertyChanged(GameProperties.HoveredChunk);
            }
        }
Пример #5
0
        public void Update(Video.ICamera cam)
        {
            if (isInWorld == false)
                return;

            var pos = cam.Position;
            pos.X = Utils.Metrics.MidPoint + pos.X;
            pos.Y = Utils.Metrics.MidPoint + pos.Y;
            int myX = (int)(pos.X / Utils.Metrics.Tilesize);
            int myY = (int)(pos.Y / Utils.Metrics.Tilesize);

            var qry = from file in mFiles
                      where (
                      file.IndexX > myX + 1 ||
                      file.IndexX < myX - 1 ||
                      file.IndexY > myY + 1 ||
                      file.IndexY < myY - 1
                      )
                      select file;

            foreach (var old in qry)
            {
                old.Unload();
            }

            mFiles.RemoveAll((ADT.IADTFile af) => { return qry.Contains(af); });

            uint indexValue = 0;
            List<uint> indices = new List<uint>();
            for (int i = -1; i < 2; ++i)
            {
                for (int j = -1; j < 2; ++j)
                {
                    if (myX + j < 0 || myY + i < 0)
                        continue;

                    indexValue = ((uint)(myX + j)) * 1000 + ((uint)(myY + i));
                    indices.Add(indexValue);
                }
            }

            var sel = from index in indices
                      where (mFiles.Exists((ADT.IADTFile file) =>
                          {
                              var adtIndex = file.IndexX * 1000 + file.IndexY;
                              return adtIndex == index;
                          }
                      ) == false)
                      select index;

            foreach (var index in sel)
            {
                uint ix = index / 1000;
                uint iy = index % 1000;
                var str = @"World\Maps\" + mContinent + "\\" + mContinent + "_" + ix + "_" + iy + ".adt";
                ADT.IADTFile file = ADT.ADTManager.CreateADT(mWdtManager.getWDT(mContinent), str, ix, iy);
                file.Continent = mContinent;
                if (file != null)
                    mFiles.Add(file);
            }

            var curTile = GetCurrentTile();
            if (curTile != mHoveredTile)
            {
                mHoveredTile = curTile;
                Game.GameManager.InformPropertyChanged(GameProperties.HoveredADT);
            }
            var curChunk = GetCurrentChunk();
            if (curChunk != mHoveredChunk)
            {
                mHoveredChunk = curChunk;
                Game.GameManager.InformPropertyChanged(GameProperties.HoveredChunk);
            }
        }