룰렛 MVP 패턴 구현중

This commit is contained in:
Mingu Kim
2025-06-29 21:43:05 +09:00
parent 8d0e2ee53e
commit 19b64ec46e
5 changed files with 39 additions and 22 deletions

View File

@@ -1,18 +1,19 @@
using UnityEngine; using UnityEngine;
using UnityEngine.Events; using UnityEngine.Events;
using System.Collections; using System.Collections;
using UniRx;
namespace TON namespace TON
{ {
// View ? // View
public class Roulette : MonoBehaviour public class Roulette : MonoBehaviour
{ {
[SerializeField] private Transform piecePrefab; // 룰렛에 표시되는 정보 프리팹 [SerializeField] private Transform piecePrefab; // 룰렛에 표시되는 정보 프리팹
[SerializeField] private Transform linePrefab; // 정보들을 구분하는 선 프리팹 [SerializeField] private Transform linePrefab; // 정보들을 구분하는 선 프리팹
[SerializeField] private Transform pieceParent; // 정보들이 배치되는 부모 Transform [SerializeField] private Transform pieceParent; // 정보들이 배치되는 부모 Transform
[SerializeField] private Transform lineParent; // 선들이 배치되는 부모 Transform [SerializeField] private Transform lineParent; // 선들이 배치되는 부모 Transform
[SerializeField] private RoulettePieceData[] roulettePieceData; [SerializeField] public RoulettePieceData[] roulettePieceData;
[SerializeField] private int spinDuration; // 회전 시간 [SerializeField] private int spinDuration; // 회전 시간
[SerializeField] private Transform spinningRoulette; // 실제 회전하는 회전판 Transfrom [SerializeField] private Transform spinningRoulette; // 실제 회전하는 회전판 Transfrom
@@ -25,6 +26,18 @@ namespace TON
private int accumulatedWeight; // 가중치 계산을 위한 변수 private int accumulatedWeight; // 가중치 계산을 위한 변수
private bool isSpinning = false; // 현재 회전중인지 private bool isSpinning = false; // 현재 회전중인지
private int selectedIndex = 0; // 룰렛에서 선택된 아이템 private int selectedIndex = 0; // 룰렛에서 선택된 아이템
private RoulettePresenter _presenter;
public void Bind(RouletteItemPresenter presenter)
{
// presenter.Gold.Subscribe()
}
public class RouletteItemPresenter
{
public ReactiveProperty<int> Gold { get; set; }
}
private void Awake() private void Awake()
{ {
@@ -32,6 +45,8 @@ namespace TON
halfPieceAngle = pieceAngle * 0.5f; halfPieceAngle = pieceAngle * 0.5f;
halfPieceAngleWithPaddings = halfPieceAngle - (halfPieceAngle * 0.25f); halfPieceAngleWithPaddings = halfPieceAngle - (halfPieceAngle * 0.25f);
_presenter = new RoulettePresenter();
SpawnPiecesAndLines(); SpawnPiecesAndLines();
CalculateWeightsAndIndices(); CalculateWeightsAndIndices();
} }

View File

@@ -6,7 +6,7 @@ using UnityEngine.UI;
namespace TON namespace TON
{ {
// View? // View
public class RoulettePiece : MonoBehaviour public class RoulettePiece : MonoBehaviour
{ {
[SerializeField] private Image imageIcon; [SerializeField] private Image imageIcon;

View File

@@ -4,7 +4,7 @@ using UnityEngine;
namespace TON namespace TON
{ {
// Model? // Model
[System.Serializable] [System.Serializable]
public class RoulettePieceData public class RoulettePieceData
{ {

View File

@@ -5,12 +5,14 @@ using UnityEngine;
namespace TON namespace TON
{ {
public class RoulettePresenter : MonoBehaviour public class RoulettePresenter
{ {
private PlayerDataManager playerDataManager; private PlayerDataManager playerDataManager;
// ReactiveProperty private Roulette roulette;
private void Awake() private List<RoulettePieceData> roulettePieceData = new();
public RoulettePresenter()
{ {
// 싱글톤으로 PlayerDataManager 접근 // 싱글톤으로 PlayerDataManager 접근
playerDataManager = PlayerDataManager.Singleton; playerDataManager = PlayerDataManager.Singleton;
@@ -21,12 +23,24 @@ namespace TON
} }
// Todo : UI 바인딩 // Todo : UI 바인딩
roulettePieceData.Add(new RoulettePieceData());
for (int i = 0; i < 5; i++)
{
roulettePieceData[i].description = 10.ToString();
}
} }
// 재화 획득 메서드 // 재화 획득 메서드
public void InsertRouletteResult() public void InsertRouletteResult(RoulettePieceData selectedData)
{ {
// 재화 획득 코드 추가
playerDataManager.AddGold(int.Parse(selectedData.description));
// UI 갱신 코드 추가
UIManager.Singleton.UpdateCashData();
Debug.Log($"{selectedData.index}:{selectedData.description}");
} }
} }
} }

View File

@@ -12,7 +12,7 @@ namespace TON
[SerializeField] private Button buttonSpin; [SerializeField] private Button buttonSpin;
private PlayerDataManager playerDataManager; private PlayerDataManager playerDataManager;
// Todo : Presenter 변수 private RoulettePresenter roulettePresenter;
private void Awake() private void Awake()
{ {
@@ -29,25 +29,13 @@ namespace TON
buttonSpin.interactable = false; buttonSpin.interactable = false;
roulette.Spin(EndOfSpin); roulette.Spin(EndOfSpin);
}); });
// Presenter 생성
} }
private void EndOfSpin(RoulettePieceData selectedData) private void EndOfSpin(RoulettePieceData selectedData)
{ {
buttonSpin.interactable = true; buttonSpin.interactable = true;
// 재화 획득 코드 추가
playerDataManager.AddGold(int.Parse(selectedData.description));
// UI 갱신 코드 추가
UIManager.Singleton.UpdateCashData();
Debug.Log($"{selectedData.index}:{selectedData.description}");
}
public class RoulettePresenter roulettePresenter.InsertRouletteResult(selectedData);
{
} }
} }
} }