/// <summary> /// Generates a random set of dwarves in the given chunk. /// </summary> public void CreateInitialDwarves() { if (InitialEmbark == null) { InitialEmbark = EmbarkmentLibrary.DefaultEmbarkment; } var cameraCoordinate = GlobalVoxelCoordinate.FromVector3(Camera.Position); // Find the height of the world at the camera var cameraVoxel = VoxelHelpers.FindFirstVoxelBelow(new VoxelHandle( ChunkManager.ChunkData, new GlobalVoxelCoordinate(cameraCoordinate.X, VoxelConstants.ChunkSizeY - 1, cameraCoordinate.Z))); var h = (float)(cameraVoxel.Coordinate.Y + 1); // This is done just to make sure the camera is in the correct place. Camera.UpdateBasisVectors(); Camera.UpdateProjectionMatrix(); Camera.UpdateViewMatrix(); foreach (string ent in InitialEmbark.Party) { Vector3 dorfPos = new Vector3(Camera.Position.X + (float)MathFunctions.Random.NextDouble(), h + 10, Camera.Position.Z + (float)MathFunctions.Random.NextDouble()); Physics creat = (Physics)EntityFactory.CreateEntity <Physics>(ent, dorfPos); creat.Velocity = new Vector3(1, 0, 0); } Camera.Target = new Vector3(Camera.Position.X, h, Camera.Position.Z + 10); Camera.Position = new Vector3(Camera.Target.X, Camera.Target.Y + 20, Camera.Position.Z - 10); }
public override void PreRender(DwarfTime time, SpriteBatch sprites) { if (!HomeSet) { HomePosition = PlayState.Camera.Target; HomeSet = true; } if (IsVisible && !IsMinimized && GUI.RootComponent.IsVisible) { Viewport originalViewport = PlayState.GraphicsDevice.Viewport; Camera.Update(time, PlayState.ChunkManager); Camera.Target = PlayState.Camera.Target + Vector3.Up * 50; Camera.Phi = -(float)Math.PI * 0.5f; Camera.Theta = PlayState.Camera.Theta; Camera.UpdateProjectionMatrix(); PlayState.GraphicsDevice.SetRenderTarget(RenderTarget); PlayState.GraphicsDevice.Clear(ClearOptions.Target, Color.Black, 0, 0); PlayState.DefaultShader.Parameters["xView"].SetValue(Camera.ViewMatrix); PlayState.DefaultShader.Parameters["xEnableFog"].SetValue(0); PlayState.DefaultShader.Parameters["xProjection"].SetValue(Camera.ProjectionMatrix); PlayState.DefaultShader.CurrentTechnique = PlayState.DefaultShader.Techniques["Textured_colorscale"]; PlayState.GraphicsDevice.BlendState = BlendState.AlphaBlend; PlayState.ChunkManager.RenderAll(Camera, time, PlayState.GraphicsDevice, PlayState.DefaultShader, Matrix.Identity, ColorMap); PlayState.WaterRenderer.DrawWaterFlat(PlayState.GraphicsDevice, Camera.ViewMatrix, Camera.ProjectionMatrix, PlayState.DefaultShader, PlayState.ChunkManager); PlayState.GraphicsDevice.Textures[0] = null; PlayState.GraphicsDevice.Indices = null; PlayState.GraphicsDevice.SetVertexBuffer(null); PlayState.DefaultShader.Parameters["xEnableFog"].SetValue(1); DwarfGame.SpriteBatch.Begin(SpriteSortMode.Immediate, BlendState.AlphaBlend, SamplerState.PointClamp, null, RasterizerState.CullNone); Viewport viewPort = new Viewport(RenderTarget.Bounds); foreach (MinimapIcon icon in PlayState.ComponentManager.RootComponent.GetChildrenOfTypeRecursive <MinimapIcon>()) { if (!icon.Parent.IsVisible) { continue; } Vector3 screenPos = viewPort.Project(icon.GlobalTransform.Translation, Camera.ProjectionMatrix, Camera.ViewMatrix, Matrix.Identity); if (RenderTarget.Bounds.Contains((int)screenPos.X, (int)screenPos.Y)) { sprites.Draw(icon.Icon.Image, new Vector2(screenPos.X, screenPos.Y), icon.Icon.SourceRect, Color.White, 0.0f, new Vector2(icon.Icon.SourceRect.Width / 2.0f, icon.Icon.SourceRect.Height / 2.0f), icon.IconScale, SpriteEffects.None, 0); } } sprites.End(); PlayState.GraphicsDevice.BlendState = BlendState.AlphaBlend; PlayState.GraphicsDevice.DepthStencilState = DepthStencilState.None; PlayState.GraphicsDevice.RasterizerState = RasterizerState.CullCounterClockwise; PlayState.GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp; PlayState.GraphicsDevice.SetRenderTarget(null); } base.PreRender(time, sprites); }
void zoomInButton_OnClicked() { Camera.FOV = Math.Max(Camera.FOV * 0.9f, 0.1f); Camera.UpdateProjectionMatrix(); }
void zoomOutButton_OnClicked() { Camera.FOV = Math.Min(Camera.FOV * 1.1f, (float)Math.PI); Camera.UpdateProjectionMatrix(); }