public void PlayContents(IEventContents eventContentes) { Debug.Assert(this.currentEventContents != null, "currentEventContentsがありません"); this.currentEventContents.OnExit(); // 終わった段階で終了状態にする if (this.currentEventContents.TargetPlayerEventModel != null) { this.currentEventContents.TargetPlayerEventModel.ToDone(); playerEventRepository.Store(this.currentEventContents.TargetPlayerEventModel); } // 報酬がなければ次のイベントに移動する if (this.currentEventContents.TargetPlayerEventModel == null) { this.currentEventContents = eventContentes; eventContentes.OnEnter(); return; } // 報酬の受け取り this.currentEventContentsExecuterState = EventContentsExecuterState.RewardReceive; var receiveReceiver = new RewardReceiver(this.currentEventContents.TargetPlayerEventModel); receiveReceiver.OnEndReceiveObservable.Subscribe(_ => { //報酬受取の終わったタイミングで次のイベントを起動する this.currentEventContentsExecuterState = EventContentsExecuterState.ContentsPlaying; this.currentEventContents = eventContentes; eventContentes.OnEnter(); }); receiveReceiver.ReceiveRewardAndShowModel(); }
public void Detect(IEventCondition condition) { // 条件のクリア判定 var targetPlayerEventModels = playerEventRepository.GetDetectable(condition.EventConditionType).ToList(); var updatePlayerEventModels = new List <PlayerEventModel> (); // foreach (var targetPlayerEventModel in targetPlayerEventModels) { // 判断条件を集める(まだ判断が終わっていなくて、指定のタイプのもの) var targetEventConditionModels = targetPlayerEventModel .Yets() .Where(model => model.EventConditionType == condition.EventConditionType) .ToList(); // 条件を満たした判断条件リスト var detectedEventConditionModels = condition.Detect(targetEventConditionModels); // それぞれをDone にする detectedEventConditionModels.ForEach(model => targetPlayerEventModel.ToClear(model)); // もし変更があれば更新する if (detectedEventConditionModels.Count > 0) { updatePlayerEventModels.Add(targetPlayerEventModel); } } // クリアしたモデルを保存する foreach (var updatePlayerEventModel in updatePlayerEventModels) { playerEventRepository.Store(updatePlayerEventModel); } }
public void Execute() { // 現在あるイベントで登録されていないものを登録 TODO: 後で外だし。 var models = this.eventRepository.GetAll().ToList(); foreach (var eventModel in models) { var playerEventModel = this.playerEventRepository.Get(eventModel.Id); Debug.Assert(playerEventModel != null, "イベントが取れませんでした。。。"); if (!playerEventModel.IsLock()) { continue; } // UnLock 状態にする playerEventModel.ToUnLock(); // 保存する playerEventRepository.Store(playerEventModel); } }