private void OnInitialLoadDone() { float height; if (GetLandHeight(mEntryPoint.X, 64.0f * Metrics.TileSize - mEntryPoint.Y, out height)) { height += 50.0f; SkyManager.Instance.UpdatePosition(new Vector3(mEntryPoint, height)); var entryPoint = new Vector3(mEntryPoint, height); if (FileManager.Instance.Version > FileDataVersion.Mists) { entryPoint.Y = 64.0f * Metrics.TileSize - mEntryPoint.Y; } SkyManager.Instance.AsyncUpdate(); EditorWindowController.Instance.OnEnterWorld(); WorldFrame.Instance.OnEnterWorld(entryPoint); WorldFrame.Instance.Dispatcher.BeginInvoke( () => { SkySphere.UpdatePosition(new Vector3(mEntryPoint, height)); SkyManager.Instance.SyncUpdate(); WorldFrame.Instance.CamControl.ForceUpdate(WorldFrame.Instance.ActiveCamera.Position); WorldFrame.Instance.M2Manager.ViewChanged(); }); } GC.Collect(); GC.WaitForPendingFinalizers(); }
public void OnFrame(Camera camera) { ProcessLoadedTiles(); if (WorldFrame.Instance.State == AppState.World) { SkyManager.Instance.SyncUpdate(); SkySphere.Render(); mAreaLowManager.OnFrame(); } if (!HideTerrain) { MapChunkRender.ChunkMesh.BeginDraw(); MapChunkRender.ChunkMesh.Program.SetPixelSampler(0, MapChunkRender.ColorSampler); MapChunkRender.ChunkMesh.Program.SetPixelSampler(1, MapChunkRender.AlphaSampler); if (WorldFrame.Instance.LastMouseIntersection.ChunkHit != null) { EditorWindowController.Instance.OnUpdateChunkIndex(WorldFrame.Instance.LastMouseIntersection.ChunkHit.IndexX, WorldFrame.Instance.LastMouseIntersection.ChunkHit.IndexY); } else { EditorWindowController.Instance.OnUpdateChunkIndex(0, 0); } foreach (var pair in mAreas) { pair.Value.OnFrame(); } } }
public void UpdatePosition(Vector3 position, bool updateTerrain) { WorldFrame.Instance.UpdatePosition(position); SkySphere.UpdatePosition(position); if (updateTerrain) { SkyManager.Instance.UpdatePosition(position); var pos2D = new Vector2(position.X, position.Y); mAreaLowManager.UpdatePosition(ref pos2D); UpdateVisibility(ref position); } EditorWindowController.Instance.OnUpdatePosition(position); var x = position.X; var y = position.Y; if (FileManager.Instance.Version <= FileDataVersion.Warlords) { y = 64.0f * Metrics.TileSize - y; } var tilex = (int)Math.Floor(x / Metrics.TileSize); var tiley = (int)Math.Floor(y / Metrics.TileSize); EditorWindowController.Instance.OnUpdateTileIndex(tilex, tiley); }
public void Initialize() { SkySphere = new SkySphere(999.0f, 25, 25, WorldFrame.Instance.GraphicsContext); mIsRunning = true; mLoadThread = new Thread(LoadProc); mLoadThread.Start(); mLightUpdateThread = new Thread(LightUpdateProc); mLightUpdateThread.Start(); mUnloadThread = new Thread(UnloadProc); mUnloadThread.Start(); }