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 }; } }
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 }; } }
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)); }
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()); }
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); } }
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); }
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); }
private bool IsPositionValid(PixelPosition pixelPosition) { return(pixelPosition.X >= _startIndexPosition && pixelPosition.X < _grid.GetLength(1) && (pixelPosition.Y >= _startIndexPosition && pixelPosition.Y < _grid.GetLength(0))); }
public string GetPixelColour(PixelPosition pixelPosition) { return(_grid[pixelPosition.Y, pixelPosition.X]?.Colour); }
public IEnumerable <PixelPosition> GetAllAdjacentSameColourPixels(PixelPosition pixelPosition) { return(GetDirectlyTouchingPixels(pixelPosition)); }
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 }