예제 #1
0
        private VisualizerData ChooseBordersWithEmpty(PointL position)
        {
            var currentBlock = gameWorld.GetItem(position);

            if (currentBlock == null || currentBlock == Block.Either)
            {
                return(null);
            }

            var currentBTextures = currentBlock.BlockType.Textures.GetOrderedTextures();
            var currentCore      = currentBlock.BlockType.Core;
            var result           = new List <FaceData>();

            for (var i = 0; i < TextureInfo.Order.Length; i++)
            {
                var element = TextureInfo.Order[i];
                if (currentCore == BlockCore.Ore || currentCore == BlockCore.Transparent)
                {
                    result.Add(new FaceData(currentBTextures[i], i, TextureInfo.Brightness[element]));
                    continue;
                }

                var offset           = CollateShift(element);
                var neighboringBlock = gameWorld.GetItem(position.Add(offset));

                if (neighboringBlock == null || neighboringBlock == Block.Either ||
                    neighboringBlock.BlockType.Core == BlockCore.Transparent)
                {
                    result.Add(new FaceData(currentBTextures[i], i, TextureInfo.Brightness[element]));
                }
            }

            return(result.Count != 0 ? new VisualizerData(position, result) : null);
        }
 public DisplayConfigDesktopImageInfo(PointL pathSourceSize, RectangleL desktopImageRegion,
                                      RectangleL desktopImageClip)
 {
     PathSourceSize     = pathSourceSize;
     DesktopImageRegion = desktopImageRegion;
     DesktopImageClip   = desktopImageClip;
 }
예제 #3
0
 public Piece(World <Chunk <Block>, Block> world, PointL center, int radius, IReadOnlyList <Mob> mobs)
 {
     Mobs       = mobs;
     this.world = world;
     Center     = center;
     Radius     = radius;
 }
예제 #4
0
 public DeviceMode(
     string deviceName,
     PointL position,
     DisplayOrientation orientation,
     DisplayFixedOutput fixedOutput,
     uint bpp,
     uint width,
     uint height,
     DisplayFlags displayFlags,
     uint displayFrequency) : this(
         deviceName,
         DeviceModeFields.Position |
         DeviceModeFields.DisplayOrientation |
         DeviceModeFields.DisplayFixedOutput |
         DeviceModeFields.BitsPerPixel |
         DeviceModeFields.PelsWidth |
         DeviceModeFields.PelsHeight |
         DeviceModeFields.DisplayFlags |
         DeviceModeFields.DisplayFrequency
         )
 {
     Position           = position;
     DisplayOrientation = orientation;
     DisplayFixedOutput = fixedOutput;
     BitsPerPixel       = bpp;
     PixelsWidth        = width;
     PixelsHeight       = height;
     DisplayFlags       = displayFlags;
     DisplayFrequency   = displayFrequency;
 }
예제 #5
0
        public override void ViewportChanged(IMapViewport viewport, ViewportChangeAction action)
        {
            if (this.Image == null)
            {
                base.ViewportChanged(viewport, action);
                return;
            }
            long mapSize = MapTileSystemHelper.MapSize(viewport.ZoomLevel);

            if ((action & ViewportChangeAction.Zoom) != 0)
            {
                this.pixelLocation = MapTileSystemHelper.LatLongToPixelXY(this.Location, viewport.ZoomLevel);
            }
            if ((action & ViewportChangeAction.Pan) != 0)
            {
                this.drawRect = new RectangleL(pixelLocation.X - this.Image.Size.Width / 2, pixelLocation.Y - this.Image.Size.Height, this.Image.Size.Width, this.Image.Size.Height);
            }
            RectangleL wraparoundDrawRect = this.drawRect;

            for (int i = 0; i <= viewport.NumberOfWraparounds; i++)
            {
                if (wraparoundDrawRect.IntersectsWith(viewport.ViewportInPixels))
                {
                    this.isImageInViewPort = true;
                    break;
                }
                wraparoundDrawRect.Offset(mapSize, 0L);
            }
            if (!this.IsInViewport)
            {
                return;
            }
        }
 public DisplayConfigSourceMode(uint width, uint height, DisplayConfigPixelFormat pixelFormat, PointL position)
 {
     Width       = width;
     Height      = height;
     PixelFormat = pixelFormat;
     Position    = position;
 }
예제 #7
0
 public Block GetItem(PointL position)
 {
     if (!ContainsPosition(position))
     {
         return(Block.Either);
     }
     return(world.GetItem(position));
 }
예제 #8
0
 public override bool HitTest(PointG pointG, PointL pointL, IMapViewport viewport)
 {
     if (this.Image == null)
     {
         return(base.HitTest(pointG, pointL, viewport));
     }
     return(this.drawRect.Contains(pointL));
 }
예제 #9
0
 public override VisualizerData GetItem(PointL position)
 {
     var(cPosition, ePosition) = Translate2LocalNotation(position);
     if (chunks.ContainsKey(cPosition) && Chunk <VisualizerData> .CheckBounds(ePosition))
     {
         return(chunks[cPosition][ePosition]);
     }
     return(null);
 }
예제 #10
0
 public override Block GetItem(PointL position)
 {
     var(cPosition, bPosition) = Translate2LocalNotation(position);
     if (chunks.ContainsKey(cPosition) && Chunk <Block> .CheckBounds(bPosition))
     {
         return(chunks[cPosition][bPosition]);
     }
     return(Block.Either);
 }
예제 #11
0
        public (PointI cPosition, PointB elementPosition) Translate2LocalNotation(PointL point)
        {
            var elementX = (byte)(point.X % Chunk <TItem> .XLength);
            var elementZ = (byte)(point.Z % Chunk <TItem> .ZLength);
            var chunkX   = (int)(point.X / Chunk <TItem> .XLength);
            var chunkZ   = (int)(point.Z / Chunk <TItem> .ZLength);

            return(PointI.CreateXZ(chunkX, chunkZ), new PointB(elementX, (byte)point.Y, elementZ));
        }
예제 #12
0
 public override bool TrySetItem(PointL position, Block value)
 {
     var(cPosition, bPosition) = Translate2LocalNotation(position);
     if (!chunks.ContainsKey(cPosition) || !Chunk <Block> .CheckBounds(bPosition))
     {
         return(false);
     }
     chunks[cPosition][bPosition] = value;
     return(true);
 }
예제 #13
0
파일: Edge.cs 프로젝트: irovch/clipper
        internal void SetDx()
        {
            this.Delta = new PointL(Top.X - Bottom.X, Top.Y - Bottom.Y);

            IsHorizontal = Delta.Y == 0;

            Dx = IsHorizontal
                ? ClippingHelper.Horizontal
                : (double)Delta.X / Delta.Y;
        }
예제 #14
0
        public override bool TrySetItem(PointL position, VisualizerData value)
        {
            var(cPosition, ePosition) = Translate2LocalNotation(position);
            if (chunks.ContainsKey(cPosition) && Chunk <VisualizerData> .CheckBounds(ePosition))
            {
                chunks[cPosition][ePosition] = value;
                return(true);
            }

            return(false);
        }
예제 #15
0
파일: Edge.cs 프로젝트: irovch/clipper
        internal void ReverseHorizontal()
        {
            // swap horizontal edges' top and bottom x's so they follow the natural
            // progression of the bounds - ie so their xbots will align with the
            // adjoining lower edge. [Helpful in the ProcessHorizontal() method.]

            // GeometryHelper.Swap(ref Top.X, ref Bottom.X);
            var tmp = this.Top.X;

            this.Top    = new PointL(this.Bottom.X, this.Top.Y);
            this.Bottom = new PointL(tmp, this.Bottom.Y);
        }
예제 #16
0
파일: Edge.cs 프로젝트: irovch/clipper
 internal void InitializeGeometry()
 {
     if (Current.Y >= Next.Current.Y)
     {
         Bottom = Current;
         Top    = Next.Current;
     }
     else
     {
         Top    = Current;
         Bottom = Next.Current;
     }
     SetDx();
 }
예제 #17
0
 public DeviceMode(string deviceName, PointL position, uint bpp, uint width, uint height, uint displayFrequency)
     : this(
         deviceName,
         DeviceModeFields.Position |
         DeviceModeFields.BitsPerPixel |
         DeviceModeFields.PelsWidth |
         DeviceModeFields.PelsHeight |
         DeviceModeFields.DisplayFrequency)
 {
     Position = position;
     BitsPerPixel = bpp;
     PixelsWidth = width;
     PixelsHeight = height;
     DisplayFrequency = displayFrequency;
 }
예제 #18
0
        public override void Follow(PointL target, Piece piece, float time, float distance)
        {
            if (Mover.Position.GetDistance(target.AsPointF()) <= distance)
            {
                return;
            }
            var targetView = target.AsVector() - Mover.Position.AsVector();

            if (targetView.Equals(Vector3.Zero))
            {
                return;
            }
            targetView = Vector3.Normalize(targetView);
            var currentView = mover.Front;
            var coef        = GetCoefficient(targetView, currentView, time);
            var view        = targetView * coef + currentView * (1 - coef);

            if (view.Equals(Vector3.Zero))
            {
                return;
            }
            mover.SetView(view);
            var pos        = Mover.Position;
            var directions = new List <Direction> {
                Direction.Forward
            };

            if (isSlowed)
            {
                directions.Add(Direction.Up);
                isSlowed = false;
            }

            if (view.X != 0 && view.Z != 0)
            {
                Mover.Move(piece, directions, time);
            }
            if (Mover.Position.GetSquaredDistance(pos) < mover.Speed * time / 2)
            {
                isSlowed = true;
            }
        }
예제 #19
0
 public IEnumerable <(PointL position, Block block)> Helper()
 {
     /*for (var i = 1; i <= Radius; i++)
      * {
      *  foreach (var p in Center.GetCubicNeighbourhood(i))
      *  {
      *      yield return (p, GetItem(p));
      *  }
      * }*/
     for (var i = -Radius; i <= Radius; i++)
     {
         for (var j = -Radius; j <= Radius; j++)
         {
             for (var k = -Radius; k <= Radius; k++)
             {
                 var position = new PointL(i, j, k).Add(Center);
                 yield return(position, GetItem(position));
             }
         }
     }
 }
예제 #20
0
 public abstract void Follow(PointL target, Piece piece, float time, float distance);
예제 #21
0
 public abstract void GoTo(PointL target, Piece piece, float time);
예제 #22
0
 public abstract TItem GetItem(PointL position);
예제 #23
0
 public bool ContainsPosition(PointL position)
 {
     return(Center.GetDistance(position) <= Radius);
 }
예제 #24
0
 public abstract bool TrySetItem(PointL position, TItem value);
예제 #25
0
 public bool Contains(PointL pt)
 {
     return(pt.x >= Left && pt.x <= Right && pt.y >= Top && pt.y <= Bottom);
 }
예제 #26
0
 internal static extern IntPtr MonitorFromPoint(
     [In] PointL point,
     MonitorFromFlag flag
     );
예제 #27
0
 public static Geometry GetGeometry(BlockType blockType, PointL position)
 {
     return(Geometry.Identity(blockType.Form.Shift(position.AsVector())));
 }
예제 #28
0
 public VisualizerData(PointL position, List <FaceData> faces)
 {
     this.Position = position;
     Faces         = faces;
 }
예제 #29
0
 public void PutBlock(BlockType blockType, PointL position)
 {
     var(cPosition, ePosition)   = world.Translate2LocalNotation(position);
     world[cPosition][ePosition] = blockType == null ? null : new Block(blockType, ePosition);
     OnUpdateAlert(position);
 }
예제 #30
0
 private void OnUpdateAlert(PointL position)
 {
     UpdateAlert?.Invoke(position);
 }