236 lines
8.7 KiB
C#
236 lines
8.7 KiB
C#
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);
|
||
}
|
||
}
|
||
}
|