diff --git a/TrueCraft.Client/Program.cs b/TrueCraft.Client/Program.cs
index cf972bf..192f6b9 100644
--- a/TrueCraft.Client/Program.cs
+++ b/TrueCraft.Client/Program.cs
@@ -11,6 +11,9 @@ namespace TrueCraft.Client
[STAThread]
public static void Main(string[] args)
{
+ UserSettings.Local = new UserSettings();
+ UserSettings.Local.Load();
+
var user = new TrueCraftUser { Username = args[1] };
var client = new MultiplayerClient(user);
var game = new TrueCraftGame(client, ParseEndPoint(args[0]));
diff --git a/TrueCraft.Client/Rendering/TexturePackExtensions.cs b/TrueCraft.Client/Rendering/TexturePackExtensions.cs
new file mode 100644
index 0000000..7fa81ea
--- /dev/null
+++ b/TrueCraft.Client/Rendering/TexturePackExtensions.cs
@@ -0,0 +1,37 @@
+using Microsoft.Xna.Framework.Graphics;
+using System;
+using TrueCraft.Core;
+using Ionic.Zip;
+
+namespace TrueCraft.Client.Rendering
+{
+ public static class TexturePackExtensions
+ {
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public static Texture2D GetTexture(this TexturePack instance, GraphicsDevice graphicsDevice, string entryName)
+ {
+ ZipEntry entry = null;
+ foreach (var item in instance.Archive.Entries)
+ {
+ if (item.FileName == entryName)
+ {
+ entry = item;
+ break;
+ }
+ }
+
+ if (entry == null)
+ return null;
+
+ Texture2D texture = null;
+ using (var reader = entry.OpenReader())
+ texture = Texture2D.FromStream(graphicsDevice, reader);
+ return texture;
+ }
+ }
+}
diff --git a/TrueCraft.Client/TrueCraft.Client.csproj b/TrueCraft.Client/TrueCraft.Client.csproj
index f93bfce..3a88eea 100644
--- a/TrueCraft.Client/TrueCraft.Client.csproj
+++ b/TrueCraft.Client/TrueCraft.Client.csproj
@@ -70,6 +70,10 @@
+
+ False
+ ..\lib\Ionic.Zip.Reduced.dll
+
..\packages\MonoGame.Framework.Linux.3.4.0.459\lib\net40\OpenTK.dll
True
@@ -109,6 +113,7 @@
+
diff --git a/TrueCraft.Client/TrueCraftGame.cs b/TrueCraft.Client/TrueCraftGame.cs
index d2d8382..35143f5 100644
--- a/TrueCraft.Client/TrueCraftGame.cs
+++ b/TrueCraft.Client/TrueCraftGame.cs
@@ -14,6 +14,7 @@ using TrueCraft.Core.Networking.Packets;
using TrueCraft.API.World;
using System.Collections.Concurrent;
using TrueCraft.Client.Input;
+using TrueCraft.Core;
namespace TrueCraft.Client
{
@@ -41,6 +42,7 @@ namespace TrueCraft.Client
private MouseComponent MouseComponent { get; set; }
private GameTime GameTime { get; set; }
private Microsoft.Xna.Framework.Vector3 Delta { get; set; }
+ private TexturePack TexturePack { get; set; }
private BasicEffect OpaqueEffect, TransparentEffect;
@@ -124,6 +126,7 @@ namespace TrueCraft.Client
protected override void LoadContent()
{
+ TexturePack = new TexturePack(UserSettings.Local.SelectedTexturePack);
DejaVu = new FontRenderer(
new Font(Content, "Fonts/DejaVu", FontStyle.Regular),
new Font(Content, "Fonts/DejaVu", FontStyle.Bold),
@@ -138,7 +141,7 @@ namespace TrueCraft.Client
OpaqueEffect.DirectionalLight1.SpecularColor = Color.Black.ToVector3();
OpaqueEffect.DirectionalLight2.SpecularColor = Color.Black.ToVector3();
OpaqueEffect.TextureEnabled = true;
- OpaqueEffect.Texture = Texture2D.FromStream(GraphicsDevice, File.OpenRead("Content/terrain.png"));
+ OpaqueEffect.Texture = TexturePack.GetTexture(GraphicsDevice, "terrain.png");
OpaqueEffect.FogEnabled = true;
OpaqueEffect.FogStart = 512f;
OpaqueEffect.FogEnd = 1000f;
@@ -146,7 +149,7 @@ namespace TrueCraft.Client
TransparentEffect = new BasicEffect(GraphicsDevice);
TransparentEffect.TextureEnabled = true;
- TransparentEffect.Texture = Texture2D.FromStream(GraphicsDevice, File.OpenRead("Content/terrain.png"));
+ TransparentEffect.Texture = TexturePack.GetTexture(GraphicsDevice, "terrain.png");
base.LoadContent();
}
@@ -250,7 +253,7 @@ namespace TrueCraft.Client
Client.Yaw += look.X;
Client.Pitch += look.Y;
Client.Yaw %= 360;
- Client.Pitch = MathHelper.Clamp(Client.Pitch, -89.9f, 89.9f);
+ Client.Pitch = Microsoft.Xna.Framework.MathHelper.Clamp(Client.Pitch, -89.9f, 89.9f);
if (look != Vector2.Zero)
UpdateCamera();
@@ -312,7 +315,7 @@ namespace TrueCraft.Client
if (Delta != Microsoft.Xna.Framework.Vector3.Zero)
{
var lookAt = Microsoft.Xna.Framework.Vector3.Transform(
- Delta, Matrix.CreateRotationY(MathHelper.ToRadians(Client.Yaw)));
+ Delta, Matrix.CreateRotationY(Microsoft.Xna.Framework.MathHelper.ToRadians(Client.Yaw)));
Client.Position += new TrueCraft.API.Vector3(lookAt.X, lookAt.Y, lookAt.Z)
* (gameTime.ElapsedGameTime.TotalSeconds * 4.3717);
diff --git a/TrueCraft.Launcher/Views/OptionView.cs b/TrueCraft.Launcher/Views/OptionView.cs
index c3fcb97..cdc42a2 100644
--- a/TrueCraft.Launcher/Views/OptionView.cs
+++ b/TrueCraft.Launcher/Views/OptionView.cs
@@ -60,12 +60,14 @@ namespace TrueCraft.Launcher.Views
{
var texturePack = _texturePacks[TexturePackListView.SelectedRow];
if (_lastTexturePack != texturePack)
+ {
UserSettings.Local.SelectedTexturePack = texturePack.Path;
+ UserSettings.Local.Save();
+ }
};
OpenFolderButton.Clicked += (sender, e) =>
{
- // TODO: Implement cross-platform logic here.
var dir = new DirectoryInfo(TexturePack.TexturePackPath);
Process.Start(dir.FullName);
};