private string EncodeSettings() { var partsEncoded = BuildSettingsBytes() .Select(p => Base36Utils.Encode(p)) .ToArray(); return(string.Join("-", partsEncoded)); }
public void GetBytes_ToBase36FromBase36_Test() { const int value = 3; var array = BitConverter.GetBytes(value); var base36String = Base36Utils.ByteArrayToBase36String(array); var actual = Base36Utils.Base36StringToByteArray(base36String); var expected = BitConverter.GetBytes(value); TestUtils.StrictEqual(expected, actual); }
/// <summary> /// Encode into a Base36 encoded string. /// </summary> /// <returns>Encoded string</returns> public string ToBase36String() { return(Base36Utils.EncodeBytes(this.ToBytes())); }
/// <summary> /// Decode a <see cref="HudColors"/> from a Base36 encoded string. /// </summary> /// <param name="value">Encoded string</param> /// <returns>HudColors</returns> public static HudColors FromBase36String(string value) { var bytes = Base36Utils.DecodeBytes(value); return(new HudColors(bytes)); }
public void Update(string settings) { var parts = settings.Split('-') .Select(p => Base36Utils.Decode(p)) .ToArray(); if (parts.Any(p => p > int.MaxValue)) { throw new ArgumentException(nameof(settings)); } int part1 = (int)parts[0]; int part2 = (int)parts[1]; int part3 = (int)parts[2]; int part4 = (int)parts[3]; int part5 = (int)parts[4]; UseCustomItemList = (part1 & 8192) > 0; if (UseCustomItemList) { CrazyStartingItems = false; AddNutChest = false; AddMoonItems = false; AddFairyRewards = false; AddOther = false; ExcludeSongOfSoaring = false; RandomizeBottleCatchContents = false; AddDungeonItems = false; AddShopItems = false; AddCowMilk = false; AddSkulltulaTokens = false; AddStrayFairies = false; AddMundaneRewards = false; } else { AddMundaneRewards = (part1 & 1073741824) > 0; AddStrayFairies = (part1 & 536870912) > 0; AddSkulltulaTokens = (part1 & 268435456) > 0; AddCowMilk = (part1 & 134217728) > 0; AddFairyRewards = (part1 & 67108864) > 0; CrazyStartingItems = (part1 & 4194304) > 0; AddNutChest = (part1 & 2097152) > 0; AddMoonItems = (part1 & 32768) > 0; AddOther = (part1 & 4096) > 0; ExcludeSongOfSoaring = (part1 & 1024) > 0; RandomizeBottleCatchContents = (part1 & 128) > 0; AddDungeonItems = (part1 & 64) > 0; AddShopItems = (part1 & 32) > 0; } UpdateChests = (part1 & 33554432) > 0; FixEponaSword = (part1 & 16777216) > 0; NoStartingItems = (UseCustomItemList || AddOther) && (part1 & 8388608) > 0; UpdateShopAppearance = (part1 & 1048576) > 0; PreventDowngrades = (part1 & 524288) > 0; EnableSunsSong = (part1 & 262144) > 0; HideClock = (part1 & 131072) > 0; ClearHints = (part1 & 65536) > 0; FreeHints = (part1 & 16384) > 0; // 8192 - UseCustomItemList, see above // = (part1 & 2048) > 0; // = (part1 & 512) > 0; AddSongs = (part1 & 256) > 0; RandomizeDungeonEntrances = (part1 & 16) > 0; // = (part1 & 8) > 0; RandomizeEnemies = (part1 & 4) > 0; ShortenCutscenes = (part1 & 2) > 0; QuickTextEnabled = (part1 & 1) > 0; var damageMultiplierIndex = (int)((part2 & 0xF0000000) >> 28); var damageTypeIndex = (part2 & 0xF000000) >> 24; var modeIndex = (part2 & 0xFF0000) >> 16; var characterIndex = (part2 & 0xFF00) >> 8; // = part2 & 0xFF; var gravityTypeIndex = (int)((part3 & 0xF0000000) >> 28); var floorTypeIndex = (part3 & 0xF000000) >> 24; // = Color.FromArgb( // (part3 & 0xFF0000) >> 16, // (part3 & 0xFF00) >> 8, // part3 & 0xFF); var clockSpeedIndex = (byte)(part4 & 0xFF); var gossipHintsIndex = (byte)((part4 & 0xFF00) >> 8); var blastmaskCooldown = (byte)((part4 & 0xFF0000) >> 16); // = (byte)((part4 & 0xFF000000) >> 24); SpeedupBeavers = (part5 & (1 << 0)) > 0; SpeedupDampe = (part5 & (1 << 1)) > 0; SpeedupDogRace = (part5 & (1 << 2)) > 0; SpeedupLabFish = (part5 & (1 << 3)) > 0; CritWiggleDisable = (part5 & (1 << 4)) > 0; //DrawHash = (part5 & (1 << 5)) > 0; FastPush = (part5 & (1 << 6)) > 0; OcarinaUnderwater = (part5 & (1 << 7)) > 0; QuestItemStorage = (part5 & (1 << 8)) > 0; DamageMode = (DamageMode)damageMultiplierIndex; DamageEffect = (DamageEffect)damageTypeIndex; LogicMode = (LogicMode)modeIndex; Character = (Character)characterIndex; MovementMode = (MovementMode)gravityTypeIndex; FloorType = (FloorType)floorTypeIndex; ClockSpeed = (ClockSpeed)clockSpeedIndex; GossipHintStyle = (GossipHintStyle)gossipHintsIndex; BlastMaskCooldown = (BlastMaskCooldown)blastmaskCooldown; }