179 lines
6.5 KiB
C#
179 lines
6.5 KiB
C#
using TMPro;
|
|
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
|
|
public partial class GameFlowManager {
|
|
#if UNITY_EDITOR || DEVELOPMENT_BUILD
|
|
private void ShowDebugMenu() {
|
|
EnsureDebugPreviewData();
|
|
|
|
gameplayActive = false;
|
|
pendingStartGameplay = false;
|
|
currentScreen = FlowScreen.DebugMenu;
|
|
|
|
EnsureOverlay();
|
|
ClearOverlay();
|
|
SetOverlayVisible(true);
|
|
SetDefaultOverlayBackground();
|
|
|
|
AddTitle("디버그 메뉴");
|
|
AddBody("기본 화면과 실전맵을 바로 확인합니다.\n단축키: 1~0, F1/F2");
|
|
|
|
AddDebugButton("1. 인트로", ShowDebugIntroPreview, new Vector2(-235f, -32f));
|
|
AddDebugButton("2. 현재 맵 시작", ShowDebugGameStartPreview, new Vector2(-235f, -74f));
|
|
AddDebugButton("3. 현재 출국 실패", delegate { ShowDebugResultPreview(false); }, new Vector2(-235f, -116f));
|
|
AddDebugButton("4. 현재 출국 성공", delegate { ShowDebugResultPreview(true); }, new Vector2(-235f, -158f));
|
|
AddDebugButton("5. 면세점", ShowDebugDutyFreeShopPreview, new Vector2(-235f, -200f));
|
|
AddDebugButton("6. 지도", ShowDebugMapPreview, new Vector2(-235f, -242f));
|
|
|
|
AddDebugButton("7. 일본 게임시작", delegate { ShowDebugMapGameStartPreview(MapId.Japan); }, new Vector2(235f, -32f));
|
|
AddDebugButton("8. 일본 출국성공", delegate { ShowDebugMapResultPreview(MapId.Japan, true); }, new Vector2(235f, -74f));
|
|
AddDebugButton("9. 중국 게임시작", delegate { ShowDebugMapGameStartPreview(MapId.China); }, new Vector2(235f, -116f));
|
|
AddDebugButton("0. 중국 출국성공", delegate { ShowDebugMapResultPreview(MapId.China, true); }, new Vector2(235f, -158f));
|
|
AddDebugButton("F1. 미국 게임시작", delegate { ShowDebugMapGameStartPreview(MapId.America); }, new Vector2(235f, -200f));
|
|
AddDebugButton("F2. 미국 출국성공", delegate { ShowDebugMapResultPreview(MapId.America, true); }, new Vector2(235f, -242f));
|
|
}
|
|
|
|
private void AddDebugButton(string label, UnityEngine.Events.UnityAction action, Vector2 position) {
|
|
GameObject buttonObject = CreateUiObject("Debug Button " + label, overlayRoot, typeof(Image), typeof(Button));
|
|
RectTransform buttonRect = buttonObject.GetComponent<RectTransform>();
|
|
buttonRect.anchorMin = new Vector2(0.5f, 0.5f);
|
|
buttonRect.anchorMax = new Vector2(0.5f, 0.5f);
|
|
buttonRect.pivot = new Vector2(0.5f, 0.5f);
|
|
buttonRect.anchoredPosition = position;
|
|
buttonRect.sizeDelta = new Vector2(310f, 34f);
|
|
|
|
Image buttonImage = buttonObject.GetComponent<Image>();
|
|
buttonImage.color = new Color(0.92f, 0.96f, 1f, 0.94f);
|
|
buttonImage.raycastTarget = true;
|
|
|
|
Button button = buttonObject.GetComponent<Button>();
|
|
button.targetGraphic = buttonImage;
|
|
button.navigation = new Navigation {
|
|
mode = Navigation.Mode.None
|
|
};
|
|
button.onClick.AddListener(action);
|
|
|
|
TextMeshProUGUI buttonText = AddTextTo(buttonObject.transform, "Label", label, 14f, FontStyles.Bold);
|
|
RectTransform textRect = buttonText.rectTransform;
|
|
textRect.anchorMin = Vector2.zero;
|
|
textRect.anchorMax = Vector2.one;
|
|
textRect.offsetMin = Vector2.zero;
|
|
textRect.offsetMax = Vector2.zero;
|
|
buttonText.color = new Color(0.04f, 0.07f, 0.09f, 1f);
|
|
}
|
|
|
|
private void ShowDebugIntroPreview() {
|
|
ShowIntro();
|
|
}
|
|
|
|
private void ShowDebugGameStartPreview() {
|
|
EnsureDebugPreviewData();
|
|
LoadGameSceneForCurrentMap();
|
|
}
|
|
|
|
private void ShowDebugMapGameStartPreview(MapId mapId) {
|
|
SetDebugCurrentMap(mapId);
|
|
LoadGameSceneForCurrentMap();
|
|
}
|
|
|
|
private void ShowDebugResultPreview(bool cleared) {
|
|
EnsureDebugPreviewData();
|
|
|
|
gameplayActive = false;
|
|
pendingStartGameplay = false;
|
|
currentScreen = FlowScreen.Result;
|
|
completedMap = currentMap;
|
|
lastResultCleared = cleared;
|
|
lastResultScore = cleared ? 12800 : 7200;
|
|
lastResultMileage = cleared ? 263 : 84;
|
|
lastResultTime = cleared ? 23.9f : 38.4f;
|
|
lastResultDistance = completedMap != null
|
|
? (cleared ? completedMap.targetDistance : completedMap.targetDistance * 0.62f)
|
|
: 380f;
|
|
|
|
if(saveData != null)
|
|
{
|
|
saveData.totalMileage = Mathf.Max(saveData.totalMileage, 4120);
|
|
}
|
|
|
|
ShowResult();
|
|
}
|
|
|
|
private void ShowDebugMapResultPreview(MapId mapId, bool cleared) {
|
|
SetDebugCurrentMap(mapId);
|
|
|
|
gameplayActive = false;
|
|
pendingStartGameplay = false;
|
|
currentScreen = FlowScreen.Result;
|
|
completedMap = currentMap;
|
|
lastResultCleared = cleared;
|
|
|
|
int mapIndex = MapDatabase.GetIndex(mapId);
|
|
lastResultScore = cleared ? 12800 + (mapIndex * 2200) : 7200 + (mapIndex * 900);
|
|
lastResultMileage = cleared ? 190 + (mapIndex * 70) : 84;
|
|
lastResultTime = currentMap != null
|
|
? Mathf.Max(10f, currentMap.timeLimit * (cleared ? 0.78f : 1.08f))
|
|
: cleared ? 23.9f : 38.4f;
|
|
lastResultDistance = currentMap != null
|
|
? (cleared ? currentMap.targetDistance : currentMap.targetDistance * 0.62f)
|
|
: 380f;
|
|
|
|
if(saveData != null)
|
|
{
|
|
saveData.totalMileage = Mathf.Max(saveData.totalMileage, 4120);
|
|
}
|
|
|
|
ShowResult();
|
|
}
|
|
|
|
private void ShowDebugDutyFreeShopPreview() {
|
|
EnsureDebugPreviewData();
|
|
|
|
if(saveData != null)
|
|
{
|
|
saveData.totalMileage = Mathf.Max(saveData.totalMileage, 4120);
|
|
}
|
|
|
|
ShowDutyFreeShop();
|
|
}
|
|
|
|
private void ShowDebugMapPreview() {
|
|
EnsureDebugPreviewData();
|
|
ShowMapPreview();
|
|
}
|
|
|
|
private void SetDebugCurrentMap(MapId mapId) {
|
|
EnsureDebugPreviewData();
|
|
currentMap = MapDatabase.GetMap(mapId);
|
|
|
|
if(saveData == null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
int mapIndex = MapDatabase.GetIndex(mapId);
|
|
saveData.currentMapIndex = mapIndex;
|
|
saveData.unlockedMapIndex = Mathf.Max(saveData.unlockedMapIndex, mapIndex);
|
|
GameSaveManager.Save(saveData);
|
|
}
|
|
|
|
private void EnsureDebugPreviewData() {
|
|
if(saveData == null)
|
|
{
|
|
saveData = GameSaveManager.Load();
|
|
}
|
|
|
|
if(currentMap == null)
|
|
{
|
|
currentMap = MapDatabase.GetMapByIndex(saveData != null ? saveData.currentMapIndex : 0);
|
|
}
|
|
|
|
if(currentMap == null)
|
|
{
|
|
currentMap = MapDatabase.GetMapByIndex(0);
|
|
}
|
|
}
|
|
#endif
|
|
}
|