/// <summary> /// 必要な武器を選択し終えるまで選択を再帰的に行う /// </summary> private static void StartSelectConsumeInstanceWeaponRecursive( this ISelectConsumeInstanceWeapons self, Actor actor, WeaponRecord targetWeaponRecord, List <WeaponRecord> targetWeaponRecords, List <InstanceWeapon> selectConsumeInstanceWeapons, Action <List <InstanceWeapon> > OnCompleteSelect, Action OnCancel ) { Assert.IsNotNull(targetWeaponRecord, $"対象となる{typeof(WeaponRecord)}がありません"); // 所持している武器から対象となる武器を抽出 var targetInstanceWeapons = actor.StatusController.Inventory.Weapons .Where(x => x.WeaponRecord == targetWeaponRecord) .ToList(); Broker.Global.Publish(RequestShowGridUI.Get(targetInstanceWeapons, i => { selectConsumeInstanceWeapons.Add(targetInstanceWeapons[i]); Broker.Global.Publish(RequestHideGridUI.Get()); var nextTargetWeaponRecord = GetTargetWeaponRecord(targetWeaponRecords, selectConsumeInstanceWeapons); // 次に選択する武器がない場合は完了処理を実行 if (nextTargetWeaponRecord == null) { OnCompleteSelect(selectConsumeInstanceWeapons); } else { self.StartSelectConsumeInstanceWeaponRecursive( actor, nextTargetWeaponRecord, targetWeaponRecords, selectConsumeInstanceWeapons, OnCompleteSelect, OnCancel ); } }, () => { OnCancel(); })); }
/// <summary> /// 消費する武器の選択を開始する /// </summary> public static void StartSelectConsumeInstanceWeapon( this ISelectConsumeInstanceWeapons self, Actor actor, NeedItems needItems, Action <List <InstanceWeapon> > OnCompleteSelect, Action OnCancel ) { var targetWeaponRecords = needItems.GetNeedWeaponRecords(); var selectConsumeInstanceWeapons = new List <InstanceWeapon>(); var targetWeaponRecord = GetTargetWeaponRecord(targetWeaponRecords, selectConsumeInstanceWeapons); self.StartSelectConsumeInstanceWeaponRecursive( actor, targetWeaponRecord, targetWeaponRecords, selectConsumeInstanceWeapons, OnCompleteSelect, OnCancel ); }