From d5ce642d03d3dfffd6c94fc68d6224111d757111 Mon Sep 17 00:00:00 2001 From: kimura Date: Wed, 11 May 2022 16:55:43 +0900 Subject: [PATCH] =?UTF-8?q?add=20customize=20=E8=AA=AD=E3=81=BF=E8=BE=BC?= =?UTF-8?q?=E3=81=BF=E3=81=A8view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Scenes/marketing/Scripts/ButtonOnOff.cs | 21 ++++++ .../marketing/Scripts/ButtonOnOff.cs.meta | 3 + .../Scenes/marketing/Scripts/MarketView.cs | 45 +++++++++++ .../marketing/Scripts/MarketView.cs.meta | 3 + .../Scenes/marketing/Scripts/ShopCustomize.cs | 74 ++++++++++++++++++ .../marketing/Scripts/ShopCustomize.cs.meta | 3 + .../Scripts/ShopCustomizeSelector.cs | 75 +++++++++++++++++++ .../Scripts/ShopCustomizeSelector.cs.meta | 3 + .../marketing/Scripts/ShopCustomizeView.cs | 22 ++++++ .../Scripts/ShopCustomizeView.cs.meta | 3 + 10 files changed, 252 insertions(+) create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs.meta create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs.meta create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs.meta create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs.meta create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs create mode 100644 popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs.meta diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs new file mode 100644 index 00000000..aefb9ebf --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs @@ -0,0 +1,21 @@ +using System; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace MyGame.Scenes.marketing.Scripts +{ + public class ButtonOnOff : MonoBehaviour + { + [SerializeField] private Button button; + [SerializeField] private GameObject onObject; + [SerializeField] private GameObject offObject; + public IObservable OnClickObservable => button.OnClickAsObservable().TakeUntilDestroy(this); + + public void SetActive(bool active) + { + onObject.SetActive(active); + offObject.SetActive(!active); + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs.meta b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs.meta new file mode 100644 index 00000000..f57c4b37 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ButtonOnOff.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 24f017f833cd4fb984accf667ea61c9e +timeCreated: 1652183474 \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs new file mode 100644 index 00000000..98105b26 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs @@ -0,0 +1,45 @@ +using System; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace MyGame.Scenes.marketing.Scripts +{ + public class MarketView : MonoBehaviour + { + [SerializeField] private Transform signBoardTarget; + [SerializeField] private Transform decoration1Target; + [SerializeField] private Transform cartTarget; + [SerializeField] private Transform stockTarget; + [SerializeField] private Transform decoration2Target; + [SerializeField] private Transform category6Target; + + public void SetItem(ShopCustomizeData customizeData) + { + var target = GetTarget(customizeData.Category); + target.DestroyAllChildrens(); + Instantiate(customizeData.GetPrefab(), target); + } + + private Transform GetTarget(ShopCustomizeCategory category) + { + switch (category) + { + case ShopCustomizeCategory.Category1: + return signBoardTarget; + case ShopCustomizeCategory.Category2: + return decoration1Target; + case ShopCustomizeCategory.Category3: + return cartTarget; + case ShopCustomizeCategory.Category4: + return stockTarget; + case ShopCustomizeCategory.Category5: + return decoration2Target; + case ShopCustomizeCategory.Category6: + return category6Target; + default: + throw new ArgumentOutOfRangeException(); + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs.meta b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs.meta new file mode 100644 index 00000000..3bfba1a2 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/MarketView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 5bfa266420af43d6acc01f297b04ba13 +timeCreated: 1652255004 \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs new file mode 100644 index 00000000..4a433d4f --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs @@ -0,0 +1,74 @@ +using System; +using System.Linq; +using UniRx; +using UnityEngine; + +namespace MyGame.Scenes.marketing.Scripts +{ + public class ShopCustomize : MonoBehaviour + { + [SerializeField] private MarketView marketView; + [SerializeField] private ShopCustomizeView customizeView; + [SerializeField] private ShopCustomizeSelector customizeSelector; + private void Start() + { + var gameData = GameDataManager.GameData; + var customizeDataList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopCustomizeDataSheet); + var customizeLevelList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopCustomizeLevelDataSheet); + var customizeBonusList = SpreadsheetDataManager.Instance.GetBaseDataList(Const.ShopCustomizeBonusDataSheet); + + customizeView.SetLevel(gameData.ShopCustomizeLevel); + customizeView.OnCloseObservable.Subscribe(_ => + { + // unload scene + }).AddTo(this); + customizeView.OnClickInfoObservable.Subscribe(_ => + { + // info dialog + }).AddTo(this); + customizeSelector.Initialize(); + // カード生成 + var categories = (ShopCustomizeCategory[])Enum.GetValues(typeof(ShopCustomizeCategory)); + foreach (var category in categories) + { + var list = customizeDataList.Where(data => data.Category == category).ToList(); + var selectedId = gameData.ShopCustomizeSettings.GetSetting(category); + ShopCustomizeItem selectedItem = null; + foreach (var customizeData in list) + { + var item = customizeSelector.GenerateItem(category); + item.SetData(customizeData); + // 現在設定しているのアイテムを選択 + if (customizeData.id == selectedId) + { + selectedItem = item; + } + if (gameData.ShopCustomizeLevel > customizeData.level) + { + item.SetState(ShopCustomizeItemState.Lock); + } + if (gameData.ShopCustomizeMyItems.Contains(customizeData.id)) + { + item.SetState(ShopCustomizeItemState.Purchased); + } + item.SelectObservable.Subscribe(_ => + { + selectedItem.SetState(ShopCustomizeItemState.Purchased); + selectedItem = item; + item.SetState(ShopCustomizeItemState.Selected); + marketView.SetItem(customizeData); + }).AddTo(this); + item.DetailObservable.Subscribe(_ => + { + // item detail dialog + }).AddTo(this); + item.PurchaseObservable.Subscribe(_ => + { + // purchase dialog + item.SetState(ShopCustomizeItemState.Purchased); + }).AddTo(this); + } + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs.meta b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs.meta new file mode 100644 index 00000000..5ddd77c0 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomize.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: d61792503dd74c7496bad02d10fed632 +timeCreated: 1652170481 \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs new file mode 100644 index 00000000..be5b840d --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs @@ -0,0 +1,75 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace MyGame.Scenes.marketing.Scripts +{ + public class ShopCustomizeSelector : MonoBehaviour + { + [SerializeField] private ButtonOnOff signBoardButton; + [SerializeField] private ButtonOnOff decoration1Button; + [SerializeField] private ButtonOnOff cartButton; + [SerializeField] private ButtonOnOff stockButton; + [SerializeField] private ButtonOnOff decoration2Button; + [SerializeField] private ButtonOnOff category6Button; + [SerializeField] private ShopCustomizeItem itemPrefab; + [SerializeField] private Transform listPrefab; + [SerializeField] private ScrollRect scrollRect; + + private readonly Dictionary targetDict = new Dictionary(); + private readonly Dictionary buttonDict = new Dictionary(); + private readonly CompositeDisposable initializeCompositeDisposable = new CompositeDisposable(); + + public void Initialize() + { + var content = scrollRect.content; + content.DestroyAllChildrens(); + var categories = (ShopCustomizeCategory[])Enum.GetValues(typeof(ShopCustomizeCategory)); + foreach (var category in categories) + { + targetDict.Add(category, Instantiate(listPrefab, content)); + } + buttonDict.Add(ShopCustomizeCategory.Category1, signBoardButton); + buttonDict.Add(ShopCustomizeCategory.Category2, decoration1Button); + buttonDict.Add(ShopCustomizeCategory.Category3, cartButton); + buttonDict.Add(ShopCustomizeCategory.Category4, stockButton); + buttonDict.Add(ShopCustomizeCategory.Category5, decoration2Button); + // buttonDict.Add(ShopCustomizeCategory.Category6, category6Button); + + initializeCompositeDisposable.Dispose(); + buttonDict.Select(pair => pair.Value.OnClickObservable.Select(_ => pair.Key)) + .Merge() + .ThrottleFirst(TimeSpan.FromSeconds(.2f)) + .Subscribe(ChangeCategory).AddTo(initializeCompositeDisposable); + } + + public ShopCustomizeItem GenerateItem(ShopCustomizeCategory category) + { + return Instantiate(itemPrefab, targetDict[category]); + } + + public void SetScroll() + { + // 描画計算 + // shopInfoObject.SetActive(true); + // recordObject.SetActive(true); + Observable.TimerFrame(0, FrameCountType.EndOfFrame).Subscribe(_ => + { + // LayoutRebuilder.ForceRebuildLayoutImmediate(recordObject.transform as RectTransform); + // LayoutRebuilder.ForceRebuildLayoutImmediate(shopInfoObject.transform as RectTransform); + }).AddTo(this); + } + + private void ChangeCategory(ShopCustomizeCategory category) + { + foreach (var pair in targetDict) + { + pair.Value.gameObject.SetActive(pair.Key == category); + buttonDict[pair.Key]?.SetActive(pair.Key == category); + } + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs.meta b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs.meta new file mode 100644 index 00000000..554f313e --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeSelector.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: ec03eac508f44666a880fdf0d030b6c5 +timeCreated: 1652170481 \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs new file mode 100644 index 00000000..d7733109 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs @@ -0,0 +1,22 @@ +using System; +using UniRx; +using UnityEngine; +using UnityEngine.UI; + +namespace MyGame.Scenes.marketing.Scripts +{ + public class ShopCustomizeView : MonoBehaviour + { + [SerializeField] private Text levelText; + [SerializeField] private Button closeButton; + [SerializeField] private Button infoButton; + + public IObservable OnCloseObservable => closeButton.OnClickAsObservable().TakeUntilDestroy(this); + public IObservable OnClickInfoObservable => infoButton.OnClickAsObservable().TakeUntilDestroy(this); + + public void SetLevel(int value) + { + levelText.text = $"Lv.{value}"; + } + } +} \ No newline at end of file diff --git a/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs.meta b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs.meta new file mode 100644 index 00000000..5b353452 --- /dev/null +++ b/popcorn/Assets/MyGame/Scenes/marketing/Scripts/ShopCustomizeView.cs.meta @@ -0,0 +1,3 @@ +fileFormatVersion: 2 +guid: 4d5f36a2319942d39435ee1478359cda +timeCreated: 1652170481 \ No newline at end of file