private void RenderEnemies(Blitter b, IList <EnemyInstance> enemies) { b.ChangeSource(Level.SpritePatterns.PatternImage); if (enemies != null) { for (int i = 0; i < enemies.Count; i++) { EnemyInstance s = enemies[i]; SpriteDefinition enemySprite = Level.GetSprite(s.EnemyType); byte pal = (byte)(8 + Level.GetSpritePalette(s.EnemyType, s.DifficultByteValue == 8)); enemySprite.Draw(b, s.X * 2, s.Y * 2, pal); if (s.Respawn) { EnemyInstance.RespawnSprite.Draw(b, s.X * 2, s.Y * 2, 0); } if (selectedEnemy == i) { Rectangle spriteBounds = enemySprite.Measure(); spriteBounds.X += s.X * 16; spriteBounds.Y += s.Y * 16; b.DrawRect(spriteBounds, NesPalette.HighlightEntry); } } } }
/// <summary> /// Creates an array of enemies from an array of sprite data arrays. /// </summary> /// <param name="data">Array of sprite data arrays.</param> /// <param name="sizes">SpriteDefinition sizes</param> /// <returns>An array of enemies.</returns> public static SpriteDefinition[] FromArray(byte[][] data, Size[] sizes) { SpriteDefinition[] sprites = new SpriteDefinition[data.Length]; bool noSizesSpecified = sizes == null; for (int i = 0; i < data.Length; i++) { if (data[i] == null) { sprites[i] = LevelSprites.invalidEnemy; } else { if (noSizesSpecified || sizes.Length <= i) { sprites[i] = new SpriteDefinition(data[i], 2, 2); } else { sprites[i] = new SpriteDefinition(data[i], sizes[i].Width, sizes[i].Height); } } } return(sprites); }
/// <summary> /// Adds a sprite to a batch to be rendered to the output image. /// </summary> /// <param name="sprite">The graphic sprite.</param> /// <param name="X">The location of the sprite (in 8x8 tiles).</param> /// <param name="Y">The location of the sprite (int 8x8 tiles).</param> /// <param name="paletteIndex">The count of the paletteIndex to render with.</param> public void AddSprite(SpriteDefinition sprite, int X, int Y, byte paletteIndex) { _sprites.Add(new SpriteListItem(sprite, paletteIndex, new Point(X, Y))); }