executeEvent method
- LifeEventEntity<
LifeEventParams> lifeEvent, - List<
LifeStageEntity> lifeStages
指定の lifeStage を対象に LifeVent の処理を適用する
Implementation
List<LifeStageEntity> executeEvent(LifeEventEntity lifeEvent, List<LifeStageEntity> lifeStages) {
switch (lifeEvent.type) {
case LifeEventType.nothing:
case LifeEventType.start:
break; // 何もすることない
case LifeEventType.goal:
break; // TODO: 実装
case LifeEventType.selectDirection:
break; // TODO: 実装
case LifeEventType.selectDirectionPerDiceRoll:
break; // TODO: 実装
case LifeEventType.selectDirectionPerLifeItem:
break; // TODO: 実装
case LifeEventType.gainLifeItems:
final params = lifeEvent.params as GainLifeItemsParams;
return lifeStages.map<LifeStageEntity>((lifeStage) {
final items = {...lifeStage.items};
for (final target in params.targetItems) {
final targetItem = LifeItemEntity(key: target.key, type: target.type, amount: target.amount);
final existingItem = items.firstWhere((el) => el.equalToTarget(target), orElse: () => null);
if (existingItem != null) {
/// 同一のものがある場合は削除しつつ加算
items
..removeWhere((el) => el.equalToTarget(target))
..add(existingItem.copyWith(amount: existingItem.amount + targetItem.amount)); // 加算
} else {
items.add(targetItem);
}
}
return lifeStage.copyWith(items: UnmodifiableSetView<LifeItemEntity>(items));
}).toList();
case LifeEventType.gainLifeItemsPerOtherLifeItem:
break; // TODO: 実装
case LifeEventType.gainLifeItemsPerDiceRoll:
break; // TODO: 実装
case LifeEventType.gainLifeItemsIfExistOtherLifeItem:
break; // TODO: 実装
case LifeEventType.gainLifeItemsIfNotExistOtherLifeItem:
break; // TODO: 実装
case LifeEventType.exchangeLifeItems:
final params = lifeEvent.params as ExchangeLifeItemsParams;
return lifeStages
.map<LifeStageEntity>((lifeStage) => lifeStage.copyWith(
items: UnmodifiableSetView<LifeItemEntity>(_exchangeLifeItems(lifeStage.items, params)),
))
.toList();
case LifeEventType.exchangeLifeItemsWithDiceRoll:
break; // TODO: 実装
case LifeEventType.loseLifeItems:
final params = lifeEvent.params as LoseLifeItemsParams;
return lifeStages.map<LifeStageEntity>((lifeStage) {
final items = {...lifeStage.items};
for (final target in params.targetItems) {
final targetItem = LifeItemEntity(key: target.key, type: target.type, amount: target.amount);
final existingItem = items.firstWhere((el) => el.equalToTarget(target), orElse: () => null);
if (existingItem != null) {
/// 同一のものがある場合は削除しつつ減算
items
..removeWhere((el) => el.equalToTarget(target))
..add(existingItem.copyWith(amount: existingItem.amount - targetItem.amount)); // 減算
} else {
items.add(targetItem);
}
}
return lifeStage.copyWith(items: UnmodifiableSetView<LifeItemEntity>(items));
}).toList();
case LifeEventType.loseLifeItemsPerDiceRoll:
break; // TODO: 実装
case LifeEventType.loseLifeItemsPerOtherLifeItem:
break; // TODO: 実装
case LifeEventType.loseLifeItemsIfExistOtherLifeItem:
break; // TODO: 実装
case LifeEventType.loseLifeItemsIfNotExistOtherLifeItem:
break; // TODO: 実装
}
return lifeStages.map<LifeStageEntity>((lifeStage) => lifeStage.copyWith()).toList();
}