93 lines
2.9 KiB
C#
93 lines
2.9 KiB
C#
using UnityEngine;
|
|
using System.IO;
|
|
|
|
public class SaveSystem : MonoBehaviour
|
|
{
|
|
public static SaveSystem instance;
|
|
public SaveData data = new SaveData();
|
|
|
|
private string path;
|
|
|
|
void Awake()
|
|
{
|
|
if (instance == null) {
|
|
instance = this;
|
|
DontDestroyOnLoad(gameObject);
|
|
} else {
|
|
Destroy(gameObject);
|
|
}
|
|
|
|
path = Application.persistentDataPath + "/GemasSaveData.json";
|
|
LoadGame();
|
|
}
|
|
|
|
[ContextMenu("Save Game")]
|
|
public void SaveGame()
|
|
{
|
|
string json = JsonUtility.ToJson(data, true);
|
|
File.WriteAllText(path, json);
|
|
Debug.Log("Data Berhasil Disimpan");
|
|
}
|
|
|
|
public void LoadGame()
|
|
{
|
|
if (File.Exists(path))
|
|
{
|
|
string json = File.ReadAllText(path);
|
|
data = JsonUtility.FromJson<SaveData>(json);
|
|
Debug.Log("Data Berhasil Dimuat");
|
|
}
|
|
else
|
|
{
|
|
InitializeNewData();
|
|
SaveGame();
|
|
}
|
|
}
|
|
|
|
// --- FUNGSI REVISI: UNTUK SIMPAN AKHIR GAME (KUNJUNGAN, SKOR, WAKTU) ---
|
|
public void SimpanHasilGame(int indexMenu, int skorSesiIni, float durasiDetikSesiIni)
|
|
{
|
|
if (data == null || indexMenu >= data.allMenuStats.Length) return;
|
|
|
|
// 1. Tambah jumlah kunjungan
|
|
data.allMenuStats[indexMenu].jumlahKunjungan += 1;
|
|
|
|
// 2. Akumulasi Skor (Skor lama + skor baru)
|
|
data.allMenuStats[indexMenu].highscore += skorSesiIni;
|
|
|
|
// 3. Akumulasi Waktu (Konversi detik ke mm:ss)
|
|
string waktuLamaStr = data.allMenuStats[indexMenu].totalWaktu;
|
|
int totalDetikLama = 0;
|
|
|
|
if (!string.IsNullOrEmpty(waktuLamaStr) && waktuLamaStr.Contains(":"))
|
|
{
|
|
string[] parts = waktuLamaStr.Split(':');
|
|
totalDetikLama = (int.Parse(parts[0]) * 60) + int.Parse(parts[1]);
|
|
}
|
|
|
|
int totalDetikBaru = totalDetikLama + (int)durasiDetikSesiIni;
|
|
int mins = totalDetikBaru / 60;
|
|
int secs = totalDetikBaru % 60;
|
|
data.allMenuStats[indexMenu].totalWaktu = string.Format("{0:00}:{1:00}", mins, secs);
|
|
|
|
// Simpan perubahan
|
|
SaveGame();
|
|
Debug.Log("Record Berhasil Diupdate untuk: " + data.allMenuStats[indexMenu].namaMenu);
|
|
}
|
|
|
|
// Fungsi lama tetap dipertahankan agar tidak error
|
|
public void TambahSkor(int indexMenu, int skorBaru)
|
|
{
|
|
data.allMenuStats[indexMenu].highscore += skorBaru;
|
|
SaveGame();
|
|
}
|
|
|
|
void InitializeNewData()
|
|
{
|
|
data.allMenuStats[0] = new MenuStats { namaMenu = "Menu Belajar" };
|
|
data.allMenuStats[1] = new MenuStats { namaMenu = "Game Tangkap Sayur" };
|
|
data.allMenuStats[2] = new MenuStats { namaMenu = "Game Cocokkan Gambar" };
|
|
data.allMenuStats[3] = new MenuStats { namaMenu = "Game Susun Huruf" };
|
|
data.allMenuStats[4] = new MenuStats { namaMenu = "Game Quiz" };
|
|
}
|
|
} |