PJ/Assets/scripts/NextLevel.cs

237 lines
8.7 KiB
C#
Raw Normal View History

using System.Collections.Generic;
using UnityEditor;
using UnityEngine;
using UnityEngine.SceneManagement;
public class NextLevel : MonoBehaviour
{
public int ThisLevel;
public int LevelComplete;
int RightComplete;
int CenterComplete;
int LeftComplete;
public int Num;
public int Place;
public string NextScene = "0";
private List<int> HaveSkin = new();
public bool IsMiniGame;
public int MinigameNumber;
public int NPC0QP;
public int QLID;
public bool IsQL;
public bool IsDL;
public bool IsLastLevel;
private string LoadedScene;
[SerializeField] GameObject Tobj;
public int GiveSkin;
//public bool Finished = false;
public static TextAsset csvFile;
public string[] dataLines;
float ttime;
private void Start()
{
csvFile = Resources.Load<TextAsset>("LevelsMeta");
dataLines = csvFile.text.Split('\n');
NPC0QP = PlayerPrefs.GetInt("NPC0QP");
//ThisLevel = SceneManager.GetActiveScene().buildIndex;
LevelComplete = PlayerPrefs.GetInt("LevelComplete");
HaveSkin = Currencies.Load("HaveS");
LeftComplete = PlayerPrefs.GetInt("CompleteLeftL");
CenterComplete = PlayerPrefs.GetInt("CompleteCenterL");
RightComplete = PlayerPrefs.GetInt("RightCompleteL");
}
void Update()
{
ttime += Time.deltaTime;
}
private void OnTriggerEnter2D(Collider2D collision)
{
/* if (collision.tag == "Player" && !GameObject.Find("player").GetComponent<Move>().Finished)
{
// ПРИНУДИТЕЛЬНАЯ ЗАЩИТА: отключаем флаги мини-игры, если это стандартный уровень
IsMiniGame = false;
IsDL = false;
IsQL = false;
}*/
{GameObject.Find("player").GetComponent<Move>().Finished = true;
//GameObject.Find("Player").SetActive(false);
int WinCount = PlayerPrefs.GetInt("CountWin");
int MinigamesComplete = PlayerPrefs.GetInt("MiniGamesComplete");
PlayerPrefs.SetInt("CountWin", WinCount + 1);
switch (Place)
{
case 0:
if (GiveSkin != 0)
{
HaveSkin = Currencies.Load("HaveS");
if (!HaveSkin.Contains(GiveSkin))
{
HaveSkin.Add(GiveSkin);
}
Currencies.Save("HaveS", HaveSkin);
}
// Если это специфический режим, выполняем его логику
if (IsDL)
{
SceneManager.LoadScene(1);
break;
}
// ДОБАВЛЕНА ПРОВЕРКА: если уровень обычный, игнорируем QL и мини-игры
if (IsQL)
{
switch (QLID)
{
case 0:
if (NPC0QP < 2)
{
PlayerPrefs.SetInt("NPC0QP", 2);
}
break;
}
End(1);
break;
}
if (IsMiniGame)
{
if (MinigamesComplete < MinigameNumber)
{
PlayerPrefs.SetInt("MiniGamesComplete", MinigameNumber);
}
End("MiniGames");
break;
}
if (ThisLevel == 9)
{
HaveSkin = Currencies.Load("HaveS");
HaveSkin.Add(11);
Currencies.Save("HaveS", HaveSkin);
}
if (IsLastLevel)
{
End("Anim");
PlayerPrefs.SetInt("LevelComplete", ThisLevel);
}
else
{
// 1. Сначала обновляем прогресс в PlayerPrefs
if (ThisLevel > LevelComplete && !IsMiniGame && !IsQL && !IsDL)
{
PlayerPrefs.SetInt("LevelComplete", ThisLevel);
}
// 2. УДАЛЯЕМ старый мусорный код загрузки и ВСТАВЛЯЕМ ЭТО:
// Чистим старые объекты, чтобы не было дублей в DDOL
GameObject oldTobj = GameObject.Find("Tobj");
if (oldTobj != null) Destroy(oldTobj);
// Создаем новый контейнер данных
GameObject newTobj = Instantiate(Tobj);
newTobj.name = "Tobj";
newTobj.SetActive(true);
TransferScript ts = newTobj.GetComponent<TransferScript>();
// ВАЖНО: используем ThisLevel + 1 для формирования имени следующей сцены
ts.string1 = "Level" + (ThisLevel + 1);
ts.bool1 = false;
DontDestroyOnLoad(newTobj);
// 3. Запускаем переход через Buttons (он сам сделает Delay и загрузит ImportLeverl)
Buttons.End("ImportLeverl");
// ОБЯЗАТЕЛЬНО: убедись, что после Buttons.End("ImportLeverl")
// в коде НЕТ вызовов других методов типа End(...) или Invoke(...)
};
break; // Конец case 0
case 1:
if (Num > LeftComplete)
{
PlayerPrefs.SetInt("CompleteLeftL", Num);
}
if (NextScene == "0")
{
End(SceneManager.GetActiveScene().buildIndex + 1);
}
else
{
End(NextScene);
}
break;
case 2:
if (Num > CenterComplete)
{
PlayerPrefs.SetInt("CompleteCenterL", Num);
}
if (NextScene == "0")
{
End(SceneManager.GetActiveScene().buildIndex + 1);
}
else
{
End(NextScene);
}
break;
case 3:
if (Num > RightComplete)
{
PlayerPrefs.SetInt("CompleteRightL", Num);
}
if (NextScene == "0")
{
End(SceneManager.GetActiveScene().buildIndex + 1);
}
else
{
End(NextScene);
}
break;
}
}
}
public void BackLLast()
{
PlayerPrefs.SetInt("LevelCoplete", 10);
}
public void End(object S)
{
Debug.Log($"[End Called] Scene/Trigger requested: {S}, ThisLevel = {ThisLevel}, Time = {ttime}");
GameObject.FindGameObjectWithTag("Transition").GetComponent<Animator>().SetTrigger("End");
LoadedScene = S.ToString();
Invoke("loadS", 0.75f);
Debug.Log(S);
}
public void loadS()
{
Time.timeScale = 1f;
try
{
int L = int.Parse(LoadedScene);
SceneManager.LoadScene(L);
}
catch
{
SceneManager.LoadScene(LoadedScene);
}
}
}