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);
|
GildedRose(this.items);
|
||||||
|
|
||||||
void updateQuality() {
|
void updateQuality() {
|
||||||
for (var i = 0; i < items.length; i++) {
|
for (final item in items) {
|
||||||
if (items[i].name != 'Aged Brie' &&
|
if (item.name == 'Sulfuras, Hand of Ragnaros') {
|
||||||
items[i].name != 'Backstage passes to a TAFKAL80ETC concert') {
|
_updateSulfuras(item);
|
||||||
if (items[i].quality > 0) {
|
} else if (item.name == 'Aged Brie') {
|
||||||
if (items[i].name != 'Sulfuras, Hand of Ragnaros') {
|
_updateAgedBrie(item);
|
||||||
items[i].quality = items[i].quality - 1;
|
} else if (item.name == 'Backstage passes to a TAFKAL80ETC concert') {
|
||||||
}
|
_updateBackstagePasses(item);
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
if (items[i].quality < 50) {
|
_updateNormalItem(item);
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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