畑強化にDetail表示/購入処理追加

This commit is contained in:
kimura 2021-09-29 13:02:51 +09:00
parent 2a95ed4bb6
commit a61d9dc051
8 changed files with 329 additions and 35 deletions

View File

@ -440,6 +440,7 @@ GameObject:
serializedVersion: 6
m_Component:
- component: {fileID: 3910593344630799909}
- component: {fileID: 4805744652131432394}
m_Layer: 5
m_Name: Seedling_change
m_TagString: Untagged
@ -472,6 +473,21 @@ RectTransform:
m_AnchoredPosition: {x: -160, y: 41}
m_SizeDelta: {x: 200, y: 220}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!114 &4805744652131432394
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 3910593344630799910}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e220d0668504fe99a65270586553f5a, type: 3}
m_Name:
m_EditorClassIdentifier:
rank1Seedling: {fileID: 2760069770662828715}
rank2Seedling: {fileID: 8792014694231266041}
rank3Seedling: {fileID: 1680596136379924953}
--- !u!1 &5208769480954757392
GameObject:
m_ObjectHideFlags: 0

View File

@ -151,7 +151,7 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 884928058}
m_RootOrder: 1
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
@ -377,7 +377,7 @@ RectTransform:
- {fileID: 944967793}
- {fileID: 653404266}
m_Father: {fileID: 884928058}
m_RootOrder: 2
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0, y: 0}
m_AnchorMax: {x: 1, y: 1}
@ -472,6 +472,62 @@ CanvasRenderer:
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 745458275}
m_CullTransparentMesh: 0
--- !u!1 &791576057
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 791576059}
- component: {fileID: 791576058}
m_Layer: 0
m_Name: Manager
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!114 &791576058
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 791576057}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7ea6a373109a42b3871edbabeb578799, type: 3}
m_Name:
m_EditorClassIdentifier:
backgroundAnimator: {fileID: 826335515}
purchaseButton: {fileID: 1192264083}
releaseButton: {fileID: 865761136}
closeButton: {fileID: 1130921226}
ReinforceObject: {fileID: 1937871401}
ReleaseObject: {fileID: 944967792}
currentSeedling: {fileID: 3910593343511446857}
nextSeedling: {fileID: 1480555406}
currentSignBoard: {fileID: 3910593343511446856}
nextSignBoard: {fileID: 1480555405}
messageText: {fileID: 1977897798}
reinforcePriceText: {fileID: 1565131239}
releasePriceText: {fileID: 1133773169}
--- !u!4 &791576059
Transform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 791576057}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalPosition: {x: 917.4497, y: 1390.5071, z: -105.66776}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 0}
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
--- !u!1 &826335513
GameObject:
m_ObjectHideFlags: 0
@ -498,11 +554,11 @@ RectTransform:
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 826335513}
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children: []
m_Father: {fileID: 884928058}
m_Father: {fileID: 2144327477}
m_RootOrder: 0
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
@ -712,11 +768,10 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 1, y: 1, z: 1}
m_Children:
- {fileID: 826335514}
- {fileID: 308891213}
- {fileID: 698470367}
m_Father: {fileID: 2144327477}
m_RootOrder: 0
m_RootOrder: 1
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
@ -1627,6 +1682,30 @@ RectTransform:
type: 3}
m_PrefabInstance: {fileID: 1480555403}
m_PrefabAsset: {fileID: 0}
--- !u!114 &1480555405 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 3910593342547943749, guid: 355bec1b0368b6a46bb3d3e15151d133,
type: 3}
m_PrefabInstance: {fileID: 1480555403}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &1480555406 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 4805744652131432394, guid: 355bec1b0368b6a46bb3d3e15151d133,
type: 3}
m_PrefabInstance: {fileID: 1480555403}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e220d0668504fe99a65270586553f5a, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!1 &1546700151
GameObject:
m_ObjectHideFlags: 0
@ -2147,6 +2226,7 @@ RectTransform:
m_LocalPosition: {x: 0, y: 0, z: 0}
m_LocalScale: {x: 0, y: 0, z: 0}
m_Children:
- {fileID: 826335514}
- {fileID: 884928058}
m_Father: {fileID: 0}
m_RootOrder: 0
@ -2273,5 +2353,34 @@ PrefabInstance:
propertyPath: m_Name
value: Seedling
objectReference: {fileID: 0}
- target: {fileID: 3910593344630799910, guid: 355bec1b0368b6a46bb3d3e15151d133,
type: 3}
propertyPath: m_IsActive
value: 1
objectReference: {fileID: 0}
m_RemovedComponents: []
m_SourcePrefab: {fileID: 100100000, guid: 355bec1b0368b6a46bb3d3e15151d133, type: 3}
--- !u!114 &3910593343511446856 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 3910593342547943749, guid: 355bec1b0368b6a46bb3d3e15151d133,
type: 3}
m_PrefabInstance: {fileID: 3910593343511446855}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3}
m_Name:
m_EditorClassIdentifier:
--- !u!114 &3910593343511446857 stripped
MonoBehaviour:
m_CorrespondingSourceObject: {fileID: 4805744652131432394, guid: 355bec1b0368b6a46bb3d3e15151d133,
type: 3}
m_PrefabInstance: {fileID: 3910593343511446855}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 0}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: 7e220d0668504fe99a65270586553f5a, type: 3}
m_Name:
m_EditorClassIdentifier:

View File

@ -7,21 +7,36 @@ using UnityEngine.UI;
public class CornFieldReinforcement : MonoBehaviour
{
public static readonly string CornFieldReinforcementDataTypeTag = "CornFieldReinforcementDataType";
public static readonly string CornFieldReinforcementDataTag = "CornFieldReinforcementData";
[SerializeField] private List<CornFieldReinforcementView> reinforcementViews;
[SerializeField] private MachineUpgradeView machineUpgradeView;
[SerializeField] private Button closeButton;
private CompositeDisposable compositeDisposable = new CompositeDisposable();
private void Start()
{
compositeDisposable.AddTo(this);
closeButton.OnClickAsObservable().Subscribe(_ =>
{
TransitionManager.Instance.UnloadScene(GameScenes.Reinforcement);
LocalCacheManager.Remove(CornFieldReinforcementDataTypeTag);
LocalCacheManager.Remove(CornFieldReinforcementDataTag);
}).AddTo(this);
SetView();
}
private void SetView()
{
compositeDisposable.Clear();
var gameData = GameDataManager.GameData;
var fieldData = SpreadsheetDataManager.Instance.GetBaseDataList<FieldUpgradeData>(Const.FieldUpgradeDataSheet);
// 畑
foreach (var view in reinforcementViews)
{
var upgradeType = FieldUpgradeData.PlantTypeToUpgradeType(view.LineType);
if (gameData.PlantLineDataList.FirstOrDefault(x => x.Type == view.LineType) is PlantLineData lineData)
{
// Max
@ -31,18 +46,41 @@ public class CornFieldReinforcement : MonoBehaviour
}
else
{
var nextHarvestPrice = fieldData.FirstOrDefault(x => x.Type == x.PlantTypeToUpgradeType(lineData.Type) && x.level == (int)GetNextRank(lineData.Level))?.price ?? 1;
view.SetButtonActive(nextHarvestPrice <= CoinManager.Instance.OwnCoin);
view.SetReinforcement(lineData, nextHarvestPrice);
var nextRank = GetNextRank(lineData.Level);
var price = fieldData.FirstOrDefault(x => x.Type == upgradeType && x.level == (int)nextRank)?.price ?? 1;
view.SetButtonActive(price <= CoinManager.Instance.OwnCoin);
view.SetReinforcement(lineData, price);
// 購入ボタン
view.ButtonClickObserve.Subscribe(_ =>
{
LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, upgradeType);
LocalCacheManager.Save(CornFieldReinforcementDataTag, (lineData, price, new Action(() => {
PurchaseField(price, view.LineType, nextRank);
SetView();
})));
TransitionManager.Instance.LoadSceneAdditive(GameScenes.ReinforcementDetail);
}).AddTo(compositeDisposable);
}
}
else
{
var price = fieldData.FirstOrDefault(x => x.Type == x.PlantTypeToUpgradeType(view.LineType) && x.level == (int)CornFieldRank.Rank1)?.price ?? 1;
var price = fieldData.FirstOrDefault(x => x.Type == upgradeType && x.level == (int)CornFieldRank.Rank1)?.price ?? 1;
view.SetButtonActive(price <= CoinManager.Instance.OwnCoin);
view.SetRelease(price);
// 購入ボタン
view.ButtonClickObserve.Subscribe(_ =>
{
LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, upgradeType);
LocalCacheManager.Save(CornFieldReinforcementDataTag, (lineData = null, price, new Action(() => {
PurchaseField(price, view.LineType, CornFieldRank.Rank1);
SetView();
})));
TransitionManager.Instance.LoadSceneAdditive(GameScenes.ReinforcementDetail);
}).AddTo(compositeDisposable);
}
}
// 収穫機
// Max
var maxLevel = fieldData.Where(x => x.Type == CornFieldUpgradeType.Machine).Max(x => x.level);
if (gameData.MachineLevel == maxLevel)
@ -51,12 +89,47 @@ public class CornFieldReinforcement : MonoBehaviour
}
else
{
var nextMachinePrice = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == gameData.MachineLevel + 1)?.price ?? 1;
machineUpgradeView.SetButtonActive(nextMachinePrice <= CoinManager.Instance.OwnCoin);
machineUpgradeView.SetData(gameData.MachineLevel, nextMachinePrice);
var price = fieldData.FirstOrDefault(x => x.Type == CornFieldUpgradeType.Machine && x.level == gameData.MachineLevel + 1)?.price ?? 1;
machineUpgradeView.SetButtonActive(price <= CoinManager.Instance.OwnCoin);
machineUpgradeView.SetData(gameData.MachineLevel, price);
// 購入ボタン
machineUpgradeView.ButtonClickObserve.Subscribe(_ =>
{
LocalCacheManager.Save(CornFieldReinforcementDataTypeTag, CornFieldUpgradeType.Machine);
LocalCacheManager.Save(CornFieldReinforcementDataTag, (gameData.MachineLevel, price, new Action(() => {
PurchaseMachine(price);
SetView();
})));
TransitionManager.Instance.LoadSceneAdditive(GameScenes.ReinforcementDetail);
}).AddTo(compositeDisposable);
}
}
private void PurchaseField(int price, PlantLineType type, CornFieldRank nextRank)
{
var gameData = GameDataManager.GameData;
if (gameData.PlantLineDataList.FirstOrDefault(x => x.Type == type) is PlantLineData lineData)
{
lineData.Level = nextRank;
}
else
{
gameData.PlantLineDataList.Add(new PlantLineData(type, CornFieldRank.Rank1));
}
CoinManager.Instance.SubCoin(price);
gameData.coin = CoinManager.Instance.OwnCoin;
GameDataManager.SaveGameData();
}
private void PurchaseMachine(int price)
{
var gameData = GameDataManager.GameData;
gameData.MachineLevel++;
CoinManager.Instance.SubCoin(price);
gameData.coin = CoinManager.Instance.OwnCoin;
GameDataManager.SaveGameData();
}
public static CornFieldRank GetNextRank(CornFieldRank rank)
{
switch (rank)

View File

@ -0,0 +1,107 @@
using System;
using System.Linq;
using TMPro;
using UniRx;
using UnityEngine;
using UnityEngine.UI;
public class CornFieldReinforcementDetailView : MonoBehaviour
{
private static readonly string ReinforceFormat = "強化しますか?";
private static readonly string ReleaseFormat = "開放しますか?";
private static readonly string SigbBoardFormat = "x{0}";
private static readonly int OpenTrigger = Animator.StringToHash("OpenTrigger");
private static readonly int CloseTrigger = Animator.StringToHash("CloseTrigger");
[SerializeField] private Animator backgroundAnimator;
[SerializeField] private Button purchaseButton;
[SerializeField] private Button releaseButton;
[SerializeField] private Button closeButton;
[SerializeField] private GameObject ReinforceObject;
[SerializeField] private GameObject ReleaseObject;
[SerializeField] private ReinforcementSeedlingView currentSeedling;
[SerializeField] private ReinforcementSeedlingView nextSeedling;
[SerializeField] private TextMeshProUGUI currentSignBoard;
[SerializeField] private TextMeshProUGUI nextSignBoard;
[SerializeField] private Text messageText;
[SerializeField] private Text reinforcePriceText;
[SerializeField] private Text releasePriceText;
private void Start()
{
Action callback;
var upgradeType = LocalCacheManager.Load<CornFieldUpgradeType>(CornFieldReinforcement.CornFieldReinforcementDataTypeTag);
Debug.Log(upgradeType);
switch (upgradeType)
{
case CornFieldUpgradeType.FieldTop:
case CornFieldUpgradeType.FieldCenter:
case CornFieldUpgradeType.FieldBottom:
var (data, price, fieldCallback) = LocalCacheManager.Load<(PlantLineData, int, Action)>(CornFieldReinforcement.CornFieldReinforcementDataTag);
callback = fieldCallback;
SetFieldData(data, price);
break;
case CornFieldUpgradeType.Machine:
var (machineLevel, machinePrice, machineCallback) = LocalCacheManager.Load<(int, int, Action)>(CornFieldReinforcement.CornFieldReinforcementDataTag);
SetMachineData(machineLevel, machinePrice);
callback = machineCallback;
break;
default:
throw new ArgumentOutOfRangeException();
}
closeButton.OnClickAsObservable().Subscribe(_ =>
{
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.25f, () =>
{
TransitionManager.Instance.UnloadScene(GameScenes.ReinforcementDetail);
});
}).AddTo(this);
purchaseButton.OnClickAsObservable()
.Merge(releaseButton.OnClickAsObservable())
.Subscribe(_ =>
{
// 購入処理
callback?.Invoke();
transform.SetLocalScale(0);
backgroundAnimator.SetTrigger(CloseTrigger);
this.CallWaitForSeconds(.25f, () =>
{
TransitionManager.Instance.UnloadScene(GameScenes.ReinforcementDetail);
});
}).AddTo(this);
}
private void SetFieldData(PlantLineData data, int price)
{
if (data is null)
{
ReinforceObject.SetActive(false);
ReleaseObject.SetActive(true);
releasePriceText.text = price.ToString();
messageText.text = ReleaseFormat;
}
else
{
ReinforceObject.SetActive(true);
ReleaseObject.SetActive(false);
reinforcePriceText.text = price.ToString();
var nextRank = CornFieldReinforcement.GetNextRank(data.Level);
var upgradeType = FieldUpgradeData.PlantTypeToUpgradeType(data.Type);
var fieldData = SpreadsheetDataManager.Instance.GetBaseDataList<FieldUpgradeData>(Const.FieldUpgradeDataSheet);
var currentHarvestCount = fieldData.FirstOrDefault(x => x.Type == upgradeType && x.level == (int)data.Level)?.harvested ?? 1;
var nextHarvestCount = fieldData.FirstOrDefault(x => x.Type == upgradeType && x.level == (int)nextRank)?.harvested ?? 1;
currentSeedling.SetSeedling(data.Level);
currentSignBoard.text = string.Format(SigbBoardFormat, currentHarvestCount);
nextSeedling.SetSeedling(nextRank);
nextSignBoard.text = string.Format(SigbBoardFormat, nextHarvestCount);
messageText.text = ReinforceFormat;
}
}
private void SetMachineData(int machineLevel, int price)
{
ReinforceObject.SetActive(false);
ReleaseObject.SetActive(false);
}
}

View File

@ -0,0 +1,3 @@
fileFormatVersion: 2
guid: 7ea6a373109a42b3871edbabeb578799
timeCreated: 1632815406

View File

@ -27,24 +27,17 @@ public class CornFieldReinforcementView : MonoBehaviour
[SerializeField] private Text reinforcePriceText;
[SerializeField] private Text releasePriceText;
private void Start()
{
dialogButton.OnClickAsObservable()
.Merge(dialogButton2.OnClickAsObservable())
.Subscribe(_ =>
{
TransitionManager.Instance.LoadSceneAdditive(GameScenes.ReinforcementDetail);
}).AddTo(this);
}
public IObservable<Unit> ButtonClickObserve => dialogButton.OnClickAsObservable().Merge(dialogButton2.OnClickAsObservable()).TakeUntilDestroy(this);
public void SetReinforcement(PlantLineData data, int price)
{
reinforcementWindow.SetActive(true);
releaseWindow.SetActive(false);
var nextRank = CornFieldReinforcement.GetNextRank(data.Level);
var upgradeType = FieldUpgradeData.PlantTypeToUpgradeType(data.Type);
var fieldData = SpreadsheetDataManager.Instance.GetBaseDataList<FieldUpgradeData>(Const.FieldUpgradeDataSheet);
var currentHarvestCount = fieldData.FirstOrDefault(x => x.Type == x.PlantTypeToUpgradeType(data.Type) && x.level == (int)data.Level)?.harvested ?? 1;
var nextHarvestCount = fieldData.FirstOrDefault(x => x.Type == x.PlantTypeToUpgradeType(data.Type) && x.level == (int)nextRank)?.harvested ?? 1;
var currentHarvestCount = fieldData.FirstOrDefault(x => x.Type == upgradeType && x.level == (int)data.Level)?.harvested ?? 1;
var nextHarvestCount = fieldData.FirstOrDefault(x => x.Type == upgradeType && x.level == (int)nextRank)?.harvested ?? 1;
reinforcePriceText.text = price.ToString();
currentSeedling.SetSeedling(data.Level);
currentSignBoard.text = string.Format(SigbBoardFormat, currentHarvestCount);

View File

@ -13,14 +13,7 @@ public class MachineUpgradeView : MonoBehaviour
[SerializeField] private Button dialogButton;
[SerializeField] private GameObject disableButton;
private void Start()
{
dialogButton.OnClickAsObservable()
.Subscribe(_ =>
{
TransitionManager.Instance.LoadSceneAdditive(GameScenes.ReinforcementDetail);
}).AddTo(this);
}
public IObservable<Unit> ButtonClickObserve => dialogButton.OnClickAsObservable().TakeUntilDestroy(this);
public void SetData(int level, int price)
{

View File

@ -62,7 +62,7 @@ public sealed class FieldUpgradeData
public int price;
public int harvested;
public CornFieldUpgradeType Type => (CornFieldUpgradeType) type;
public CornFieldUpgradeType PlantTypeToUpgradeType(PlantLineType lineType)
public static CornFieldUpgradeType PlantTypeToUpgradeType(PlantLineType lineType)
{
switch (lineType)
{
@ -73,7 +73,7 @@ public sealed class FieldUpgradeData
case PlantLineType.Bottom:
return CornFieldUpgradeType.FieldBottom;
default:
throw new ArgumentOutOfRangeException(nameof(type), type, null);
throw new ArgumentOutOfRangeException(nameof(lineType), lineType, null);
}
}
}