Browse Source

- Prototype ver.1.8

Кастомний сейв даних
Динамічний сортинг спрайтів
master
Seraph 4 years ago
parent
commit
2f5c0c7012
  1. 6
      Assembly-CSharp.csproj
  2. BIN
      Assets/Prototype/Core/Core.dll
  3. 6
      Assets/Prototype/Core/Core.dll.meta
  4. BIN
      Assets/Prototype/Core/CoreEditor.dll
  5. 4
      Assets/Prototype/Core/CoreEditor.dll.meta
  6. 17
      Assets/Prototype/Custumization/Scenes/Test.unity
  7. 2
      Assets_DLL/Core/CoreInitializer.cs
  8. 130
      Assets_DLL/Core/Tools/Saves/SaveData.cs
  9. 103
      Assets_DLL/Core/Tools/Saves/SaveManager.cs
  10. 53
      Assets_DLL/Core/Tools/Saves/Utils/Encrypter.cs
  11. 78
      Assets_DLL/Core/Tools/Sprites/DynamicSpriteSorting.cs
  12. BIN
      Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.AssemblyReference.cache
  13. 2
      Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.CoreCompileInputs.cache
  14. BIN
      Assets_DLL/Core/obj/Debug/netstandard2.0/Core.dll
  15. 17
      Assets_DLL/CoreEditor/Tools/SaveManagerEditor.cs
  16. 36
      Assets_DLL/CoreEditor/Tools/Sprites/DynamicSpriteSortingEditor.cs
  17. BIN
      Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.AssemblyReference.cache
  18. 2
      Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.CoreCompileInputs.cache
  19. BIN
      Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.dll
  20. BIN
      Builds/Core_1.8.unitypackage

6
Assembly-CSharp.csproj

@ -248,6 +248,12 @@
<Reference Include="UnityEditor">
<HintPath>C:\Program Files\Unity\Hub\Editor\2019.4.28f1\Editor\Data\Managed\UnityEditor.dll</HintPath>
</Reference>
<Reference Include="Core">
<HintPath>Assets\Prototype\Core\Core.dll</HintPath>
</Reference>
<Reference Include="CoreEditor">
<HintPath>Assets\Prototype\Core\CoreEditor.dll</HintPath>
</Reference>
<Reference Include="DOTween">
<HintPath>Assets\Prototype\DOTween\DOTween.dll</HintPath>
</Reference>

BIN
Assets/Prototype/Core/Core.dll

Binary file not shown.

6
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:

BIN
Assets/Prototype/Core/CoreEditor.dll

Binary file not shown.

4
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

17
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

2
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();

130
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> _intData = new List<IntData>();
[SerializeField] private List<FloatData> _floatData = new List<FloatData>();
[SerializeField] private List<StringData> _stringData = new List<StringData>();
[SerializeField] private List<BoolData> _boolData = new List<BoolData>();
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;
}
}
}

103
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<SaveData>(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);
}
}

53
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;
}
}
}

78
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<SpriteRenderer>();
_group = GetComponent<SortingGroup>();
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);
}
}
}

BIN
Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.AssemblyReference.cache

Binary file not shown.

2
Assets_DLL/Core/obj/Debug/netstandard2.0/Core.csproj.CoreCompileInputs.cache

@ -1 +1 @@
d1c5eb68f3ce5b18f962b2e20f3968ce352e152d
049145f5314f464185eb4974b4434a906bbba395

BIN
Assets_DLL/Core/obj/Debug/netstandard2.0/Core.dll

Binary file not shown.

17
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();
}
}

36
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();
}
}
}

BIN
Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.AssemblyReference.cache

Binary file not shown.

2
Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.csproj.CoreCompileInputs.cache

@ -1 +1 @@
303f7c18877e6d0c94d1ea8312a22f962649285d
c0285597973193b3af84a2311133c085240ec7ab

BIN
Assets_DLL/CoreEditor/obj/Debug/netstandard2.0/CoreEditor.dll

Binary file not shown.

BIN
Builds/Core_1.8.unitypackage

Binary file not shown.
Loading…
Cancel
Save