diff --git a/Assets/Accounts/Scripts/ChangeUserScreen.cs b/Assets/Accounts/Scripts/ChangeUserScreen.cs
index b4afd1a..e5e0041 100644
--- a/Assets/Accounts/Scripts/ChangeUserScreen.cs
+++ b/Assets/Accounts/Scripts/ChangeUserScreen.cs
@@ -42,6 +42,7 @@ public class ChangeUserScreen : MonoBehaviour
///
void Start()
{
+ userList.Load();
error.SetActive(false);
DisplayUsers();
}
diff --git a/Assets/Accounts/Scripts/Progress.cs b/Assets/Accounts/Scripts/Progress.cs
index 2334731..e6adf98 100644
--- a/Assets/Accounts/Scripts/Progress.cs
+++ b/Assets/Accounts/Scripts/Progress.cs
@@ -101,4 +101,14 @@ public class Progress
// Raise an exception when key is not found
throw new KeyNotFoundException();
}
+
+ ///
+ /// Check whether a key is present
+ ///
+ /// The key to check
+ /// true if a item can be found with the specified key
+ public bool Has(string key)
+ {
+ return entries.Find(x => x.key == key) != null;
+ }
}
diff --git a/Assets/Accounts/Scripts/UserList.cs b/Assets/Accounts/Scripts/UserList.cs
index 3e423ee..44916f0 100644
--- a/Assets/Accounts/Scripts/UserList.cs
+++ b/Assets/Accounts/Scripts/UserList.cs
@@ -19,7 +19,7 @@ public class UserList : ScriptableObject
///
/// The index of the current/last logged in user in the storedUsers list
///
- public int currentUserIndex;
+ public int currentUserIndex = -1;
///
/// A list containing all users (which can be serialized)
@@ -43,8 +43,13 @@ public class UserList : ScriptableObject
///
void OnEnable()
{
- PATH = $"{Application.persistentDataPath}/users.json";
- Load();
+ // The PATH variable can be set by the testing framework,
+ // so we don't overwrite the actual userlist with test data
+ if (PATH == null)
+ {
+ PATH = $"{Application.persistentDataPath}/users.json";
+ Load();
+ }
}
///
@@ -71,6 +76,10 @@ public class UserList : ScriptableObject
{
User user = CreateNewUser(name, avatar);
storedUserList.storedUsers.Add(user);
+ if (storedUserList.storedUsers.Count == 1)
+ {
+ storedUserList.currentUserIndex = 0;
+ }
Save();
return user;
}
@@ -103,6 +112,10 @@ public class UserList : ScriptableObject
/// The current logged in user
public User GetCurrentUser()
{
+ if (storedUserList.storedUsers.Count == 0)
+ {
+ return null;
+ }
return storedUserList.storedUsers[storedUserList.currentUserIndex];
}
@@ -119,28 +132,46 @@ public class UserList : ScriptableObject
/// Change the current user
///
/// Index of the user in the userlist
+ ///
public void ChangeCurrentUser(int index)
{
- storedUserList.currentUserIndex = index;
+ if (0 <= index && index < storedUserList.storedUsers.Count)
+ {
+ storedUserList.currentUserIndex = index;
+ }
+ else
+ {
+ throw new IndexOutOfRangeException();
+ }
}
///
/// Change the current user
///
/// Reference to the user in the userlist
+ ///
public void ChangeCurrentUser(User user)
{
- storedUserList.currentUserIndex = storedUserList.storedUsers.IndexOf(user);
+ int idx = storedUserList.storedUsers.IndexOf(user);
+ if (idx < 0)
+ {
+ throw new KeyNotFoundException();
+ }
+ storedUserList.currentUserIndex = idx;
}
///
/// Remove the user
///
/// The index of the user in the userlist
- /// true if user was successful removed, false otherwise
+ /// true if user was successful removed, false otherwise
@@ -177,13 +208,14 @@ public class UserList : ScriptableObject
///
public void Load()
{
- try
- {
- storedUserList.storedUsers.Clear();
+ storedUserList.storedUsers.Clear();
+ storedUserList.currentUserIndex = -1;
- string text = File.ReadAllText(PATH);
- storedUserList = JsonUtility.FromJson(text);
+ if (!File.Exists(PATH))
+ {
+ Save();
}
- catch (FileNotFoundException) { Debug.Log($"Path '{PATH}' not found"); }
+ string text = File.ReadAllText(PATH);
+ storedUserList = JsonUtility.FromJson(text);
}
}
diff --git a/Assets/Accounts/Scripts/UserProgressScreen.cs b/Assets/Accounts/Scripts/UserProgressScreen.cs
index 5e06763..7ccafdb 100644
--- a/Assets/Accounts/Scripts/UserProgressScreen.cs
+++ b/Assets/Accounts/Scripts/UserProgressScreen.cs
@@ -112,6 +112,7 @@ public class UserProgressScreen : MonoBehaviour
void Start()
{
// Assign the current user
+ userList.Load();
user = userList.GetCurrentUser();
// Set correct displayed items
diff --git a/Assets/Accounts/Tests/ProgressTest.cs b/Assets/Accounts/Tests/ProgressTest.cs
index 90025cb..6500940 100644
--- a/Assets/Accounts/Tests/ProgressTest.cs
+++ b/Assets/Accounts/Tests/ProgressTest.cs
@@ -7,8 +7,14 @@ using UnityEngine;
///
/// Test the Progress class
///
-public class TestProgress
+[TestFixture]
+public class ProgressTest
{
+ ///
+ /// Reference to the progress object to be tested
+ ///
+ private Progress progress;
+
///
/// A dummy serializable struct to perform test operations on
///
@@ -29,205 +35,179 @@ public class TestProgress
}
///
- /// Helper method
+ /// Setup the tests
///
- /// true if Progress.AddOrUpdate(...) throws a SerializationException
- private bool AddNonSerializableStruct()
+ [SetUp]
+ public void Setup_Progress()
{
- Progress progress = new Progress();
- NonSerializableStruct nss = new NonSerializableStruct();
- try { progress.AddOrUpdate("key", nss); }
- catch (SerializationException) { return true; }
- return false;
- }
-
- ///
- /// Helper method
- ///
- /// true if Progress.Get(...) throws a KeyNotFoundException
- private bool AccessInvalidKey()
- {
- Progress progress = new Progress();
- try { progress.Get("non-existing key"); }
- catch (KeyNotFoundException) { return true; }
- return false;
- }
-
- ///
- /// Helper method
- ///
- /// true if Progress.Get(...) throws a InvalidCastException
- private bool AccessInvalidType()
- {
- Progress progress = new Progress();
- progress.AddOrUpdate("key", 123456789);
- try { progress.Get("key"); }
- catch (InvalidCastException) { return true; }
- return false;
+ progress = new Progress();
}
///
/// Test for creation of a new progress
///
[Test]
- public void TestNewProgress()
+ public void Test_New_Progress()
{
- Progress progress = new Progress();
- Debug.Assert(progress != null);
+ Assert.IsNotNull(progress);
}
///
/// Test whether invalid data will not be added
///
[Test]
- public void TestProgressAddInvalidData()
+ public void Test_Progress_Add_InvalidData()
{
- Progress progress = new Progress();
- Debug.Assert(!progress.AddOrUpdate("key", null));
+ Assert.IsFalse(progress.AddOrUpdate("key", null));
}
///
/// Test whether a duplicated key will be added
///
[Test]
- public void TestProgressAddDuplicateKey()
+ public void Test_Progress_Add_DuplicateKey()
{
- Progress progress = new Progress();
progress.AddOrUpdate("key 1", 0);
- Debug.Assert(progress.AddOrUpdate("key 1", 1));
+ Assert.IsTrue(progress.AddOrUpdate("key 1", 1));
}
///
/// Test whether a int value can be added
///
[Test]
- public void TestProgressAddInt()
+ public void Test_Progress_Add_Int()
{
- Progress progress = new Progress();
- Debug.Assert(progress.AddOrUpdate("key", 1));
+ Assert.IsTrue(progress.AddOrUpdate("key", 1));
}
///
/// Test whether a double value can be added
///
[Test]
- public void TestProgressAddDouble()
+ public void Test_Progress_Add_Double()
{
- Progress progress = new Progress();
- Debug.Assert(progress.AddOrUpdate("key", 1.0));
+ Assert.IsTrue(progress.AddOrUpdate("key", 1.0));
}
///
/// Test whether a string value can be added
///
[Test]
- public void TestProgressAddString()
+ public void Test_Progress_Add_String()
{
- Progress progress = new Progress();
- Debug.Assert(progress.AddOrUpdate("key", "Hello World!"));
+ Assert.IsTrue(progress.AddOrUpdate("key", "Hello World!"));
}
///
/// Test whether a serializable struct can be added
///
[Test]
- public void TestProgressAddSerializableStruct()
+ public void Test_Progress_Add_SerializableStruct()
{
- Progress progress = new Progress();
- Debug.Assert(progress.AddOrUpdate("key", new SerializableStruct()));
+ Assert.IsTrue(progress.AddOrUpdate("key", new SerializableStruct()));
}
///
/// Test whether a non-serializable struct will throw an error
///
[Test]
- public void TestProgressAddNonSerializableStruct()
+ public void Test_Progress_Add_NonSerializableStruct()
{
- Debug.Assert(AddNonSerializableStruct());
+ NonSerializableStruct nss = new NonSerializableStruct();
+ Assert.Throws(delegate { progress.AddOrUpdate("key", nss); });
+ }
+
+ ///
+ /// Test whether a key is present
+ ///
+ [Test]
+ public void Test_Progress_Has_ValidKey()
+ {
+ progress.AddOrUpdate("key", 1);
+ Assert.IsTrue(progress.Has("key"));
+ }
+
+ ///
+ /// Test whether a key is not present
+ ///
+ [Test]
+ public void Test_Progress_Has_InvalidKey()
+ {
+ Assert.IsFalse(progress.Has("non-existing key"));
}
///
/// Test whether an invalid key will throw an error
///
[Test]
- public void TestProgressGetInvalidKey()
+ public void Test_Progress_Get_InvalidKey()
{
- Debug.Assert(AccessInvalidKey());
+ Assert.Throws(delegate { progress.Get("non-existing key"); });
}
///
/// Test whether an invalid type will throw an error
///
[Test]
- public void TestProgressGetInvalidType()
+ public void Test_Progress_Get_InvalidType()
{
- Debug.Assert(AccessInvalidType());
+ progress.AddOrUpdate("key", 123456789);
+ Assert.Throws(delegate { progress.Get("key"); });
}
///
/// Test whether a value is correctly updated
///
[Test]
- public void TestProgressUpdate()
+ public void Test_Progress_Update()
{
- Progress progress = new Progress();
progress.AddOrUpdate("key", 1);
- Debug.Assert(progress.Get("key") == 1);
+ Assert.AreEqual(progress.Get("key"), 1);
progress.AddOrUpdate("key", 2);
- Debug.Assert(progress.Get("key") == 2);
+ Assert.AreEqual(progress.Get("key"), 2);
}
///
/// Test whether a int value can be read
///
[Test]
- public void TestProgressGetInt()
+ public void Test_Progress_Get_Int()
{
- Progress progress = new Progress();
progress.AddOrUpdate("key", 1);
- Debug.Assert(progress.Get("key") == 1);
+ Assert.AreEqual(progress.Get("key"), 1);
}
///
/// Test whether a double value can be read
///
[Test]
- public void TestProgressGetDouble()
+ public void Test_Progress_Get_Double()
{
- Progress progress = new Progress();
progress.AddOrUpdate("key", 1.0);
- Debug.Assert(progress.Get("key") == 1.0);
+ Assert.AreEqual(progress.Get("key"), 1.0);
}
///
/// Test whether a string value can be read
///
[Test]
- public void TestProgressGetString()
+ public void Test_Progress_Get_String()
{
- Progress progress = new Progress();
progress.AddOrUpdate("key", "Hello World!");
- Debug.Assert(progress.Get("key") == "Hello World!");
+ Assert.AreEqual(progress.Get("key"), "Hello World!");
}
///
/// Test whether a serializable struct can be read
///
[Test]
- public void TestProgressGetStruct()
+ public void Test_Progress_Get_Struct()
{
- Progress progress = new Progress();
-
int R = 1, G = 10, B = 100;
float X = 0.1f, Y = 0.01f, Z = 0.001f;
SerializableStruct data = new SerializableStruct { r = R, g = G, b = B, x = X, y = Y, z = Z };
progress.AddOrUpdate("key", data);
SerializableStruct result = progress.Get("key");
- Debug.Assert(result.r == R);
- Debug.Assert(result.g == G);
- Debug.Assert(result.b == B);
- Debug.Assert(result.x == X);
- Debug.Assert(result.y == Y);
- Debug.Assert(result.z == Z);
+ Assert.AreEqual(result, data);
}
}
diff --git a/Assets/Accounts/Tests/UserCreationScreenTest.cs b/Assets/Accounts/Tests/UserCreationScreenTest.cs
index 36a7710..d2fc819 100644
--- a/Assets/Accounts/Tests/UserCreationScreenTest.cs
+++ b/Assets/Accounts/Tests/UserCreationScreenTest.cs
@@ -1,30 +1,33 @@
-using UnityEngine;
+using NUnit.Framework;
///
/// Test the UserCreationScreen class
///
-public class TestUserCreationScreen
+[TestFixture]
+public class UserCreationScreenTest
{
///
/// Tets IsValidUsername will return true for an valid username
///
- public void TestIsValidUsernameTrue()
+ [Test]
+ public void Test_UserCreationScreen_IsValidUsername_True()
{
foreach (char c in "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")
- Debug.Assert(UserCreationScreen.IsValidUsername(c.ToString()));
+ Assert.IsTrue(UserCreationScreen.IsValidUsername(c.ToString()));
- Debug.Assert(UserCreationScreen.IsValidUsername("123456789AbC"));
+ Assert.IsTrue(UserCreationScreen.IsValidUsername("123456789AbC"));
}
///
/// Tets IsValidUsername will return false for an invalid username
///
- public void TestIsValidUsernameFalse()
+ [Test]
+ public void Test_UserCreationScreen_IsValidUsername_False()
{
- Debug.Assert(!UserCreationScreen.IsValidUsername(string.Empty));
+ Assert.IsFalse(UserCreationScreen.IsValidUsername(string.Empty));
foreach (char c in " \n\t+-*/%_.,;:!?(){}[]\\'\"|&~^$")
- Debug.Assert(!UserCreationScreen.IsValidUsername(c.ToString()));
+ Assert.IsFalse(UserCreationScreen.IsValidUsername(c.ToString()));
- Debug.Assert(!UserCreationScreen.IsValidUsername("123456789_10_11_12_13"));
+ Assert.IsFalse(UserCreationScreen.IsValidUsername("123456789_10_11_12_13"));
}
}
diff --git a/Assets/Accounts/Tests/UserListTest.cs b/Assets/Accounts/Tests/UserListTest.cs
new file mode 100644
index 0000000..4adff57
--- /dev/null
+++ b/Assets/Accounts/Tests/UserListTest.cs
@@ -0,0 +1,470 @@
+using NUnit.Framework;
+using System;
+using System.Collections;
+using System.Collections.Generic;
+using System.IO;
+using UnityEngine;
+
+///
+/// Test the UserList class
+///
+[TestFixture]
+public class UserListTest
+{
+ ///
+ /// Create a new path so the existing users.json file will not be overwritten
+ ///
+ private static string PATH = $"{Application.persistentDataPath}/unit_test_users.json";
+
+ ///
+ /// NUnit test magic (for skipping the setup)
+ ///
+ public const string SKIP_SETUP = "SKIP_SETUP";
+
+ ///
+ /// Reference to the userlist to be tested
+ ///
+ private UserList userList;
+
+ ///
+ /// Helper variable for quick user creation
+ ///
+ private string username = "u5erNam3";
+
+ ///
+ /// Helper variable for quick user creation
+ ///
+ private Sprite avatar = Sprite.Create(
+ Texture2D.blackTexture,
+ new Rect(0, 0, Texture2D.blackTexture.width, Texture2D.blackTexture.height),
+ new Vector2(0.5f, 0.5f)
+ );
+
+ ///
+ /// Setup the tests
+ ///
+ [SetUp]
+ public void Setup_UserList()
+ {
+ // Check whether the current test needs to skip the setup
+ ArrayList cat = TestContext.CurrentContext.Test.Properties["_CATEGORIES"] as ArrayList;
+ bool skip = cat != null && cat.Contains(SKIP_SETUP);
+ if (!skip)
+ {
+ // The actual setup code
+ UserList.PATH = UserListTest.PATH;
+ userList = ScriptableObject.CreateInstance();
+ }
+ }
+
+ ///
+ /// Test whether the UserList.PATH is correctly set
+ ///
+ [Test]
+ [Category(SKIP_SETUP)]
+ public void Test_UserList_OnEnable()
+ {
+ UserList.PATH = null;
+ userList = ScriptableObject.CreateInstance();
+ Assert.AreEqual($"{Application.persistentDataPath}/users.json", UserList.PATH);
+ }
+
+ ///
+ /// Test for creation of a new UserList
+ ///
+ [Test]
+ public void Test_New_UserList()
+ {
+ Assert.IsNotNull(userList);
+ Assert.Zero(userList.GetUsers().Count);
+ }
+
+ ///
+ /// Test for creation of new user (without adding the user to the list)
+ ///
+ [Test]
+ public void Test_UserList_CreateNewUser()
+ {
+ User user = userList.CreateNewUser(username, avatar);
+
+ Assert.IsNotNull(user);
+ Assert.Zero(userList.GetUsers().Count);
+ Assert.AreEqual(username, user.username);
+ Assert.AreEqual(avatar, user.avatar);
+ }
+
+ ///
+ /// Test for creating a new user and adding the user to the list
+ ///
+ public void Test_UserList_CreateAndAddNewUser()
+ {
+ Assert.AreEqual(-1, userList.GetCurrentUserIndex());
+ User user = userList.CreateAndAddNewUser(username, avatar);
+
+ Assert.IsNotNull(user);
+ Assert.AreEqual(1, userList.GetUsers().Count);
+ Assert.AreEqual(user, userList.GetUsers()[0]);
+ Assert.Zero(userList.GetCurrentUserIndex());
+ }
+
+ ///
+ /// Test whether an existing user can be found by its username
+ ///
+ [Test]
+ public void Test_UserList_GetUserByUsername_Valid()
+ {
+ User u = userList.CreateAndAddNewUser(username, avatar);
+ User v = userList.GetUserByUsername(username);
+ Assert.AreEqual(u, v);
+ }
+
+ ///
+ /// Test whether a non-existing user can not be found
+ ///
+ [Test]
+ public void Test_UserList_GetUserByUsername_Null()
+ {
+ User user = userList.GetUserByUsername("not-a-user");
+ Assert.IsNull(user);
+ }
+
+ ///
+ /// Test whether the correct current user is returned
+ ///
+ [Test]
+ public void Test_UserList_GetCurrentUser()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ userList.ChangeCurrentUser(2);
+
+ User W = userList.GetCurrentUser();
+ Assert.AreEqual(w, W);
+ }
+
+ ///
+ /// Test whether a null user is returned when the userlist is empty
+ ///
+ [Test]
+ public void Test_UserList_GetCurrent_Empty()
+ {
+ User user = userList.GetCurrentUser();
+ Assert.IsNull(user);
+ }
+
+ ///
+ /// Test whether the correct index is returned for the current user
+ ///
+ [Test]
+ public void Test_UserList_GetCurrentUserIndex()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ userList.ChangeCurrentUser(2);
+
+ int idx = userList.GetCurrentUserIndex();
+ Assert.AreEqual(2, idx);
+ }
+
+ ///
+ /// Test whether a bad index is returned when the userlist is empty
+ ///
+ [Test]
+ public void Test_UserList_GetCurrentUserIndex_Empty()
+ {
+ Assert.AreEqual(-1, userList.GetCurrentUserIndex());
+ }
+
+ ///
+ /// Test whether the current user (referenced by index) is correctly changed
+ ///
+ [Test]
+ public void Test_UserList_ChangeCurrentUser_ValidIndex()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ userList.ChangeCurrentUser(2);
+
+ User W = userList.GetCurrentUser();
+ Assert.AreEqual(w, W);
+ }
+
+ ///
+ /// Test whether the current user is not changed when a bad index is given
+ ///
+ [Test]
+ public void Test_UserList_ChangeCurrentUser_InvalidIndex()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ Assert.Throws(delegate { userList.ChangeCurrentUser(-1); });
+ Assert.Throws(delegate { userList.ChangeCurrentUser(5); });
+ }
+
+ ///
+ /// Test whether the current user is not changed when a bad index is given
+ ///
+ [Test]
+ public void Test_UserList_ChangeCurrentUser_IndexEmpty()
+ {
+ Assert.Throws(delegate { userList.ChangeCurrentUser(0); });
+ }
+
+ ///
+ /// Test whether the current user is correctly changed
+ ///
+ [Test]
+ public void Test_UserList_ChangeCurrentUser_ValidUser()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ userList.ChangeCurrentUser(v);
+ User V = userList.GetCurrentUser();
+ Assert.AreEqual(v, V);
+ }
+
+ ///
+ /// Test whether the current user is not changed when a non-existing user is given
+ ///
+ [Test]
+ public void Test_UserList_ChangeCurrentUser_InvalidUser()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateNewUser($"{username}_{'v'}", avatar);
+ Assert.Throws(delegate { userList.ChangeCurrentUser(v); });
+ }
+
+ ///
+ /// Test whether the current user is not changed when a null user is given
+ ///
+ [Test]
+ public void Test_UserList_ChangeCurrentUser_NullUser()
+ {
+ Assert.Throws(delegate { userList.ChangeCurrentUser(null); });
+ }
+
+ ///
+ /// Test whether deleting a existing user (referenced by index) will correctly be removed
+ ///
+ [Test]
+ public void Test_UserList_DeleteUser_ValidIndex()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ Assert.IsTrue(userList.DeleteUser(1));
+ }
+
+ ///
+ /// Test whether deleting a non-existing user (referenced by wrong index) will fail
+ ///
+ [Test]
+ public void Test_UserList_DeleteUser_InValidIndex()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ Assert.IsFalse(userList.DeleteUser(-1));
+ Assert.IsFalse(userList.DeleteUser(5));
+ }
+
+ ///
+ /// Test whether deleting any user from an empty userlist will fail
+ ///
+ [Test]
+ public void Test_UserList_DeleteUser_IndexEmpty()
+ {
+ Assert.IsFalse(userList.DeleteUser(0));
+ }
+
+ ///
+ /// Test whether deleting an existing user will correctly remove the user and set the currentUserIndex correctly
+ ///
+ [Test]
+ public void Test_UserList_DeleteUser_LastValid()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ userList.ChangeCurrentUser(2);
+
+ Assert.AreEqual(3, userList.GetUsers().Count);
+ Assert.AreEqual(2, userList.GetCurrentUserIndex());
+ Assert.IsTrue(userList.DeleteUser(w));
+ Assert.AreEqual(2, userList.GetUsers().Count);
+ Assert.AreEqual(1, userList.GetCurrentUserIndex());
+ }
+
+ ///
+ /// Test whether deleting an existing user will remove the user correctly
+ ///
+ /// This will change the currentUserIndex to point to another user
+ [Test]
+ public void Test_UserList_DeleteUser_FirstValid()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateAndAddNewUser($"{username}_{'v'}", avatar);
+ User w = userList.CreateAndAddNewUser($"{username}_{'w'}", avatar);
+ userList.ChangeCurrentUser(0);
+
+ Assert.AreEqual(3, userList.GetUsers().Count);
+ Assert.AreEqual(0, userList.GetCurrentUserIndex());
+ Assert.IsTrue(userList.DeleteUser(u));
+ Assert.AreEqual(2, userList.GetUsers().Count);
+ Assert.AreEqual(0, userList.GetCurrentUserIndex());
+ }
+
+ ///
+ /// Test whether deleting a non-existing user will not affect the userlist
+ ///
+ [Test]
+ public void Test_UserList_DeleteUser_Invalid()
+ {
+ User u = userList.CreateAndAddNewUser($"{username}_{'u'}", avatar);
+ User v = userList.CreateNewUser($"{username}_{'v'}", avatar);
+
+ Assert.AreEqual(1, userList.GetUsers().Count);
+ Assert.IsFalse(userList.DeleteUser(v));
+ Assert.AreEqual(1, userList.GetUsers().Count);
+ }
+
+ ///
+ /// Test whether calling the DeleteUser function on an empty list will not affect the userlist
+ ///
+ [Test]
+ public void Test_UserList_DeleteUser_Empty()
+ {
+ User user = userList.CreateNewUser(username, avatar);
+ Assert.Zero(userList.GetUsers().Count);
+ Assert.IsFalse(userList.DeleteUser(user));
+ Assert.Zero(userList.GetUsers().Count);
+ }
+
+ ///
+ /// Test whether a savefile is correctly constructed when no savefile is present
+ ///
+ [Test]
+ public void Test_UserList_Save_New()
+ {
+ if (File.Exists(PATH))
+ {
+ File.Delete(PATH);
+ }
+
+ List u = new List();
+ for (int i = 0; i < 5; i++)
+ {
+ u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
+ }
+ userList.ChangeCurrentUser(3);
+ userList.Save();
+ FileAssert.Exists(PATH);
+
+ string content = File.ReadAllText(PATH);
+ int id = avatar.GetInstanceID();
+ string expected = $"{{\"currentUserIndex\":3,\"storedUsers\":[{{\"username\":\"u5erNam3_0\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_1\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_2\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_3\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_4\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}}]}}";
+ Assert.AreEqual(expected, content);
+ }
+
+ ///
+ /// Test whether a savefile is correctly constructed when a savefile already exists
+ ///
+ [Test]
+ public void Test_UserList_Save_Existing()
+ {
+ if (!File.Exists(PATH))
+ {
+ File.CreateText(PATH).Close();
+ File.WriteAllText(PATH, "https://www.youtube.com/watch?v=dQw4w9WgXcQ");
+ }
+
+ List u = new List();
+ for (int i = 0; i < 5; i++)
+ {
+ u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
+ }
+ userList.ChangeCurrentUser(3);
+ userList.Save();
+ FileAssert.Exists(PATH);
+
+ string content = File.ReadAllText(PATH);
+ int id = avatar.GetInstanceID();
+ string expected = $"{{\"currentUserIndex\":3,\"storedUsers\":[{{\"username\":\"u5erNam3_0\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_1\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_2\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_3\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}},{{\"username\":\"u5erNam3_4\",\"avatar\":{{\"instanceID\":{id}}},\"playtime\":0.0,\"courses\":[],\"minigames\":[]}}]}}";
+ Assert.AreEqual(expected, content);
+ }
+
+ ///
+ /// Test whether a save file is correctly constructed from an empty userlist
+ ///
+ [Test]
+ public void Test_UserList_Save_Empty()
+ {
+ userList.Save();
+ FileAssert.Exists(PATH);
+
+ string content = File.ReadAllText(PATH);
+ string expected = "{\"currentUserIndex\":-1,\"storedUsers\":[]}";
+ Assert.AreEqual(expected, content);
+ }
+
+ ///
+ /// Test whether a userlist (containing some users) is correrctly loaded
+ ///
+ [Test]
+ public void Test_UserList_Load()
+ {
+ List u = new List();
+ for (int i = 0; i < 5; i++)
+ {
+ u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
+ }
+ userList.ChangeCurrentUser(3);
+ userList.Save();
+
+ userList.Load();
+ Assert.AreEqual(userList.GetUsers().Count, u.Count);
+ Assert.AreEqual(userList.GetCurrentUserIndex(), 3);
+ List v = userList.GetUsers();
+ for (int i = 0; i < 5; i++)
+ {
+ Assert.AreEqual(u[i].username, v[i].username);
+ Assert.AreEqual(u[i].avatar, v[i].avatar);
+ }
+ }
+
+ ///
+ /// Test whether an empty userlist is correctly loaded
+ ///
+ [Test]
+ public void Test_UserList_Load_Empty()
+ {
+ userList.Save();
+ userList.Load();
+ Assert.Zero(userList.GetUsers().Count);
+ Assert.AreEqual(-1, userList.GetCurrentUserIndex());
+ }
+
+ ///
+ /// Test if the user save file is not found, a new one will be created and an empty userlist will be loaded
+ ///
+ [Test]
+ public void Test_UserList_Load_NotFound()
+ {
+ List u = new List();
+ for (int i = 0; i < 5; i++)
+ {
+ u.Add(userList.CreateAndAddNewUser($"{username}_{i}", avatar));
+ }
+ userList.ChangeCurrentUser(3);
+ userList.Save();
+
+ File.Delete(PATH);
+ userList.Load();
+ Assert.Zero(userList.GetUsers().Count);
+ }
+}
diff --git a/Assets/Tween/Demo/TweenDemo.cs.meta b/Assets/Accounts/Tests/UserListTest.cs.meta
similarity index 68%
rename from Assets/Tween/Demo/TweenDemo.cs.meta
rename to Assets/Accounts/Tests/UserListTest.cs.meta
index 92274fe..487948a 100644
--- a/Assets/Tween/Demo/TweenDemo.cs.meta
+++ b/Assets/Accounts/Tests/UserListTest.cs.meta
@@ -1,8 +1,7 @@
fileFormatVersion: 2
-guid: 85997561a67b3e740be145c96c4a0b37
-timeCreated: 1455294104
-licenseType: Store
+guid: cc44c73b32b9af7469b76bd6071f0cf5
MonoImporter:
+ externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
diff --git a/Assets/Accounts/Tests/UserTest.cs b/Assets/Accounts/Tests/UserTest.cs
index e3ecef8..81d4045 100644
--- a/Assets/Accounts/Tests/UserTest.cs
+++ b/Assets/Accounts/Tests/UserTest.cs
@@ -1,150 +1,166 @@
+using NUnit.Framework;
using System;
using System.Collections.Generic;
-using UnityEngine;
///
/// Test the User class
///
-public class TestUser
+[TestFixture]
+public class UserTest
{
+ ///
+ /// Reference to the user to be tested
+ ///
+ private User user;
+
+ ///
+ /// Setup the tests
+ ///
+ [SetUp]
+ public void Setup_User()
+ {
+ user = new User();
+ }
+
+
///
/// Test for the creation of a new user
///
- public void TestNewUser()
+ [Test]
+ public void Test_New_User()
{
- User user = new User();
- Debug.Assert(user != null);
- Debug.Assert(user.courses.Count == 0);
- Debug.Assert(user.minigames.Count == 0);
+ Assert.NotNull(user);
+ Assert.Zero(user.courses.Count);
+ Assert.Zero(user.minigames.Count);
}
///
/// Test whether progress on a new course can be added
///
- public void TestUserAddCourse()
+ [Test]
+ public void Test_User_AddCourse()
{
- User user = new User();
Progress p = new Progress();
user.courses.Add(p);
- Debug.Assert(user.courses.Count == 1);
- Debug.Assert(user.minigames.Count == 0);
+ Assert.AreEqual(user.courses.Count, 1);
+ Assert.Zero(user.minigames.Count);
}
///
/// Test whether progress on a new minigame can be added
///
- public void TestUserAddMinigame()
+ [Test]
+ public void Test_User_AddMinigame()
{
- User user = new User();
Progress p = new Progress();
user.minigames.Add(p);
- Debug.Assert(user.courses.Count == 0);
- Debug.Assert(user.minigames.Count == 1);
+ Assert.Zero(user.courses.Count);
+ Assert.AreEqual(user.minigames.Count, 1);
}
///
/// Test GetRecentCourses will return empty when no progress is stored
///
- public void TestGetRecentCoursesEmpty()
+ [Test]
+ public void Test_User_GetRecentCourses_Empty()
{
- User user = new User();
- Debug.Assert(user.GetRecentCourses().Count == 0);
+ Assert.Zero(user.GetRecentCourses().Count);
}
///
- /// Temporary test for GetRecentCourses will return all progress that is stored
+ /// TEMPORARY test for GetRecentCourses will return all progress that is stored
///
- public void TestGetRecentCoursesAll()
+ [Test]
+ public void Test_User_GetRecentCourses_All()
{
- User user = new User();
Progress p = new Progress();
p.AddOrUpdate("courseIndex", CourseIndex.FINGERSPELLING);
p.AddOrUpdate("courseProgress", 0.5f);
user.courses.Add(p);
List> list = user.GetRecentCourses();
- Debug.Assert(list.Count == 1);
- Debug.Assert(list[0].Item1 == CourseIndex.FINGERSPELLING);
- Debug.Assert(list[0].Item2 == 0.5f);
+ Assert.AreEqual(list.Count, 1);
+ Assert.AreEqual(list[0].Item1, CourseIndex.FINGERSPELLING);
+ Assert.AreEqual(list[0].Item2, 0.5f);
}
///
/// Test GetRecommendedCourses will return Tuple when no progress is stored
///
- public void TestGetRecommendedCoursesEmpty()
+ [Test]
+ public void Test_User_GetRecommendedCourses_Empty()
{
- User user = new User();
List> list = user.GetRecommendedCourses();
- Debug.Assert(list.Count == 1);
- Debug.Assert(list[0].Item1 == CourseIndex.FINGERSPELLING);
- Debug.Assert(list[0].Item2 == 0.0f);
+ Assert.AreEqual(list.Count, 1);
+ Assert.AreEqual(list[0].Item1, CourseIndex.FINGERSPELLING);
+ Assert.AreEqual(list[0].Item2, 0.0f);
}
///
- /// Temporary test for GetRecommenedCourses will return all progress that is stored
+ /// TEMPORARY test for GetRecommenedCourses will return all progress that is stored
///
- public void TestGetRecommendedCoursesAll()
+ [Test]
+ public void Test_User_GetRecommendedCourses_All()
{
- User user = new User();
Progress p = new Progress();
p.AddOrUpdate("courseIndex", CourseIndex.FINGERSPELLING);
p.AddOrUpdate("courseProgress", 0.5f);
user.courses.Add(p);
List> list = user.GetRecommendedCourses();
- Debug.Assert(list.Count == 1);
- Debug.Assert(list[0].Item1 == CourseIndex.FINGERSPELLING);
- Debug.Assert(list[0].Item2 == 0.5f);
+ Assert.AreEqual(list.Count, 1);
+ Assert.AreEqual(list[0].Item1, CourseIndex.FINGERSPELLING);
+ Assert.AreEqual(list[0].Item2, 0.5f);
}
///
/// Test GetCourseProgress returns null when course cannot be found
///
- public void TestGetCourseProgressNull()
+ [Test]
+ public void Test_User_GetCourseProgress_Null()
{
- User user = new User();
- Debug.Assert(user.GetCourseProgress(CourseIndex.FINGERSPELLING) == null);
- Debug.Assert(user.GetCourseProgress((CourseIndex)100) == null);
+ Assert.Null(user.GetCourseProgress(CourseIndex.FINGERSPELLING));
+ Assert.Null(user.GetCourseProgress((CourseIndex)100));
}
///
/// Test GetCourseProgress returns correct progress object
///
- public void TestGetCourseProgressValid()
+ [Test]
+ public void Test_User_GetCourseProgress_Valid()
{
- User user = new User();
Progress p = new Progress();
p.AddOrUpdate("courseIndex", CourseIndex.FINGERSPELLING);
p.AddOrUpdate("courseProgress", 3.14159265f);
user.courses.Add(p);
Progress q = user.GetCourseProgress(CourseIndex.FINGERSPELLING);
- Debug.Assert(q.Get("courseIndex") == CourseIndex.FINGERSPELLING);
- Debug.Assert(q.Get("courseProgress") == 3.14159265f);
+ Assert.AreEqual(q.Get("courseIndex"), CourseIndex.FINGERSPELLING);
+ Assert.AreEqual(q.Get("courseProgress"), 3.14159265f);
}
///
/// Test GetMinigameProgress returns null when minigame cannot be found
///
- public void TestGetMinigameProgressNull()
+ [Test]
+ public void Test_User_GetMinigameProgress_Null()
{
- User user = new User();
- Debug.Assert(user.GetMinigameProgress(MinigameIndex.SPELLING_BEE) == null);
- Debug.Assert(user.GetMinigameProgress((MinigameIndex)100) == null);
+ Assert.Null(user.GetMinigameProgress(MinigameIndex.SPELLING_BEE));
+ Assert.Null(user.GetMinigameProgress((MinigameIndex)100));
Progress p = new Progress();
p.AddOrUpdate("minigameIndex", MinigameIndex.SPELLING_BEE);
user.minigames.Add(p);
- Debug.Assert(user.GetMinigameProgress(MinigameIndex.HANGMAN) == null);
+ Assert.Null(user.GetMinigameProgress(MinigameIndex.HANGMAN));
}
///
/// Test GetMinigameProgress returns correct progress object
///
- public void TestGetMinigameProgressValid()
+ [Test]
+ public void Test_User_GetMinigameProgress_Valid()
{
- User user = new User();
Progress p = new Progress();
p.AddOrUpdate("minigameIndex", MinigameIndex.SPELLING_BEE);
user.minigames.Add(p);
Progress q = user.GetMinigameProgress(MinigameIndex.SPELLING_BEE);
- Debug.Assert(q.Get("minigameIndex") == CourseIndex.FINGERSPELLING);
+ Assert.AreEqual(q.Get("minigameIndex"), CourseIndex.FINGERSPELLING);
}
}
diff --git a/Assets/Common/Scripts/CourseActivityScreen.cs b/Assets/Common/Scripts/CourseActivityScreen.cs
index 54c7183..ab0cdb4 100644
--- a/Assets/Common/Scripts/CourseActivityScreen.cs
+++ b/Assets/Common/Scripts/CourseActivityScreen.cs
@@ -66,6 +66,7 @@ public class CourseActivityScreen : MonoBehaviour
//slider.value = progressValue;
// Set progress
+ userList.Load();
progress = userList.GetCurrentUser().GetCourseProgress(course.index);
if (progress != null)
progressBar.value = progress.Get("courseProgress");
diff --git a/Assets/Common/Scripts/CourseMenuScreen.cs b/Assets/Common/Scripts/CourseMenuScreen.cs
index 6d8cb04..ef56303 100644
--- a/Assets/Common/Scripts/CourseMenuScreen.cs
+++ b/Assets/Common/Scripts/CourseMenuScreen.cs
@@ -42,6 +42,7 @@ public class CourseMenuScreen : MonoBehaviour
///
void Start()
{
+ userList.Load();
User user = userList.GetCurrentUser();
// Recent courses
diff --git a/Assets/Common/Scripts/ListCoursesScreen.cs b/Assets/Common/Scripts/ListCoursesScreen.cs
index 05c06cc..7628ecf 100644
--- a/Assets/Common/Scripts/ListCoursesScreen.cs
+++ b/Assets/Common/Scripts/ListCoursesScreen.cs
@@ -30,6 +30,7 @@ public class ListCoursesScreen : MonoBehaviour
///
void Start()
{
+ userList.Load();
User user = userList.GetCurrentUser();
foreach (Course course in courseList.courses)
diff --git a/Assets/Common/Scripts/MainMenuScreen.cs b/Assets/Common/Scripts/MainMenuScreen.cs
index 1a7885a..d4f7382 100644
--- a/Assets/Common/Scripts/MainMenuScreen.cs
+++ b/Assets/Common/Scripts/MainMenuScreen.cs
@@ -17,6 +17,7 @@ public class MainMenuScreen : MonoBehaviour
///
void Awake()
{
+ userList.Load();
if (!File.Exists(UserList.PATH) || userList.GetUsers().Count <= 0)
{
SystemController.GetInstance().LoadNextScene("Accounts/Scenes/UserCreationScreen");
diff --git a/Assets/Common/Scripts/MinigameActivityScreen.cs b/Assets/Common/Scripts/MinigameActivityScreen.cs
index 8d6325b..46dc2ba 100644
--- a/Assets/Common/Scripts/MinigameActivityScreen.cs
+++ b/Assets/Common/Scripts/MinigameActivityScreen.cs
@@ -65,6 +65,7 @@ public class MinigameActivityScreen : MonoBehaviour
///
void Start()
{
+ userList.Load();
GenerateContent();
GenerateHighScores();
}
diff --git a/Assets/Common/Scripts/UserButton.cs b/Assets/Common/Scripts/UserButton.cs
index 157764b..5fa77e5 100644
--- a/Assets/Common/Scripts/UserButton.cs
+++ b/Assets/Common/Scripts/UserButton.cs
@@ -32,6 +32,7 @@ public class UserButton : MonoBehaviour
///
void Start()
{
+ userList.Load();
User user = userList.GetCurrentUser();
avatar.sprite = user.avatar;
username.text = user.username;
diff --git a/Assets/Courses/Scripts/TemplateCourse.cs b/Assets/Courses/Scripts/TemplateCourse.cs
index 2f390de..62d8453 100644
--- a/Assets/Courses/Scripts/TemplateCourse.cs
+++ b/Assets/Courses/Scripts/TemplateCourse.cs
@@ -128,6 +128,7 @@ public class TemplateCourse : MonoBehaviour
// ^^^ TEMPORARY STUFF ^^^
// Create entry in current user for keeping track of progress
+ userList.Load();
user = userList.GetCurrentUser();
progress = user.GetCourseProgress(course.index);
if (progress == null)
diff --git a/Assets/Hangman/Scripts/HangmanGameController.cs b/Assets/Hangman/Scripts/HangmanGameController.cs
index ecb8885..364512d 100644
--- a/Assets/Hangman/Scripts/HangmanGameController.cs
+++ b/Assets/Hangman/Scripts/HangmanGameController.cs
@@ -1,10 +1,9 @@
-using System.Collections;
-using System.Collections.Generic;
using System;
+using System.Collections.Generic;
using System.Linq;
+using TMPro;
using UnityEngine;
using UnityEngine.UI;
-using TMPro;
public class HangmanGameController : MonoBehaviour
{
@@ -199,7 +198,7 @@ public class HangmanGameController : MonoBehaviour
/// Accuracy feeback object
///
public Feedback feedback;
-
+
///
/// The button to go into the game
///
@@ -223,6 +222,7 @@ public class HangmanGameController : MonoBehaviour
playerPanel.SetActive(true);
// Create entry in current user for keeping track of progress
+ userList.Load();
user = userList.GetCurrentUser();
Progress progress = user.GetMinigameProgress(minigame.index);
if (progress == null)
@@ -331,7 +331,7 @@ public class HangmanGameController : MonoBehaviour
public void TwoPlayer()
{
if (currentWord.Length >= 2)
- {
+ {
StartGame();
}
}
@@ -341,8 +341,8 @@ public class HangmanGameController : MonoBehaviour
///
public void Update()
{
- if(mode == 1)
- {
+ if (mode == 1)
+ {
if (currentsign != "")
{
char letter = currentsign.ToLower()[0];
@@ -359,7 +359,7 @@ public class HangmanGameController : MonoBehaviour
if (Input.GetKey(KeyCode.Backspace))
{
// Remove the last letter from the currentword
- if(currentWord.Length > 0)
+ if (currentWord.Length > 0)
{
currentWord = currentWord.Substring(0, currentWord.Length - 1);
inputTextField.text = currentWord.ToString();
@@ -372,7 +372,7 @@ public class HangmanGameController : MonoBehaviour
inputTextField.text = currentWord.ToString();
}
}
- gottogamebutton.SetActive(currentWord.Length >2);
+ gottogamebutton.SetActive(currentWord.Length > 2);
}
if (mode == 2)
diff --git a/Assets/SpellingBee/Scenes/Game.unity b/Assets/SpellingBee/Scenes/Game.unity
index 4bf59ee..e8dd66a 100644
--- a/Assets/SpellingBee/Scenes/Game.unity
+++ b/Assets/SpellingBee/Scenes/Game.unity
@@ -3904,6 +3904,7 @@ MonoBehaviour:
modelInfoFile: {fileID: 4900000, guid: fb8b51022bdcd654a9f29c054832a1b5, type: 3}
configAsset: {fileID: 4900000, guid: 6288c43cdca97374782dac1ea87aa029, type: 3}
screen: {fileID: 1743003084}
+ screen2: {fileID: 0}
--- !u!4 &1592592445
Transform:
m_ObjectHideFlags: 0
@@ -4551,7 +4552,7 @@ MonoBehaviour:
m_Script: {fileID: 11500000, guid: 44fbed5ae228de39b9f727def7578d06, type: 3}
m_Name:
m_EditorClassIdentifier:
- themeList: {fileID: 0}
+ themeList: {fileID: 11400000, guid: a247e2ce790f0f746a3bc521e6ab7d58, type: 2}
userList: {fileID: 11400000, guid: 072bec636a40f7e4e93b0ac624a3bda2, type: 2}
minigame: {fileID: 11400000, guid: 8a087d241d652634eb4f6352267ea7dc, type: 2}
letterPrefab: {fileID: 4639383499500021565, guid: c3e66e8957864914cb022af914df6a28, type: 3}
diff --git a/Assets/SpellingBee/Scripts/GameController.cs b/Assets/SpellingBee/Scripts/GameController.cs
index c211e29..76eedca 100644
--- a/Assets/SpellingBee/Scripts/GameController.cs
+++ b/Assets/SpellingBee/Scripts/GameController.cs
@@ -162,6 +162,7 @@ public partial class GameController : MonoBehaviour
bonusTimeText.SetActive(false);
// Create entry in current user for keeping track of progress
+ userList.Load();
user = userList.GetCurrentUser();
Progress progress = user.GetMinigameProgress(minigame.index);
if (progress == null)
@@ -227,7 +228,7 @@ public partial class GameController : MonoBehaviour
int seconds = Mathf.FloorToInt(timerValue % 60.0f);
timerText.text = string.Format("{0:00}:{1:00}", minutes, seconds);
-
+
}
}
diff --git a/Assets/Tween/Demo.meta b/Assets/Tween/Demo.meta
deleted file mode 100644
index ab500fa..0000000
--- a/Assets/Tween/Demo.meta
+++ /dev/null
@@ -1,9 +0,0 @@
-fileFormatVersion: 2
-guid: 9f5880b033929b7478e7b3a9ed6c5ee7
-folderAsset: yes
-timeCreated: 1455295494
-licenseType: Store
-DefaultImporter:
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Tween/Demo/TweenDemo.cs b/Assets/Tween/Demo/TweenDemo.cs
deleted file mode 100644
index 01b8fae..0000000
--- a/Assets/Tween/Demo/TweenDemo.cs
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
-The MIT License (MIT)
-Copyright (c) 2016 Digital Ruby, LLC
-http://www.digitalruby.com
-Created by Jeff Johnson
-
-Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
-The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-using UnityEngine;
-using System.Collections;
-
-// for your own scripts make sure to add the following line:
-using DigitalRuby.Tween;
-using UnityEngine.SceneManagement;
-
-namespace DigitalRuby.Tween
-{
- public class TweenDemo : MonoBehaviour
- {
- public GameObject Circle;
- public Light Light;
-
- private SpriteRenderer spriteRenderer;
-
- private void TweenMove()
- {
- System.Action> updateCirclePos = (t) =>
- {
- Circle.gameObject.transform.position = t.CurrentValue;
- };
-
- System.Action> circleMoveCompleted = (t) =>
- {
- Debug.Log("Circle move completed");
- };
-
- Vector3 currentPos = Circle.transform.position;
- Vector3 startPos = Camera.main.ViewportToWorldPoint(Vector3.zero);
- Vector3 midPos = Camera.main.ViewportToWorldPoint(Vector3.one);
- Vector3 endPos = Camera.main.ViewportToWorldPoint(new Vector3(0.5f, 0.5f, 0.5f));
- currentPos.z = startPos.z = midPos.z = endPos.z = 0.0f;
-
- // completion defaults to null if not passed in
- Circle.gameObject.Tween("MoveCircle", currentPos, startPos, 1.75f, TweenScaleFunctions.CubicEaseIn, updateCirclePos)
- .ContinueWith(new Vector3Tween().Setup(startPos, midPos, 1.75f, TweenScaleFunctions.Linear, updateCirclePos))
- .ContinueWith(new Vector3Tween().Setup(midPos, endPos, 1.75f, TweenScaleFunctions.CubicEaseOut, updateCirclePos, circleMoveCompleted));
- }
-
- private void TweenColor()
- {
- System.Action> updateColor = (t) =>
- {
- spriteRenderer.color = t.CurrentValue;
- };
-
- Color endColor = UnityEngine.Random.ColorHSV(0.0f, 1.0f, 0.0f, 1.0f, 0.5f, 1.0f, 1.0f, 1.0f);
-
- // completion defaults to null if not passed in
- Circle.gameObject.Tween("ColorCircle", spriteRenderer.color, endColor, 1.0f, TweenScaleFunctions.QuadraticEaseOut, updateColor);
- }
-
- private void TweenRotate()
- {
- System.Action> circleRotate = (t) =>
- {
- // start rotation from identity to ensure no stuttering
- Circle.transform.rotation = Quaternion.identity;
- Circle.transform.Rotate(Camera.main.transform.forward, t.CurrentValue);
- };
-
- float startAngle = Circle.transform.rotation.eulerAngles.z;
- float endAngle = startAngle + 720.0f;
-
- // completion defaults to null if not passed in
- Circle.gameObject.Tween("RotateCircle", startAngle, endAngle, 2.0f, TweenScaleFunctions.CubicEaseInOut, circleRotate);
- }
-
- private void TweenReset()
- {
- SceneManager.LoadScene(0, LoadSceneMode.Single);
- }
-
- private void Start()
- {
- // for demo purposes, clear all tweens when new level loads, default is false
- TweenFactory.ClearTweensOnLevelLoad = true;
- spriteRenderer = Circle.GetComponent();
- }
-
- private void Update()
- {
- if (Input.GetKeyDown(KeyCode.Alpha1))
- {
- TweenMove();
- }
- if (Input.GetKeyDown(KeyCode.Alpha2))
- {
- TweenColor();
- }
- if (Input.GetKeyDown(KeyCode.Alpha3))
- {
- TweenRotate();
- }
- if (Input.GetKeyDown(KeyCode.R))
- {
- TweenReset();
- }
- }
- }
-}
\ No newline at end of file
diff --git a/Assets/Tween/Demo/TweenDemoCircle.png b/Assets/Tween/Demo/TweenDemoCircle.png
deleted file mode 100644
index 167e44f..0000000
Binary files a/Assets/Tween/Demo/TweenDemoCircle.png and /dev/null differ
diff --git a/Assets/Tween/Demo/TweenDemoCircle.png.meta b/Assets/Tween/Demo/TweenDemoCircle.png.meta
deleted file mode 100644
index 8088f13..0000000
--- a/Assets/Tween/Demo/TweenDemoCircle.png.meta
+++ /dev/null
@@ -1,135 +0,0 @@
-fileFormatVersion: 2
-guid: df831354d51eda74491b6ef6cfbbc4d0
-TextureImporter:
- internalIDToNameTable: []
- externalObjects: {}
- serializedVersion: 12
- mipmaps:
- mipMapMode: 0
- enableMipMap: 0
- sRGBTexture: 1
- linearTexture: 0
- fadeOut: 0
- borderMipMap: 0
- mipMapsPreserveCoverage: 0
- alphaTestReferenceValue: 0.5
- mipMapFadeDistanceStart: 1
- mipMapFadeDistanceEnd: 3
- bumpmap:
- convertToNormalMap: 0
- externalNormalMap: 0
- heightScale: 0.25
- normalMapFilter: 0
- isReadable: 0
- streamingMipmaps: 0
- streamingMipmapsPriority: 0
- vTOnly: 0
- ignoreMasterTextureLimit: 0
- grayScaleToAlpha: 0
- generateCubemap: 6
- cubemapConvolution: 0
- seamlessCubemap: 0
- textureFormat: -1
- maxTextureSize: 2048
- textureSettings:
- serializedVersion: 2
- filterMode: 1
- aniso: 16
- mipBias: 0
- wrapU: 1
- wrapV: 1
- wrapW: 1
- nPOTScale: 0
- lightmap: 0
- compressionQuality: 50
- spriteMode: 1
- spriteExtrude: 1
- spriteMeshType: 1
- alignment: 0
- spritePivot: {x: 0.5, y: 0.5}
- spritePixelsToUnits: 32
- spriteBorder: {x: 0, y: 0, z: 0, w: 0}
- spriteGenerateFallbackPhysicsShape: 1
- alphaUsage: 1
- alphaIsTransparency: 1
- spriteTessellationDetail: -1
- textureType: 8
- textureShape: 1
- singleChannelComponent: 0
- flipbookRows: 1
- flipbookColumns: 1
- maxTextureSizeSet: 0
- compressionQualitySet: 0
- textureFormatSet: 0
- ignorePngGamma: 0
- applyGammaDecoding: 1
- cookieLightType: 1
- platformSettings:
- - serializedVersion: 3
- buildTarget: DefaultTexturePlatform
- maxTextureSize: 2048
- resizeAlgorithm: 0
- textureFormat: -1
- textureCompression: 1
- compressionQuality: 50
- crunchedCompression: 0
- allowsAlphaSplitting: 0
- overridden: 0
- androidETC2FallbackOverride: 0
- forceMaximumCompressionQuality_BC6H_BC7: 0
- - serializedVersion: 3
- buildTarget: Standalone
- maxTextureSize: 2048
- resizeAlgorithm: 0
- textureFormat: -1
- textureCompression: 1
- compressionQuality: 50
- crunchedCompression: 0
- allowsAlphaSplitting: 0
- overridden: 0
- androidETC2FallbackOverride: 0
- forceMaximumCompressionQuality_BC6H_BC7: 0
- - serializedVersion: 3
- buildTarget: Server
- maxTextureSize: 2048
- resizeAlgorithm: 0
- textureFormat: -1
- textureCompression: 1
- compressionQuality: 50
- crunchedCompression: 0
- allowsAlphaSplitting: 0
- overridden: 0
- androidETC2FallbackOverride: 0
- forceMaximumCompressionQuality_BC6H_BC7: 0
- - serializedVersion: 3
- buildTarget: WebGL
- maxTextureSize: 2048
- resizeAlgorithm: 0
- textureFormat: -1
- textureCompression: 1
- compressionQuality: 50
- crunchedCompression: 0
- allowsAlphaSplitting: 0
- overridden: 0
- androidETC2FallbackOverride: 0
- forceMaximumCompressionQuality_BC6H_BC7: 0
- spriteSheet:
- serializedVersion: 2
- sprites: []
- outline: []
- physicsShape: []
- bones: []
- spriteID: 5e97eb03825dee720800000000000000
- internalID: 0
- vertices: []
- indices:
- edges: []
- weights: []
- secondaryTextures: []
- nameFileIdTable: {}
- spritePackingTag:
- pSDRemoveMatte: 0
- pSDShowRemoveMatteOption: 0
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Tween/Demo/TweenDemoMaterial.mat b/Assets/Tween/Demo/TweenDemoMaterial.mat
deleted file mode 100644
index 69264b5..0000000
--- a/Assets/Tween/Demo/TweenDemoMaterial.mat
+++ /dev/null
@@ -1,85 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!21 &2100000
-Material:
- serializedVersion: 8
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_Name: TweenDemoMaterial
- m_Shader: {fileID: 10800, guid: 0000000000000000f000000000000000, type: 0}
- m_ValidKeywords:
- - ETC1_EXTERNAL_ALPHA
- m_InvalidKeywords: []
- m_LightmapFlags: 5
- m_EnableInstancingVariants: 0
- m_DoubleSidedGI: 0
- m_CustomRenderQueue: 3000
- stringTagMap: {}
- disabledShaderPasses: []
- m_SavedProperties:
- serializedVersion: 3
- m_TexEnvs:
- - _AlphaTex:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _BumpMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _DetailAlbedoMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _DetailMask:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _DetailNormalMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _EmissionMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _MainTex:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _MetallicGlossMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _OcclusionMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- - _ParallaxMap:
- m_Texture: {fileID: 0}
- m_Scale: {x: 1, y: 1}
- m_Offset: {x: 0, y: 0}
- m_Ints: []
- m_Floats:
- - PixelSnap: 0
- - _BumpScale: 1
- - _Cutoff: 0.5
- - _DetailNormalMapScale: 1
- - _DstBlend: 0
- - _EnableExternalAlpha: 0
- - _Glossiness: 0.5
- - _Metallic: 0
- - _Mode: 0
- - _OcclusionStrength: 1
- - _Parallax: 0.02
- - _SrcBlend: 1
- - _UVSec: 0
- - _ZWrite: 1
- m_Colors:
- - _Color: {r: 1, g: 1, b: 1, a: 1}
- - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
- - _Flip: {r: 1, g: 1, b: 1, a: 1}
- - _RendererColor: {r: 1, g: 1, b: 1, a: 1}
- m_BuildTextureStacks: []
diff --git a/Assets/Tween/Demo/TweenDemoMaterial.mat.meta b/Assets/Tween/Demo/TweenDemoMaterial.mat.meta
deleted file mode 100644
index 78dd2c8..0000000
--- a/Assets/Tween/Demo/TweenDemoMaterial.mat.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 2d994b80f30361c449f5504b6ddb859a
-timeCreated: 1455295548
-licenseType: Store
-NativeFormatImporter:
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Tween/Demo/TweenDemoScene.unity b/Assets/Tween/Demo/TweenDemoScene.unity
deleted file mode 100644
index d550824..0000000
--- a/Assets/Tween/Demo/TweenDemoScene.unity
+++ /dev/null
@@ -1,669 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!29 &1
-OcclusionCullingSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 2
- m_OcclusionBakeSettings:
- smallestOccluder: 5
- smallestHole: 0.25
- backfaceThreshold: 100
- m_SceneGUID: 00000000000000000000000000000000
- m_OcclusionCullingData: {fileID: 0}
---- !u!104 &2
-RenderSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 9
- m_Fog: 0
- m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}
- m_FogMode: 3
- m_FogDensity: 0.01
- m_LinearFogStart: 0
- m_LinearFogEnd: 300
- m_AmbientSkyColor: {r: 0, g: 0, b: 0, a: 0}
- m_AmbientEquatorColor: {r: 0, g: 0, b: 0, a: 0}
- m_AmbientGroundColor: {r: 0, g: 0, b: 0, a: 0}
- m_AmbientIntensity: 0
- m_AmbientMode: 3
- m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}
- m_SkyboxMaterial: {fileID: 0}
- m_HaloStrength: 0.5
- m_FlareStrength: 1
- m_FlareFadeSpeed: 3
- m_HaloTexture: {fileID: 0}
- m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}
- m_DefaultReflectionMode: 0
- m_DefaultReflectionResolution: 128
- m_ReflectionBounces: 1
- m_ReflectionIntensity: 1
- m_CustomReflection: {fileID: 0}
- m_Sun: {fileID: 0}
- m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1}
- m_UseRadianceAmbientProbe: 0
---- !u!157 &3
-LightmapSettings:
- m_ObjectHideFlags: 0
- serializedVersion: 12
- m_GIWorkflowMode: 1
- m_GISettings:
- serializedVersion: 2
- m_BounceScale: 1
- m_IndirectOutputScale: 1
- m_AlbedoBoost: 1
- m_EnvironmentLightingMode: 0
- m_EnableBakedLightmaps: 0
- m_EnableRealtimeLightmaps: 0
- m_LightmapEditorSettings:
- serializedVersion: 12
- m_Resolution: 2
- m_BakeResolution: 40
- m_AtlasSize: 1024
- m_AO: 0
- m_AOMaxDistance: 1
- m_CompAOExponent: 0
- m_CompAOExponentDirect: 0
- m_ExtractAmbientOcclusion: 0
- m_Padding: 2
- m_LightmapParameters: {fileID: 0}
- m_LightmapsBakeMode: 1
- m_TextureCompression: 1
- m_FinalGather: 0
- m_FinalGatherFiltering: 1
- m_FinalGatherRayCount: 1024
- m_ReflectionCompression: 2
- m_MixedBakeMode: 1
- m_BakeBackend: 0
- m_PVRSampling: 1
- m_PVRDirectSampleCount: 32
- m_PVRSampleCount: 512
- m_PVRBounces: 2
- m_PVREnvironmentSampleCount: 512
- m_PVREnvironmentReferencePointCount: 2048
- m_PVRFilteringMode: 0
- m_PVRDenoiserTypeDirect: 0
- m_PVRDenoiserTypeIndirect: 0
- m_PVRDenoiserTypeAO: 0
- m_PVRFilterTypeDirect: 0
- m_PVRFilterTypeIndirect: 0
- m_PVRFilterTypeAO: 0
- m_PVREnvironmentMIS: 0
- m_PVRCulling: 1
- m_PVRFilteringGaussRadiusDirect: 1
- m_PVRFilteringGaussRadiusIndirect: 5
- m_PVRFilteringGaussRadiusAO: 2
- m_PVRFilteringAtrousPositionSigmaDirect: 0.5
- m_PVRFilteringAtrousPositionSigmaIndirect: 2
- m_PVRFilteringAtrousPositionSigmaAO: 1
- m_ExportTrainingData: 0
- m_TrainingDataDestination: TrainingData
- m_LightProbeSampleCountMultiplier: 4
- m_LightingDataAsset: {fileID: 0}
- m_LightingSettings: {fileID: 4890085278179872738, guid: 493623c166a735445b4283396018d38b, type: 2}
---- !u!196 &4
-NavMeshSettings:
- serializedVersion: 2
- m_ObjectHideFlags: 0
- m_BuildSettings:
- serializedVersion: 2
- agentTypeID: 0
- agentRadius: 0.5
- agentHeight: 2
- agentSlope: 45
- agentClimb: 0.4
- ledgeDropHeight: 0
- maxJumpAcrossDistance: 0
- minRegionArea: 2
- manualCellSize: 0
- cellSize: 0.16666667
- manualTileSize: 0
- tileSize: 256
- accuratePlacement: 0
- maxJobWorkers: 0
- preserveTilesOutsideBounds: 0
- debug:
- m_Flags: 0
- m_NavMeshData: {fileID: 0}
---- !u!1 &279954674
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 279954676}
- - component: {fileID: 279954675}
- m_Layer: 0
- m_Name: Circle
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!212 &279954675
-SpriteRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 279954674}
- m_Enabled: 1
- m_CastShadows: 0
- m_ReceiveShadows: 0
- m_DynamicOccludee: 1
- m_StaticShadowCaster: 0
- m_MotionVectors: 1
- m_LightProbeUsage: 0
- m_ReflectionProbeUsage: 0
- m_RayTracingMode: 0
- m_RayTraceProcedural: 0
- m_RenderingLayerMask: 1
- m_RendererPriority: 0
- m_Materials:
- - {fileID: 2100000, guid: 2d994b80f30361c449f5504b6ddb859a, type: 2}
- m_StaticBatchInfo:
- firstSubMesh: 0
- subMeshCount: 0
- m_StaticBatchRoot: {fileID: 0}
- m_ProbeAnchor: {fileID: 0}
- m_LightProbeVolumeOverride: {fileID: 0}
- m_ScaleInLightmap: 1
- m_ReceiveGI: 1
- m_PreserveUVs: 0
- m_IgnoreNormalsForChartDetection: 0
- m_ImportantGI: 0
- m_StitchLightmapSeams: 1
- m_SelectedEditorRenderState: 0
- m_MinimumChartSize: 4
- m_AutoUVMaxDistance: 0.5
- m_AutoUVMaxAngle: 89
- m_LightmapParameters: {fileID: 0}
- m_SortingLayerID: 0
- m_SortingLayer: 0
- m_SortingOrder: 0
- m_Sprite: {fileID: 21300000, guid: df831354d51eda74491b6ef6cfbbc4d0, type: 3}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_FlipX: 0
- m_FlipY: 0
- m_DrawMode: 0
- m_Size: {x: 1, y: 1}
- m_AdaptiveModeThreshold: 0.5
- m_SpriteTileMode: 0
- m_WasSpriteAssigned: 1
- m_MaskInteraction: 0
- m_SpriteSortPoint: 0
---- !u!4 &279954676
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 279954674}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 1
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &309942542
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 309942543}
- - component: {fileID: 309942545}
- - component: {fileID: 309942544}
- m_Layer: 5
- m_Name: Commands
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!224 &309942543
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 309942542}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 2081690836}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 1}
- m_AnchoredPosition: {x: 266, y: -8}
- m_SizeDelta: {x: 500, y: -16}
- m_Pivot: {x: 0.5, y: 0.5}
---- !u!114 &309942544
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 309942542}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_Material: {fileID: 0}
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_RaycastTarget: 1
- m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0}
- m_Maskable: 1
- m_OnCullStateChanged:
- m_PersistentCalls:
- m_Calls: []
- m_FontData:
- m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}
- m_FontSize: 20
- m_FontStyle: 0
- m_BestFit: 0
- m_MinSize: 0
- m_MaxSize: 40
- m_Alignment: 0
- m_AlignByGeometry: 0
- m_RichText: 1
- m_HorizontalOverflow: 0
- m_VerticalOverflow: 0
- m_LineSpacing: 1
- m_Text: 'Commands:
-
- 1] Tween Move
-
- 2] Tween Color
-
- 3] Tween Rotate
-
- R]
- Reset'
---- !u!222 &309942545
-CanvasRenderer:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 309942542}
- m_CullTransparentMesh: 1
---- !u!1 &464777571
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 464777577}
- - component: {fileID: 464777576}
- - component: {fileID: 464777574}
- - component: {fileID: 464777573}
- - component: {fileID: 464777572}
- m_Layer: 0
- m_Name: Main Camera
- m_TagString: MainCamera
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &464777572
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 464777571}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 85997561a67b3e740be145c96c4a0b37, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- Circle: {fileID: 279954674}
- Light: {fileID: 1462085731}
---- !u!81 &464777573
-AudioListener:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 464777571}
- m_Enabled: 1
---- !u!124 &464777574
-Behaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 464777571}
- m_Enabled: 1
---- !u!20 &464777576
-Camera:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 464777571}
- m_Enabled: 1
- serializedVersion: 2
- m_ClearFlags: 2
- m_BackGroundColor: {r: 0, g: 0, b: 0, a: 1}
- m_projectionMatrixMode: 1
- m_GateFitMode: 2
- m_FOVAxisMode: 0
- m_SensorSize: {x: 36, y: 24}
- m_LensShift: {x: 0, y: 0}
- m_FocalLength: 50
- m_NormalizedViewPortRect:
- serializedVersion: 2
- x: 0
- y: 0
- width: 1
- height: 1
- near clip plane: 0.3
- far clip plane: 1000
- field of view: 60
- orthographic: 1
- orthographic size: 10
- m_Depth: -1
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingPath: -1
- m_TargetTexture: {fileID: 0}
- m_TargetDisplay: 0
- m_TargetEye: 3
- m_HDR: 0
- m_AllowMSAA: 1
- m_AllowDynamicResolution: 0
- m_ForceIntoRT: 0
- m_OcclusionCulling: 1
- m_StereoConvergence: 10
- m_StereoSeparation: 0.022
---- !u!4 &464777577
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 464777571}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: -10}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 0
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1462085730
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1462085732}
- - component: {fileID: 1462085731}
- m_Layer: 0
- m_Name: Point light
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!108 &1462085731
-Light:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1462085730}
- m_Enabled: 1
- serializedVersion: 10
- m_Type: 2
- m_Shape: 0
- m_Color: {r: 1, g: 1, b: 1, a: 1}
- m_Intensity: 2
- m_Range: 500
- m_SpotAngle: 30
- m_InnerSpotAngle: 21.80208
- m_CookieSize: 10
- m_Shadows:
- m_Type: 0
- m_Resolution: -1
- m_CustomResolution: -1
- m_Strength: 1
- m_Bias: 0.05
- m_NormalBias: 0.4
- m_NearPlane: 0.2
- m_CullingMatrixOverride:
- e00: 1
- e01: 0
- e02: 0
- e03: 0
- e10: 0
- e11: 1
- e12: 0
- e13: 0
- e20: 0
- e21: 0
- e22: 1
- e23: 0
- e30: 0
- e31: 0
- e32: 0
- e33: 1
- m_UseCullingMatrixOverride: 0
- m_Cookie: {fileID: 0}
- m_DrawHalo: 0
- m_Flare: {fileID: 0}
- m_RenderMode: 0
- m_CullingMask:
- serializedVersion: 2
- m_Bits: 4294967295
- m_RenderingLayerMask: 1
- m_Lightmapping: 4
- m_LightShadowCasterMode: 0
- m_AreaSize: {x: 1, y: 1}
- m_BounceIntensity: 0
- m_ColorTemperature: 6570
- m_UseColorTemperature: 0
- m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0}
- m_UseBoundingSphereOverride: 0
- m_UseViewFrustumForShadowCasterCull: 1
- m_ShadowRadius: 0
- m_ShadowAngle: 0
---- !u!4 &1462085732
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1462085730}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: -100}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 2
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &1986219434
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 1986219437}
- - component: {fileID: 1986219436}
- - component: {fileID: 1986219435}
- m_Layer: 0
- m_Name: EventSystem
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &1986219435
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1986219434}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_SendPointerHoverToParent: 1
- m_HorizontalAxis: Horizontal
- m_VerticalAxis: Vertical
- m_SubmitButton: Submit
- m_CancelButton: Cancel
- m_InputActionsPerSecond: 10
- m_RepeatDelay: 0.5
- m_ForceModuleActive: 0
---- !u!114 &1986219436
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1986219434}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_FirstSelected: {fileID: 0}
- m_sendNavigationEvents: 1
- m_DragThreshold: 5
---- !u!4 &1986219437
-Transform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 1986219434}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 1, y: 1, z: 1}
- m_ConstrainProportionsScale: 0
- m_Children: []
- m_Father: {fileID: 0}
- m_RootOrder: 4
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
---- !u!1 &2081690832
-GameObject:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- serializedVersion: 6
- m_Component:
- - component: {fileID: 2081690836}
- - component: {fileID: 2081690835}
- - component: {fileID: 2081690834}
- - component: {fileID: 2081690833}
- m_Layer: 5
- m_Name: UICanvas
- m_TagString: Untagged
- m_Icon: {fileID: 0}
- m_NavMeshLayer: 0
- m_StaticEditorFlags: 0
- m_IsActive: 1
---- !u!114 &2081690833
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2081690832}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_IgnoreReversedGraphics: 1
- m_BlockingObjects: 0
- m_BlockingMask:
- serializedVersion: 2
- m_Bits: 4294967295
---- !u!114 &2081690834
-MonoBehaviour:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2081690832}
- m_Enabled: 1
- m_EditorHideFlags: 0
- m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3}
- m_Name:
- m_EditorClassIdentifier:
- m_UiScaleMode: 1
- m_ReferencePixelsPerUnit: 100
- m_ScaleFactor: 1
- m_ReferenceResolution: {x: 800, y: 600}
- m_ScreenMatchMode: 0
- m_MatchWidthOrHeight: 0
- m_PhysicalUnit: 3
- m_FallbackScreenDPI: 96
- m_DefaultSpriteDPI: 96
- m_DynamicPixelsPerUnit: 1
- m_PresetInfoIsWorld: 0
---- !u!223 &2081690835
-Canvas:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2081690832}
- m_Enabled: 1
- serializedVersion: 3
- m_RenderMode: 0
- m_Camera: {fileID: 0}
- m_PlaneDistance: 100
- m_PixelPerfect: 0
- m_ReceivesEvents: 1
- m_OverrideSorting: 0
- m_OverridePixelPerfect: 0
- m_SortingBucketNormalizedSize: 0
- m_AdditionalShaderChannelsFlag: 25
- m_SortingLayerID: 0
- m_SortingOrder: 0
- m_TargetDisplay: 0
---- !u!224 &2081690836
-RectTransform:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_GameObject: {fileID: 2081690832}
- m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
- m_LocalPosition: {x: 0, y: 0, z: 0}
- m_LocalScale: {x: 0, y: 0, z: 0}
- m_ConstrainProportionsScale: 0
- m_Children:
- - {fileID: 309942543}
- m_Father: {fileID: 0}
- m_RootOrder: 3
- m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
- m_AnchorMin: {x: 0, y: 0}
- m_AnchorMax: {x: 0, y: 0}
- m_AnchoredPosition: {x: 0, y: 0}
- m_SizeDelta: {x: 0, y: 0}
- m_Pivot: {x: 0, y: 0}
diff --git a/Assets/Tween/Demo/TweenDemoScene.unity.meta b/Assets/Tween/Demo/TweenDemoScene.unity.meta
deleted file mode 100644
index 7d3d470..0000000
--- a/Assets/Tween/Demo/TweenDemoScene.unity.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: ad948b3082b546f4e8f3565bdfe0abf6
-timeCreated: 1455295598
-licenseType: Store
-DefaultImporter:
- userData:
- assetBundleName:
- assetBundleVariant:
diff --git a/Assets/Tween/Demo/TweenDemoSceneSettings.lighting b/Assets/Tween/Demo/TweenDemoSceneSettings.lighting
deleted file mode 100644
index 75baa64..0000000
--- a/Assets/Tween/Demo/TweenDemoSceneSettings.lighting
+++ /dev/null
@@ -1,64 +0,0 @@
-%YAML 1.1
-%TAG !u! tag:unity3d.com,2011:
---- !u!850595691 &4890085278179872738
-LightingSettings:
- m_ObjectHideFlags: 0
- m_CorrespondingSourceObject: {fileID: 0}
- m_PrefabInstance: {fileID: 0}
- m_PrefabAsset: {fileID: 0}
- m_Name: TweenDemoSceneSettings
- serializedVersion: 4
- m_GIWorkflowMode: 1
- m_EnableBakedLightmaps: 0
- m_EnableRealtimeLightmaps: 0
- m_RealtimeEnvironmentLighting: 1
- m_BounceScale: 1
- m_AlbedoBoost: 1
- m_IndirectOutputScale: 1
- m_UsingShadowmask: 0
- m_BakeBackend: 0
- m_LightmapMaxSize: 1024
- m_BakeResolution: 40
- m_Padding: 2
- m_LightmapCompression: 3
- m_AO: 0
- m_AOMaxDistance: 1
- m_CompAOExponent: 0
- m_CompAOExponentDirect: 0
- m_ExtractAO: 0
- m_MixedBakeMode: 1
- m_LightmapsBakeMode: 1
- m_FilterMode: 1
- m_LightmapParameters: {fileID: 15204, guid: 0000000000000000f000000000000000, type: 0}
- m_ExportTrainingData: 0
- m_TrainingDataDestination: TrainingData
- m_RealtimeResolution: 2
- m_ForceWhiteAlbedo: 0
- m_ForceUpdates: 0
- m_FinalGather: 0
- m_FinalGatherRayCount: 1024
- m_FinalGatherFiltering: 1
- m_PVRCulling: 1
- m_PVRSampling: 1
- m_PVRDirectSampleCount: 32
- m_PVRSampleCount: 512
- m_PVREnvironmentSampleCount: 512
- m_PVREnvironmentReferencePointCount: 2048
- m_LightProbeSampleCountMultiplier: 4
- m_PVRBounces: 2
- m_PVRMinBounces: 2
- m_PVREnvironmentMIS: 0
- m_PVRFilteringMode: 0
- m_PVRDenoiserTypeDirect: 0
- m_PVRDenoiserTypeIndirect: 0
- m_PVRDenoiserTypeAO: 0
- m_PVRFilterTypeDirect: 0
- m_PVRFilterTypeIndirect: 0
- m_PVRFilterTypeAO: 0
- m_PVRFilteringGaussRadiusDirect: 1
- m_PVRFilteringGaussRadiusIndirect: 5
- m_PVRFilteringGaussRadiusAO: 2
- m_PVRFilteringAtrousPositionSigmaDirect: 0.5
- m_PVRFilteringAtrousPositionSigmaIndirect: 2
- m_PVRFilteringAtrousPositionSigmaAO: 1
- m_PVRTiledBaking: 0
diff --git a/Assets/Tween/Demo/TweenDemoSceneSettings.lighting.meta b/Assets/Tween/Demo/TweenDemoSceneSettings.lighting.meta
deleted file mode 100644
index 2cab003..0000000
--- a/Assets/Tween/Demo/TweenDemoSceneSettings.lighting.meta
+++ /dev/null
@@ -1,8 +0,0 @@
-fileFormatVersion: 2
-guid: 493623c166a735445b4283396018d38b
-NativeFormatImporter:
- externalObjects: {}
- mainObjectFileID: 4890085278179872738
- userData:
- assetBundleName:
- assetBundleVariant: