Exemplo n.º 1
0
        public void FillColumn(string colour, int column, int startPosition, int endPosition)
        {
            var(start, end) = GetStartAndEnd(startPosition, endPosition);


            for (int currentPixel = start; currentPixel <= end; currentPixel++)
            {
                var currentPosition = new PixelPosition
                {
                    X = column,
                    Y = currentPixel
                };

                if (!IsPositionValid(currentPosition))
                {
                    throw new ApplicationException($"X:{currentPosition.X} Y:{currentPosition.Y} Pixel Position out of bands");
                }

                _grid[currentPixel, column] = new Pixel
                {
                    Position = currentPosition,
                    Colour   = colour
                };
            }
        }
Exemplo n.º 2
0
        public void FillPixel(string colour, PixelPosition pixelPosition)
        {
            if (!IsPositionValid(pixelPosition))
            {
                throw new ApplicationException($"X:{pixelPosition.X} Y:{pixelPosition.Y} Pixel Position out of bands");
            }

            ;

            if (_grid[pixelPosition.Y, pixelPosition.X] != null)
            {
                _grid[pixelPosition.Y, pixelPosition.X].Colour = colour;
            }
            else
            {
                _grid[pixelPosition.Y, pixelPosition.X] = new Pixel
                {
                    Position = new PixelPosition
                    {
                        X = pixelPosition.X,
                        Y = pixelPosition.Y
                    },
                    Colour = colour
                };
            }
        }
Exemplo n.º 3
0
        public void GivenAPixelPositionAndColour_WhenFillPixelIsCalled_PixelShouldBeExpectedColour()
        {
            _colourGridService = new GridService(4, _startIndexPosition);
            var expectedColour = "red";
            var pixelPosition  = new PixelPosition {
                X = 1, Y = 2
            };

            _colourGridService.FillPixel(expectedColour, pixelPosition);
            Assert.That(_colourGridService.GetPixelColour(pixelPosition), Is.EqualTo(expectedColour));
        }
Exemplo n.º 4
0
        protected int[] getPixelValues()
        {
            List <int>    values = new List <int>();
            PixelPosition pixPos = null;

            sortedPixelPositions.Reset();
            while ((pixPos = sortedPixelPositions.Next()) != null)
            {
                addPixelValuesToList(values, pixPos.Column, pixPos.Row);
            }
            return(values.ToArray());
        }
Exemplo n.º 5
0
        public void FloodBlockWithColour(string colour, PixelPosition pixelPosition)
        {
            if (!IsPositionValid(pixelPosition))
            {
                throw new ApplicationException($"X:{pixelPosition.X} Y:{pixelPosition.Y} Pixel Position out of bands");
            }

            var adjacentPixelPositions = GetAllAdjacentSameColourPixels(pixelPosition);

            foreach (var adjacentPixelPosition in adjacentPixelPositions)
            {
                FillPixel(colour, adjacentPixelPosition);
            }
        }
Exemplo n.º 6
0
        private static IEnumerable <PixelPosition> GetTouchingPixelPositions(PixelPosition pixelPosition)
        {
            var upPosition = new PixelPosition {
                X = pixelPosition.X, Y = pixelPosition.Y - 1
            };
            var leftPosition = new PixelPosition {
                X = pixelPosition.X - 1, Y = pixelPosition.Y
            };
            var downPosition = new PixelPosition {
                X = pixelPosition.X, Y = pixelPosition.Y + 1
            };
            var rightPosition = new PixelPosition {
                X = pixelPosition.X + 1, Y = pixelPosition.Y
            };

            PixelPosition[] touchingPositions = { upPosition, leftPosition, downPosition, rightPosition };
            return(touchingPositions);
        }
Exemplo n.º 7
0
        private IEnumerable <PixelPosition> GetDirectlyTouchingPixels(PixelPosition pixelPosition)
        {
            var currentColour               = GetPixelColour(pixelPosition);
            var touchingPositions           = GetTouchingPixelPositions(pixelPosition);
            var validTouchingPositions      = touchingPositions.Where(IsPositionValid).Where(t => GetPixelColour(t) == currentColour).ToArray();
            var touchingPositionsNotYetSeen = validTouchingPositions.Where(v => !_pixelsSeen.Any(p => p.X == v.X && p.Y == v.Y)).ToList();

            _pixelsSeen.AddRange(touchingPositionsNotYetSeen);

            if (!touchingPositionsNotYetSeen.Any())
            {
                return(_pixelsSeen);
            }
            {
                foreach (var validTouchingPosition in touchingPositionsNotYetSeen)
                {
                    var notYetSeenPixelsPositions = GetDirectlyTouchingPixels(validTouchingPosition).Where(p => _pixelsSeen.Any(c => c.X != p.X && c.Y != p.Y));
                    return(notYetSeenPixelsPositions);
                }
            }

            return(_pixelsSeen);
        }
Exemplo n.º 8
0
 private bool IsPositionValid(PixelPosition pixelPosition)
 {
     return(pixelPosition.X >= _startIndexPosition && pixelPosition.X < _grid.GetLength(1) && (pixelPosition.Y >= _startIndexPosition && pixelPosition.Y < _grid.GetLength(0)));
 }
Exemplo n.º 9
0
 public string GetPixelColour(PixelPosition pixelPosition)
 {
     return(_grid[pixelPosition.Y, pixelPosition.X]?.Colour);
 }
Exemplo n.º 10
0
 public IEnumerable <PixelPosition> GetAllAdjacentSameColourPixels(PixelPosition pixelPosition)
 {
     return(GetDirectlyTouchingPixels(pixelPosition));
 }
Exemplo n.º 11
0
        private int defaultRadius;           // Player spotted radius.
        #endregion
        #endregion

        #region Constructors
        public PowerUp(Game game, Vector2 position, List <TileRef> sheetRefs,
                       int frameWidth, int frameHeight, float layerDepth,
                       float maxLifeTime, PowerUpType type, int amount, float multiplier,
                       SoundEffect pickupSnd, SoundEffect camoSnd, Ricochet newRound)
            : base(game, position, sheetRefs, frameWidth, frameHeight, layerDepth)
        {
            Visible           = true;
            DrawOrder         = 100;
            this.Type         = type;
            this.MaxLifeTime  = maxLifeTime;
            this.Factor       = multiplier;
            this.Amount       = amount;
            this.State        = PowerUpStatus.Deactivated;
            this.newRound     = newRound;
            BoundingRectangle = new Rectangle(
                PixelPosition.ToPoint(),
                new Point(FrameWidth / 8, FrameHeight / 8));

            #region Get Default Values
            TilePlayer          player        = (TilePlayer)Game.Services.GetService(typeof(TilePlayer));
            TilePlayerTurret    playerTurret  = (TilePlayerTurret)Game.Services.GetService(typeof(TilePlayerTurret));
            List <SentryTurret> sentryTurrets = (List <SentryTurret>)Game.Services.GetService(typeof(List <SentryTurret>));

            if (player != null)
            {
                defaultMaxVelocity        = player.MaxVelocity;
                defaultPlayerAcceleration = player.Acceleration;
                defaultPlayerDeceleration = player.Deceleration;
                defaultTurnSpeed          = player.turnSpeed;
            }

            foreach (SentryTurret turret in sentryTurrets)
            {
                if (turret != null)
                {
                    // Finds first enemy tank in list that's not NULL and takes those as default values.
                    defaultPlayerDamageRate = turret.Bullet.playerDamageRate;
                    defaultRadius           = turret.DetectRadius;
                    break;
                }
            }

            if (playerTurret != null)
            {
                defaultSentryDamageRate = playerTurret.Bullet.sentryDamageRate;
                defaultBullet           = playerTurret.Bullet;
                defaultShellSnd         = playerTurret.ShellSound;
            }
            #endregion

            #region Handle Audio
            this.pickupSnd = pickupSnd;
            pickupSndInst  = this.pickupSnd.CreateInstance();
            #endregion

            #region Setup OrbLight
            PenumbraComponent penumbra = Game.Services.GetService <PenumbraComponent>();
            penumbra.Lights.Add(OrbLight);

            switch (type)
            {
            case PowerUpType.Regen:
            case PowerUpType.Heal:
                OrbLight.Color = Color.LimeGreen;
                break;

            case PowerUpType.DefenseBoost:
                OrbLight.Color = Color.LightBlue;
                break;

            case PowerUpType.SpeedBoost:
                OrbLight.Color = Color.Orange;
                break;

            case PowerUpType.ExtraDamage:
                OrbLight.Color = Color.Red;
                break;

            case PowerUpType.Camouflage:
                OrbLight.Color = Color.Purple;
                break;

            default:
                OrbLight.Color = Color.White;
                break;
            }
            #endregion

            #region Setup Duration Bar
            if (Type == PowerUpType.Camouflage)
            {
                durationBar      = new HealthBar(game, CentrePos);
                durationBar.Name = Type.ToString();
                durationBar.txHealthBar.SetData(new[] { durationBarColor });
                AddHealthBar(durationBar);
                Health = (int)Duration;

                this.camoSnd       = camoSnd;
                camoSndInst        = this.camoSnd.CreateInstance();
                camoSndInst.Volume = 0.8f;
            }
            #endregion
        }