REFACTOR: extract item type methods from nested conditionals
This commit is contained in:
parent
7f05229104
commit
5655326543
1 changed files with 65 additions and 47 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue