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); }); }
/// <summary> /// 選択されている配置ターゲットを消す /// </summary> public void RemoveSelectArrangement() { this.RemoveArranement(this.selectedArrangementTarget); this.selectedArrangementTarget = null; GameManager.Instance.ArrangementPresenter.ReLoad(); GameManager.Instance.GameUIManager.ArrangementMenuUIPresenter.Close(); }
/// <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(); }
/// <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]); }
public static ArrangementMenuSelectMode GenerateArrangementMenuSelectMode(IPlayerArrangementTarget arrangementTarget) { var arrangementMenuSelectModeContext = GameContextMap.DefaultMap.ArrangementMenuSelectModeContext; // コンバート arrangementMenuSelectModeContext.SetArrangementTarget(arrangementTarget); return(new ArrangementMenuSelectMode(arrangementMenuSelectModeContext)); }
public void Execute(IPlayerArrangementTarget arrangementTarget, MonoInfo monoInfo) { // プレイヤー情報の変更 arrangementTarget.RegisterMaking(monoInfo); playerArrangementTargetRepository.Store(arrangementTarget.PlayerArrangementTargetModel); // 予約 ArrangementResourceHelper.ReserveConsume(arrangementTarget.MonoInfo.ArrangementResourceAmount); GameManager.Instance.ArrangementManager.AddArrangement(arrangementTarget); }
/// <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); }
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); } }
/// <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); }
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); }
public PlayerArrangementTarget Execute(IPlayerArrangementTarget arrangementTarget) { var playerArrangementTargetModel = playerArrangementTargetRepository.Create( arrangementTarget.CenterPosition, arrangementTarget.Range, arrangementTarget.ArrangementPositions, arrangementTarget.ArrangementTargetState, null, null ); return(new PlayerArrangementTarget(playerArrangementTargetModel)); }
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; }
/// <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); } }
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); }
/// <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); }
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); } }
/// <summary> /// 選択されているかどうかの確認 /// </summary> /// <param name="arrangementTarget"></param> /// <returns></returns> public bool CheckIsSelect(IPlayerArrangementTarget arrangementTarget) { return(selectedArrangementTarget == arrangementTarget); }
/// <summary> /// 選択する /// </summary> /// <param name="arrangementTarget"></param> public void Select(IPlayerArrangementTarget arrangementTarget) { Debug.Assert(arrangementTargetStore.Contains(arrangementTarget), "管理されていないターゲットです。"); selectedArrangementTarget = arrangementTarget; GameManager.Instance.GameUIManager.ArrangementMenuUIPresenter.Show(); }
/// <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); }
/// <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); }