Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
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);
            }
        }