룰렛 mvp 패턴 적용 중...

This commit is contained in:
2025-07-02 20:50:15 +09:00
parent 6808ca4fd7
commit 750f4173c0
5 changed files with 54 additions and 35 deletions

View File

@@ -6297,7 +6297,7 @@ MonoBehaviour:
weight: 0 weight: 0
- icon: {fileID: 21300000, guid: 50787c1045972c64690b9a12c89b24e1, type: 3} - icon: {fileID: 21300000, guid: 50787c1045972c64690b9a12c89b24e1, type: 3}
description: 2 description: 2
chance: 15 chance: 14
index: 0 index: 0
weight: 0 weight: 0
- icon: {fileID: 21300000, guid: 50787c1045972c64690b9a12c89b24e1, type: 3} - icon: {fileID: 21300000, guid: 50787c1045972c64690b9a12c89b24e1, type: 3}

View File

@@ -27,26 +27,12 @@ namespace TON
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()
{ {
pieceAngle = 360 / roulettePieceData.Length; pieceAngle = 360 / roulettePieceData.Length;
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

@@ -19,5 +19,12 @@ namespace TON
[HideInInspector] public int index; // 아이템 순번 [HideInInspector] public int index; // 아이템 순번
[HideInInspector] public int weight; // 가중치 [HideInInspector] public int weight; // 가중치
public RoulettePieceData(string Description, int Chance)
{
// icon = null; // 기본 아이콘은 null
description = Description; // 기본 설명
chance = Chance; // 기본 확률
}
} }
} }

View File

@@ -8,7 +8,8 @@ namespace TON
public class RoulettePresenter public class RoulettePresenter
{ {
private PlayerDataManager playerDataManager; private PlayerDataManager playerDataManager;
private List<RoulettePieceData> roulettePieceData = new(); private List<RoulettePieceData> roulettePieceModels = new();
public ReactiveCollection<RoulettePresenter> RoulettePieces { get; } = new();
public RoulettePresenter() public RoulettePresenter()
{ {
@@ -22,11 +23,16 @@ namespace TON
// Todo : UI 바인딩 // Todo : UI 바인딩
roulettePieceData.Add(new RoulettePieceData()); roulettePieceModels.Add(new RoulettePieceData("10", 1));
roulettePieceModels.Add(new RoulettePieceData("2", 14));
roulettePieceModels.Add(new RoulettePieceData("25", 1));
roulettePieceModels.Add(new RoulettePieceData("400", 72));
roulettePieceModels.Add(new RoulettePieceData("50", 1));
roulettePieceModels.Add(new RoulettePieceData("1000", 11));
for (int i = 0; i < 5; i++) foreach (var item in roulettePieceModels)
{ {
roulettePieceData[i].description = 10.ToString(); RoulettePieces.Add(new RoulettePresenter(this, item));
} }
} }

View File

@@ -1,11 +1,13 @@
using System.Collections; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UniRx;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
namespace TON namespace TON
{ {
// View // View <> Presenter <> Model
public class RouletteSpin : MonoBehaviour public class RouletteSpin : MonoBehaviour
{ {
[SerializeField] private Roulette roulette; [SerializeField] private Roulette roulette;
@@ -15,19 +17,15 @@ namespace TON
private RoulettePresenter roulettePresenter; private RoulettePresenter roulettePresenter;
private void Start()
{
// Presenter 초기화
roulettePresenter = new RoulettePresenter();
// TODO : UI와 Presenter 바인딩
}
private void Awake() private void Awake()
{ {
// // 싱글톤으로 PlayerDataManager 접근
// playerDataManager = PlayerDataManager.Singleton;
//
// if (playerDataManager == null)
// {
// Debug.LogError("PlayerDataManager가 초기화되지 않았습니다.");
// }
// TODO : Presenter 초기화
// TODO : UI와 Presenter 바인딩
buttonSpin.onClick.AddListener(()=> buttonSpin.onClick.AddListener(()=>
{ {
buttonSpin.interactable = false; buttonSpin.interactable = false;
@@ -42,4 +40,26 @@ namespace TON
roulettePresenter.InsertRouletteResult(selectedData); roulettePresenter.InsertRouletteResult(selectedData);
} }
} }
// Presenter
public class RouletteItemPresenter
{
public ReactiveProperty<string> Description { get; set; }
public ReactiveProperty<int> Chance { get; set; }
public ReactiveCommand BuyCommand { get; set; }
private RoulettePieceData _model;
public RouletteItemPresenter(RoulettePresenter roulettePresenter, RoulettePieceData model)
{
_model = model;
Description = new ReactiveProperty<string>(model.description);
Chance = new ReactiveProperty<int>(model.chance);
BuyCommand = new ReactiveCommand();
BuyCommand.Subscribe(_ => roulettePresenter.InsertRouletteResult(this));
}
}
} }