public static void CameraChanged(Video.ICamera cam) { TerrainShader.SetValue("matrixViewProj", cam.ViewProj); TerrainShader.SetValue("CameraPosition", cam.Position); SkyShader.SetValue("matrixViewProj", cam.ViewProj); MDXShader.SetValue("matrixViewProj", cam.ViewProj); MDXShader.SetValue("CameraPosition", cam.Position); WMOShader.SetValue("matrixViewProj", cam.ViewProj); WMOShader.SetValue("CameraPosition", cam.Position); BoxShader.SetValue("matrixViewProj", cam.ViewProj); }
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); } }