public AttackGarrisoned(Actor self, AttackGarrisonedInfo info) : base(self, info) { this.info = info; coords = Exts.Lazy(() => self.Trait <IBodyOrientation>()); armaments = new List <Armament>(); muzzles = new List <AnimationWithOffset>(); paxFacing = new Dictionary <Actor, IFacing>(); paxPos = new Dictionary <Actor, IPositionable>(); paxRender = new Dictionary <Actor, RenderSprites>(); GetArmaments = () => armaments; if (info.PortOffsets.Length == 0) { throw new InvalidOperationException("PortOffsets must have at least one entry."); } if (info.PortYaws.Length != info.PortOffsets.Length) { throw new InvalidOperationException("PortYaws must define an angle for each port."); } if (info.PortCones.Length != info.PortOffsets.Length) { throw new InvalidOperationException("PortCones must define an angle for each port."); } var p = new List <FirePort>(); for (var i = 0; i < info.PortOffsets.Length; i++) { p.Add(new FirePort { Offset = info.PortOffsets[i], Yaw = info.PortYaws[i], Cone = info.PortCones[i], }); } Ports = p.ToArray(); }
public AttackGarrisoned(Actor self, AttackGarrisonedInfo info) : base(self, info) { this.info = info; coords = Exts.Lazy(() => self.Trait <IBodyOrientation>()); armaments = new List <Armament>(); muzzles = new List <AnimationWithOffset>(); paxFacing = new Dictionary <Actor, IFacing>(); paxPos = new Dictionary <Actor, IPositionable>(); paxRender = new Dictionary <Actor, RenderSprites>(); GetArmaments = () => armaments; if (info.PortOffsets.Length % 3 != 0 || info.PortOffsets.Length == 0) { throw new InvalidOperationException("PortOffsets array length must be a multiple of three"); } if (info.PortYaws.Length * 3 != info.PortOffsets.Length) { throw new InvalidOperationException("FireYaw must define an angle for each port"); } if (info.PortCones.Length * 3 != info.PortOffsets.Length) { throw new InvalidOperationException("PortCones must define an angle for each port"); } var p = new List <FirePort>(); for (var i = 0; i < info.PortOffsets.Length / 3; i++) { p.Add(new FirePort { Offset = new WVec(info.PortOffsets[3 * i], info.PortOffsets[3 * i + 1], info.PortOffsets[3 * i + 2]), Yaw = info.PortYaws[i], Cone = info.PortCones[i], }); } Ports = p.ToArray(); }