89 lines
1.9 KiB
Dart
89 lines
1.9 KiB
Dart
// WARNING: DO NOT modify the Item class - the goblin in the corner will insta-rage!
|
|
|
|
class Item {
|
|
String name;
|
|
int sellIn;
|
|
int quality;
|
|
|
|
Item(this.name, this.sellIn, this.quality);
|
|
|
|
@override
|
|
String toString() => '$name, $sellIn, $quality';
|
|
}
|
|
|
|
class GildedRose {
|
|
List<Item> items;
|
|
|
|
GildedRose(this.items);
|
|
|
|
void updateQuality() {
|
|
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 {
|
|
_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
|
|
}
|
|
}
|