90 lines
2.2 KiB
C#
90 lines
2.2 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.IO;
|
|
using UnityEngine;
|
|
|
|
[CreateAssetMenu(menuName = "Create new Scriptable/UserList")]
|
|
public class UserList : ScriptableObject
|
|
{
|
|
// Serializable UserList content
|
|
[Serializable]
|
|
public class StoredUserList
|
|
{
|
|
public int currentUserIndex;
|
|
public List<User> storedUsers = new List<User>();
|
|
}
|
|
[Header("Users")]
|
|
[SerializeField]
|
|
// Reference to serializable version of UserList
|
|
private StoredUserList storedUserList = new StoredUserList();
|
|
|
|
// Path to .json file
|
|
public static string PATH = null;
|
|
|
|
void OnEnable()
|
|
{
|
|
PATH = $"{Application.dataPath}/users.json";
|
|
Load();
|
|
}
|
|
|
|
// Create a new User
|
|
public User CreateNewUser(string name, Sprite avatar)
|
|
{
|
|
User user = new User();
|
|
user.username = name;
|
|
user.avatar = avatar;
|
|
return user;
|
|
}
|
|
|
|
// Create a new User and add to list
|
|
public User CreateAndAddNewUser(string name, Sprite avatar)
|
|
{
|
|
User user = CreateNewUser(name, avatar);
|
|
storedUserList.storedUsers.Add(user);
|
|
Save();
|
|
return user;
|
|
}
|
|
|
|
// Get user by username, returns `null` if no user can be found with such name
|
|
public User GetUserByUsername(string username)
|
|
{
|
|
foreach (User user in storedUserList.storedUsers)
|
|
if (user.username == username) return user;
|
|
|
|
return null;
|
|
}
|
|
|
|
// Get a list of all users
|
|
public List<User> GetUsers()
|
|
{
|
|
return storedUserList.storedUsers;
|
|
}
|
|
|
|
// Get the current active user
|
|
public User GetCurrentUser()
|
|
{
|
|
return storedUserList.storedUsers[storedUserList.currentUserIndex];
|
|
}
|
|
|
|
// Save the userList
|
|
public void Save()
|
|
{
|
|
string json = JsonUtility.ToJson(storedUserList);
|
|
File.CreateText(PATH).Close();
|
|
File.WriteAllText(PATH, json);
|
|
}
|
|
|
|
// Load the userList into this object
|
|
public void Load()
|
|
{
|
|
try
|
|
{
|
|
storedUserList.storedUsers.Clear();
|
|
|
|
string text = File.ReadAllText(PATH);
|
|
storedUserList = JsonUtility.FromJson<StoredUserList>(text);
|
|
}
|
|
catch (FileNotFoundException) { Debug.Log($"Path '{PATH}' not found"); }
|
|
}
|
|
}
|