void IFooterSelectCellEvent.Attach(FooterSelectCellEventController controller) { this.AttachFooterSelectCellEvent(controller); }
public static void AttachFooterSelectCellEvent(this ILevelUpEvent self, FooterSelectCellEventController controller) { var gameSystem = GameSystem.Instance; var levelUpCostRecord = gameSystem.MasterData.LevelUpCost.Records.Get(self.Id, 0); controller.CellEventName.text = self.EventName; controller.Size.text = controller.SizeFormat.Format(self.Size); var possessionMoney = gameSystem.User.Wallet.Money; var stringBuilder = new StringBuilder(); controller.SetMoney(stringBuilder, gameSystem.User.Wallet.Money, levelUpCostRecord.Cost.Money); controller.CreateGimmick(self.GimmickPrefab); var properties = new List <Property>(); // アイテムを表示 foreach (var n in levelUpCostRecord.Cost.NeedItems) { properties.Add( controller.AddProperty(property => { var inventoryItem = gameSystem.User.Inventory.Items; var itemRecord = gameSystem.MasterData.Item.Records.Get(n.ItemId); var possessionItemAmount = inventoryItem.ContainsKey(itemRecord.Id) ? inventoryItem[itemRecord.Id] : 0; stringBuilder.Clear(); var color = controller.GetConditionColor(possessionItemAmount >= n.Amount); property.Prefix.text = itemRecord.Name; property.Value.text = stringBuilder.AppendColorCode(color, controller.NeedItemFormat.Format(possessionItemAmount, n.Amount)).ToString(); }) ); } // お金を毎フレーム更新する var t = new Tuple <StringBuilder, GameSystem, FooterSelectCellEventController, MasterDataLevelUpCost.Record>( stringBuilder, gameSystem, controller, levelUpCostRecord ); controller.UpdateAsObservable() .TakeUntilDisable(controller) .SubscribeWithState(t, (_, _t) => { var _stringBuilder = _t.Item1; var _gameSystem = _t.Item2; var _controller = _t.Item3; var _levelUpCostRecord = _t.Item4; _controller.SetMoney(_stringBuilder, _gameSystem.User.Wallet.Money, _levelUpCostRecord.Cost.Money); }); // フッターを開いているときもお金やアイテムの所持数が更新されるのを考慮してプロパティも更新する controller.UpdateAsObservable() .TakeUntilDisable(controller) .SubscribeWithState3(properties, stringBuilder, gameSystem, (_, _properties, _stringBuilder, _gameSystem) => { foreach (var p in _properties) { p.UpdateProperty(); } }); }