diff --git a/MCGalaxy/Levels/IO/LvlProperties.cs b/MCGalaxy/Levels/IO/LvlProperties.cs deleted file mode 100644 index 57a976e55..000000000 --- a/MCGalaxy/Levels/IO/LvlProperties.cs +++ /dev/null @@ -1,79 +0,0 @@ -/* - Copyright 2010 MCSharp team (Modified for use with MCZall/MCLawl/MCGalaxy) - - Dual-licensed under the Educational Community License, Version 2.0 and - the GNU General Public License, Version 3 (the "Licenses"); you may - not use this file except in compliance with the Licenses. You may - obtain a copy of the Licenses at - - http://www.opensource.org/licenses/ecl2.php - http://www.gnu.org/licenses/gpl-3.0.html - - Unless required by applicable law or agreed to in writing, - software distributed under the Licenses are distributed on an "AS IS" - BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - or implied. See the Licenses for the specific language governing - permissions and limitations under the Licenses. - */ -using System; -using System.IO; - -namespace MCGalaxy.Levels.IO { - public static class LvlProperties { - - public static void Save(Level level, string path) { - try { - using (StreamWriter writer = new StreamWriter(path)) - WriteLevelProperties(level, writer); - } catch (Exception ex) { - Logger.Log(LogType.Warning, "Failed to save level properties!"); - Logger.LogError(ex); - return; - } - } - - static void WriteLevelProperties(Level level, StreamWriter w) { - w.WriteLine("#Level properties for " + level.name); - w.WriteLine("#Drown-time in seconds is [drown time] * 200 / 3 / 1000"); - w.WriteLine("Physics = " + level.physics); - ConfigElement.Serialise(Server.levelConfig, " settings", w, level.Config); - } - - - public static void Load(Level level, string path) { - PropertiesFile.Read(path, ref level, PropLineProcessor); - } - - public static void LoadEnv(Level level) { - string path = "levels/level properties/" + level.MapName + ".env"; - PropertiesFile.Read(path, ref level, EnvLineProcessor); - } - - static void EnvLineProcessor(string key, string value, ref Level level) { - switch (key.ToLower()) { - case "cloudcolor": level.Config.CloudColor = value; break; - case "fogcolor": level.Config.FogColor = value; break; - case "skycolor": level.Config.SkyColor = value; break; - case "shadowcolor": level.Config.ShadowColor = value; break; - case "lightcolor": level.Config.LightColor = value; break; - case "edgeblock": level.Config.EdgeBlock = byte.Parse(value); break; - case "edgelevel": level.Config.EdgeLevel = short.Parse(value); break; - case "cloudsheight": level.Config.CloudsHeight = short.Parse(value); break; - case "maxfog": level.Config.MaxFogDistance = short.Parse(value); break; - case "horizonblock": level.Config.HorizonBlock = byte.Parse(value); break; - } - } - - static void PropLineProcessor(string key, string value, ref Level level) { - switch (key.ToLower()) { - case "physics": - level.setPhysics(int.Parse(value)); break; - default: - if (!ConfigElement.Parse(Server.levelConfig, key, value, level.Config)) { - Logger.Log(LogType.Warning, "\"{0}\" was not a recognised level property key.", key); - } - break; - } - } - } -} \ No newline at end of file diff --git a/MCGalaxy/Levels/Level.cs b/MCGalaxy/Levels/Level.cs index 687d50ed6..0b7c9669b 100644 --- a/MCGalaxy/Levels/Level.cs +++ b/MCGalaxy/Levels/Level.cs @@ -223,8 +223,10 @@ namespace MCGalaxy { public static void SaveSettings(Level lvl) { if (lvl.IsMuseum) return; // museums do not save properties - lock (lvl.savePropsLock) - LvlProperties.Save(lvl, LevelInfo.PropertiesPath(lvl.MapName)); + lock (lvl.savePropsLock) { + string path = LevelInfo.PropertiesPath(lvl.MapName); + LevelConfig.Save(path, lvl.Config, lvl.name); + } } // Returns true if ListCheck does not already have an check in the position. @@ -373,13 +375,15 @@ namespace MCGalaxy { try { string propsPath = LevelInfo.FindPropertiesFile(lvl.MapName); if (propsPath != null) { - LvlProperties.Load(lvl, propsPath); + LevelConfig.Load(propsPath, lvl.Config); + lvl.setPhysics(lvl.Config.Physics); } else { Logger.Log(LogType.ConsoleMessage, ".properties file for level {0} was not found.", lvl.MapName); } // Backwards compatibility for older levels which had .env files. - LvlProperties.LoadEnv(lvl); + string envPath = "levels/level properties/" + lvl.MapName + ".env"; + LevelConfig.Load(envPath, lvl.Config); } catch (Exception e) { Logger.LogError(e); } diff --git a/MCGalaxy/Levels/LevelConfig.cs b/MCGalaxy/Levels/LevelConfig.cs index bf7e482e7..5831e0412 100644 --- a/MCGalaxy/Levels/LevelConfig.cs +++ b/MCGalaxy/Levels/LevelConfig.cs @@ -17,6 +17,7 @@ */ using System; using System.Collections.Generic; +using System.IO; using MCGalaxy.Config; using MCGalaxy.Games; @@ -131,6 +132,8 @@ namespace MCGalaxy { public List BuildBlacklist = new List(); // Physics settings + [ConfigInt("Physics", "Physics", null, 0, 0, 5)] + public int Physics; [ConfigInt("Physics overload", "Physics", null, 250)] public int PhysicsOverload = 1500; [ConfigInt("Physics speed", "Physics", null, 250)] @@ -187,5 +190,29 @@ namespace MCGalaxy { public int RoundsPlayed = 0; [ConfigInt("RoundsHumanWon", "Game", null, 0)] public int RoundsHumanWon = 0; + + + public static void Load(string path, LevelConfig config) { + PropertiesFile.Read(path, ref config, LineProcessor); + } + + static void LineProcessor(string key, string value, ref LevelConfig config) { + if (!ConfigElement.Parse(Server.levelConfig, key, value, config)) { + Logger.Log(LogType.Warning, "\"{0}\" was not a recognised level property key.", key); + } + } + + public static void Save(string path, LevelConfig config, string lvlname) { + try { + using (StreamWriter w = new StreamWriter(path)) { + w.WriteLine("#Level properties for " + lvlname); + w.WriteLine("#Drown-time in seconds is [drown time] * 200 / 3 / 1000"); + ConfigElement.Serialise(Server.levelConfig, " settings", w, config); + } + } catch (Exception ex) { + Logger.Log(LogType.Warning, "Failed to save level properties!"); + Logger.LogError(ex); + } + } } } \ No newline at end of file diff --git a/MCGalaxy/MCGalaxy_.csproj b/MCGalaxy/MCGalaxy_.csproj index 8b3be9ef0..20e8d6016 100644 --- a/MCGalaxy/MCGalaxy_.csproj +++ b/MCGalaxy/MCGalaxy_.csproj @@ -529,7 +529,6 @@ -