예제 #1
0
        internal static bool Handle(Player p, Predicate <Player> selector, string opt, string value,
                                    AreaConfig cfg, string area)
        {
            Level lvl = p.level;

            // using if else instead of switch here reduces IL by about 200 bytes
            if (opt == "sky")
            {
                LevelEnv.SetColor(p, value, area, "sky color", ref cfg.SkyColor);
                LevelEnv.UpdateColor(selector, 0, cfg.SkyColor);
            }
            else if (opt == "cloud" || opt == "clouds")
            {
                LevelEnv.SetColor(p, value, area, "cloud color", ref cfg.CloudColor);
                LevelEnv.UpdateColor(selector, 1, cfg.CloudColor);
            }
            else if (opt == "fog")
            {
                LevelEnv.SetColor(p, value, area, "fog color", ref cfg.FogColor);
                LevelEnv.UpdateColor(selector, 2, cfg.FogColor);
            }
            else if (opt == "dark" || opt == "shadow")
            {
                LevelEnv.SetColor(p, value, area, "shadow color", ref cfg.ShadowColor);
                LevelEnv.UpdateColor(selector, 3, cfg.ShadowColor);
            }
            else if (opt == "sun" || opt == "light" || opt == "sunlight")
            {
                LevelEnv.SetColor(p, value, area, "sun color", ref cfg.LightColor);
                LevelEnv.UpdateColor(selector, 4, cfg.LightColor);
            }
            else if (opt == "weather")
            {
                LevelEnv.SetWeather(p, value, area, ref cfg.Weather);
                LevelEnv.UpdateWeather(selector, (byte)cfg.Weather);
            }
            else if (opt == "cloudheight" || opt == "cloudsheight")
            {
                LevelEnv.SetShort(p, value, area, "clouds height",
                                  lvl.Height + 2, ref cfg.CloudsHeight);
                LevelEnv.UpdateAppearance(selector, EnvProp.CloudsLevel, cfg.CloudsHeight);
            }
            else if (opt == "waterlevel" || opt == "edgelevel" || opt == "level")
            {
                LevelEnv.SetShort(p, value, area, "water level",
                                  lvl.Height / 2, ref cfg.EdgeLevel);
                LevelEnv.UpdateAppearance(selector, EnvProp.EdgeLevel, cfg.EdgeLevel);
            }
            else if (opt == "bedrockoffset" || opt == "sidesoffset" || opt == "sideoffset")
            {
                LevelEnv.SetShort(p, value, area, "bedrock offset",
                                  -2, ref cfg.SidesOffset);
                LevelEnv.UpdateAppearance(selector, EnvProp.SidesOffset, cfg.SidesOffset);
            }
            else if (opt == "maxfogdistance" || opt == "maxfog" || opt == "fogdistance")
            {
                LevelEnv.SetShort(p, value, area, "max fog distance",
                                  0, ref cfg.MaxFogDistance);
                LevelEnv.UpdateAppearance(selector, EnvProp.MaxFog, cfg.MaxFogDistance);
            }
            else if (opt == "cloudspeed" || opt == "cloudsspeed")
            {
                LevelEnv.SetFloat(p, value, area, 256, "clouds speed",
                                  256, ref cfg.CloudsSpeed, -0xFFFFFF, 0xFFFFFF);
                LevelEnv.UpdateAppearance(selector, EnvProp.CloudsSpeed, cfg.CloudsSpeed);
            }
            else if (opt == "weatherspeed")
            {
                LevelEnv.SetFloat(p, value, area, 256, "weather speed",
                                  256, ref cfg.WeatherSpeed, -0xFFFFFF, 0xFFFFFF);
                LevelEnv.UpdateAppearance(selector, EnvProp.WeatherSpeed, cfg.WeatherSpeed);
            }
            else if (opt == "weatherfade")
            {
                LevelEnv.SetFloat(p, value, area, 128, "weather fade rate",
                                  128, ref cfg.WeatherFade, 0, 255);
                LevelEnv.UpdateAppearance(selector, EnvProp.WeatherFade, cfg.WeatherFade);
            }
            else if (opt == "horizon" || opt == "edge" || opt == "water")
            {
                LevelEnv.SetBlock(p, value, area, "edge block", Block.Water, ref cfg.HorizonBlock);
                LevelEnv.UpdateAppearance(selector, EnvProp.EdgeBlock, cfg.HorizonBlock);
            }
            else if (opt == "side" || opt == "border" || opt == "bedrock")
            {
                LevelEnv.SetBlock(p, value, area, "sides block", Block.Bedrock, ref cfg.EdgeBlock);
                LevelEnv.UpdateAppearance(selector, EnvProp.SidesBlock, cfg.EdgeBlock);
            }
            else if (opt == "expfog")
            {
                LevelEnv.SetBool(p, value, area, "exp fog", 0, ref cfg.ExpFog);
                LevelEnv.UpdateAppearance(selector, EnvProp.ExpFog, cfg.ExpFog);
            }
            else if (opt == "skyboxhorspeed" || opt == "skyboxhor")
            {
                LevelEnv.SetFloat(p, value, area, 1024, "skybox horizontal speed",
                                  0, ref cfg.SkyboxHorSpeed, -0xFFFFFF, 0xFFFFFF);
                LevelEnv.UpdateAppearance(selector, EnvProp.SkyboxHorSpeed, cfg.SkyboxHorSpeed);
            }
            else if (opt == "skyboxverspeed" || opt == "skyboxver")
            {
                LevelEnv.SetFloat(p, value, area, 1024, "skybox vertical speed",
                                  0, ref cfg.SkyboxVerSpeed, -0xFFFFFF, 0xFFFFFF);
                LevelEnv.UpdateAppearance(selector, EnvProp.SkyboxVerSpeed, cfg.SkyboxVerSpeed);
            }
            else
            {
                return(false);
            }
            Level.SaveSettings(lvl);
            return(true);
        }
예제 #2
0
        static bool SetPreset(Player p, string value)
        {
            EnvPreset preset = null; // fog, sky, clouds, sun, shadow

            if (value.CaselessEq("cartoon"))
            {
                preset = new EnvPreset("00ffff", "1e90ff", "00bfff", "f5deb3", "f4a460");
            }
            else if (value.CaselessEq("noir"))
            {
                preset = new EnvPreset("000000", "1f1f1f", "000000", "696969", "1f1f1f");
            }
            else if (value.CaselessEq("trippy"))
            {
                preset = new EnvPreset("4B0082", "FFD700", "006400", "7CFC00", "B22222");
            }
            else if (value.CaselessEq("watery"))
            {
                preset = new EnvPreset("5f9ea0", "008080", "008B8B", "E0FFFF", "008B8B");
            }
            else if (value.CaselessEq("normal"))
            {
                preset = new EnvPreset("-1", "-1", "-1", "-1", "-1");
            }
            else if (value.CaselessEq("gloomy"))
            {
                preset = new EnvPreset("6A80A5", "405875", "405875", "444466", "3B3B59");
            }
            else if (value.CaselessEq("cloudy"))
            {
                preset = new EnvPreset("AFAFAF", "8E8E8E", "8E8E8E", "9b9b9b", "8C8C8C");
            }
            else if (value.CaselessEq("sunset"))
            {
                preset = new EnvPreset("FFA322", "836668", "9A6551", "7F6C60", "46444C");
            }
            else if (value.CaselessEq("midnight"))
            {
                preset = new EnvPreset("131947", "070A23", "1E223A", "181828", "0F0F19");
            }
            else if (File.Exists("presets/" + value.ToLower() + ".env"))
            {
                string   text  = File.ReadAllText("presets/" + value.ToLower() + ".env");
                string[] parts = text.SplitSpaces();
                preset = new EnvPreset(parts[0], parts[1], parts[2], parts[3], parts[4]);
            }
            if (preset == null)
            {
                SendPresetsMessage(p); return(false);
            }

            Level lvl = p.level;
            Predicate <Player> selector = pl => pl.level == lvl;
            LevelConfig        cfg      = lvl.Config;

            cfg.SkyColor    = preset.Sky;    LevelEnv.UpdateColor(selector, 0, cfg.SkyColor);
            cfg.CloudColor  = preset.Clouds; LevelEnv.UpdateColor(selector, 1, cfg.CloudColor);
            cfg.FogColor    = preset.Fog;    LevelEnv.UpdateColor(selector, 2, cfg.FogColor);
            cfg.ShadowColor = preset.Shadow; LevelEnv.UpdateColor(selector, 3, cfg.ShadowColor);
            cfg.LightColor  = preset.Sun;    LevelEnv.UpdateColor(selector, 4, cfg.LightColor);

            Level.SaveSettings(p.level);
            return(true);
        }