PJ/Assets/scripts/NextLevel.cs

236 lines
8.7 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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);
}
}
}