Add support for saving screenshots via F2

This saves them to ~/.truecraft/screenshots or whatever is appropriate
on your platform.
This commit is contained in:
Drew DeVault 2015-06-03 15:30:03 -06:00
parent 67b721daf4
commit 9258e47e08
2 changed files with 21 additions and 4 deletions

View File

@ -34,15 +34,20 @@ namespace TrueCraft.Client.Interface
client.ChatMessage += HandleChatMessage;
}
void HandleChatMessage(object sender, ChatMessageEventArgs e)
public void AddMessage(string message)
{
lock (Messages_lock)
{
Messages.Add(new ChatMessage(e.Message));
Console.WriteLine(e.Message);
Messages.Add(new ChatMessage(message));
Console.WriteLine(message);
}
}
void HandleChatMessage(object sender, ChatMessageEventArgs e)
{
AddMessage(e.Message);
}
public void Update(GameTime gameTime)
{
lock (Messages_lock)

View File

@ -31,6 +31,7 @@ namespace TrueCraft.Client
private ConcurrentBag<ChunkMesh> IncomingChunks { get; set; }
private ConcurrentBag<ChunkMesh> IncomingTransparentChunks { get; set; }
private List<ChunkMesh> TransparentChunkMeshes { get; set; }
public ChatInterface ChatInterface { get; set; }
private RenderTarget2D RenderTarget;
private Matrix Camera;
private Matrix Perspective;
@ -114,7 +115,7 @@ namespace TrueCraft.Client
fontFile = FontLoader.Load(f);
var fontTexture = Content.Load<Texture2D>("dejavu_0.png");
DejaVu = new FontRenderer(fontFile, fontTexture);
Interfaces.Add(new ChatInterface(Client, DejaVu));
Interfaces.Add(ChatInterface = new ChatInterface(Client, DejaVu));
OpaqueEffect = new BasicEffect(GraphicsDevice);
OpaqueEffect.EnableDefaultLighting();
@ -149,6 +150,17 @@ namespace TrueCraft.Client
// TODO: Rebindable keys
// TODO: Horizontal terrain collisions
if (state.IsKeyDown(Keys.F2) && oldState.IsKeyUp(Keys.F2)) // Take a screenshot
{
var path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
".truecraft", "screenshots", DateTime.Now.ToString("yyyy-MM-dd_H.mm.ss") + ".png");
if (!Directory.Exists(Path.GetDirectoryName(path)))
Directory.CreateDirectory(Path.GetDirectoryName(path));
using (var stream = File.OpenWrite(path))
RenderTarget.SaveAsPng(stream, RenderTarget.Width, RenderTarget.Height);
ChatInterface.AddMessage(string.Format("Screenshot saved as {0}", Path.GetFileName(path)));
}
Microsoft.Xna.Framework.Vector3 delta = Microsoft.Xna.Framework.Vector3.Zero;
if (state.IsKeyDown(Keys.Left) || state.IsKeyDown(Keys.A))