diff --git a/lib/gilded_rose.dart b/lib/gilded_rose.dart index 5c87d3a..2322c6e 100644 --- a/lib/gilded_rose.dart +++ b/lib/gilded_rose.dart @@ -17,55 +17,73 @@ class GildedRose { GildedRose(this.items); void updateQuality() { - for (var i = 0; i < items.length; i++) { - if (items[i].name != 'Aged Brie' && - items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { - if (items[i].quality > 0) { - if (items[i].name != 'Sulfuras, Hand of Ragnaros') { - items[i].quality = items[i].quality - 1; - } - } + for (final item in items) { + if (item.name == 'Sulfuras, Hand of Ragnaros') { + _updateSulfuras(item); + } else if (item.name == 'Aged Brie') { + _updateAgedBrie(item); + } else if (item.name == 'Backstage passes to a TAFKAL80ETC concert') { + _updateBackstagePasses(item); } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - - if (items[i].name == 'Backstage passes to a TAFKAL80ETC concert') { - if (items[i].sellIn < 11) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - - if (items[i].sellIn < 6) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - } - } - } - - if (items[i].name != 'Sulfuras, Hand of Ragnaros') { - items[i].sellIn = items[i].sellIn - 1; - } - - if (items[i].sellIn < 0) { - if (items[i].name != 'Aged Brie') { - if (items[i].name != 'Backstage passes to a TAFKAL80ETC concert') { - if (items[i].quality > 0) { - if (items[i].name != 'Sulfuras, Hand of Ragnaros') { - items[i].quality = items[i].quality - 1; - } - } - } else { - items[i].quality = items[i].quality - items[i].quality; - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } + _updateNormalItem(item); } } } + + void _updateNormalItem(Item item) { + // Quality decreases by 1 each day + if (item.quality > 0) { + item.quality -= 1; + } + + item.sellIn -= 1; + + // After sell-by date, quality degrades twice as fast + if (item.sellIn < 0 && item.quality > 0) { + item.quality -= 1; + } + } + + void _updateAgedBrie(Item item) { + // Quality increases as it ages + if (item.quality < 50) { + item.quality += 1; + } + + item.sellIn -= 1; + + // After sell-by date, quality increases twice as fast + if (item.sellIn < 0 && item.quality < 50) { + item.quality += 1; + } + } + + void _updateBackstagePasses(Item item) { + // Quality increases as concert approaches + if (item.quality < 50) { + item.quality += 1; + + // 10 days or less: +2 quality/day + if (item.sellIn < 11 && item.quality < 50) { + item.quality += 1; + } + + // 5 days or less: +3 quality/day + if (item.sellIn < 6 && item.quality < 50) { + item.quality += 1; + } + } + + item.sellIn -= 1; + + // After concert, quality drops to 0 + if (item.sellIn < 0) { + item.quality = 0; + } + } + + void _updateSulfuras(Item item) { + // Legendary item never changes + // Quality always 80, sellIn never decreases + } }