public Controller(Item item, XElement element) : base(item, element) { limbPositions = new List <LimbPos>(); userPos = element.GetAttributeVector2("UserPos", Vector2.Zero); Enum.TryParse(element.GetAttributeString("direction", "None"), out dir); foreach (XElement el in element.Elements()) { if (el.Name != "limbposition") { continue; } LimbPos lp = new LimbPos(); try { lp.limbType = (LimbType)Enum.Parse(typeof(LimbType), el.Attribute("limb").Value, true); } catch (Exception e) { DebugConsole.ThrowError("Error in " + element + ": " + e.Message, e); } lp.position = el.GetAttributeVector2("position", Vector2.Zero); limbPositions.Add(lp); } IsActive = true; }
public override void FlipY(bool relativeToSub) { userPos.Y = -UserPos.Y; for (int i = 0; i < limbPositions.Count; i++) { float diff = (item.Rect.Y + limbPositions[i].Position.Y) - item.Rect.Center.Y; Vector2 flippedPos = new Vector2( limbPositions[i].Position.X, item.Rect.Center.Y - diff - item.Rect.Y); limbPositions[i] = new LimbPos(limbPositions[i].LimbType, flippedPos, limbPositions[i].AllowUsingLimb); } }
public override void FlipX(bool relativeToSub) { if (dir != Direction.None) { dir = dir == Direction.Left ? Direction.Right : Direction.Left; } userPos.X = -UserPos.X; for (int i = 0; i < limbPositions.Count; i++) { float diff = (item.Rect.X + limbPositions[i].Position.X * item.Scale) - item.Rect.Center.X; Vector2 flippedPos = new Vector2( (item.Rect.Center.X - diff - item.Rect.X) / item.Scale, limbPositions[i].Position.Y); limbPositions[i] = new LimbPos(limbPositions[i].LimbType, flippedPos, limbPositions[i].AllowUsingLimb); } }
public override void FlipX() { if (dir != Direction.None) { dir = dir == Direction.Left ? Direction.Right : Direction.Left; } userPos.X = -UserPos.X; for (int i = 0; i < limbPositions.Count; i++) { float diff = (item.Rect.X + limbPositions[i].position.X) - item.Rect.Center.X; Vector2 flippedPos = new Vector2( item.Rect.Center.X - diff - item.Rect.X, limbPositions[i].position.Y); limbPositions[i] = new LimbPos(limbPositions[i].limbType, flippedPos); } }
public Controller(Item item, XElement element) : base(item, element) { limbPositions = new List <LimbPos>(); userPos = element.GetAttributeVector2("UserPos", Vector2.Zero); Enum.TryParse(element.GetAttributeString("direction", "None"), out dir); foreach (XElement subElement in element.Elements()) { if (subElement.Name != "limbposition") { continue; } string limbStr = subElement.GetAttributeString("limb", ""); if (!Enum.TryParse(subElement.Attribute("limb").Value, out LimbType limbType)) { DebugConsole.ThrowError($"Error in item \"{item.Name}\" - {limbStr} is not a valid limb type."); } else { LimbPos limbPos = new LimbPos(limbType, subElement.GetAttributeVector2("position", Vector2.Zero), subElement.GetAttributeBool("allowusinglimb", false)); limbPositions.Add(limbPos); if (!limbPos.AllowUsingLimb) { if (limbType == LimbType.RightHand || limbType == LimbType.RightForearm || limbType == LimbType.RightArm || limbType == LimbType.LeftHand || limbType == LimbType.LeftForearm || limbType == LimbType.LeftArm) { AllowAiming = false; } } } } IsActive = true; }