Пример #1
0
        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();
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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);
            }
        }