Merge pull request #41 from Degulleo/DO-47-승패-무승부-기보씬에-적용

DO-47-승패-무승부-기보씬에-적용
This commit is contained in:
HaeinLEE117 2025-03-24 13:10:26 +09:00 committed by GitHub
commit b60f838ecb
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
7 changed files with 134 additions and 46 deletions

View File

@ -418,6 +418,81 @@ MonoBehaviour:
m_FillOrigin: 0 m_FillOrigin: 0
m_UseSpriteMesh: 0 m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1 m_PixelsPerUnitMultiplier: 1
--- !u!1 &6725069296890934698
GameObject:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
serializedVersion: 6
m_Component:
- component: {fileID: 4035312119661202039}
- component: {fileID: 8616790052716066886}
- component: {fileID: 2590408022327786383}
m_Layer: 5
m_Name: DrawImage
m_TagString: Untagged
m_Icon: {fileID: 0}
m_NavMeshLayer: 0
m_StaticEditorFlags: 0
m_IsActive: 1
--- !u!224 &4035312119661202039
RectTransform:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6725069296890934698}
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_ConstrainProportionsScale: 0
m_Children: []
m_Father: {fileID: 782808433606758938}
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
m_AnchorMin: {x: 0.5, y: 0.5}
m_AnchorMax: {x: 0.5, y: 0.5}
m_AnchoredPosition: {x: 0, y: 0}
m_SizeDelta: {x: 100, y: 100}
m_Pivot: {x: 0.5, y: 0.5}
--- !u!222 &8616790052716066886
CanvasRenderer:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6725069296890934698}
m_CullTransparentMesh: 1
--- !u!114 &2590408022327786383
MonoBehaviour:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_GameObject: {fileID: 6725069296890934698}
m_Enabled: 1
m_EditorHideFlags: 0
m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3}
m_Name:
m_EditorClassIdentifier:
m_Material: {fileID: 0}
m_Color: {r: 1, g: 1, b: 1, a: 1}
m_RaycastTarget: 1
m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
m_Maskable: 1
m_OnCullStateChanged:
m_PersistentCalls:
m_Calls: []
m_Sprite: {fileID: 0}
m_Type: 0
m_PreserveAspect: 0
m_FillCenter: 1
m_FillMethod: 4
m_FillAmount: 1
m_FillClockwise: 1
m_FillOrigin: 0
m_UseSpriteMesh: 0
m_PixelsPerUnitMultiplier: 1
--- !u!1 &6889607079215043674 --- !u!1 &6889607079215043674
GameObject: GameObject:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -447,6 +522,7 @@ RectTransform:
m_LocalScale: {x: 1, y: 1, z: 1} m_LocalScale: {x: 1, y: 1, z: 1}
m_ConstrainProportionsScale: 0 m_ConstrainProportionsScale: 0
m_Children: m_Children:
- {fileID: 4035312119661202039}
- {fileID: 6243070150297500116} - {fileID: 6243070150297500116}
- {fileID: 379352358508670316} - {fileID: 379352358508670316}
m_Father: {fileID: 423109112585897887} m_Father: {fileID: 423109112585897887}
@ -614,5 +690,6 @@ MonoBehaviour:
m_EditorClassIdentifier: m_EditorClassIdentifier:
winImage: {fileID: 5279064539717668063} winImage: {fileID: 5279064539717668063}
loseImage: {fileID: 7205159236927224312} loseImage: {fileID: 7205159236927224312}
drawImage: {fileID: 2590408022327786383}
playerNicknameText: {fileID: 1459786160726782322} playerNicknameText: {fileID: 1459786160726782322}
recordDateText: {fileID: 857776554898951878} recordDateText: {fileID: 857776554898951878}

View File

@ -1713,7 +1713,7 @@ MonoBehaviour:
m_OnCullStateChanged: m_OnCullStateChanged:
m_PersistentCalls: m_PersistentCalls:
m_Calls: [] m_Calls: []
m_text: "\uD638\uB7AD\uC774" m_text: "\uD14C\uC2A4\uD2B8\uC0BC\uBC88"
m_isRightToLeft: 0 m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2} m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2} m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}

View File

@ -18363,8 +18363,8 @@ MonoBehaviour:
m_Calls: [] m_Calls: []
m_text: Player B m_text: Player B
m_isRightToLeft: 0 m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
m_fontSharedMaterials: [] m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0} m_fontMaterial: {fileID: 0}
m_fontMaterials: [] m_fontMaterials: []
@ -18762,8 +18762,8 @@ MonoBehaviour:
m_Calls: [] m_Calls: []
m_text: Player A m_text: Player A
m_isRightToLeft: 0 m_isRightToLeft: 0
m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_fontAsset: {fileID: 11400000, guid: 85a19688db53c77469fc4406b01045da, type: 2}
m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} m_sharedMaterial: {fileID: -2477908578676791210, guid: 85a19688db53c77469fc4406b01045da, type: 2}
m_fontSharedMaterials: [] m_fontSharedMaterials: []
m_fontMaterial: {fileID: 0} m_fontMaterial: {fileID: 0}
m_fontMaterials: [] m_fontMaterials: []

View File

@ -10,6 +10,7 @@ public class ReplayCell : MonoBehaviour
{ {
[SerializeField] private Image winImage; [SerializeField] private Image winImage;
[SerializeField] private Image loseImage; [SerializeField] private Image loseImage;
[SerializeField] private Image drawImage;
[SerializeField] private TMP_Text playerNicknameText; [SerializeField] private TMP_Text playerNicknameText;
[SerializeField] private TMP_Text recordDateText; [SerializeField] private TMP_Text recordDateText;
@ -18,7 +19,7 @@ public class ReplayCell : MonoBehaviour
private string _opponentNickname; private string _opponentNickname;
//유저가 이겼을 경우 '승'(파랑)이미지 졌을 경우'패'(빨강)이미지 //TODO:승, 패 외에 무승부 반영하기. bool => int
public void SetWinImage(bool isWin) public void SetWinImage(bool isWin)
{ {
if (isWin == true) if (isWin == true)
@ -32,6 +33,28 @@ public class ReplayCell : MonoBehaviour
winImage.gameObject.SetActive(false); winImage.gameObject.SetActive(false);
} }
} }
//TODO: 무승부 이미지 제작해서 에디터에 추가해주세요
public void SetWinImage(Enums.GameResult gameResult)
{
switch(gameResult)
{
case Enums.GameResult.Win:
winImage.gameObject.SetActive(true);
loseImage.gameObject.SetActive(false);
drawImage.gameObject.SetActive(false);
break;
case Enums.GameResult.Lose:
winImage.gameObject.SetActive(false);
loseImage.gameObject.SetActive(true);
drawImage.gameObject.SetActive(false);
break;
case Enums.GameResult.Draw:
winImage.gameObject.SetActive(false);
loseImage.gameObject.SetActive(false);
drawImage.gameObject.SetActive(true);
break;
}
}
public void SetMyPlayerType(Enums.PlayerType myPlayerType) public void SetMyPlayerType(Enums.PlayerType myPlayerType)
{ {

View File

@ -13,14 +13,12 @@ public class ReplayController : MonoBehaviour
[SerializeField] private GameObject[] userBProfileImages; [SerializeField] private GameObject[] userBProfileImages;
void Start() void Start()
{ {
// InitReplayUI(); InitReplayUI();
//TODO: 프로필 이미지 불러오기
} }
public void OnclickExitButton() public void OnclickExitButton()
{ {
//TODO: 메인씬으로 다시 넘어갈 때 호출해야하는 함수 등등이 있을지.... SceneManager.LoadScene("Main");
SceneManager.LoadScene("Main-Jay");
} }
public void OnclickFirstButton() public void OnclickFirstButton()
@ -53,10 +51,16 @@ public class ReplayController : MonoBehaviour
public void InitReplayUI() public void InitReplayUI()
{ {
//유저 닉네임 설정
//TODO: 유니티 에디터에서 폰트 설정바꾸기
playerANicknameText.text = ReplayManager.Instance.GetPlayerANickname(); playerANicknameText.text = ReplayManager.Instance.GetPlayerANickname();
playerBNicknameText.text = ReplayManager.Instance.GetPlayerBNickname(); playerBNicknameText.text = ReplayManager.Instance.GetPlayerBNickname();
//TODO: ReplayManager에서 프로필 인덱스 가져와서 SetUserProfileImages호출하기 //프로필 이미지 설정
int playerAProgileIndex = ReplayManager.Instance.GetPlayerAProfileIndex();
int playerBProgileIndex = ReplayManager.Instance.GetPlayerBProfileIndex();
SetUserProfileImages(playerAProgileIndex, userAProfileImages);
SetUserProfileImages(playerBProgileIndex, userBProfileImages);
} }
private void SetUserProfileImages(int imageIndex,GameObject[] profileImages) private void SetUserProfileImages(int imageIndex,GameObject[] profileImages)

View File

@ -11,12 +11,10 @@ public class ReplayRecord
public string gameDate; public string gameDate;
public string playerA; public string playerA;
public string playerB; public string playerB;
public Enums.GameResult gameResult;
public int playerAPofileImageIndex;
public int playerBPofileImageIndex;
public List<Move> moves = new List<Move>(); public List<Move> moves = new List<Move>();
//TODO: winnerPlayerType삭제
public string winnerPlayerType;
public string gameResult; //무승부를 반영하기위해 승자가 아닌 게임 결과를 저장.
public string playerAPofileImageIndex;
public string playerBPofileImageIndex;
} }
[Serializable] [Serializable]
public class Move public class Move
@ -100,8 +98,8 @@ public class ReplayManager : Singleton<ReplayManager>
_recordingReplayData = new ReplayRecord(); _recordingReplayData = new ReplayRecord();
_recordingReplayData.playerA = playerANickname; _recordingReplayData.playerA = playerANickname;
_recordingReplayData.playerB = playerBNickname; _recordingReplayData.playerB = playerBNickname;
_recordingReplayData.playerAPofileImageIndex = playerBNickname.ToString(); _recordingReplayData.playerAPofileImageIndex = playerAProfileIndex;
_recordingReplayData.playerBPofileImageIndex = playerAProfileIndex.ToString(); _recordingReplayData.playerBPofileImageIndex = playerBProfileIndex;
} }
///<summary> ///<summary>
@ -116,36 +114,13 @@ public class ReplayManager : Singleton<ReplayManager>
/// <summary> /// <summary>
/// 게임 종료 후 호출하여 리플레이 데이터를 저장합니다. /// 게임 종료 후 호출하여 리플레이 데이터를 저장합니다.
/// </summary> /// </summary>
public void SaveReplayData(Enums.PlayerType winnerPlayerType)
{
try
{
string time = DateTime.Now.ToString(("yyyy-MM-dd HH_mm_ss"));
_recordingReplayData.gameDate = time;
_recordingReplayData.winnerPlayerType = winnerPlayerType.ToString();
string json = JsonUtility.ToJson(_recordingReplayData, true);
string path = Path.Combine(Application.persistentDataPath, $"{time}.json");
File.WriteAllText(path, json);
//최신 데이터 10개만 유지되도록 저장
RecordCountChecker();
}
catch(Exception e)
{
Debug.LogError($"An error occurred while saving replay data:{e.Message}");
}
}
public void SaveReplayDataResult(Enums.GameResult gameResultType) public void SaveReplayDataResult(Enums.GameResult gameResultType)
{ {
try try
{ {
string time = DateTime.Now.ToString(("yyyy-MM-dd HH_mm_ss")); string time = DateTime.Now.ToString(("yyyy-MM-dd HH_mm_ss"));
_recordingReplayData.gameDate = time; _recordingReplayData.gameDate = time;
_recordingReplayData.gameResult = gameResultType.ToString(); _recordingReplayData.gameResult = gameResultType;
// Json데이터로 변환해서 저장 // Json데이터로 변환해서 저장
string json = JsonUtility.ToJson(_recordingReplayData, true); string json = JsonUtility.ToJson(_recordingReplayData, true);
@ -265,8 +240,16 @@ public class ReplayManager : Singleton<ReplayManager>
{ {
return _selectedReplayRecord.playerB; return _selectedReplayRecord.playerB;
} }
public int GetPlayerAProfileIndex()
{
return _selectedReplayRecord.playerAPofileImageIndex;
}
public int GetPlayerBProfileIndex()
{
return _selectedReplayRecord.playerBPofileImageIndex;
}
#endregion #endregion
protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode) protected override void OnSceneLoaded(Scene scene, LoadSceneMode mode)

View File

@ -25,9 +25,9 @@ public class ReplayPanelItemsController : ScrollPanelController
// ReplayManager에서 가져온 기보 데이터들을 패널 셀에 초기화 // ReplayManager에서 가져온 기보 데이터들을 패널 셀에 초기화
records = ReplayManager.Instance.LoadReplayDatas(); records = ReplayManager.Instance.LoadReplayDatas();
foreach (var replayRecord in records) foreach (var replayRecord in records)
{ {
Debug.Log($"{replayRecord.gameDate}의 결과는 {replayRecord.gameResult}");
var replayCellButtonObject = Instantiate(scrollItemPrefab, content.transform); var replayCellButtonObject = Instantiate(scrollItemPrefab, content.transform);
ReplayCell replayCell = replayCellButtonObject.GetComponent<ReplayCell>(); ReplayCell replayCell = replayCellButtonObject.GetComponent<ReplayCell>();
@ -35,7 +35,8 @@ public class ReplayPanelItemsController : ScrollPanelController
string opponentNickname = myPlayerType==Enums.PlayerType.PlayerA ? replayRecord.playerB : replayRecord.playerA; string opponentNickname = myPlayerType==Enums.PlayerType.PlayerA ? replayRecord.playerB : replayRecord.playerA;
replayCell.SetMyPlayerType(myPlayerType); replayCell.SetMyPlayerType(myPlayerType);
replayCell.SetWinImage(myPlayerType.ToString().Equals(replayRecord.winnerPlayerType)); replayCell.SetWinImage(replayRecord.gameResult);
replayCell.SetOpponentPlayerNickname(opponentNickname); replayCell.SetOpponentPlayerNickname(opponentNickname);
replayCell.SetRecordDate(replayRecord.gameDate); replayCell.SetRecordDate(replayRecord.gameDate);
replayCell.SetReplayRecord(replayRecord); replayCell.SetReplayRecord(replayRecord);