示例#1
0
        private void appearArrangement(IPlayerArrangementTarget arrangementTarget, GameObject prefab, bool isReserve = false)
        {
            arrangementTarget.ArrangementPositions.ForEach(arrangementPosition => {
                var instance = Object.AppearToFloor(prefab, gameObject, new Vector3(
                                                        arrangementPosition.x * ArrangementAnnotater.ArrangementWidth,
                                                        0,
                                                        arrangementPosition.z * ArrangementAnnotater.ArrangementHeight
                                                        ));

                Debug.Assert(instance != null, "Arrangement が生成されていません");
                Debug.Assert(instance.GetComponent <ArrangementView> () != null, "Arrangement の ArrangementView が設定されておりません。");

                var arrangementView = instance.GetComponent <ArrangementView> ();

                // 選択時の挙動を追加
                if (!isReserve)
                {
                    arrangementView.OnSelect
                    .Subscribe(_ => {
                        // 予約状態の場合はメニューを出さない。
                        if (arrangementTarget.PlayerArrangementTargetModel.State == ArrangementTargetState.Reserve)
                        {
                            return;
                        }
                        // メニューを変更する
                        GameManager.Instance.GameModeManager.EnqueueChangeMode(GameModeGenerator.GenerateArrangementMenuSelectMode(arrangementTarget));
                    });
                }

                this.instances.Add(instance);
            });
        }
示例#2
0
 /// <summary>
 /// 選択されている配置ターゲットを消す
 /// </summary>
 public void RemoveSelectArrangement()
 {
     this.RemoveArranement(this.selectedArrangementTarget);
     this.selectedArrangementTarget = null;
     GameManager.Instance.ArrangementPresenter.ReLoad();
     GameManager.Instance.GameUIManager.ArrangementMenuUIPresenter.Close();
 }
示例#3
0
        /// <summary>
        /// 配置位置を消去する
        /// </summary>
        public void RemoveArranement(IPlayerArrangementTarget arrangementTarget)
        {
            var isContain = arrangementTargetStore.Contains(arrangementTarget);

            Debug.Assert(isContain, "含まれていない配置が消されようとしました。");
            if (isContain)
            {
                // 設置済みの場合は設置情報を消す
                if (arrangementTarget.HasMonoViewModel)
                {
                    GameManager.Instance.MonoManager.RemoveMono(arrangementTarget.MonoViewModel);
                    GameManager.Instance.OnegaiMediaterManager.NearOnegaiMediater.MediateByRBeforeRemoval(arrangementTarget);

                    // 近隣配置のお願い(自分の近隣を見るために消える前に必要)
                    this.RemoveNearArrangement(arrangementTarget);
                }

                this.arrangementTargetStore.Remove(arrangementTarget);
                this.arrangementTargetRemoveService.Execute(arrangementTarget);

                // 設置済みの場合は設置情報を消す
                if (arrangementTarget.HasMonoViewModel)
                {
                    // 減ったかどうかの判断(減った状態を渡すため、減ったあとに事項する必要あり)
                    var arrangemntMonoId = arrangementTarget.MonoInfo.Id;
                    this.onegaiMediater.ClearResetAndMediate(
                        new NL.OnegaiConditions.ArrangementCount(),
                        playerOnegaiRepository.GetAll().ToList()
                        );
                }
            }
            GameManager.Instance.ArrangementPresenter.ReLoad();
        }
示例#4
0
 /// <summary>
 /// 近くの配置物を取得する
 /// </summary>
 /// <param name="arrangementTarget">モデル</param>
 /// <returns></returns>
 public List <IPlayerArrangementTarget> GetNearArrangement(IPlayerArrangementTarget arrangementTarget)
 {
     if (!this.nearMap.ContainsKey(arrangementTarget))
     {
         return(new List <IPlayerArrangementTarget>());
     }
     return(this.nearMap[arrangementTarget]);
 }
示例#5
0
        public static ArrangementMenuSelectMode GenerateArrangementMenuSelectMode(IPlayerArrangementTarget arrangementTarget)
        {
            var arrangementMenuSelectModeContext = GameContextMap.DefaultMap.ArrangementMenuSelectModeContext;

            // コンバート
            arrangementMenuSelectModeContext.SetArrangementTarget(arrangementTarget);

            return(new ArrangementMenuSelectMode(arrangementMenuSelectModeContext));
        }
示例#6
0
        public void Execute(IPlayerArrangementTarget arrangementTarget, MonoInfo monoInfo)
        {
            // プレイヤー情報の変更
            arrangementTarget.RegisterMaking(monoInfo);
            playerArrangementTargetRepository.Store(arrangementTarget.PlayerArrangementTargetModel);

            // 予約
            ArrangementResourceHelper.ReserveConsume(arrangementTarget.MonoInfo.ArrangementResourceAmount);
            GameManager.Instance.ArrangementManager.AddArrangement(arrangementTarget);
        }
示例#7
0
        /// <summary>
        /// 設置時の判定
        /// 設置したオブジェクトと、その隣接オブジェクトに関して判定する
        /// </summary>
        /// <param name="arrangementTarget"></param>
        public void MediateByArrangement(IPlayerArrangementTarget arrangementTarget)
        {
            var nearArrangementTargets = GameManager.Instance.ArrangementManager.GetNearArrangement(arrangementTarget);

            foreach (var nearArrangementTarget in nearArrangementTargets)
            {
                var nearNearArrangementTarget = GameManager.Instance.ArrangementManager.GetNearArrangement(nearArrangementTarget);
                this.MediateInternal(nearArrangementTarget, nearNearArrangementTarget, false);
            }
            this.MediateInternal(arrangementTarget, nearArrangementTargets, false);
        }
示例#8
0
 private void RemoveNearArrangement(IPlayerArrangementTarget arrangementTarget)
 {
     if (this.nearMap.ContainsKey(arrangementTarget))
     {
         foreach (var nearArrangementTarget in this.nearMap[arrangementTarget])
         {
             this.nearMap[nearArrangementTarget].Remove(arrangementTarget);
         }
         this.nearMap.Remove(arrangementTarget);
     }
 }
示例#9
0
        /// <summary>
        /// 破棄時の判定
        /// 隣接オブジェクトと、自分のお願いを判定
        /// </summary>
        /// <param name="arrangementTarget"></param>
        public void MediateByRBeforeRemoval(IPlayerArrangementTarget arrangementTarget)
        {
            var nearArrangementTargets = GameManager.Instance.ArrangementManager.GetNearArrangement(arrangementTarget);

            foreach (var nearArrangementTarget in nearArrangementTargets)
            {
                var nearNearArrangementTargets = GameManager.Instance.ArrangementManager.GetNearArrangement(nearArrangementTarget);
                nearNearArrangementTargets.Remove(arrangementTarget);
                this.MediateInternal(nearArrangementTarget, nearNearArrangementTargets, true);
            }
            this.MediateInternal(arrangementTarget, new List <IPlayerArrangementTarget>(), true);
        }
示例#10
0
        private void AddArrangementCancelAnnotation(IPlayerArrangementTarget arrangementTarget)
        {
            var instance = Object.AppearToFloor(this.arrangementCancelAnnotationPrefab, this.gameObject, arrangementTarget.CenterPosition);
            var view     = instance.GetComponent <ArrangementReserveCancelView>();

            view.Initialize(this.mainCameta);
            this.disposables.Add(view.OnCancelObservable.Subscribe(_ => {
                this.unReserveArrangementService.Execute(arrangementTarget);
            }));

            this.instances.Add(instance);
        }
示例#11
0
        public PlayerArrangementTarget Execute(IPlayerArrangementTarget arrangementTarget)
        {
            var playerArrangementTargetModel = playerArrangementTargetRepository.Create(
                arrangementTarget.CenterPosition,
                arrangementTarget.Range,
                arrangementTarget.ArrangementPositions,
                arrangementTarget.ArrangementTargetState,
                null,
                null
                );

            return(new PlayerArrangementTarget(playerArrangementTargetModel));
        }
示例#12
0
        public ArrangementManager(GameObject root, IPlayerOnegaiRepository playerOnegaiRepository, IPlayerArrangementTargetRepository playerArrangementTargetRepository)
        {
            this.arrangementTargetStore    = new List <IPlayerArrangementTarget> ();
            this.selectedArrangementTarget = null;
            this.arrangementAnnotater      = new ArrangementAnnotater(root);
            this.nearMap = new Dictionary <IPlayerArrangementTarget, List <IPlayerArrangementTarget> >();

            this.setMonoViewModelToArrangementService = new SetMonoViewModelToArrangementService(playerArrangementTargetRepository);
            this.arrangementTargetRemoveService       = new ArrangementTargetRemoveService(playerArrangementTargetRepository);
            this.appearArrangementService             = new AppearArrangementService(playerArrangementTargetRepository);
            this.unReserveArrangementService          = new UnReserveArrangementService(playerArrangementTargetRepository);

            this.onegaiMediater         = new OnegaiMediater(playerOnegaiRepository);
            this.playerOnegaiRepository = playerOnegaiRepository;
        }
示例#13
0
        /// <summary>
        /// 近接情報を取得
        /// </summary>
        /// <param name="arrangementTarget"></param>
        private void AppendNearArrangement(IPlayerArrangementTarget arrangementTarget)
        {
            var nearArrangementTargets = SearchNearArrangement(arrangementTarget);

            if (!this.nearMap.ContainsKey(arrangementTarget))
            {
                this.nearMap[arrangementTarget] = new List <IPlayerArrangementTarget>();
            }
            this.nearMap[arrangementTarget].AddRange(nearArrangementTargets);
            foreach (var nearArrangementTarget in nearArrangementTargets)
            {
                if (!this.nearMap.ContainsKey(nearArrangementTarget))
                {
                    this.nearMap[nearArrangementTarget] = new List <IPlayerArrangementTarget>();
                }
                this.nearMap[nearArrangementTarget].Add(arrangementTarget);
            }
        }
示例#14
0
        public void OrderMouse(IPlayerArrangementTarget arrangementTarget)
        {
            Debug.Assert(this.IsConsume(new MouseOrderAmount(1)), "Mouse のオーダー数が限界です");

            // ネズミを家からインスタンス化して特定位置にオーダーする(ねずみの種類は動的に変えられるようにしてもいいかも)
            var mousePrefab   = ResourceLoader.LoadModel("mouse_normal");
            var mouseInstance = Object.AppearToFloor(mousePrefab, root, GameManager.Instance.MouseHomeManager.HomePostion);
            var mouse         = mouseInstance.GetComponent <Mouse> ();

            Debug.Assert(mouse != null, "Mouse コンポーネントがありません");
            Debug.Assert(!mouse.IsOrdered(), "すでにオーダーされています。");

            var makingPrefab = ResourceLoader.LoadPrefab("Model/Making");

            mouse.OrderMaking(
                this.mouseCreateService.Execute(mouse.transform.position, arrangementTarget.PlayerArrangementTargetModel),
                new PreMono(mouse, makingPrefab, arrangementTarget.MonoInfo));
            orderedMouse.Add(mouse);
        }
示例#15
0
        /// <summary>
        /// 近くの配置物を探索する
        /// </summary>
        /// <param name="arrangementTarget">モデル</param>
        /// <returns></returns>
        private List <IPlayerArrangementTarget> SearchNearArrangement(IPlayerArrangementTarget arrangementTarget)
        {
            var nearArrangementTargets = new List <IPlayerArrangementTarget> ();

            foreach (var arrangementPosition in arrangementTarget.GetEdgePositions())
            {
                var findArrangementTarget = this.Find(arrangementPosition);
                if (findArrangementTarget == null)
                {
                    continue;
                }
                if (nearArrangementTargets.IndexOf(findArrangementTarget) >= 0)
                {
                    continue;
                }
                if (!findArrangementTarget.HasMonoInfo)
                {
                    continue;
                }
                nearArrangementTargets.Add(findArrangementTarget);
            }
            return(nearArrangementTargets);
        }
示例#16
0
        private void MediateInternal(IPlayerArrangementTarget arrangementTarget, List <IPlayerArrangementTarget> nearArrangementTargets, bool isReset)
        {
            var targetMonoInfoId = arrangementTarget.MonoInfo.Id;

            if (!monoInfoIdToOngeais.ContainsKey(targetMonoInfoId))
            {
                return;
            }

            // 近隣のMonoIDを取得
            var nearMonoInfoIds = nearArrangementTargets
                                  .Select(nearArrangementTarget => nearArrangementTarget.MonoInfo.Id)
                                  .ToList();

            // 紐付いたお願いのIDを取得
            var onegaiModelIds = this.monoInfoIdToOngeais[targetMonoInfoId]
                                 .Select(model => model.Id)
                                 .ToList();

            // お願いのIDからプレイヤー情報を取得s
            var playerOnegaiModels = this.playerOnegaiRepository.GetByIds(onegaiModelIds);

            // 一旦クリア済みのものもリセットしてクリア状況を判断する
            if (isReset)
            {
                onegaiMediater.ClearResetAndMediate(
                    new Near(targetMonoInfoId, nearMonoInfoIds),
                    playerOnegaiModels);
            }
            else
            {
                onegaiMediater.Mediate(
                    new Near(targetMonoInfoId, nearMonoInfoIds),
                    playerOnegaiModels);
            }
        }
示例#17
0
 /// <summary>
 /// 選択されているかどうかの確認
 /// </summary>
 /// <param name="arrangementTarget"></param>
 /// <returns></returns>
 public bool CheckIsSelect(IPlayerArrangementTarget arrangementTarget)
 {
     return(selectedArrangementTarget == arrangementTarget);
 }
示例#18
0
 /// <summary>
 /// 選択する
 /// </summary>
 /// <param name="arrangementTarget"></param>
 public void Select(IPlayerArrangementTarget arrangementTarget)
 {
     Debug.Assert(arrangementTargetStore.Contains(arrangementTarget), "管理されていないターゲットです。");
     selectedArrangementTarget = arrangementTarget;
     GameManager.Instance.GameUIManager.ArrangementMenuUIPresenter.Show();
 }
示例#19
0
 /// <summary>
 /// 引数の配置位置がすでに存在しているかどうか?
 /// </summary>
 public bool IsSetArrangement(IPlayerArrangementTarget arrangementTarget)
 {
     return(IsSetArrangement(arrangementTarget.ArrangementPositions));
 }
 public void Execute(IPlayerArrangementTarget playerArrangementTarget, MonoViewModel monoViewModel)
 {
     playerArrangementTarget.RegisterMade(monoViewModel);
     this.playerArrangementTargetRepository.Store(playerArrangementTarget.PlayerArrangementTargetModel);
 }
示例#21
0
 /// <summary>
 /// 配置位置を追加する
 /// </summary>
 public void AddArrangement(IPlayerArrangementTarget arrangementTarget)
 {
     Debug.Assert(IsSetArrangement(arrangementTarget), "セットできない arrangementPosition が選択されています。");
     this.arrangementTargetStore.Add(arrangementTarget);
     GameManager.Instance.ArrangementPresenter.ReLoad();
 }
 public void SetArrangementTarget(IPlayerArrangementTarget arrangementTarget)
 {
     this.arrangementTarget = arrangementTarget;
 }
 public void Execute(IPlayerArrangementTarget arrangementTarget)
 {
     // 予約状況からも削除
     ArrangementResourceHelper.UnReserveConsume(arrangementTarget.MonoInfo.ArrangementResourceAmount);
     GameManager.Instance.ArrangementManager.RemoveArranement(arrangementTarget);
 }
 public void Execute(IPlayerArrangementTarget arrangementTarget)
 {
     Debug.Assert(arrangementTarget.PlayerArrangementTargetModel != null, "ArrangementTargetRemoveServiceが実行できません");
     playerArrangementTargetRepository.Remove(arrangementTarget.PlayerArrangementTargetModel);
 }