Skip to content

Commit

Permalink
fix Anomaly4 error
Browse files Browse the repository at this point in the history
  • Loading branch information
박동호 authored and 박동호 committed Nov 25, 2024
1 parent 4407548 commit b0f6ed7
Showing 1 changed file with 125 additions and 116 deletions.
241 changes: 125 additions & 116 deletions 302/Assets/Scripts/SpecificAnomalyManager/Anomaly4Manager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,132 +4,141 @@

public class Anomaly4Manager : MonoBehaviour
{
private GameObject mainLaptop;
private List<GameObject> laptopList = new List<GameObject>();
private GameObject mainLaptop;
private List<GameObject> laptopList = new List<GameObject>();

void OnEnable()
{
mainLaptop = GameObject.FindWithTag("Laptop");
if (mainLaptop == null)
void OnEnable()
{
StartCoroutine(InitializeSequence());
}

private IEnumerator InitializeSequence()
{
// 1단계: LaptopFaceController 삭제
LaptopFaceController[] laptopFaces = FindObjectsOfType<LaptopFaceController>();
foreach (LaptopFaceController laptopFace in laptopFaces)
{
Debug.LogError("Cannot find object with Laptop tag!");
return;
Destroy(laptopFace.gameObject);
}

// 약간의 대기 시간을 주어 삭제가 완료되도록 함
yield return new WaitForSeconds(0.1f);

// 2단계: 메인 랩탑 찾기 및 설정
mainLaptop = GameObject.FindWithTag("Laptop");
if (mainLaptop == null)
{
Debug.LogError("Cannot find object with Laptop tag!");
yield break;
}

SleepLaptop sleepLaptop = mainLaptop.GetComponentInChildren<SleepLaptop>();
if (sleepLaptop != null)
{
sleepLaptop.setStageClear = true;
Debug.Log("Set setStageClear to true for mainLaptop");
sleepLaptop.setStageClear = true;
Debug.Log("Set setStageClear to true for mainLaptop");
}
else
{
Debug.LogError("Cannot find SleepLaptop component in mainLaptop children");
}

// 3단계: 추가 랩탑 활성화 및 설정
LaptopScreenController[] allControllers = Resources.FindObjectsOfTypeAll<LaptopScreenController>();

int count = 0;
foreach (LaptopScreenController controller in allControllers)
{
if (!controller.gameObject.CompareTag("Laptop") && count < 5)
{
controller.gameObject.SetActive(true);
laptopList.Add(controller.gameObject);
count++;
Debug.Log($"Activated and added laptop: {controller.gameObject.name}");
}
}

if (laptopList.Count != 5)
{
Debug.LogError($"Expected 5 laptops, but found {laptopList.Count}");
yield break;
}

foreach(GameObject laptop in laptopList)
{
LaptopScreenController controller = laptop.GetComponent<LaptopScreenController>();
if(controller != null)
{
controller.ChangeScreen(GameManager.Instance.GetCurrentStage() - 1);
Debug.Log($"Changed initial screen for laptop: {laptop.name}");
}
}

// 4단계: 랜덤 위치 스왑
int randomNumber = Random.Range(0, 6);
Debug.Log($"Random number selected: {randomNumber}");

if (randomNumber > 0)
{
GameObject selectedLaptop = laptopList[randomNumber - 1];

Vector3 tempPosition = mainLaptop.transform.position;
mainLaptop.transform.position = selectedLaptop.transform.position;
selectedLaptop.transform.position = tempPosition;

Debug.Log($"Swapped positions between main laptop and laptop at index {randomNumber - 1}");
}
else
{
Debug.LogError("Cannot find SleepLaptop component in mainLaptop children");
Debug.Log("Random number was 0, no position swap occurred");
}

LaptopScreenController[] allControllers = Resources.FindObjectsOfTypeAll<LaptopScreenController>();

int count = 0;
foreach (LaptopScreenController controller in allControllers)
{
if (!controller.gameObject.CompareTag("Laptop") && count < 5)
{
controller.gameObject.SetActive(true);
laptopList.Add(controller.gameObject);
count++;
Debug.Log($"Activated and added laptop: {controller.gameObject.name}");
}
}

if (laptopList.Count != 5)
{
Debug.LogError($"Expected 5 laptops, but found {laptopList.Count}");
return;
}

foreach(GameObject laptop in laptopList)
{
LaptopScreenController controller = laptop.GetComponent<LaptopScreenController>();
if(controller != null)
{
controller.ChangeScreen(GameManager.Instance.GetCurrentStage() - 1);
Debug.Log($"Changed initial screen for laptop: {laptop.name}");
}
}

int randomNumber = Random.Range(0, 6);
Debug.Log($"Random number selected: {randomNumber}");

if (randomNumber > 0)
{
GameObject selectedLaptop = laptopList[randomNumber - 1];

Vector3 tempPosition = mainLaptop.transform.position;
mainLaptop.transform.position = selectedLaptop.transform.position;
selectedLaptop.transform.position = tempPosition;

Debug.Log($"Swapped positions between main laptop and laptop at index {randomNumber - 1}");
}
else
{
Debug.Log("Random number was 0, no position swap occurred");
}

StartCoroutine(ScreenChangeSequence());
}

private IEnumerator ScreenChangeSequence()
{
yield return new WaitForSeconds(5f);
Debug.Log("First screen change after 5 seconds");

// mainLaptop 화면 변경
LaptopScreenController mainController = mainLaptop.GetComponent<LaptopScreenController>();
if(mainController != null)
{
mainController.ChangeScreen(10);
Debug.Log("Changed main laptop screen to 10");
// modified by 신채환
// 0단계 추가에 따른 화면 색인 변경 반영
}

// 5개 랩탑 화면 변경
foreach(GameObject laptop in laptopList)
{
LaptopScreenController controller = laptop.GetComponent<LaptopScreenController>();
if(controller != null)
{
controller.ChangeScreen(11);
Debug.Log($"Changed screen to 11 for laptop: {laptop.name}");
// modified by 신채환
// 0단계 추가에 따른 화면 색인 변경 반영
}
}

yield return new WaitForSeconds(10f);
Debug.Log("Final screen change after 10 seconds");

// 모든 랩탑 원래 화면으로 복귀
int originalScreen = GameManager.Instance.GetCurrentStage();
// modified by 신채환
// 0단계 추가에 따른 화면 색인 변경 반영

// mainLaptop 포함
if(mainController != null)
{
mainController.ChangeScreen(originalScreen);
Debug.Log("Restored main laptop screen");
}

// 5개 랩탑
foreach(GameObject laptop in laptopList)
{
LaptopScreenController controller = laptop.GetComponent<LaptopScreenController>();
if(controller != null)
{
controller.ChangeScreen(originalScreen);
Debug.Log($"Restored screen for laptop: {laptop.name}");
}
}
}
// 5단계: 화면 변경 시퀀스 시작
StartCoroutine(ScreenChangeSequence());
}

private IEnumerator ScreenChangeSequence()
{
// 기존 ScreenChangeSequence 코드는 그대로 유지
yield return new WaitForSeconds(5f);
Debug.Log("First screen change after 5 seconds");

LaptopScreenController mainController = mainLaptop.GetComponent<LaptopScreenController>();
if(mainController != null)
{
mainController.ChangeScreen(10);
Debug.Log("Changed main laptop screen to 10");
}

foreach(GameObject laptop in laptopList)
{
LaptopScreenController controller = laptop.GetComponent<LaptopScreenController>();
if(controller != null)
{
controller.ChangeScreen(11);
Debug.Log($"Changed screen to 11 for laptop: {laptop.name}");
}
}

yield return new WaitForSeconds(10f);
Debug.Log("Final screen change after 10 seconds");

int originalScreen = GameManager.Instance.GetCurrentStage();

if(mainController != null)
{
mainController.ChangeScreen(originalScreen);
Debug.Log("Restored main laptop screen");
}

foreach(GameObject laptop in laptopList)
{
LaptopScreenController controller = laptop.GetComponent<LaptopScreenController>();
if(controller != null)
{
controller.ChangeScreen(originalScreen);
Debug.Log($"Restored screen for laptop: {laptop.name}");
}
}
}
}

0 comments on commit b0f6ed7

Please sign in to comment.