Esempio n. 1
0
 public IEnumerable <HexCoords> CompoundArc(uint minRadius, uint maxRadius, HexFacing begin, HexFacing end)
 {
     for (uint radius = minRadius; radius <= maxRadius; radius++)
     {
         foreach (HexCoords loc in Arc(radius, begin, end))
         {
             yield return(loc);
         }
     }
 }
Esempio n. 2
0
 public static HexFacing Apply(this HexFacing facing, HexRotation rot)
 {
     if (facing == HexFacing.bad)
     {
         return(HexFacing.bad);
     }
     else
     {
         return((HexFacing)NumUtil.WrapPos((int)facing - rot.CWcount, 6));
     }
 }
Esempio n. 3
0
        public static IEnumerable <HexFacing> CompassTurnCCW(this HexFacing facing, HexFacing final)
        {
            HexFacing current = facing;

            while (current != final)
            {
                yield return(current);

                current = current.Apply(HexRotation.CCW);
            }

            yield return(final);
        }
Esempio n. 4
0
        public static HexCoords ToOffset(this HexFacing facing)
        {
            switch (facing)
            {
            case HexFacing.xy: return(HexCoords.XY);

            case HexFacing.xz: return(HexCoords.XZ);

            case HexFacing.yz: return(HexCoords.YZ);

            case HexFacing.yx: return(HexCoords.YX);

            case HexFacing.zx: return(HexCoords.ZX);

            case HexFacing.zy: return(HexCoords.ZY);

            default: return(HexCoords.O);
            }
        }
Esempio n. 5
0
        public IEnumerable <HexCoords> Arc(uint radius, HexFacing begin, HexFacing end)
        {
            HexCoords cursor = this + (begin.ToOffset() * (int)radius);

            // Yielding the initial cursor position is unique to arcs,
            // and is why this code works at radius 0 while rings do not.
            yield return(cursor);

            // We need to track our travel facing.
            // When following a circle, we start at the southwest corner heading north.
            // Southwest to north is rotating CW twice.
            // Any corner you start at, your travel on that side will be CW twice.
            HexRotation turnIntoSide = new HexRotation(2);

            foreach (HexFacing facing in begin.Rotate(2).CompassTurnCW(end.Rotate(1)))
            {
                for (int idx = 0; idx < radius; idx++)
                {
                    cursor += facing;
                    yield return(cursor);
                }
            }
        }
Esempio n. 6
0
 public static IEnumerable <HexFacing> CompassTurnCW(this HexFacing facing)
 {
     return(facing.CompassTurnCW(HexRotation.CCW));
 }
Esempio n. 7
0
 public static IEnumerable <HexFacing> CompassTurnCW(this HexFacing facing, HexRotation rot)
 {
     return(facing.CompassTurnCW(facing.Apply(rot)));
 }
Esempio n. 8
0
 public static HexFacing Rotate(this HexFacing facing, int CWcount)
 {
     return(facing.Apply(new HexRotation(CWcount)));
 }