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); };