public void SetupGameObject(GameObject go) { if (sprite != null) { SpriteRenderer spriteRenderer = go.GetComponent <SpriteRenderer>(); if (spriteRenderer == null) { spriteRenderer = go.AddComponent <SpriteRenderer>(); } spriteRenderer.sprite = sprite; if (FlagUtil.IsSet(tileFlags, ETileAttribute.FLIPX)) { spriteRenderer.flipX = true; } if (FlagUtil.IsSet(tileFlags, ETileAttribute.FLIPY)) { spriteRenderer.flipY = true; } if (FlagUtil.IsExactly(tileFlags, (ETileAttribute.ROTATE180 | ETileAttribute.ROTATE90))) { go.transform.Rotate(Vector3.back * 270); } else if (FlagUtil.IsExactly(tileFlags, ETileAttribute.ROTATE180)) { go.transform.Rotate(Vector3.back * 180); } else if (FlagUtil.IsExactly(tileFlags, ETileAttribute.ROTATE90)) { go.transform.Rotate(Vector3.back * 90); } } }
private void SetRemake() { var ofs = Player.Personal.Offsets.ItemRemakeCollectBit; var data = Player.Personal.Data; for (int i = 0; i < CLB_Remake.Items.Count; i++) FlagUtil.SetFlag(data, ofs, i, CLB_Remake.GetItemChecked(i)); }
private void FillRemake(IReadOnlyList <string> items) { var str = GameInfo.Strings; var invert = ItemRemakeUtil.GetInvertedDictionary(); var ofs = Player.Personal.Offsets.ItemRemakeCollectBit; var max = Player.Personal.Offsets.MaxRemakeBitFlag; var data = Player.Personal.Data; for (int i = 0; i < max; i++) { var remakeIndex = i >> 3; // ItemRemakeInfo.BodyColorCountMax var variant = i & 7; ushort itemId = invert.TryGetValue((short)remakeIndex, out var id) ? id : (ushort)0; var itemName = remakeIndex == 0652 ? "photo" : items[itemId]; var flag = FlagUtil.GetFlag(data, ofs, i); string name = $"{remakeIndex:0000} V{variant:0} - {itemName}"; if (ItemRemakeInfoData.List.TryGetValue((short)remakeIndex, out var info)) { name = $"{name} ({info.GetBodyDescription(variant, str)})"; } CLB_Remake.Items.Add(name, flag); } }
public PersonalInfoSWSH(byte[] data) : base(data) { TMHM = new bool[200]; for (var i = 0; i < CountTR; i++) { TMHM[i] = FlagUtil.GetFlag(Data, 0x28 + (i >> 3), i); TMHM[i + CountTM] = FlagUtil.GetFlag(Data, 0x3C + (i >> 3), i); } // 0x38-0x3B type tutors, but only 8 bits are valid flags. var typeTutors = new bool[8]; for (int i = 0; i < typeTutors.Length; i++) { typeTutors[i] = FlagUtil.GetFlag(Data, 0x38, i); } TypeTutors = typeTutors; // 0xA8-0xAF are armor type tutors, one bit for each type var armorTutors = new bool[18]; for (int i = 0; i < armorTutors.Length; i++) { armorTutors[i] = FlagUtil.GetFlag(Data, 0xA8 + (i >> 3), i); } SpecialTutors = new[] { armorTutors, }; }
public override byte[] Write() { for (int i = 0; i < SpecialTutors[0].Length; i++) { FlagUtil.SetFlag(Data, 0xA8 + (i >> 3), i, SpecialTutors[0][i]); } return(Data); }
/// Returns the current value of the attribute taking into account all modifiers currently applied private float getValueWithModifiers() { if (Config == null) { return(0); } if (HasFlags) { float currentFlag = Flat; for (int i = 0; i < Modifiers.Count; i++) { switch (Modifiers[i].FlagOperator) { case AttributeFlagModOperator.AddFlag: currentFlag = FlagUtil.Add(currentFlag, Modifiers[i].Flat); break; case AttributeFlagModOperator.RemoveFlag: currentFlag = FlagUtil.Remove(currentFlag, Modifiers[i].Flat); break; case AttributeFlagModOperator.Set: currentFlag = Modifiers[i].Flat; break; } } return(currentFlag); } Modifiers.Sort((a, b) => - 1 * a.Factor.CompareTo(b.Factor)); //descending sort float totalFlat = 0; float totalFactor = 0; for (int i = 0; i < Modifiers.Count; i++) { totalFlat += Modifiers[i].Flat; if (Config.HasStackPenault) { totalFactor += Modifiers[i].Factor * Config.StackPenaults[ Mathf.Clamp(i, 0, Config.StackPenaults.Length - 1)]; } else { totalFactor += Modifiers[i].Factor; } } return(Mathf.Clamp((Flat + totalFlat) * (1 + Factor + totalFactor), Config.MinMaxValue.x, Config.MinMaxValue.y)); }
private void B_Save_Click(object sender, EventArgs e) { var ofs = Player.Personal.Offsets.ReceivedItems; var data = Player.Personal.Data; for (int i = 0; i < CLB_Items.Items.Count; i++) { FlagUtil.SetFlag(data, ofs, i, CLB_Items.GetItemChecked(i)); } Close(); }
private void FillCollect(IReadOnlyList<string> items) { var ofs = Player.Personal.Offsets.ItemCollectBit; var data = Player.Personal.Data; for (int i = 0; i < items.Count; i++) { var flag = FlagUtil.GetFlag(data, ofs, i); string value = items[i]; string name = $"0x{i:X3} - {value}"; CLB_Items.Items.Add(name, flag); } }
public void GetSetFlag(uint raw, int byteIndex, int bitIndex) { Span <byte> data = stackalloc byte[4]; WriteUInt32LittleEndian(data, raw); var value = FlagUtil.GetFlag(data, byteIndex, bitIndex); value.Should().Be(true); Span <byte> copy = stackalloc byte[data.Length]; FlagUtil.SetFlag(copy, byteIndex, bitIndex, true); data.SequenceEqual(copy).Should().BeTrue(); }
private void FillCheckBoxes() { var items = GameInfo.Strings.itemlistdisplay; var ofs = Player.Personal.Offsets.ReceivedItems; var data = Player.Personal.Data; for (int i = 0; i < items.Length; i++) { var flag = FlagUtil.GetFlag(data, ofs, i); string value = items[i]; string name = $"0x{i:X3} - {value}"; CLB_Items.Items.Add(name, flag); } }
private static void LoadFavorites(IEnumerable <InventoryItem> items, Span <byte> favorites) { foreach (var z in items) { var item = (InventoryItem8a)z; var itemID = item.Index; var ofs = itemID >> 3; if ((uint)ofs >= favorites.Length) { continue; } var bit = itemID & 7; item.IsFavorite = FlagUtil.GetFlag(favorites, ofs, bit); } }
public PersonalInfoLA(byte[] data) : base(data) { // TM/TR and Special Tutors are inaccessible; dummy data. // 0xA8-0xAF are armor type tutors, one bit for each type var moveShop = new bool[Legal.MoveShop8_LA.Length]; for (int i = 0; i < moveShop.Length; i++) { moveShop[i] = FlagUtil.GetFlag(Data, 0xA8 + (i >> 3), i); } SpecialTutors = new[] { moveShop, }; }
public override byte[] Write() { for (var i = 0; i < CountTR; i++) { FlagUtil.SetFlag(Data, 0x28 + (i >> 3), i, TMHM[i]); FlagUtil.SetFlag(Data, 0x3C + (i >> 3), i, TMHM[i + CountTM]); } for (int i = 0; i < TypeTutors.Length; i++) { FlagUtil.SetFlag(Data, 0x38, i, TypeTutors[i]); } for (int i = 0; i < SpecialTutors[0].Length; i++) { FlagUtil.SetFlag(Data, 0xA8 + (i >> 3), i, SpecialTutors[0][i]); } return(Data); }
private void FillCheckBoxes() { var items = GameInfo.Strings.itemlist.ToArray(); items[0] = string.Empty; var ofs = Player.Personal.Offsets.ReceivedItems; var data = Player.Personal.Data; for (int i = 0; i < items.Length; i++) { var flag = FlagUtil.GetFlag(data, ofs, i); string value = items[i]; if (string.IsNullOrEmpty(value)) { value = i.ToString(); } string name = $"0x{i:X3} - {value}"; CLB_Items.Items.Add(name, flag); } }
public void ClearFlag(uint raw, int byteIndex, int bitIndex) { Span <byte> data = stackalloc byte[4]; WriteUInt32LittleEndian(data, raw); var value = FlagUtil.GetFlag(data, byteIndex, bitIndex); value.Should().Be(false); // does nothing on empty Span <byte> copy = stackalloc byte[data.Length]; FlagUtil.SetFlag(copy, byteIndex, bitIndex, false); copy.Count((byte)0).Should().Be(copy.Length); // doesn't clear any other flag data.CopyTo(copy); FlagUtil.SetFlag(copy, byteIndex, bitIndex, false); data.SequenceEqual(copy).Should().BeTrue(); }
public List <TileSprite> CreateTileSprites() { List <TileSprite> tileSprites = new List <TileSprite>(); if (sprite == null) { return(tileSprites); } tileSprites.Add(new TileSprite(sprite)); for (ETileAttribute eFlag = ETileAttribute.FLIPX; eFlag < spriteFlags; ++eFlag) { if (FlagUtil.IsExactly(spriteFlags, eFlag)) { tileSprites.Add(new TileSprite(sprite, eFlag)); } } return(tileSprites); }
private static void GetCorners(RectInt sourceRect, ETileAttribute eTileFlags, out Vector2Int vTL, out Vector2Int vTR, out Vector2Int vBR, out Vector2Int vBL) { // Unity textures start in the bottom left so TOP = y + height vTL = new Vector2Int(sourceRect.x, sourceRect.yMax - 1); vTR = new Vector2Int(sourceRect.xMax - 1, sourceRect.yMax - 1); vBR = new Vector2Int(sourceRect.xMax - 1, sourceRect.y); vBL = new Vector2Int(sourceRect.x, sourceRect.y); if (eTileFlags == ETileAttribute.NONE) { return; } if (FlagUtil.IsSet(eTileFlags, ETileAttribute.FLIPX)) { Vector2Int vTLCopy = vTL; Vector2Int vTRCopy = vTR; Vector2Int vBRCopy = vBR; Vector2Int vBLCopy = vBL; vTL.Set(vTRCopy.x, vTRCopy.y); vTR.Set(vTLCopy.x, vTLCopy.y); vBR.Set(vBLCopy.x, vBLCopy.y); vBL.Set(vBRCopy.x, vBRCopy.y); } if (FlagUtil.IsSet(eTileFlags, ETileAttribute.FLIPY)) { Vector2Int vTLCopy = vTL; Vector2Int vTRCopy = vTR; Vector2Int vBRCopy = vBR; Vector2Int vBLCopy = vBL; vTL.Set(vBLCopy.x, vBLCopy.y); vTR.Set(vBRCopy.x, vBRCopy.y); vBR.Set(vTRCopy.x, vTRCopy.y); vBL.Set(vTLCopy.x, vTLCopy.y); } if (FlagUtil.IsSet(eTileFlags, ETileAttribute.ROTATEANY)) { Vector2Int[] vCorners = { vTL, vTR, vBR, vBL }; ETileAttribute eRotate = (eTileFlags & ETileAttribute.ROTATEANY); int iRotateOffset = 3; if (eRotate == ETileAttribute.ROTATE90) { iRotateOffset = 3; } else if (eRotate == ETileAttribute.ROTATE180) { iRotateOffset = 2; } else if (eRotate == (ETileAttribute.ROTATE180 | ETileAttribute.ROTATE90)) { iRotateOffset = 1; } int iTL = iRotateOffset % 4; int iTR = (iRotateOffset + 1) % 4; int iBR = (iRotateOffset + 2) % 4; int iBL = (iRotateOffset + 3) % 4; vTL.Set(vCorners[iTL].x, vCorners[iTL].y); vTR.Set(vCorners[iTR].x, vCorners[iTR].y); vBR.Set(vCorners[iBR].x, vCorners[iBR].y); vBL.Set(vCorners[iBL].x, vCorners[iBL].y); } }
public sealed override void SetFlag(int offset, int bitIndex, bool value) => FlagUtil.SetFlag(General, offset, bitIndex, value);
public sealed override bool GetFlag(int offset, int bitIndex) => FlagUtil.GetFlag(General, offset, bitIndex);
public bool GetFlag(int index) { var offset = Offset + FlagStart + (index >> 3); return(FlagUtil.GetFlag(Data, offset, index)); }
public void SetFlag(int index, bool value = true) { var offset = Offset + FlagStart + (index >> 3); FlagUtil.SetFlag(Data, offset, index, value); }
/// Checks whether the mod can be applied to the target entity public bool ModApplicationCanBeAccepted(Attribute <T> attribute, AttributeCondition <T> modifier = null) { if (modifier == null) { modifier = attribute.TargetAttributeModifier.Find(item => item.TargetAttributeID.Equals(Config.ID)); } if (modifier != null) { Attribute <T> currentAttribute = null; for (int i = 0; i < modifier.ModApplicationConditions.Count; i++) { currentAttribute = Parent.GetAttributeByID(modifier.ModApplicationConditions[i].AttributeName); switch (modifier.ModApplicationConditions[i].Operator) { case AttributeModOperator.Equals: if (!(currentAttribute.Value == modifier.ModApplicationConditions[i].Value)) { return(false); } break; case AttributeModOperator.Greater: if (!(currentAttribute.Value > modifier.ModApplicationConditions[i].Value)) { return(false); } break; case AttributeModOperator.Less: if (!(currentAttribute.Value < modifier.ModApplicationConditions[i].Value)) { return(false); } break; case AttributeModOperator.GreaterOrEquals: if (!(currentAttribute.Value >= modifier.ModApplicationConditions[i].Value)) { return(false); } break; case AttributeModOperator.LessOrEquals: if (!(currentAttribute.Value <= modifier.ModApplicationConditions[i].Value)) { return(false); } break; case AttributeModOperator.NotEquals: if (!(currentAttribute.Value != modifier.ModApplicationConditions[i].Value)) { return(false); } break; case AttributeModOperator.ContainsFlag: if (!FlagUtil.Has(currentAttribute.Value, modifier.ModApplicationConditions[i].Value)) { return(false); } break; case AttributeModOperator.NotContainsFlag: if (FlagUtil.Has(currentAttribute.Value, modifier.ModApplicationConditions[i].Value)) { return(false); } break; } } return(true); } return(false); }