16. アップグレード
はじめに
レベルアップ時に3つのアップグレードを表示し、1つを選択する機能を追加しました。
(その前に、Weapon周りを大幅にリファクタしています。)
方針
アップグレードには、以下のような種類があります。
- 武器の新規取得(Lv.1)
- 武器のレベルアップ(Lv.2~5)
- HP回復
- MaxHP増加
- スピード増加
- マグネット範囲の増加
取得可能なアップグレードで選択肢プールを作成し、その中から3つを抽選して画面に表示します。プレイヤーは1つを選びます。
実装
アップグレードの定義
アップグレードはUpgradeインターフェースで定義され、iconKey, name, desc, requires, excludes, customAvailable, applyなどのプロパティを持ちます。
upgradeManagerでkey=upgradeId, value=Upgrade として保存しておきます。
interface Upgrade {
iconKey: UpgradeIconKey;
name: string;
desc: string;
requires: string[];
excludes: string[];
customAvailable?: () => boolean;
apply: () => void;
}requiresには、そのアップグレードの前提となる必要条件となるupgradeIdを、excludesには、排他条件となるupgradeIdを指定します。
これにより、選択肢プールを作成します。
例えば、shuriken_lv2の必要条件はshuriken_lv1を持っていることであり、排他条件はshuriken_lv2を持っていることです。
customAvailableメソッドは、より複雑な条件を指定します。たとえば、HPが最大であれば、「HP回復」はプールに入りません。
アップグレードの登録
アップグレードはregisterUpgrades関数で一括登録されます。
ここで武器アップグレード・非武器アップグレードがそれぞれ関数でまとめて登録されます。
アップグレードの選択画面
レベルアップ時にLevelUpSceneが起動し、3つの候補が表示されます。
これは、upgradeManager.getRandomUpgradeIdsで抽選されたアップグレード候補を、
UpgradeCardでカードUIを表示しています。
LevelUpSceneでカード選択・アニメーション・効果音などを制御します。
アップグレードの適用
プレイヤーが選択すると、upgradeManager.applyが呼ばれ、実際の効果がプレイヤーに反映されます。
適用済みupgradeIdはUpgradeListComponentのacquired配列に追加されます。(プレイヤーエンティティが保持)
アップグレードの抽選ロジック
getAvaiableUpgradesで、依存・排他・カスタム条件を満たすアップグレードのみ抽選対象になります。
候補がなければダミーの"gold"アップグレードが選ばれます。
(現在はgoldパラメータが存在しないため、これは意味のないアップグレードです。)
まとめ
アップグレードを追加しました。
