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); }
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; }
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); }
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); } }
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); } }