diff --git a/Assembly-CSharp.csproj b/Assembly-CSharp.csproj
index 9d3fe58..899389e 100644
--- a/Assembly-CSharp.csproj
+++ b/Assembly-CSharp.csproj
@@ -248,6 +248,12 @@
C:\Program Files\Unity\Hub\Editor\2019.4.28f1\Editor\Data\Managed\UnityEditor.dll
+
+ Assets\Prototype\Core\Core.dll
+
+
+ Assets\Prototype\Core\CoreEditor.dll
+
Assets\Prototype\DOTween\DOTween.dll
diff --git a/Assets/Prototype/Core/Core.dll b/Assets/Prototype/Core/Core.dll
index 2310608..0f13ba8 100644
Binary files a/Assets/Prototype/Core/Core.dll and b/Assets/Prototype/Core/Core.dll differ
diff --git a/Assets/Prototype/Core/Core.dll.meta b/Assets/Prototype/Core/Core.dll.meta
index 7389a6d..ec17fb4 100644
--- a/Assets/Prototype/Core/Core.dll.meta
+++ b/Assets/Prototype/Core/Core.dll.meta
@@ -8,8 +8,8 @@ PluginImporter:
defineConstraints: []
isPreloaded: 0
isOverridable: 0
- isExplicitlyReferenced: 1
- validateReferences: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
platformData:
- first:
: Any
@@ -47,7 +47,7 @@ PluginImporter:
second:
enabled: 1
settings:
- CPU: x86_64
+ CPU: AnyCPU
- first:
Standalone: OSXUniversal
second:
diff --git a/Assets/Prototype/Core/CoreEditor.dll b/Assets/Prototype/Core/CoreEditor.dll
index f09db41..53533be 100644
Binary files a/Assets/Prototype/Core/CoreEditor.dll and b/Assets/Prototype/Core/CoreEditor.dll differ
diff --git a/Assets/Prototype/Core/CoreEditor.dll.meta b/Assets/Prototype/Core/CoreEditor.dll.meta
index 351fddf..d2a377e 100644
--- a/Assets/Prototype/Core/CoreEditor.dll.meta
+++ b/Assets/Prototype/Core/CoreEditor.dll.meta
@@ -8,8 +8,8 @@ PluginImporter:
defineConstraints: []
isPreloaded: 0
isOverridable: 0
- isExplicitlyReferenced: 1
- validateReferences: 0
+ isExplicitlyReferenced: 0
+ validateReferences: 1
platformData:
- first:
: Any
diff --git a/Assets/Prototype/Custumization/Scenes/Test.unity b/Assets/Prototype/Custumization/Scenes/Test.unity
index eb986bd..80c1247 100644
--- a/Assets/Prototype/Custumization/Scenes/Test.unity
+++ b/Assets/Prototype/Custumization/Scenes/Test.unity
@@ -241,7 +241,7 @@ MonoBehaviour:
m_ScaleFactor: 1
m_ReferenceResolution: {x: 1920, y: 1080}
m_ScreenMatchMode: 0
- m_MatchWidthOrHeight: 0
+ m_MatchWidthOrHeight: 1
m_PhysicalUnit: 3
m_FallbackScreenDPI: 96
m_DefaultSpriteDPI: 96
@@ -1145,6 +1145,7 @@ GameObject:
- component: {fileID: 1777567346}
- component: {fileID: 1777567345}
- component: {fileID: 1777567348}
+ - component: {fileID: 1777567349}
m_Layer: 0
m_Name: Main Camera
m_TagString: MainCamera
@@ -1187,7 +1188,7 @@ Camera:
far clip plane: 20
field of view: 37.826088
orthographic: 1
- orthographic size: 5.628655
+ orthographic size: 5.3243575
m_Depth: -1
m_CullingMask:
serializedVersion: 2
@@ -1232,6 +1233,18 @@ MonoBehaviour:
_standartCameraSize: 10
_standartCameraAngle: 60
_camera: {fileID: 1777567346}
+--- !u!114 &1777567349
+MonoBehaviour:
+ m_ObjectHideFlags: 0
+ m_CorrespondingSourceObject: {fileID: 0}
+ m_PrefabInstance: {fileID: 0}
+ m_PrefabAsset: {fileID: 0}
+ m_GameObject: {fileID: 1777567344}
+ m_Enabled: 1
+ m_EditorHideFlags: 0
+ m_Script: {fileID: 11500000, guid: e4117c952e400da459da11b2a8c138a1, type: 3}
+ m_Name:
+ m_EditorClassIdentifier:
--- !u!1 &2131141857
GameObject:
m_ObjectHideFlags: 0
diff --git a/Assets_DLL/Core/CoreInitializer.cs b/Assets_DLL/Core/CoreInitializer.cs
index 19c8ded..62173cd 100644
--- a/Assets_DLL/Core/CoreInitializer.cs
+++ b/Assets_DLL/Core/CoreInitializer.cs
@@ -4,6 +4,7 @@ using Core.Ads;
using Core.Localization;
using Core.IAP;
using Core.Audio;
+using Core.Tools.Saves;
namespace Core
{
@@ -25,6 +26,7 @@ namespace Core
private static void Init()
{
+ SaveManager.Load();
PurchaseManager.Init();
AdsManager.Init();
LocalizationManager.Init();
diff --git a/Assets_DLL/Core/Tools/Saves/SaveData.cs b/Assets_DLL/Core/Tools/Saves/SaveData.cs
new file mode 100644
index 0000000..a7750aa
--- /dev/null
+++ b/Assets_DLL/Core/Tools/Saves/SaveData.cs
@@ -0,0 +1,130 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using UnityEngine;
+
+namespace Core.Tools.Saves
+{
+ internal sealed class SaveData
+ {
+ [Serializable]
+ private class IntData
+ {
+ public string key = "";
+ public int value = 0;
+ }
+
+ [Serializable]
+ private class FloatData
+ {
+ public string key = "";
+ public float value = 0f;
+ }
+
+ [Serializable]
+ private class StringData
+ {
+ public string key = "";
+ public string value = "";
+ }
+
+ [Serializable]
+ private class BoolData
+ {
+ public string key = "";
+ public bool value = false;
+ }
+
+ [SerializeField] private List _intData = new List();
+
+ [SerializeField] private List _floatData = new List();
+
+ [SerializeField] private List _stringData = new List();
+
+ [SerializeField] private List _boolData = new List();
+
+ public bool HasIntKey(string key) =>
+ _intData.Where(d => d.key == key).Count() > 0;
+
+ public void SetInt(string key, int value)
+ {
+ if (HasIntKey(key))
+ _intData.Where(d => d.key == key).First().value = value;
+ else
+ _intData.Add(new IntData { key = key, value = value });
+
+ SaveManager.Save();
+ }
+
+ public int GetInt(string key, int defaultValue = 0)
+ {
+ if (HasIntKey(key))
+ return _intData.Where(d => d.key == key).First().value;
+ else
+ return defaultValue;
+ }
+
+ public bool HasFloatKey(string key) =>
+ _floatData.Where(d => d.key == key).Count() > 0;
+
+ public void SetFloat(string key, float value)
+ {
+ if (HasFloatKey(key))
+ _floatData.Where(d => d.key == key).First().value = value;
+ else
+ _floatData.Add(new FloatData { key = key, value = value });
+
+ SaveManager.Save();
+ }
+
+ public float GetFloat(string key, float defaultValue = 0f)
+ {
+ if (HasFloatKey(key))
+ return _floatData.Where(d => d.key == key).First().value;
+ else
+ return defaultValue;
+ }
+
+ public bool HasStringKey(string key) =>
+ _stringData.Where(d => d.key == key).Count() > 0;
+
+ public void SetString(string key, string value)
+ {
+ if (HasStringKey(key))
+ _stringData.Where(d => d.key == key).First().value = value;
+ else
+ _stringData.Add(new StringData { key = key, value = value });
+
+ SaveManager.Save();
+ }
+
+ public string GetString(string key, string defaultValue = "")
+ {
+ if (HasStringKey(key))
+ return _stringData.Where(d => d.key == key).First().value;
+ else
+ return defaultValue;
+ }
+
+ public bool HasBoolKey(string key) =>
+ _boolData.Where(d => d.key == key).Count() > 0;
+
+ public void SetBool(string key, bool value)
+ {
+ if (HasBoolKey(key))
+ _boolData.Where(d => d.key == key).First().value = value;
+ else
+ _boolData.Add(new BoolData { key = key, value = value });
+
+ SaveManager.Save();
+ }
+
+ public bool GetBool(string key, bool defaultValue = false)
+ {
+ if (HasBoolKey(key))
+ return _boolData.Where(d => d.key == key).First().value;
+ else
+ return defaultValue;
+ }
+ }
+}
diff --git a/Assets_DLL/Core/Tools/Saves/SaveManager.cs b/Assets_DLL/Core/Tools/Saves/SaveManager.cs
new file mode 100644
index 0000000..70a1f56
--- /dev/null
+++ b/Assets_DLL/Core/Tools/Saves/SaveManager.cs
@@ -0,0 +1,103 @@
+using Core.Tools.Saves.Utils;
+using System.IO;
+using UnityEngine;
+
+namespace Core.Tools.Saves
+{
+ public static class SaveManager
+ {
+ private static SaveData _save = null;
+
+ private const string SAVE_KEY = "{@rew_O39U*#H{EFSF";
+
+ public static string GetPathToSave()
+ {
+ if (Application.isEditor || Application.isMobilePlatform)
+ return Application.persistentDataPath + "/save.dat";
+ else
+ return Application.dataPath + "/save.dat";
+ }
+
+ public static void Load()
+ {
+ string path = GetPathToSave();
+
+ if (!File.Exists(path))
+ {
+ _save = new SaveData();
+ Save();
+ }
+ else
+ {
+ StreamReader stream = new StreamReader(path);
+
+ string json = Encrypter.Decrypt(stream.ReadToEnd(), SAVE_KEY);
+
+ stream.Close();
+
+ _save = JsonUtility.FromJson(json);
+ }
+ }
+
+ public static void Save()
+ {
+ string path = GetPathToSave();
+
+ string json = JsonUtility.ToJson(_save);
+
+ StreamWriter stream;
+
+ if (!File.Exists(path))
+ stream = File.CreateText(path);
+ else
+ stream = new StreamWriter(path);
+
+ stream.Write(Encrypter.Encrypt(json, SAVE_KEY));
+ stream.Close();
+ }
+
+ public static void Clear()
+ {
+ string path = GetPathToSave();
+
+ if (File.Exists(path))
+ File.Delete(path);
+ }
+
+ public static bool HasIntKey(string key) =>
+ _save.HasIntKey(key);
+
+ public static void SetInt(string key, int value) =>
+ _save.SetInt(key, value);
+
+ public static int GetInt(string key, int defaultValue = 0) =>
+ _save.GetInt(key, defaultValue);
+
+ public static bool HasFloatKey(string key) =>
+ _save.HasFloatKey(key);
+
+ public static void SetFloat(string key, float value) =>
+ _save.SetFloat(key, value);
+
+ public static float GetFloat(string key, float defaultValue = 0f) =>
+ _save.GetFloat(key, defaultValue);
+
+ public static bool HasStringKey(string key) =>
+ _save.HasStringKey(key);
+
+ public static void SetString(string key, string value) =>
+ _save.SetString(key, value);
+
+ public static string GetString(string key, string defaultValue = "") =>
+ _save.GetString(key, defaultValue);
+
+ public static bool HasBoolKey(string key) =>
+ _save.HasBoolKey(key);
+
+ public static void SetBool(string key, bool value) =>
+ _save.SetBool(key, value);
+
+ public static bool GetBool(string key, bool defaultValue = false) =>
+ _save.GetBool(key, defaultValue);
+ }
+}
diff --git a/Assets_DLL/Core/Tools/Saves/Utils/Encrypter.cs b/Assets_DLL/Core/Tools/Saves/Utils/Encrypter.cs
new file mode 100644
index 0000000..e6d15b7
--- /dev/null
+++ b/Assets_DLL/Core/Tools/Saves/Utils/Encrypter.cs
@@ -0,0 +1,53 @@
+using System;
+using System.IO;
+using System.Security.Cryptography;
+using System.Text;
+
+namespace Core.Tools.Saves.Utils
+{
+ public static class Encrypter
+ {
+ public static string Encrypt(string text, string key)
+ {
+ byte[] clearBytes = Encoding.Unicode.GetBytes(text);
+ using (Aes encryptor = Aes.Create())
+ {
+ Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
+ encryptor.Key = pdb.GetBytes(32);
+ encryptor.IV = pdb.GetBytes(16);
+ using (MemoryStream ms = new MemoryStream())
+ {
+ using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateEncryptor(), CryptoStreamMode.Write))
+ {
+ cs.Write(clearBytes, 0, clearBytes.Length);
+ cs.Close();
+ }
+ text = Convert.ToBase64String(ms.ToArray());
+ }
+ }
+ return text;
+ }
+
+ public static string Decrypt(string text, string key)
+ {
+ text = text.Replace(" ", "+");
+ byte[] cipherBytes = Convert.FromBase64String(text);
+ using (Aes encryptor = Aes.Create())
+ {
+ Rfc2898DeriveBytes pdb = new Rfc2898DeriveBytes(key, new byte[] { 0x49, 0x76, 0x61, 0x6e, 0x20, 0x4d, 0x65, 0x64, 0x76, 0x65, 0x64, 0x65, 0x76 });
+ encryptor.Key = pdb.GetBytes(32);
+ encryptor.IV = pdb.GetBytes(16);
+ using (MemoryStream ms = new MemoryStream())
+ {
+ using (CryptoStream cs = new CryptoStream(ms, encryptor.CreateDecryptor(), CryptoStreamMode.Write))
+ {
+ cs.Write(cipherBytes, 0, cipherBytes.Length);
+ cs.Close();
+ }
+ text = Encoding.Unicode.GetString(ms.ToArray());
+ }
+ }
+ return text;
+ }
+ }
+}
diff --git a/Assets_DLL/Core/Tools/Sprites/DynamicSpriteSorting.cs b/Assets_DLL/Core/Tools/Sprites/DynamicSpriteSorting.cs
new file mode 100644
index 0000000..21ea819
--- /dev/null
+++ b/Assets_DLL/Core/Tools/Sprites/DynamicSpriteSorting.cs
@@ -0,0 +1,78 @@
+using UnityEngine;
+using UnityEngine.Rendering;
+
+namespace Core.Tools.Sprites
+{
+ [ExecuteInEditMode]
+ public class DynamicSpriteSorting : MonoBehaviour
+ {
+ public enum TargetRenderer
+ {
+ SpriteRenderer = 0,
+ SortingGroup = 1,
+ }
+
+ [SerializeField] private TargetRenderer _targetRenderer = TargetRenderer.SpriteRenderer;
+ [SerializeField] private SpriteRenderer _renderer = null;
+ [SerializeField] private SortingGroup _group = null;
+ [SerializeField] private float _offsetY = 0f;
+
+ private float _lastPos = 0f;
+ private float _lastOffsetY = 0f;
+ private TargetRenderer _lastTargetRenderer = 0f;
+
+ private void Reset()
+ {
+ _renderer = GetComponent();
+ _group = GetComponent();
+ UpdateOrder();
+ }
+
+ private void Awake()
+ {
+ _lastPos = transform.position.y + _offsetY;
+ UpdateOrder();
+ }
+
+ private void Update()
+ {
+ float pos = transform.position.y + _offsetY;
+
+ if (pos != _lastPos || _lastOffsetY != _offsetY || _lastTargetRenderer != _targetRenderer)
+ {
+ _lastPos = pos;
+ _lastOffsetY = _offsetY;
+ _lastTargetRenderer = _targetRenderer;
+
+ UpdateOrder();
+ }
+ }
+
+ private void UpdateOrder()
+ {
+ float pos = transform.position.y + _offsetY;
+
+ if (_targetRenderer == TargetRenderer.SpriteRenderer)
+ {
+ if (_renderer != null)
+ _renderer.sortingOrder = (int)(-pos * 100f);
+ }
+ else
+ {
+ if (_group != null)
+ _group.sortingOrder = (int)(-pos * 100f);
+ }
+ }
+
+ private void OnDrawGizmosSelected()
+ {
+ Vector3 position = transform.position + (Vector3.up * _offsetY);
+
+ Gizmos.color = new Color(1f, 1f, 1f, 1f);
+ Gizmos.DrawSphere(position, 0.15f);
+
+ Gizmos.color = new Color(1f, 0f, 1f, 1f);
+ Gizmos.DrawSphere(position, 0.1f);
+ }
+ }
+}
\ No newline at end of file
diff --git a/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.AssemblyReference.cache b/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.AssemblyReference.cache
index f5e894a..9e14371 100644
Binary files a/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.AssemblyReference.cache and b/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.AssemblyReference.cache differ
diff --git a/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.CoreCompileInputs.cache b/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.CoreCompileInputs.cache
index 6ebcfa9..4d57bc0 100644
--- a/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.CoreCompileInputs.cache
+++ b/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-d1c5eb68f3ce5b18f962b2e20f3968ce352e152d
+049145f5314f464185eb4974b4434a906bbba395
diff --git a/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.dll b/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.dll
index 2310608..0f13ba8 100644
Binary files a/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.dll and b/Assets_DLL/Core/obj/Debug/netstandard2.0/Core.dll differ
diff --git a/Assets_DLL/CoreEditor/Tools/SaveManagerEditor.cs b/Assets_DLL/CoreEditor/Tools/SaveManagerEditor.cs
new file mode 100644
index 0000000..9737176
--- /dev/null
+++ b/Assets_DLL/CoreEditor/Tools/SaveManagerEditor.cs
@@ -0,0 +1,17 @@
+using Core.Tools.Saves;
+using UnityEditor;
+using UnityEngine;
+
+namespace CoreEditor.Tools
+{
+ internal static class SaveManagerEditor
+ {
+ [MenuItem("Prototype/Show path to save", false, 100)]
+ private static void ShowPathToSave() =>
+ Debug.Log("Path to save: " + SaveManager.GetPathToSave());
+
+ [MenuItem("Prototype/Clear Save", false, 101)]
+ private static void ClearSave() =>
+ SaveManager.Clear();
+ }
+}
diff --git a/Assets_DLL/CoreEditor/Tools/Sprites/DynamicSpriteSortingEditor.cs b/Assets_DLL/CoreEditor/Tools/Sprites/DynamicSpriteSortingEditor.cs
new file mode 100644
index 0000000..8b755eb
--- /dev/null
+++ b/Assets_DLL/CoreEditor/Tools/Sprites/DynamicSpriteSortingEditor.cs
@@ -0,0 +1,36 @@
+using Core.Tools.Sprites;
+using UnityEditor;
+using UnityEngine;
+using UnityEngine.Rendering;
+
+using static Core.Tools.Sprites.DynamicSpriteSorting;
+
+namespace CoreEditor.Tools.Sprites
+{
+ [CustomEditor(typeof(DynamicSpriteSorting))]
+ public class DynamicSpriteSortingEditor : Editor
+ {
+ public override void OnInspectorGUI()
+ {
+ serializedObject.Update();
+
+ SerializedProperty targetRenderer = serializedObject.FindProperty("_targetRenderer");
+ SerializedProperty renderer = serializedObject.FindProperty("_renderer");
+ SerializedProperty group = serializedObject.FindProperty("_group");
+ SerializedProperty offsetY = serializedObject.FindProperty("_offsetY");
+
+ targetRenderer.enumValueIndex = EditorGUILayout.Popup("Target renderer:", targetRenderer.enumValueIndex, targetRenderer.enumNames);
+
+ if (targetRenderer.enumValueIndex == (int)TargetRenderer.SpriteRenderer)
+ renderer.objectReferenceValue = (SpriteRenderer)EditorGUILayout.ObjectField("Sprite renderer:", (SpriteRenderer)renderer.objectReferenceValue, typeof(SpriteRenderer), true);
+ else
+ group.objectReferenceValue = (SortingGroup)EditorGUILayout.ObjectField("Sorting group:", (SortingGroup)group.objectReferenceValue, typeof(SortingGroup), true);
+
+ EditorGUILayout.Space(2);
+
+ offsetY.floatValue = EditorGUILayout.FloatField("Offset Y:", offsetY.floatValue);
+
+ serializedObject.ApplyModifiedProperties();
+ }
+ }
+}
diff --git a/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.AssemblyReference.cache b/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.AssemblyReference.cache
index 9c192c2..615e139 100644
Binary files a/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.AssemblyReference.cache and b/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.AssemblyReference.cache differ
diff --git a/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.CoreCompileInputs.cache b/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.CoreCompileInputs.cache
index 49677ad..25d6d4a 100644
--- a/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.CoreCompileInputs.cache
+++ b/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.CoreCompileInputs.cache
@@ -1 +1 @@
-303f7c18877e6d0c94d1ea8312a22f962649285d
+c0285597973193b3af84a2311133c085240ec7ab
diff --git a/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.dll b/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.dll
index f09db41..53533be 100644
Binary files a/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.dll and b/Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.dll differ
diff --git a/Builds/Core_1.8.unitypackage b/Builds/Core_1.8.unitypackage
new file mode 100644
index 0000000..c65662a
Binary files /dev/null and b/Builds/Core_1.8.unitypackage differ