コード例 #1
0
        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();
        }
コード例 #2
0
        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();
        }