コード例 #1
0
        /// <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);
        }
コード例 #2
0
ファイル: Minimap.cs プロジェクト: chrisapril/dwarfcorp
        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);
        }
コード例 #3
0
ファイル: Minimap.cs プロジェクト: chrisapril/dwarfcorp
 void zoomInButton_OnClicked()
 {
     Camera.FOV = Math.Max(Camera.FOV * 0.9f, 0.1f);
     Camera.UpdateProjectionMatrix();
 }
コード例 #4
0
ファイル: Minimap.cs プロジェクト: chrisapril/dwarfcorp
 void zoomOutButton_OnClicked()
 {
     Camera.FOV = Math.Min(Camera.FOV * 1.1f, (float)Math.PI);
     Camera.UpdateProjectionMatrix();
 }