룰렛 MVP 패턴 구현중
This commit is contained in:
		@@ -1,18 +1,19 @@
 | 
			
		||||
using UnityEngine;
 | 
			
		||||
using UnityEngine.Events;
 | 
			
		||||
using System.Collections;
 | 
			
		||||
using UniRx;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
namespace TON
 | 
			
		||||
{
 | 
			
		||||
    // View ?
 | 
			
		||||
    // View
 | 
			
		||||
    public class Roulette : MonoBehaviour
 | 
			
		||||
    {
 | 
			
		||||
        [SerializeField] private Transform piecePrefab; // 룰렛에 표시되는 정보 프리팹
 | 
			
		||||
        [SerializeField] private Transform linePrefab;  // 정보들을 구분하는 선 프리팹
 | 
			
		||||
        [SerializeField] private Transform pieceParent; // 정보들이 배치되는 부모 Transform
 | 
			
		||||
        [SerializeField] private Transform lineParent;  // 선들이 배치되는 부모 Transform
 | 
			
		||||
        [SerializeField] private RoulettePieceData[] roulettePieceData;
 | 
			
		||||
        [SerializeField] public RoulettePieceData[] roulettePieceData;
 | 
			
		||||
 | 
			
		||||
        [SerializeField] private int spinDuration;  // 회전 시간
 | 
			
		||||
        [SerializeField] private Transform spinningRoulette;  // 실제 회전하는 회전판 Transfrom
 | 
			
		||||
@@ -25,6 +26,18 @@ namespace TON
 | 
			
		||||
        private int accumulatedWeight;  // 가중치 계산을 위한 변수
 | 
			
		||||
        private bool isSpinning = false;    // 현재 회전중인지
 | 
			
		||||
        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()
 | 
			
		||||
        {
 | 
			
		||||
@@ -32,6 +45,8 @@ namespace TON
 | 
			
		||||
            halfPieceAngle = pieceAngle * 0.5f;
 | 
			
		||||
            halfPieceAngleWithPaddings = halfPieceAngle - (halfPieceAngle * 0.25f);
 | 
			
		||||
 | 
			
		||||
            _presenter = new RoulettePresenter();
 | 
			
		||||
 | 
			
		||||
            SpawnPiecesAndLines();
 | 
			
		||||
            CalculateWeightsAndIndices();
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
@@ -6,7 +6,7 @@ using UnityEngine.UI;
 | 
			
		||||
 | 
			
		||||
namespace TON
 | 
			
		||||
{
 | 
			
		||||
     // View?
 | 
			
		||||
     // View
 | 
			
		||||
    public class RoulettePiece : MonoBehaviour
 | 
			
		||||
    {
 | 
			
		||||
        [SerializeField] private Image imageIcon;
 | 
			
		||||
 
 | 
			
		||||
@@ -4,7 +4,7 @@ using UnityEngine;
 | 
			
		||||
 | 
			
		||||
namespace TON
 | 
			
		||||
{
 | 
			
		||||
    // Model?
 | 
			
		||||
    // Model
 | 
			
		||||
    [System.Serializable]
 | 
			
		||||
    public class RoulettePieceData
 | 
			
		||||
    {
 | 
			
		||||
 
 | 
			
		||||
@@ -5,12 +5,14 @@ using UnityEngine;
 | 
			
		||||
 | 
			
		||||
namespace TON
 | 
			
		||||
{
 | 
			
		||||
    public class RoulettePresenter : MonoBehaviour
 | 
			
		||||
    public class RoulettePresenter
 | 
			
		||||
    {
 | 
			
		||||
        private PlayerDataManager playerDataManager;
 | 
			
		||||
        // ReactiveProperty
 | 
			
		||||
        private Roulette roulette;
 | 
			
		||||
        
 | 
			
		||||
        private void Awake()
 | 
			
		||||
        private List<RoulettePieceData> roulettePieceData = new();
 | 
			
		||||
        
 | 
			
		||||
        public RoulettePresenter()
 | 
			
		||||
        {
 | 
			
		||||
            // 싱글톤으로 PlayerDataManager 접근
 | 
			
		||||
            playerDataManager = PlayerDataManager.Singleton;
 | 
			
		||||
@@ -21,12 +23,24 @@ namespace TON
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            // 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}");
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -12,7 +12,7 @@ namespace TON
 | 
			
		||||
        [SerializeField] private Button buttonSpin;
 | 
			
		||||
        
 | 
			
		||||
        private PlayerDataManager playerDataManager;
 | 
			
		||||
        // Todo : Presenter 변수
 | 
			
		||||
        private RoulettePresenter roulettePresenter;
 | 
			
		||||
        
 | 
			
		||||
        private void Awake()
 | 
			
		||||
        {
 | 
			
		||||
@@ -29,25 +29,13 @@ namespace TON
 | 
			
		||||
                   buttonSpin.interactable = false;
 | 
			
		||||
                   roulette.Spin(EndOfSpin);
 | 
			
		||||
            });
 | 
			
		||||
            
 | 
			
		||||
            // Presenter  생성
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        private void EndOfSpin(RoulettePieceData selectedData)
 | 
			
		||||
        {
 | 
			
		||||
            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);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user