Merge pull request 'master' (#60) from Alienjack/AxibugEmuOnline:master into master

Reviewed-on: sin365/AxibugEmuOnline#60
This commit is contained in:
sin365 2024-12-06 18:10:47 +08:00
commit ae3471fd5e
98 changed files with 7104 additions and 5309 deletions

View File

@ -1,5 +1,4 @@
using AxibugEmuOnline.Client; using AxibugEmuOnline.Client;
using System;
using UnityEditor; using UnityEditor;
using UnityEngine; using UnityEngine;
namespace AxibugEmuOnline.Editors namespace AxibugEmuOnline.Editors

View File

@ -1,6 +1,4 @@
using System; using System.Collections.Generic;
using System.Collections.Generic;
using UnityEngine;
namespace AxiReplay namespace AxiReplay
{ {

View File

@ -4,7 +4,7 @@ using System.Text;
namespace AxiReplay namespace AxiReplay
{ {
[StructLayout(LayoutKind.Explicit,Size = 44)] [StructLayout(LayoutKind.Explicit, Size = 44)]
public struct ReplayHandler public struct ReplayHandler
{ {
[FieldOffset(0)] [FieldOffset(0)]
@ -51,7 +51,7 @@ namespace AxiReplay
FM32IP32, FM32IP32,
FM32IP64, FM32IP64,
} }
public static void GetStringByteData(string str,out byte[] data,out int lenghtWithEnd,Encoding encoding) public static void GetStringByteData(string str, out byte[] data, out int lenghtWithEnd, Encoding encoding)
{ {
data = encoding.GetBytes(str); data = encoding.GetBytes(str);
lenghtWithEnd = data.Length + 1; lenghtWithEnd = data.Length + 1;

View File

@ -128,14 +128,14 @@ namespace AxiReplay
/// </summary> /// </summary>
public bool NextFrame(out ReplayStep data) public bool NextFrame(out ReplayStep data)
{ {
return TakeFrame(1,out data); return TakeFrame(1, out data);
} }
/// <summary> /// <summary>
/// 往前推进指定帧数量的Input (返回是否变化) /// 往前推进指定帧数量的Input (返回是否变化)
/// </summary> /// </summary>
/// <param name="addFrame"></param> /// <param name="addFrame"></param>
public bool TakeFrame(int addFrame,out ReplayStep data) public bool TakeFrame(int addFrame, out ReplayStep data)
{ {
bool Changed = false; bool Changed = false;
mCurrFrame += addFrame; mCurrFrame += addFrame;

View File

@ -57,7 +57,7 @@ namespace AxiReplay
/// 往前推进帧的,指定帧下标 /// 往前推进帧的,指定帧下标
/// </summary> /// </summary>
/// <param name="frameInput"></param> /// <param name="frameInput"></param>
public void NextFramebyFrameIdx(int FrameID,UInt64 frameInput) public void NextFramebyFrameIdx(int FrameID, UInt64 frameInput)
{ {
TakeFrame(FrameID - byFrameIdx, frameInput); TakeFrame(FrameID - byFrameIdx, frameInput);
byFrameIdx = FrameID; byFrameIdx = FrameID;
@ -140,7 +140,7 @@ namespace AxiReplay
temp.Add($"CreateTime => {handler.CreateTime}"); temp.Add($"CreateTime => {handler.CreateTime}");
temp.Add($"AllFrame => {handler.AllFrame}"); temp.Add($"AllFrame => {handler.AllFrame}");
temp.Add($"SingleLenght => {handler.SingleLenght}"); temp.Add($"SingleLenght => {handler.SingleLenght}");
dbgList.InsertRange(0,temp); dbgList.InsertRange(0, temp);
File.WriteAllLines(dumppath, dbgList); File.WriteAllLines(dumppath, dbgList);
} }
} }

View File

@ -27,10 +27,10 @@ namespace Coffee.UIExtensions
#if TMP_PRESENT #if TMP_PRESENT
static readonly List<Vector2> s_Uv0 = new List<Vector2> (4096); static readonly List<Vector2> s_Uv0 = new List<Vector2> (4096);
static readonly List<Vector2> s_Uv1 = new List<Vector2> (4096); static readonly List<Vector2> s_Uv1 = new List<Vector2> (4096);
#if UNITY_2017_1_OR_NEWER #if UNITY_2017_1_OR_NEWER
static readonly List<Vector2> s_Uv2 = new List<Vector2> (4096); static readonly List<Vector2> s_Uv2 = new List<Vector2> (4096);
static readonly List<Vector2> s_Uv3 = new List<Vector2> (4096); static readonly List<Vector2> s_Uv3 = new List<Vector2> (4096);
#endif #endif
static readonly List<Vector3> s_Vertices = new List<Vector3> (4096); static readonly List<Vector3> s_Vertices = new List<Vector3> (4096);
static readonly List<int> s_Indices = new List<int> (4096); static readonly List<int> s_Indices = new List<int> (4096);
static readonly List<Vector3> s_Normals = new List<Vector3> (4096); static readonly List<Vector3> s_Normals = new List<Vector3> (4096);
@ -42,7 +42,7 @@ namespace Coffee.UIExtensions
static readonly List<UIVertex> s_UIVertices = new List<UIVertex> (4096); static readonly List<UIVertex> s_UIVertices = new List<UIVertex> (4096);
static readonly List<BaseMeshEffect> s_TmpEffects = new List<BaseMeshEffect>(4); static readonly List<BaseMeshEffect> s_TmpEffects = new List<BaseMeshEffect>(4);
#endif #endif
static readonly Material [] s_EmptyMaterials = new Material [0]; static readonly Material[] s_EmptyMaterials = new Material[0];
//################################ //################################
@ -51,12 +51,12 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// The Graphic attached to this GameObject. /// The Graphic attached to this GameObject.
/// </summary> /// </summary>
public Graphic graphic { get { Initialize (); return _graphic; } } public Graphic graphic { get { Initialize(); return _graphic; } }
/// <summary> /// <summary>
/// The CanvasRenderer attached to this GameObject. /// The CanvasRenderer attached to this GameObject.
/// </summary> /// </summary>
public CanvasRenderer canvasRenderer { get { Initialize (); return _canvasRenderer; } } public CanvasRenderer canvasRenderer { get { Initialize(); return _canvasRenderer; } }
#if TMP_PRESENT #if TMP_PRESENT
/// <summary> /// <summary>
@ -68,7 +68,7 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// The RectTransform attached to this GameObject. /// The RectTransform attached to this GameObject.
/// </summary> /// </summary>
public RectTransform rectTransform { get { Initialize (); return _rectTransform; } } public RectTransform rectTransform { get { Initialize(); return _rectTransform; } }
#if UNITY_5_6_OR_NEWER #if UNITY_5_6_OR_NEWER
/// <summary> /// <summary>
@ -146,7 +146,7 @@ namespace Coffee.UIExtensions
#endif #endif
if (graphic) if (graphic)
{ {
_materials [0] = graphic.material; _materials[0] = graphic.material;
return _materials; return _materials;
} }
else else
@ -160,7 +160,7 @@ namespace Coffee.UIExtensions
/// Call used to modify mesh. (legacy) /// Call used to modify mesh. (legacy)
/// </summary> /// </summary>
/// <param name="mesh">Mesh.</param> /// <param name="mesh">Mesh.</param>
public virtual void ModifyMesh (Mesh mesh) public virtual void ModifyMesh(Mesh mesh)
{ {
} }
@ -168,14 +168,14 @@ namespace Coffee.UIExtensions
/// Call used to modify mesh. /// Call used to modify mesh.
/// </summary> /// </summary>
/// <param name="vh">VertexHelper.</param> /// <param name="vh">VertexHelper.</param>
public virtual void ModifyMesh (VertexHelper vh) public virtual void ModifyMesh(VertexHelper vh)
{ {
} }
/// <summary> /// <summary>
/// Mark the vertices as dirty. /// Mark the vertices as dirty.
/// </summary> /// </summary>
public virtual void SetVerticesDirty () public virtual void SetVerticesDirty()
{ {
#if TMP_PRESENT #if TMP_PRESENT
if (textMeshPro) if (textMeshPro)
@ -213,11 +213,11 @@ namespace Coffee.UIExtensions
#endif #endif
if (graphic) if (graphic)
{ {
graphic.SetVerticesDirty (); graphic.SetVerticesDirty();
} }
} }
public void ShowTMProWarning (Shader shader, Shader mobileShader, Shader spriteShader, System.Action<Material> onCreatedMaterial) public void ShowTMProWarning(Shader shader, Shader mobileShader, Shader spriteShader, System.Action<Material> onCreatedMaterial)
{ {
#if UNITY_EDITOR && TMP_PRESENT #if UNITY_EDITOR && TMP_PRESENT
if(!textMeshPro || !textMeshPro.fontSharedMaterial) if(!textMeshPro || !textMeshPro.fontSharedMaterial)
@ -324,14 +324,14 @@ namespace Coffee.UIExtensions
protected virtual bool isLegacyMeshModifier { get { return false; } } protected virtual bool isLegacyMeshModifier { get { return false; } }
protected virtual void Initialize () protected virtual void Initialize()
{ {
if (!_initialized) if (!_initialized)
{ {
_initialized = true; _initialized = true;
_graphic = _graphic ?? GetComponent<Graphic> (); _graphic = _graphic ?? GetComponent<Graphic>();
_canvasRenderer = _canvasRenderer ?? GetComponent<CanvasRenderer> (); _canvasRenderer = _canvasRenderer ?? GetComponent<CanvasRenderer>();
_rectTransform = _rectTransform ?? GetComponent<RectTransform> (); _rectTransform = _rectTransform ?? GetComponent<RectTransform>();
#if TMP_PRESENT #if TMP_PRESENT
_textMeshPro = _textMeshPro ?? GetComponent<TMP_Text> (); _textMeshPro = _textMeshPro ?? GetComponent<TMP_Text> ();
#endif #endif
@ -341,10 +341,10 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// This function is called when the object becomes enabled and active. /// This function is called when the object becomes enabled and active.
/// </summary> /// </summary>
protected override void OnEnable () protected override void OnEnable()
{ {
_initialized = false; _initialized = false;
SetVerticesDirty (); SetVerticesDirty();
#if TMP_PRESENT #if TMP_PRESENT
if (textMeshPro) if (textMeshPro)
{ {
@ -366,7 +366,7 @@ namespace Coffee.UIExtensions
var canvas = graphic.canvas; var canvas = graphic.canvas;
if (canvas && (canvas.additionalShaderChannels & channels) != channels) if (canvas && (canvas.additionalShaderChannels & channels) != channels)
{ {
Debug.LogWarningFormat (this, "Enable {1} of Canvas.additionalShaderChannels to use {0}.", GetType ().Name, channels); Debug.LogWarningFormat(this, "Enable {1} of Canvas.additionalShaderChannels to use {0}.", GetType().Name, channels);
} }
} }
#endif #endif
@ -375,12 +375,12 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// This function is called when the behaviour becomes disabled () or inactive. /// This function is called when the behaviour becomes disabled () or inactive.
/// </summary> /// </summary>
protected override void OnDisable () protected override void OnDisable()
{ {
#if TMP_PRESENT #if TMP_PRESENT
TMPro_EventManager.TEXT_CHANGED_EVENT.Remove (OnTextChanged); TMPro_EventManager.TEXT_CHANGED_EVENT.Remove (OnTextChanged);
#endif #endif
SetVerticesDirty (); SetVerticesDirty();
#if UNITY_EDITOR && TMP_PRESENT #if UNITY_EDITOR && TMP_PRESENT
if (graphic && textMeshPro) if (graphic && textMeshPro)
@ -394,7 +394,7 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// LateUpdate is called every frame, if the Behaviour is enabled. /// LateUpdate is called every frame, if the Behaviour is enabled.
/// </summary> /// </summary>
protected virtual void LateUpdate () protected virtual void LateUpdate()
{ {
#if TMP_PRESENT #if TMP_PRESENT
if (textMeshPro) if (textMeshPro)
@ -411,18 +411,18 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// Callback for when properties have been changed by animation. /// Callback for when properties have been changed by animation.
/// </summary> /// </summary>
protected override void OnDidApplyAnimationProperties () protected override void OnDidApplyAnimationProperties()
{ {
SetVerticesDirty (); SetVerticesDirty();
} }
#if UNITY_EDITOR #if UNITY_EDITOR
/// <summary> /// <summary>
/// This function is called when the script is loaded or a value is changed in the inspector (Called in the editor only). /// This function is called when the script is loaded or a value is changed in the inspector (Called in the editor only).
/// </summary> /// </summary>
protected override void OnValidate () protected override void OnValidate()
{ {
SetVerticesDirty (); SetVerticesDirty();
} }
#endif #endif
@ -434,7 +434,7 @@ namespace Coffee.UIExtensions
CanvasRenderer _canvasRenderer; CanvasRenderer _canvasRenderer;
RectTransform _rectTransform; RectTransform _rectTransform;
Graphic _graphic; Graphic _graphic;
Material [] _materials = new Material [1]; Material[] _materials = new Material[1];
#if TMP_PRESENT #if TMP_PRESENT
bool _isTextMeshProActive; bool _isTextMeshProActive;
@ -532,12 +532,12 @@ namespace Coffee.UIExtensions
mesh.GetTangents (s_Tangents); mesh.GetTangents (s_Tangents);
mesh.GetIndices (s_Indices, 0); mesh.GetIndices (s_Indices, 0);
#if UNITY_2017_1_OR_NEWER #if UNITY_2017_1_OR_NEWER
mesh.GetUVs (2, s_Uv2); mesh.GetUVs (2, s_Uv2);
mesh.GetUVs (3, s_Uv3); mesh.GetUVs (3, s_Uv3);
bool useUv2 = 0 < s_Uv2.Count; bool useUv2 = 0 < s_Uv2.Count;
bool useUv3 = 0 < s_Uv3.Count; bool useUv3 = 0 < s_Uv3.Count;
#endif #endif
s_UIVertices.Clear(); s_UIVertices.Clear();
UIVertex v = default(UIVertex); UIVertex v = default(UIVertex);
@ -547,12 +547,12 @@ namespace Coffee.UIExtensions
v.color = s_Colors[i]; v.color = s_Colors[i];
v.uv0 = s_Uv0[i]; v.uv0 = s_Uv0[i];
v.uv1 = s_Uv1[i]; v.uv1 = s_Uv1[i];
#if UNITY_2017_1_OR_NEWER #if UNITY_2017_1_OR_NEWER
if (useUv2 && i < s_Uv2.Count) if (useUv2 && i < s_Uv2.Count)
v.uv2 = s_Uv2[i]; v.uv2 = s_Uv2[i];
if (useUv3 && i < s_Uv3.Count) if (useUv3 && i < s_Uv3.Count)
v.uv3 = s_Uv3[i]; v.uv3 = s_Uv3[i];
#endif #endif
v.normal = s_Normals[i]; v.normal = s_Normals[i];
v.tangent = s_Tangents[i]; v.tangent = s_Tangents[i];

View File

@ -16,12 +16,12 @@ namespace Coffee.UIExtensions
public static class EffectAreaExtensions public static class EffectAreaExtensions
{ {
static readonly Rect rectForCharacter = new Rect(0, 0, 1, 1); static readonly Rect rectForCharacter = new Rect(0, 0, 1, 1);
static readonly Vector2 [] splitedCharacterPosition = { Vector2.up, Vector2.one, Vector2.right, Vector2.zero }; static readonly Vector2[] splitedCharacterPosition = { Vector2.up, Vector2.one, Vector2.right, Vector2.zero };
/// <summary> /// <summary>
/// Gets effect for area. /// Gets effect for area.
/// </summary> /// </summary>
public static Rect GetEffectArea (this EffectArea area, VertexHelper vh, Rect rectangle, float aspectRatio = -1) public static Rect GetEffectArea(this EffectArea area, VertexHelper vh, Rect rectangle, float aspectRatio = -1)
{ {
Rect rect = default(Rect); Rect rect = default(Rect);
switch (area) switch (area)
@ -34,7 +34,7 @@ namespace Coffee.UIExtensions
break; break;
case EffectArea.Fit: case EffectArea.Fit:
// Fit to contents. // Fit to contents.
UIVertex vertex = default (UIVertex); UIVertex vertex = default(UIVertex);
float xMin = float.MaxValue; float xMin = float.MaxValue;
float yMin = float.MaxValue; float yMin = float.MaxValue;
float xMax = float.MinValue; float xMax = float.MinValue;
@ -49,7 +49,7 @@ namespace Coffee.UIExtensions
xMax = Mathf.Max(xMax, x); xMax = Mathf.Max(xMax, x);
yMax = Mathf.Max(yMax, y); yMax = Mathf.Max(yMax, y);
} }
rect.Set (xMin, yMin, xMax - xMin, yMax - yMin); rect.Set(xMin, yMin, xMax - xMin, yMax - yMin);
break; break;
default: default:
rect = rectangle; rect = rectangle;
@ -57,7 +57,7 @@ namespace Coffee.UIExtensions
} }
if(0 < aspectRatio) if (0 < aspectRatio)
{ {
if (rect.width < rect.height) if (rect.width < rect.height)
{ {
@ -74,34 +74,34 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// Gets position factor for area. /// Gets position factor for area.
/// </summary> /// </summary>
public static void GetPositionFactor (this EffectArea area, int index, Rect rect, Vector2 position, bool isText, bool isTMPro, out float x, out float y) public static void GetPositionFactor(this EffectArea area, int index, Rect rect, Vector2 position, bool isText, bool isTMPro, out float x, out float y)
{ {
if (isText && area == EffectArea.Character) if (isText && area == EffectArea.Character)
{ {
index = isTMPro ? (index + 3) % 4 : index % 4; index = isTMPro ? (index + 3) % 4 : index % 4;
x = splitedCharacterPosition [index].x; x = splitedCharacterPosition[index].x;
y = splitedCharacterPosition [index].y; y = splitedCharacterPosition[index].y;
} }
else if (area == EffectArea.Fit) else if (area == EffectArea.Fit)
{ {
x = Mathf.Clamp01 ((position.x - rect.xMin) / rect.width); x = Mathf.Clamp01((position.x - rect.xMin) / rect.width);
y = Mathf.Clamp01 ((position.y - rect.yMin) / rect.height); y = Mathf.Clamp01((position.y - rect.yMin) / rect.height);
} }
else else
{ {
x = Mathf.Clamp01 (position.x / rect.width + 0.5f); x = Mathf.Clamp01(position.x / rect.width + 0.5f);
y = Mathf.Clamp01 (position.y / rect.height + 0.5f); y = Mathf.Clamp01(position.y / rect.height + 0.5f);
} }
} }
/// <summary> /// <summary>
/// Normalize vertex position by local matrix. /// Normalize vertex position by local matrix.
/// </summary> /// </summary>
public static void GetNormalizedFactor (this EffectArea area, int index, Matrix2x3 matrix, Vector2 position, bool isText, out Vector2 nomalizedPos) public static void GetNormalizedFactor(this EffectArea area, int index, Matrix2x3 matrix, Vector2 position, bool isText, out Vector2 nomalizedPos)
{ {
if (isText && area == EffectArea.Character) if (isText && area == EffectArea.Character)
{ {
nomalizedPos = matrix * splitedCharacterPosition [(index + 3) % 4]; nomalizedPos = matrix * splitedCharacterPosition[(index + 3) % 4];
} }
else else
{ {

View File

@ -1,6 +1,6 @@
using UnityEngine; using System;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine;
namespace Coffee.UIExtensions namespace Coffee.UIExtensions
{ {
@ -31,7 +31,7 @@ namespace Coffee.UIExtensions
/// Gets or sets the duration. /// Gets or sets the duration.
/// </summary> /// </summary>
[Tooltip("Duration.")] [Tooltip("Duration.")]
[Range(0.01f,10f)] [Range(0.01f, 10f)]
public float duration = 1; public float duration = 1;
/// <summary> /// <summary>
@ -44,7 +44,7 @@ namespace Coffee.UIExtensions
/// Gets or sets the delay before looping. /// Gets or sets the delay before looping.
/// </summary> /// </summary>
[Tooltip("Delay before looping.")] [Tooltip("Delay before looping.")]
[Range(0f,10f)] [Range(0f, 10f)]
public float loopDelay = 0; public float loopDelay = 0;
/// <summary> /// <summary>

View File

@ -1,6 +1,6 @@
#if UNITY_EDITOR #if UNITY_EDITOR
using System.IO;
using System.Collections.Generic; using System.Collections.Generic;
using System.IO;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using UnityEditor; using UnityEditor;
@ -114,7 +114,7 @@ namespace Coffee.UIExtensions
s_StringBuilder.Append("[Separated] "); s_StringBuilder.Append("[Separated] ");
#endif #endif
s_StringBuilder.Append(Path.GetFileName(shader.name)); s_StringBuilder.Append(Path.GetFileName(shader.name));
foreach (object mode in append.Where(x=>0<(int)x)) foreach (object mode in append.Where(x => 0 < (int)x))
{ {
s_StringBuilder.Append("-"); s_StringBuilder.Append("-");
s_StringBuilder.Append(mode.ToString()); s_StringBuilder.Append(mode.ToString());

View File

@ -22,7 +22,7 @@ namespace Coffee.UIExtensions
m12 = dx * sin + dy * cos + center; m12 = dx * sin + dy * cos + center;
} }
public static Vector2 operator*(Matrix2x3 m, Vector2 v) public static Vector2 operator *(Matrix2x3 m, Vector2 v)
{ {
return new Vector2( return new Vector2(
(m.m00 * v.x) + (m.m01 * v.y) + m.m02, (m.m00 * v.x) + (m.m01 * v.y) + m.m02,

View File

@ -1,6 +1,4 @@
using System.Collections; using UnityEngine;
using System.Collections.Generic;
using UnityEngine;
public static class Packer public static class Packer
{ {

View File

@ -1,8 +1,6 @@
using System.Collections; using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering;
using System;
namespace Coffee.UIExtensions namespace Coffee.UIExtensions
{ {
@ -55,7 +53,7 @@ namespace Coffee.UIExtensions
if (target.parameterIndex <= 0 && 0 < _stack.Count) if (target.parameterIndex <= 0 && 0 < _stack.Count)
{ {
target.parameterIndex = _stack.Pop(); target.parameterIndex = _stack.Pop();
// Debug.LogFormat("<color=green>@@@ Register {0} : {1}</color>", target, target.parameterIndex); // Debug.LogFormat("<color=green>@@@ Register {0} : {1}</color>", target, target.parameterIndex);
} }
} }
@ -67,7 +65,7 @@ namespace Coffee.UIExtensions
{ {
if (0 < target.parameterIndex) if (0 < target.parameterIndex)
{ {
// Debug.LogFormat("<color=red>@@@ Unregister {0} : {1}</color>", target, target.parameterIndex); // Debug.LogFormat("<color=red>@@@ Unregister {0} : {1}</color>", target, target.parameterIndex);
_stack.Push(target.parameterIndex); _stack.Push(target.parameterIndex);
target.parameterIndex = 0; target.parameterIndex = 0;
} }

View File

@ -52,7 +52,7 @@ namespace Coffee.UIExtensions
/// </summary> /// </summary>
protected override void OnValidate() protected override void OnValidate()
{ {
base.OnValidate (); base.OnValidate();
var mat = GetMaterial(); var mat = GetMaterial();
if (m_EffectMaterial != mat) if (m_EffectMaterial != mat)
@ -62,8 +62,8 @@ namespace Coffee.UIExtensions
} }
ModifyMaterial(); ModifyMaterial();
SetVerticesDirty (); SetVerticesDirty();
SetDirty (); SetDirty();
} }
public void OnBeforeSerialize() public void OnBeforeSerialize()
@ -123,7 +123,7 @@ namespace Coffee.UIExtensions
/// </summary> /// </summary>
protected override void OnEnable() protected override void OnEnable()
{ {
base.OnEnable (); base.OnEnable();
if (ptex != null) if (ptex != null)
{ {
@ -139,9 +139,9 @@ namespace Coffee.UIExtensions
/// </summary> /// </summary>
protected override void OnDisable() protected override void OnDisable()
{ {
base.OnDisable (); base.OnDisable();
ModifyMaterial (); ModifyMaterial();
SetVerticesDirty(); SetVerticesDirty();
if (ptex != null) if (ptex != null)
{ {

View File

@ -1,5 +1,4 @@
using System.Collections; using System.Collections.Generic;
using System.Collections.Generic;
using UnityEditor; using UnityEditor;
using UnityEngine; using UnityEngine;
@ -7,59 +6,59 @@ namespace Coffee.UIExtensions.Editors
{ {
public class BaseMeshEffectEditor : Editor public class BaseMeshEffectEditor : Editor
{ {
List<MaterialEditor> _materialEditors = new List<MaterialEditor> (); List<MaterialEditor> _materialEditors = new List<MaterialEditor>();
protected virtual void OnEnable () protected virtual void OnEnable()
{ {
ClearMaterialEditors (); ClearMaterialEditors();
} }
protected virtual void OnDisable () protected virtual void OnDisable()
{ {
ClearMaterialEditors (); ClearMaterialEditors();
} }
void ClearMaterialEditors () void ClearMaterialEditors()
{ {
foreach (var e in _materialEditors) foreach (var e in _materialEditors)
{ {
if (e) if (e)
{ {
DestroyImmediate (e); DestroyImmediate(e);
} }
} }
_materialEditors.Clear (); _materialEditors.Clear();
} }
protected void ShowMaterialEditors (Material [] materials, int startIndex, int count) protected void ShowMaterialEditors(Material[] materials, int startIndex, int count)
{ {
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
if (_materialEditors.Count == i) if (_materialEditors.Count == i)
{ {
_materialEditors.Add (null); _materialEditors.Add(null);
} }
var mat = materials [startIndex + i]; var mat = materials[startIndex + i];
var editor = _materialEditors [i]; var editor = _materialEditors[i];
if (editor && editor.target != mat) if (editor && editor.target != mat)
{ {
DestroyImmediate (editor); DestroyImmediate(editor);
editor = null; editor = null;
} }
if (!editor) if (!editor)
{ {
editor = _materialEditors [i] = Editor.CreateEditor (mat) as MaterialEditor; editor = _materialEditors[i] = Editor.CreateEditor(mat) as MaterialEditor;
} }
editor.DrawHeader (); editor.DrawHeader();
editor.OnInspectorGUI (); editor.OnInspectorGUI();
} }
} }
protected void ShowCanvasChannelsWarning () protected void ShowCanvasChannelsWarning()
{ {
BaseMeshEffect effect = target as BaseMeshEffect; BaseMeshEffect effect = target as BaseMeshEffect;
if (!effect || !effect.graphic) if (!effect || !effect.graphic)
@ -72,13 +71,13 @@ namespace Coffee.UIExtensions.Editors
var canvas = effect.graphic.canvas; var canvas = effect.graphic.canvas;
if (canvas && (canvas.additionalShaderChannels & channels) != channels) if (canvas && (canvas.additionalShaderChannels & channels) != channels)
{ {
EditorGUILayout.BeginHorizontal (); EditorGUILayout.BeginHorizontal();
EditorGUILayout.HelpBox (string.Format ("Enable {1} of Canvas.additionalShaderChannels to use {0}.", effect.GetType ().Name, channels), MessageType.Warning); EditorGUILayout.HelpBox(string.Format("Enable {1} of Canvas.additionalShaderChannels to use {0}.", effect.GetType().Name, channels), MessageType.Warning);
if (GUILayout.Button ("Fix")) if (GUILayout.Button("Fix"))
{ {
canvas.additionalShaderChannels |= channels; canvas.additionalShaderChannels |= channels;
} }
EditorGUILayout.EndHorizontal (); EditorGUILayout.EndHorizontal();
} }
#endif #endif
} }

View File

@ -1,10 +1,8 @@
using System.Collections; using System.Collections.Generic;
using System.IO; using System.IO;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;
using UnityEditor; using UnityEditor;
using UnityEngine;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {
@ -24,7 +22,7 @@ namespace Coffee.UIExtensions.Editors
}; };
#if UNITY_EDITOR #if UNITY_EDITOR
[UnityEditor.InitializeOnLoadMethod] [UnityEditor.InitializeOnLoadMethod]
static void RemoveFiles() static void RemoveFiles()
{ {
@ -48,6 +46,6 @@ namespace Coffee.UIExtensions.Editors
UnityEngine.Debug.Log(sb); UnityEngine.Debug.Log(sb);
} }
} }
#endif #endif
} }
} }

View File

@ -1,9 +1,6 @@
using UnityEditor; using System.Linq;
using UnityEditorInternal; using UnityEditor;
using UnityEngine; using UnityEngine;
using System.Linq;
using System.Collections.Generic;
using UnityEngine.UI;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {
@ -24,7 +21,7 @@ namespace Coffee.UIExtensions.Editors
/// </summary> /// </summary>
protected override void OnEnable() protected override void OnEnable()
{ {
base.OnEnable (); base.OnEnable();
_spMaterial = serializedObject.FindProperty("m_EffectMaterial"); _spMaterial = serializedObject.FindProperty("m_EffectMaterial");
_spEffectFactor = serializedObject.FindProperty("m_EffectFactor"); _spEffectFactor = serializedObject.FindProperty("m_EffectFactor");
@ -45,11 +42,11 @@ namespace Coffee.UIExtensions.Editors
_spLoopDelay = player.FindPropertyRelative("loopDelay"); _spLoopDelay = player.FindPropertyRelative("loopDelay");
_spUpdateMode = player.FindPropertyRelative("updateMode"); _spUpdateMode = player.FindPropertyRelative("updateMode");
s_NoiseTexId = Shader.PropertyToID ("_NoiseTex"); s_NoiseTexId = Shader.PropertyToID("_NoiseTex");
_shader = Shader.Find ("TextMeshPro/Distance Field (UIDissolve)"); _shader = Shader.Find("TextMeshPro/Distance Field (UIDissolve)");
_mobileShader = Shader.Find ("TextMeshPro/Mobile/Distance Field (UIDissolve)"); _mobileShader = Shader.Find("TextMeshPro/Mobile/Distance Field (UIDissolve)");
_spriteShader = Shader.Find ("TextMeshPro/Sprite (UIDissolve)"); _spriteShader = Shader.Find("TextMeshPro/Sprite (UIDissolve)");
} }
/// <summary> /// <summary>
@ -57,25 +54,25 @@ namespace Coffee.UIExtensions.Editors
/// </summary> /// </summary>
public override void OnInspectorGUI() public override void OnInspectorGUI()
{ {
foreach (var d in targets.Cast<UIDissolve> ()) foreach (var d in targets.Cast<UIDissolve>())
{ {
var mat = d.material; var mat = d.material;
if (d.isTMPro && mat && mat.HasProperty(s_NoiseTexId)) if (d.isTMPro && mat && mat.HasProperty(s_NoiseTexId))
{ {
ColorMode colorMode = ColorMode colorMode =
mat.IsKeywordEnabled ("ADD") ? ColorMode.Add mat.IsKeywordEnabled("ADD") ? ColorMode.Add
: mat.IsKeywordEnabled ("SUBTRACT") ? ColorMode.Subtract : mat.IsKeywordEnabled("SUBTRACT") ? ColorMode.Subtract
: mat.IsKeywordEnabled ("FILL") ? ColorMode.Fill : mat.IsKeywordEnabled("FILL") ? ColorMode.Fill
: ColorMode.Multiply; : ColorMode.Multiply;
Texture noiseTexture = mat.GetTexture(s_NoiseTexId); Texture noiseTexture = mat.GetTexture(s_NoiseTexId);
if (d.colorMode != colorMode || d.noiseTexture != noiseTexture) if (d.colorMode != colorMode || d.noiseTexture != noiseTexture)
{ {
var so = new SerializedObject (d); var so = new SerializedObject(d);
so.FindProperty ("m_ColorMode").intValue = (int)colorMode; so.FindProperty("m_ColorMode").intValue = (int)colorMode;
so.FindProperty ("m_NoiseTexture").objectReferenceValue = noiseTexture; so.FindProperty("m_NoiseTexture").objectReferenceValue = noiseTexture;
so.ApplyModifiedProperties (); so.ApplyModifiedProperties();
} }
} }
} }
@ -98,10 +95,10 @@ namespace Coffee.UIExtensions.Editors
EditorGUILayout.PropertyField(_spColor); EditorGUILayout.PropertyField(_spColor);
bool isAnyTMPro = targets.Cast<UIDissolve>().Any(x => x.isTMPro); bool isAnyTMPro = targets.Cast<UIDissolve>().Any(x => x.isTMPro);
using (new EditorGUI.DisabledGroupScope (isAnyTMPro)) using (new EditorGUI.DisabledGroupScope(isAnyTMPro))
{ {
EditorGUILayout.PropertyField (_spColorMode); EditorGUILayout.PropertyField(_spColorMode);
EditorGUILayout.PropertyField (_spNoiseTexture); EditorGUILayout.PropertyField(_spNoiseTexture);
} }
//================ //================
@ -139,16 +136,17 @@ namespace Coffee.UIExtensions.Editors
} }
var c = target as UIDissolve; var c = target as UIDissolve;
c.ShowTMProWarning (_shader, _mobileShader, _spriteShader, mat => { c.ShowTMProWarning(_shader, _mobileShader, _spriteShader, mat =>
if(mat.shader == _spriteShader) {
if (mat.shader == _spriteShader)
{ {
mat.shaderKeywords = c.material.shaderKeywords; mat.shaderKeywords = c.material.shaderKeywords;
mat.SetTexture ("_NoiseTex", c.material.GetTexture ("_NoiseTex")); mat.SetTexture("_NoiseTex", c.material.GetTexture("_NoiseTex"));
} }
}); });
ShowCanvasChannelsWarning (); ShowCanvasChannelsWarning();
ShowMaterialEditors (c.materials, 1, c.materials.Length - 1); ShowMaterialEditors(c.materials, 1, c.materials.Length - 1);
serializedObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties();

View File

@ -1,8 +1,7 @@
using UnityEditor; using System;
using UnityEditorInternal;
using UnityEngine;
using System.Linq; using System.Linq;
using System; using UnityEditor;
using UnityEngine;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {
@ -13,7 +12,7 @@ namespace Coffee.UIExtensions.Editors
[CanEditMultipleObjects] [CanEditMultipleObjects]
public class UIEffectEditor : BaseMeshEffectEditor public class UIEffectEditor : BaseMeshEffectEditor
{ {
static readonly GUIContent contentEffectColor = new GUIContent ("Effect Color"); static readonly GUIContent contentEffectColor = new GUIContent("Effect Color");
//################################ //################################
@ -59,19 +58,21 @@ namespace Coffee.UIExtensions.Editors
EditorGUI.indentLevel++; EditorGUI.indentLevel++;
SerializedProperty spColor = serializedObject.FindProperty(colorProperty); SerializedProperty spColor = serializedObject.FindProperty(colorProperty);
if (spColor == null && serializedObject.targetObject is UIEffect) { if (spColor == null && serializedObject.targetObject is UIEffect)
spColor = new SerializedObject (serializedObject.targetObjects.Select(x=>(x as UIEffect).targetGraphic).ToArray()).FindProperty(colorProperty); {
spColor = new SerializedObject(serializedObject.targetObjects.Select(x => (x as UIEffect).targetGraphic).ToArray()).FindProperty(colorProperty);
} }
EditorGUI.BeginChangeCheck (); EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = spColor.hasMultipleDifferentValues; EditorGUI.showMixedValue = spColor.hasMultipleDifferentValues;
#if UNITY_2018_1_OR_NEWER #if UNITY_2018_1_OR_NEWER
spColor.colorValue = EditorGUILayout.ColorField (contentEffectColor, spColor.colorValue, true, false, false); spColor.colorValue = EditorGUILayout.ColorField(contentEffectColor, spColor.colorValue, true, false, false);
#else #else
spColor.colorValue = EditorGUILayout.ColorField (contentEffectColor, spColor.colorValue, true, false, false, null); spColor.colorValue = EditorGUILayout.ColorField (contentEffectColor, spColor.colorValue, true, false, false, null);
#endif #endif
if (EditorGUI.EndChangeCheck ()) { if (EditorGUI.EndChangeCheck())
spColor.serializedObject.ApplyModifiedProperties (); {
spColor.serializedObject.ApplyModifiedProperties();
} }
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_ColorFactor")); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_ColorFactor"));
@ -102,14 +103,14 @@ namespace Coffee.UIExtensions.Editors
int GetEnum<T>(Material mat) int GetEnum<T>(Material mat)
{ {
Type type = typeof(T); Type type = typeof(T);
string[] names = System.Enum.GetNames (type); string[] names = System.Enum.GetNames(type);
int[] values = System.Enum.GetValues (type) as int[]; int[] values = System.Enum.GetValues(type) as int[];
int mode = 0; int mode = 0;
for(int i=0;i<names.Length;i++) for (int i = 0; i < names.Length; i++)
{ {
if (mat.IsKeywordEnabled (names [i].ToUpper())) if (mat.IsKeywordEnabled(names[i].ToUpper()))
mode = values [i]; mode = values[i];
} }
return mode; return mode;
} }
@ -120,23 +121,23 @@ namespace Coffee.UIExtensions.Editors
/// </summary> /// </summary>
public override void OnInspectorGUI() public override void OnInspectorGUI()
{ {
foreach (var d in targets.Cast<UIEffect> ()) foreach (var d in targets.Cast<UIEffect>())
{ {
var mat = d.material; var mat = d.material;
if (d.isTMPro && mat) if (d.isTMPro && mat)
{ {
var so = new SerializedObject (d); var so = new SerializedObject(d);
EffectMode eMode = (EffectMode)GetEnum<EffectMode> (mat); EffectMode eMode = (EffectMode)GetEnum<EffectMode>(mat);
ColorMode cMode = (ColorMode)GetEnum<ColorMode> (mat); ColorMode cMode = (ColorMode)GetEnum<ColorMode>(mat);
BlurMode bMode = (BlurMode)GetEnum<BlurMode> (mat); BlurMode bMode = (BlurMode)GetEnum<BlurMode>(mat);
bool aBlur = mat.IsKeywordEnabled("EX"); bool aBlur = mat.IsKeywordEnabled("EX");
if (d.effectMode != eMode || d.colorMode != cMode || d.blurMode != bMode || so.FindProperty ("m_AdvancedBlur").boolValue != aBlur) if (d.effectMode != eMode || d.colorMode != cMode || d.blurMode != bMode || so.FindProperty("m_AdvancedBlur").boolValue != aBlur)
{ {
so.FindProperty ("m_EffectMode").intValue = (int)eMode; so.FindProperty("m_EffectMode").intValue = (int)eMode;
so.FindProperty ("m_ColorMode").intValue = (int)cMode; so.FindProperty("m_ColorMode").intValue = (int)cMode;
so.FindProperty ("m_BlurMode").intValue = (int)bMode; so.FindProperty("m_BlurMode").intValue = (int)bMode;
so.FindProperty ("m_AdvancedBlur").boolValue = aBlur; so.FindProperty("m_AdvancedBlur").boolValue = aBlur;
so.ApplyModifiedProperties (); so.ApplyModifiedProperties();
} }
} }
} }
@ -182,19 +183,21 @@ namespace Coffee.UIExtensions.Editors
EditorGUI.indentLevel++; EditorGUI.indentLevel++;
SerializedProperty spColor = serializedObject.FindProperty("m_Color"); SerializedProperty spColor = serializedObject.FindProperty("m_Color");
if (spColor == null && serializedObject.targetObject is UIEffect) { if (spColor == null && serializedObject.targetObject is UIEffect)
spColor = new SerializedObject (serializedObject.targetObjects.Select(x=>(x as UIEffect).targetGraphic).ToArray()).FindProperty(!isAnyTMPro ? "m_Color" : "m_fontColor"); {
spColor = new SerializedObject(serializedObject.targetObjects.Select(x => (x as UIEffect).targetGraphic).ToArray()).FindProperty(!isAnyTMPro ? "m_Color" : "m_fontColor");
} }
EditorGUI.BeginChangeCheck (); EditorGUI.BeginChangeCheck();
EditorGUI.showMixedValue = spColor.hasMultipleDifferentValues; EditorGUI.showMixedValue = spColor.hasMultipleDifferentValues;
#if UNITY_2018_1_OR_NEWER #if UNITY_2018_1_OR_NEWER
spColor.colorValue = EditorGUILayout.ColorField (contentEffectColor, spColor.colorValue, true, false, false); spColor.colorValue = EditorGUILayout.ColorField(contentEffectColor, spColor.colorValue, true, false, false);
#else #else
spColor.colorValue = EditorGUILayout.ColorField (contentEffectColor, spColor.colorValue, true, false, false, null); spColor.colorValue = EditorGUILayout.ColorField (contentEffectColor, spColor.colorValue, true, false, false, null);
#endif #endif
if (EditorGUI.EndChangeCheck ()) { if (EditorGUI.EndChangeCheck())
spColor.serializedObject.ApplyModifiedProperties (); {
spColor.serializedObject.ApplyModifiedProperties();
} }
EditorGUILayout.PropertyField(serializedObject.FindProperty("m_ColorFactor")); EditorGUILayout.PropertyField(serializedObject.FindProperty("m_ColorFactor"));
@ -222,10 +225,10 @@ namespace Coffee.UIExtensions.Editors
serializedObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties();
c.ShowTMProWarning (_shader, _mobileShader, _spriteShader, mat => {}); c.ShowTMProWarning(_shader, _mobileShader, _spriteShader, mat => { });
ShowCanvasChannelsWarning (); ShowCanvasChannelsWarning();
ShowMaterialEditors (c.materials, 1, c.materials.Length - 1); ShowMaterialEditors(c.materials, 1, c.materials.Length - 1);
serializedObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties();
} }
@ -235,11 +238,11 @@ namespace Coffee.UIExtensions.Editors
/// </summary> /// </summary>
protected override void OnEnable() protected override void OnEnable()
{ {
base.OnEnable (); base.OnEnable();
_shader = Shader.Find ("TextMeshPro/Distance Field (UIEffect)"); _shader = Shader.Find("TextMeshPro/Distance Field (UIEffect)");
_mobileShader = Shader.Find ("TextMeshPro/Mobile/Distance Field (UIEffect)"); _mobileShader = Shader.Find("TextMeshPro/Mobile/Distance Field (UIEffect)");
_spriteShader = Shader.Find ("TextMeshPro/Sprite (UIEffect)"); _spriteShader = Shader.Find("TextMeshPro/Sprite (UIEffect)");
} }
//################################ //################################

View File

@ -1,6 +1,5 @@
using UnityEditor; using UnityEditor;
using UnityEngine; using UnityEngine;
using UnityEngine.UI;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {

View File

@ -1,7 +1,5 @@
using UnityEditor; using UnityEditor;
using UnityEditorInternal;
using UnityEngine; using UnityEngine;
using System.Linq;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {
@ -20,7 +18,7 @@ namespace Coffee.UIExtensions.Editors
/// </summary> /// </summary>
protected override void OnEnable() protected override void OnEnable()
{ {
base.OnEnable (); base.OnEnable();
_spMaterial = serializedObject.FindProperty("m_EffectMaterial"); _spMaterial = serializedObject.FindProperty("m_EffectMaterial");
_spTargetColor = serializedObject.FindProperty("m_TargetColor"); _spTargetColor = serializedObject.FindProperty("m_TargetColor");
@ -29,9 +27,9 @@ namespace Coffee.UIExtensions.Editors
_spSaturation = serializedObject.FindProperty("m_Saturation"); _spSaturation = serializedObject.FindProperty("m_Saturation");
_spValue = serializedObject.FindProperty("m_Value"); _spValue = serializedObject.FindProperty("m_Value");
_shader = Shader.Find ("TextMeshPro/Distance Field (UIHsvModifier)"); _shader = Shader.Find("TextMeshPro/Distance Field (UIHsvModifier)");
_mobileShader = Shader.Find ("TextMeshPro/Mobile/Distance Field (UIHsvModifier)"); _mobileShader = Shader.Find("TextMeshPro/Mobile/Distance Field (UIHsvModifier)");
_spriteShader = Shader.Find ("TextMeshPro/Sprite (UIHsvModifier)"); _spriteShader = Shader.Find("TextMeshPro/Sprite (UIHsvModifier)");
} }
@ -59,10 +57,10 @@ namespace Coffee.UIExtensions.Editors
EditorGUILayout.PropertyField(_spValue); EditorGUILayout.PropertyField(_spValue);
var c = target as UIHsvModifier; var c = target as UIHsvModifier;
c.ShowTMProWarning (_shader, _mobileShader, _spriteShader, mat => {}); c.ShowTMProWarning(_shader, _mobileShader, _spriteShader, mat => { });
ShowCanvasChannelsWarning (); ShowCanvasChannelsWarning();
ShowMaterialEditors (c.materials, 1, c.materials.Length - 1); ShowMaterialEditors(c.materials, 1, c.materials.Length - 1);
serializedObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties();
} }

View File

@ -1,6 +1,4 @@
using UnityEditor; using UnityEditor;
using UnityEditorInternal;
using UnityEngine;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {

View File

@ -1,7 +1,5 @@
using UnityEditor; using UnityEditor;
using UnityEditorInternal;
using UnityEngine; using UnityEngine;
using System.Linq;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {
@ -20,7 +18,7 @@ namespace Coffee.UIExtensions.Editors
/// </summary> /// </summary>
protected override void OnEnable() protected override void OnEnable()
{ {
base.OnEnable (); base.OnEnable();
_spMaterial = serializedObject.FindProperty("m_EffectMaterial"); _spMaterial = serializedObject.FindProperty("m_EffectMaterial");
_spEffectFactor = serializedObject.FindProperty("m_EffectFactor"); _spEffectFactor = serializedObject.FindProperty("m_EffectFactor");
@ -39,9 +37,9 @@ namespace Coffee.UIExtensions.Editors
_spUpdateMode = player.FindPropertyRelative("updateMode"); _spUpdateMode = player.FindPropertyRelative("updateMode");
_shader = Shader.Find ("TextMeshPro/Distance Field (UIShiny)"); _shader = Shader.Find("TextMeshPro/Distance Field (UIShiny)");
_mobileShader = Shader.Find ("TextMeshPro/Mobile/Distance Field (UIShiny)"); _mobileShader = Shader.Find("TextMeshPro/Mobile/Distance Field (UIShiny)");
_spriteShader = Shader.Find ("TextMeshPro/Sprite (UIShiny)"); _spriteShader = Shader.Find("TextMeshPro/Sprite (UIShiny)");
} }
@ -102,10 +100,10 @@ namespace Coffee.UIExtensions.Editors
} }
var c = target as UIShiny; var c = target as UIShiny;
c.ShowTMProWarning (_shader, _mobileShader, _spriteShader, mat => {}); c.ShowTMProWarning(_shader, _mobileShader, _spriteShader, mat => { });
ShowCanvasChannelsWarning (); ShowCanvasChannelsWarning();
ShowMaterialEditors (c.materials, 1, c.materials.Length - 1); ShowMaterialEditors(c.materials, 1, c.materials.Length - 1);
serializedObject.ApplyModifiedProperties(); serializedObject.ApplyModifiedProperties();
} }

View File

@ -1,7 +1,6 @@
using UnityEditor; using System.Linq;
using UnityEditorInternal; using UnityEditor;
using UnityEngine; using UnityEngine;
using System.Linq;
namespace Coffee.UIExtensions.Editors namespace Coffee.UIExtensions.Editors
{ {
@ -55,32 +54,32 @@ namespace Coffee.UIExtensions.Editors
/// </summary> /// </summary>
public override void OnInspectorGUI() public override void OnInspectorGUI()
{ {
foreach (var d in targets.Cast<UITransitionEffect> ()) foreach (var d in targets.Cast<UITransitionEffect>())
{ {
var mat = d.material; var mat = d.material;
if (d.isTMPro && mat && mat.HasProperty (s_NoiseTexId)) if (d.isTMPro && mat && mat.HasProperty(s_NoiseTexId))
{ {
Texture noiseTexture = mat.GetTexture (s_NoiseTexId); Texture noiseTexture = mat.GetTexture(s_NoiseTexId);
UITransitionEffect.EffectMode mode = UITransitionEffect.EffectMode mode =
mat.IsKeywordEnabled ("CUTOFF") ? UITransitionEffect.EffectMode.Cutoff mat.IsKeywordEnabled("CUTOFF") ? UITransitionEffect.EffectMode.Cutoff
: mat.IsKeywordEnabled ("FADE") ? UITransitionEffect.EffectMode.Fade : mat.IsKeywordEnabled("FADE") ? UITransitionEffect.EffectMode.Fade
: mat.IsKeywordEnabled ("DISSOLVE") ? UITransitionEffect.EffectMode.Dissolve : mat.IsKeywordEnabled("DISSOLVE") ? UITransitionEffect.EffectMode.Dissolve
: (UITransitionEffect.EffectMode)0; : (UITransitionEffect.EffectMode)0;
if (mode == (UITransitionEffect.EffectMode)0) if (mode == (UITransitionEffect.EffectMode)0)
{ {
mode = UITransitionEffect.EffectMode.Cutoff; mode = UITransitionEffect.EffectMode.Cutoff;
mat.EnableKeyword ("CUTOFF"); mat.EnableKeyword("CUTOFF");
} }
bool hasChanged = d.transitionTexture != noiseTexture || d.effectMode != mode; bool hasChanged = d.transitionTexture != noiseTexture || d.effectMode != mode;
if (hasChanged) if (hasChanged)
{ {
var so = new SerializedObject (d); var so = new SerializedObject(d);
so.FindProperty ("m_TransitionTexture").objectReferenceValue = noiseTexture; so.FindProperty("m_TransitionTexture").objectReferenceValue = noiseTexture;
so.FindProperty ("m_EffectMode").intValue = (int)mode; so.FindProperty("m_EffectMode").intValue = (int)mode;
so.ApplyModifiedProperties (); so.ApplyModifiedProperties();
} }
} }
} }

View File

@ -1,7 +1,7 @@
using System; using System;
using UnityEngine; using UnityEngine;
using UnityEngine.UI;
using UnityEngine.Serialization; using UnityEngine.Serialization;
using UnityEngine.UI;
namespace Coffee.UIExtensions namespace Coffee.UIExtensions
{ {
@ -23,16 +23,16 @@ namespace Coffee.UIExtensions
//################################ //################################
[Tooltip("Current location[0-1] for dissolve effect. 0 is not dissolved, 1 is completely dissolved.")] [Tooltip("Current location[0-1] for dissolve effect. 0 is not dissolved, 1 is completely dissolved.")]
[FormerlySerializedAs("m_Location")] [FormerlySerializedAs("m_Location")]
[SerializeField] [Range(0, 1)] float m_EffectFactor = 0.5f; [SerializeField][Range(0, 1)] float m_EffectFactor = 0.5f;
[Tooltip("Edge width.")] [Tooltip("Edge width.")]
[SerializeField] [Range(0, 1)] float m_Width = 0.5f; [SerializeField][Range(0, 1)] float m_Width = 0.5f;
[Tooltip("Edge softness.")] [Tooltip("Edge softness.")]
[SerializeField] [Range(0, 1)] float m_Softness = 0.5f; [SerializeField][Range(0, 1)] float m_Softness = 0.5f;
[Tooltip("Edge color.")] [Tooltip("Edge color.")]
[SerializeField] [ColorUsage(false)] Color m_Color = new Color(0.0f, 0.25f, 1.0f); [SerializeField][ColorUsage(false)] Color m_Color = new Color(0.0f, 0.25f, 1.0f);
[Tooltip("Edge color effect mode.")] [Tooltip("Edge color effect mode.")]
[SerializeField] ColorMode m_ColorMode = ColorMode.Add; [SerializeField] ColorMode m_ColorMode = ColorMode.Add;
@ -54,12 +54,14 @@ namespace Coffee.UIExtensions
[FormerlySerializedAs("m_ReverseAnimation")] [FormerlySerializedAs("m_ReverseAnimation")]
[SerializeField] bool m_Reverse = false; [SerializeField] bool m_Reverse = false;
#pragma warning disable 0414 #pragma warning disable 0414
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField][Range(0.1f, 10)] float m_Duration = 1; [SerializeField][Range(0.1f, 10)] float m_Duration = 1;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] AnimatorUpdateMode m_UpdateMode = AnimatorUpdateMode.Normal; [SerializeField] AnimatorUpdateMode m_UpdateMode = AnimatorUpdateMode.Normal;
#pragma warning restore 0414 #pragma warning restore 0414
//################################ //################################
@ -197,7 +199,7 @@ namespace Coffee.UIExtensions
if (m_KeepAspectRatio != value) if (m_KeepAspectRatio != value)
{ {
m_KeepAspectRatio = value; m_KeepAspectRatio = value;
SetVerticesDirty (); SetVerticesDirty();
} }
} }
} }
@ -310,28 +312,28 @@ namespace Coffee.UIExtensions
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
vh.PopulateUIVertex(ref vertex, i); vh.PopulateUIVertex(ref vertex, i);
m_EffectArea.GetPositionFactor (i, rect, vertex.position, isText, isTMPro, out x, out y); m_EffectArea.GetPositionFactor(i, rect, vertex.position, isText, isTMPro, out x, out y);
vertex.uv0 = new Vector2( vertex.uv0 = new Vector2(
Packer.ToFloat(vertex.uv0.x, vertex.uv0.y), Packer.ToFloat(vertex.uv0.x, vertex.uv0.y),
Packer.ToFloat(x, y, normalizedIndex) Packer.ToFloat(x, y, normalizedIndex)
); );
// if(!isTMPro) // if(!isTMPro)
// { // {
// vertex.uv0 = new Vector2( // vertex.uv0 = new Vector2(
// Packer.ToFloat(vertex.uv0.x, vertex.uv0.y), // Packer.ToFloat(vertex.uv0.x, vertex.uv0.y),
// Packer.ToFloat(x, y, normalizedIndex) // Packer.ToFloat(x, y, normalizedIndex)
// ); // );
// } // }
// #if UNITY_5_6_OR_NEWER // #if UNITY_5_6_OR_NEWER
// else // else
// { // {
// vertex.uv2 = new Vector2 ( // vertex.uv2 = new Vector2 (
// Packer.ToFloat (x, y, normalizedIndex), // Packer.ToFloat (x, y, normalizedIndex),
// 0 // 0
// ); // );
// } // }
// #endif // #endif
vh.SetUIVertex(vertex, i); vh.SetUIVertex(vertex, i);
} }
@ -339,9 +341,9 @@ namespace Coffee.UIExtensions
protected override void SetDirty() protected override void SetDirty()
{ {
foreach(var m in materials) foreach (var m in materials)
{ {
ptex.RegisterMaterial (m); ptex.RegisterMaterial(m);
} }
ptex.SetData(this, 0, m_EffectFactor); // param1.x : location ptex.SetData(this, 0, m_EffectFactor); // param1.x : location
ptex.SetData(this, 1, m_Width); // param1.y : width ptex.SetData(this, 1, m_Width); // param1.y : width
@ -385,7 +387,7 @@ namespace Coffee.UIExtensions
protected override void OnDisable() protected override void OnDisable()
{ {
base.OnDisable (); base.OnDisable();
MaterialCache.Unregister(_materialCache); MaterialCache.Unregister(_materialCache);
_materialCache = null; _materialCache = null;
_player.OnDisable(); _player.OnDisable();
@ -406,7 +408,7 @@ namespace Coffee.UIExtensions
return MaterialResolver.GetOrGenerateMaterialVariant(Shader.Find(shaderName), m_ColorMode); return MaterialResolver.GetOrGenerateMaterialVariant(Shader.Find(shaderName), m_ColorMode);
} }
#pragma warning disable 0612 #pragma warning disable 0612
protected override void UpgradeIfNeeded() protected override void UpgradeIfNeeded()
{ {
// Upgrade for v3.0.0 // Upgrade for v3.0.0
@ -419,7 +421,7 @@ namespace Coffee.UIExtensions
_player.updateMode = m_UpdateMode; _player.updateMode = m_UpdateMode;
} }
} }
#pragma warning restore 0612 #pragma warning restore 0612
#endif #endif
//################################ //################################
@ -427,6 +429,6 @@ namespace Coffee.UIExtensions
//################################ //################################
MaterialCache _materialCache = null; MaterialCache _materialCache = null;
EffectPlayer _player{ get { return m_Player ?? (m_Player = new EffectPlayer()); } } EffectPlayer _player { get { return m_Player ?? (m_Player = new EffectPlayer()); } }
} }
} }

View File

@ -5,7 +5,6 @@ using UnityEngine.UI;
using UnityEngine.Serialization; using UnityEngine.Serialization;
#if UNITY_EDITOR #if UNITY_EDITOR
using System.IO;
using System.Linq; using System.Linq;
using UnityEditor; using UnityEditor;
#endif #endif
@ -55,22 +54,29 @@ namespace Coffee.UIExtensions
[Tooltip("Advanced blurring remove common artifacts in the blur effect for uGUI.")] [Tooltip("Advanced blurring remove common artifacts in the blur effect for uGUI.")]
[SerializeField] bool m_AdvancedBlur = false; [SerializeField] bool m_AdvancedBlur = false;
#pragma warning disable 0414 #pragma warning disable 0414
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField][Range(0, 1)] float m_ShadowBlur = 1; [SerializeField][Range(0, 1)] float m_ShadowBlur = 1;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] ShadowStyle m_ShadowStyle; [SerializeField] ShadowStyle m_ShadowStyle;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] Color m_ShadowColor = Color.black; [SerializeField] Color m_ShadowColor = Color.black;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] Vector2 m_EffectDistance = new Vector2(1f, -1f); [SerializeField] Vector2 m_EffectDistance = new Vector2(1f, -1f);
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] bool m_UseGraphicAlpha = true; [SerializeField] bool m_UseGraphicAlpha = true;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] Color m_EffectColor = Color.white; [SerializeField] Color m_EffectColor = Color.white;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] List<UIShadow.AdditionalShadow> m_AdditionalShadows = new List<UIShadow.AdditionalShadow>(); [SerializeField] List<UIShadow.AdditionalShadow> m_AdditionalShadows = new List<UIShadow.AdditionalShadow>();
#pragma warning restore 0414 #pragma warning restore 0414
public enum BlurEx public enum BlurEx
{ {
@ -295,9 +301,9 @@ namespace Coffee.UIExtensions
if (isTMPro) if (isTMPro)
{ {
#if UNITY_2017_1_OR_NEWER #if UNITY_2017_1_OR_NEWER
vt.uv2 = uvMask; vt.uv2 = uvMask;
#endif #endif
} }
else else
{ {
@ -333,7 +339,7 @@ namespace Coffee.UIExtensions
{ {
foreach (var m in materials) foreach (var m in materials)
{ {
ptex.RegisterMaterial (m); ptex.RegisterMaterial(m);
} }
ptex.SetData(this, 0, m_EffectFactor); // param.x : effect factor ptex.SetData(this, 0, m_EffectFactor); // param.x : effect factor
ptex.SetData(this, 1, m_ColorFactor); // param.y : color factor ptex.SetData(this, 1, m_ColorFactor); // param.y : color factor
@ -354,7 +360,7 @@ namespace Coffee.UIExtensions
return MaterialResolver.GetOrGenerateMaterialVariant(Shader.Find(shaderName), m_EffectMode, m_ColorMode, m_BlurMode, m_AdvancedBlur ? BlurEx.Ex : BlurEx.None); return MaterialResolver.GetOrGenerateMaterialVariant(Shader.Find(shaderName), m_EffectMode, m_ColorMode, m_BlurMode, m_AdvancedBlur ? BlurEx.Ex : BlurEx.None);
} }
#pragma warning disable 0612 #pragma warning disable 0612
protected override void UpgradeIfNeeded() protected override void UpgradeIfNeeded()
{ {
// Upgrade for v3.0.0 // Upgrade for v3.0.0
@ -438,7 +444,7 @@ namespace Coffee.UIExtensions
} }
} }
} }
#pragma warning restore 0612 #pragma warning restore 0612
#endif #endif
//################################ //################################

View File

@ -1,8 +1,8 @@
using System.Collections; using System.Collections;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.Rendering; using UnityEngine.Rendering;
using UnityEngine.Serialization;
using UnityEngine.UI; using UnityEngine.UI;
namespace Coffee.UIExtensions namespace Coffee.UIExtensions
@ -399,7 +399,7 @@ namespace Coffee.UIExtensions
} }
#endif #endif
// Execute command buffer. // Execute command buffer.
canvas.rootCanvas.GetComponent<CanvasScaler> ().StartCoroutine (_CoUpdateTextureOnNextFrame ()); canvas.rootCanvas.GetComponent<CanvasScaler>().StartCoroutine(_CoUpdateTextureOnNextFrame());
} }
/// <summary> /// <summary>
@ -523,7 +523,7 @@ namespace Coffee.UIExtensions
if (obj) if (obj)
{ {
obj.Release(); obj.Release();
RenderTexture.ReleaseTemporary (obj); RenderTexture.ReleaseTemporary(obj);
obj = null; obj = null;
} }
} }

View File

@ -1,6 +1,4 @@
using System; using UnityEngine;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
namespace Coffee.UIExtensions namespace Coffee.UIExtensions
@ -28,13 +26,13 @@ namespace Coffee.UIExtensions
/// Gets or sets a value indicating whether this <see cref="Coffee.UIExtensions.UIFlip"/> should be flipped horizontally. /// Gets or sets a value indicating whether this <see cref="Coffee.UIExtensions.UIFlip"/> should be flipped horizontally.
/// </summary> /// </summary>
/// <value><c>true</c> if be flipped horizontally; otherwise, <c>false</c>.</value> /// <value><c>true</c> if be flipped horizontally; otherwise, <c>false</c>.</value>
public bool horizontal { get { return this.m_Horizontal; } set { this.m_Horizontal = value; SetVerticesDirty (); } } public bool horizontal { get { return this.m_Horizontal; } set { this.m_Horizontal = value; SetVerticesDirty(); } }
/// <summary> /// <summary>
/// Gets or sets a value indicating whether this <see cref="Coffee.UIExtensions.UIFlip"/> should be flipped vertically. /// Gets or sets a value indicating whether this <see cref="Coffee.UIExtensions.UIFlip"/> should be flipped vertically.
/// </summary> /// </summary>
/// <value><c>true</c> if be flipped horizontally; otherwise, <c>false</c>.</value> /// <value><c>true</c> if be flipped horizontally; otherwise, <c>false</c>.</value>
public bool vertical { get { return this.m_Veritical; } set { this.m_Veritical = value; SetVerticesDirty (); } } public bool vertical { get { return this.m_Veritical; } set { this.m_Veritical = value; SetVerticesDirty(); } }
/// <summary> /// <summary>
/// Call used to modify mesh. /// Call used to modify mesh.

View File

@ -374,7 +374,7 @@ namespace Coffee.UIExtensions
m12 = dx * sin + dy * cos + center; m12 = dx * sin + dy * cos + center;
} }
public static Vector2 operator*(Matrix2x3 m, Vector2 v) public static Vector2 operator *(Matrix2x3 m, Vector2 v)
{ {
return new Vector2( return new Vector2(
(m.m00 * v.x) + (m.m01 * v.y) + m.m02, (m.m00 * v.x) + (m.m01 * v.y) + m.m02,

View File

@ -1,5 +1,4 @@
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization;
using UnityEngine.UI; using UnityEngine.UI;
@ -24,21 +23,21 @@ namespace Coffee.UIExtensions
[Header("Target")] [Header("Target")]
[Tooltip("Target color to affect hsv shift.")] [Tooltip("Target color to affect hsv shift.")]
[SerializeField] [ColorUsage(false)] Color m_TargetColor = Color.red; [SerializeField][ColorUsage(false)] Color m_TargetColor = Color.red;
[Tooltip("Color range to affect hsv shift [0 ~ 1].")] [Tooltip("Color range to affect hsv shift [0 ~ 1].")]
[SerializeField] [Range(0, 1)] float m_Range = 0.1f; [SerializeField][Range(0, 1)] float m_Range = 0.1f;
[Header("Adjustment")] [Header("Adjustment")]
[Tooltip("Hue shift [-0.5 ~ 0.5].")] [Tooltip("Hue shift [-0.5 ~ 0.5].")]
[SerializeField] [Range(-0.5f, 0.5f)] float m_Hue; [SerializeField][Range(-0.5f, 0.5f)] float m_Hue;
[Tooltip("Saturation shift [-0.5 ~ 0.5].")] [Tooltip("Saturation shift [-0.5 ~ 0.5].")]
[SerializeField] [Range(-0.5f, 0.5f)] float m_Saturation; [SerializeField][Range(-0.5f, 0.5f)] float m_Saturation;
[Tooltip("Value shift [-0.5 ~ 0.5].")] [Tooltip("Value shift [-0.5 ~ 0.5].")]
[SerializeField] [Range(-0.5f, 0.5f)] float m_Value; [SerializeField][Range(-0.5f, 0.5f)] float m_Value;
//################################ //################################
@ -175,7 +174,7 @@ namespace Coffee.UIExtensions
foreach (var m in materials) foreach (var m in materials)
{ {
ptex.RegisterMaterial (m); ptex.RegisterMaterial(m);
} }
ptex.SetData(this, 0, h); // param1.x : target hue ptex.SetData(this, 0, h); // param1.x : target hue

View File

@ -5,8 +5,6 @@ using UnityEngine.Serialization;
using UnityEngine.UI; using UnityEngine.UI;
#if UNITY_EDITOR #if UNITY_EDITOR
using System.IO;
using System.Linq;
using UnityEditor; using UnityEditor;
#endif #endif
@ -69,17 +67,18 @@ namespace Coffee.UIExtensions
[Tooltip("Shadow effect style.")] [Tooltip("Shadow effect style.")]
[SerializeField] ShadowStyle m_Style = ShadowStyle.Shadow; [SerializeField] ShadowStyle m_Style = ShadowStyle.Shadow;
#pragma warning disable 0414 #pragma warning disable 0414
[HideInInspector][System.Obsolete] [HideInInspector]
[System.Obsolete]
[SerializeField] List<AdditionalShadow> m_AdditionalShadows = new List<AdditionalShadow>(); [SerializeField] List<AdditionalShadow> m_AdditionalShadows = new List<AdditionalShadow>();
#pragma warning restore 0414 #pragma warning restore 0414
[SerializeField] [SerializeField]
private Color m_EffectColor = new Color (0f, 0f, 0f, 0.5f); private Color m_EffectColor = new Color(0f, 0f, 0f, 0.5f);
[SerializeField] [SerializeField]
private Vector2 m_EffectDistance = new Vector2 (1f, -1f); private Vector2 m_EffectDistance = new Vector2(1f, -1f);
[SerializeField] [SerializeField]
private bool m_UseGraphicAlpha = true; private bool m_UseGraphicAlpha = true;
@ -93,7 +92,7 @@ namespace Coffee.UIExtensions
{ {
m_EffectColor = value; m_EffectColor = value;
if (graphic != null) if (graphic != null)
graphic.SetVerticesDirty (); graphic.SetVerticesDirty();
} }
} }
@ -118,7 +117,7 @@ namespace Coffee.UIExtensions
m_EffectDistance = value; m_EffectDistance = value;
if (graphic != null) if (graphic != null)
graphic.SetVerticesDirty (); graphic.SetVerticesDirty();
} }
} }
@ -129,7 +128,7 @@ namespace Coffee.UIExtensions
{ {
m_UseGraphicAlpha = value; m_UseGraphicAlpha = value;
if (graphic != null) if (graphic != null)
graphic.SetVerticesDirty (); graphic.SetVerticesDirty();
} }
} }
@ -184,7 +183,7 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// Gets the parameter texture. /// Gets the parameter texture.
/// </summary> /// </summary>
public ParameterTexture ptex{ get; private set; } public ParameterTexture ptex { get; private set; }
int _graphicVertexCount; int _graphicVertexCount;
static readonly List<UIShadow> tmpShadows = new List<UIShadow>(); static readonly List<UIShadow> tmpShadows = new List<UIShadow>();
@ -200,12 +199,12 @@ namespace Coffee.UIExtensions
ptex.Register(this); ptex.Register(this);
} }
#if TMP_PRESENT #if TMP_PRESENT
if (isTMPro) if (isTMPro)
{ {
textMeshPro.onCullStateChanged.AddListener (OnCullStateChanged); textMeshPro.onCullStateChanged.AddListener (OnCullStateChanged);
} }
#endif #endif
} }
protected override void OnDisable() protected override void OnDisable()
@ -220,15 +219,15 @@ namespace Coffee.UIExtensions
} }
#if UNITY_EDITOR #if UNITY_EDITOR
protected override void OnValidate () protected override void OnValidate()
{ {
effectDistance = m_EffectDistance; effectDistance = m_EffectDistance;
base.OnValidate (); base.OnValidate();
} }
#endif #endif
#if TMP_PRESENT #if TMP_PRESENT
protected void OnCullStateChanged (bool state) protected void OnCullStateChanged (bool state)
{ {
SetVerticesDirty (); SetVerticesDirty ();
@ -249,7 +248,7 @@ namespace Coffee.UIExtensions
} }
base.LateUpdate (); base.LateUpdate ();
} }
#endif #endif
/// <summary> /// <summary>
/// Modifies the mesh. /// Modifies the mesh.
@ -433,7 +432,7 @@ namespace Coffee.UIExtensions
} }
#pragma warning disable 0612 #pragma warning disable 0612
void UpgradeIfNeeded() void UpgradeIfNeeded()
{ {
if (0 < m_AdditionalShadows.Count) if (0 < m_AdditionalShadows.Count)
@ -455,7 +454,7 @@ namespace Coffee.UIExtensions
m_AdditionalShadows = null; m_AdditionalShadows = null;
} }
} }
#pragma warning restore 0612 #pragma warning restore 0612
#endif #endif
} }
} }

View File

@ -1,14 +1,9 @@
using System; using System;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.Serialization; using UnityEngine.Serialization;
using UnityEngine.UI; using UnityEngine.UI;
using System.Collections;
#if UNITY_EDITOR #if UNITY_EDITOR
using System.IO;
using System.Linq;
using UnityEditor;
#endif #endif
namespace Coffee.UIExtensions namespace Coffee.UIExtensions
@ -31,13 +26,13 @@ namespace Coffee.UIExtensions
//################################ //################################
[Tooltip("Location for shiny effect.")] [Tooltip("Location for shiny effect.")]
[FormerlySerializedAs("m_Location")] [FormerlySerializedAs("m_Location")]
[SerializeField] [Range(0, 1)] float m_EffectFactor = 0; [SerializeField][Range(0, 1)] float m_EffectFactor = 0;
[Tooltip("Width for shiny effect.")] [Tooltip("Width for shiny effect.")]
[SerializeField] [Range(0, 1)] float m_Width = 0.25f; [SerializeField][Range(0, 1)] float m_Width = 0.25f;
[Tooltip("Rotation for shiny effect.")] [Tooltip("Rotation for shiny effect.")]
[SerializeField] [Range(-180, 180)] float m_Rotation; [SerializeField][Range(-180, 180)] float m_Rotation;
[Tooltip("Softness for shiny effect.")] [Tooltip("Softness for shiny effect.")]
[SerializeField][Range(0.01f, 1)] float m_Softness = 1f; [SerializeField][Range(0.01f, 1)] float m_Softness = 1f;
@ -56,18 +51,23 @@ namespace Coffee.UIExtensions
[SerializeField] EffectPlayer m_Player; [SerializeField] EffectPlayer m_Player;
#pragma warning disable 0414 #pragma warning disable 0414
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] bool m_Play = false; [SerializeField] bool m_Play = false;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] bool m_Loop = false; [SerializeField] bool m_Loop = false;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField][Range(0.1f, 10)] float m_Duration = 1; [SerializeField][Range(0.1f, 10)] float m_Duration = 1;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField][Range(0, 10)] float m_LoopDelay = 1; [SerializeField][Range(0, 10)] float m_LoopDelay = 1;
[Obsolete][HideInInspector] [Obsolete]
[HideInInspector]
[SerializeField] AnimatorUpdateMode m_UpdateMode = AnimatorUpdateMode.Normal; [SerializeField] AnimatorUpdateMode m_UpdateMode = AnimatorUpdateMode.Normal;
#pragma warning restore 0414 #pragma warning restore 0414
//################################ //################################
@ -224,7 +224,7 @@ namespace Coffee.UIExtensions
if (!Mathf.Approximately(m_Rotation, value)) if (!Mathf.Approximately(m_Rotation, value))
{ {
m_Rotation = _lastRotation = value; m_Rotation = _lastRotation = value;
SetVerticesDirty (); SetVerticesDirty();
} }
} }
} }
@ -240,7 +240,7 @@ namespace Coffee.UIExtensions
if (m_EffectArea != value) if (m_EffectArea != value)
{ {
m_EffectArea = value; m_EffectArea = value;
SetVerticesDirty (); SetVerticesDirty();
} }
} }
} }
@ -248,7 +248,7 @@ namespace Coffee.UIExtensions
/// <summary> /// <summary>
/// Play shinning on enable. /// Play shinning on enable.
/// </summary> /// </summary>
[System.Obsolete ("Use Play/Stop method instead")] [System.Obsolete("Use Play/Stop method instead")]
public bool play { get { return _player.play; } set { _player.play = value; } } public bool play { get { return _player.play; } set { _player.play = value; } }
/// <summary> /// <summary>
@ -308,7 +308,7 @@ namespace Coffee.UIExtensions
return MaterialResolver.GetOrGenerateMaterialVariant(Shader.Find(shaderName)); return MaterialResolver.GetOrGenerateMaterialVariant(Shader.Find(shaderName));
} }
#pragma warning disable 0612 #pragma warning disable 0612
protected override void UpgradeIfNeeded() protected override void UpgradeIfNeeded()
{ {
// Upgrade for v3.0.0 // Upgrade for v3.0.0
@ -321,7 +321,7 @@ namespace Coffee.UIExtensions
_player.updateMode = m_UpdateMode; _player.updateMode = m_UpdateMode;
} }
} }
#pragma warning restore 0612 #pragma warning restore 0612
#endif #endif
@ -337,7 +337,7 @@ namespace Coffee.UIExtensions
float normalizedIndex = ptex.GetNormalizedIndex(this); float normalizedIndex = ptex.GetNormalizedIndex(this);
// rect. // rect.
Rect rect = m_EffectArea.GetEffectArea (vh, rectTransform.rect); Rect rect = m_EffectArea.GetEffectArea(vh, rectTransform.rect);
// rotation. // rotation.
float rad = m_Rotation * Mathf.Deg2Rad; float rad = m_Rotation * Mathf.Deg2Rad;
@ -352,11 +352,11 @@ namespace Coffee.UIExtensions
for (int i = 0; i < vh.currentVertCount; i++) for (int i = 0; i < vh.currentVertCount; i++)
{ {
vh.PopulateUIVertex(ref vertex, i); vh.PopulateUIVertex(ref vertex, i);
m_EffectArea.GetNormalizedFactor (i, localMatrix, vertex.position, isText, out nomalizedPos); m_EffectArea.GetNormalizedFactor(i, localMatrix, vertex.position, isText, out nomalizedPos);
vertex.uv0 = new Vector2 ( vertex.uv0 = new Vector2(
Packer.ToFloat (vertex.uv0.x, vertex.uv0.y), Packer.ToFloat(vertex.uv0.x, vertex.uv0.y),
Packer.ToFloat (nomalizedPos.y, normalizedIndex) Packer.ToFloat(nomalizedPos.y, normalizedIndex)
); );
vh.SetUIVertex(vertex, i); vh.SetUIVertex(vertex, i);
@ -383,7 +383,7 @@ namespace Coffee.UIExtensions
{ {
foreach (var m in materials) foreach (var m in materials)
{ {
ptex.RegisterMaterial (m); ptex.RegisterMaterial(m);
} }
ptex.SetData(this, 0, m_EffectFactor); // param1.x : location ptex.SetData(this, 0, m_EffectFactor); // param1.x : location
ptex.SetData(this, 1, m_Width); // param1.y : width ptex.SetData(this, 1, m_Width); // param1.y : width
@ -403,6 +403,6 @@ namespace Coffee.UIExtensions
//################################ //################################
float _lastRotation; float _lastRotation;
EffectPlayer _player{ get { return m_Player ?? (m_Player = new EffectPlayer()); } } EffectPlayer _player { get { return m_Player ?? (m_Player = new EffectPlayer()); } }
} }
} }

View File

@ -1,6 +1,5 @@
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using UnityEngine.Serialization;
namespace Coffee.UIExtensions namespace Coffee.UIExtensions
{ {
@ -47,13 +46,13 @@ namespace Coffee.UIExtensions
[SerializeField] bool m_KeepAspectRatio; [SerializeField] bool m_KeepAspectRatio;
[Tooltip("Dissolve edge width.")] [Tooltip("Dissolve edge width.")]
[SerializeField] [Range(0, 1)] float m_DissolveWidth = 0.5f; [SerializeField][Range(0, 1)] float m_DissolveWidth = 0.5f;
[Tooltip("Dissolve edge softness.")] [Tooltip("Dissolve edge softness.")]
[SerializeField] [Range(0, 1)] float m_DissolveSoftness = 0.5f; [SerializeField][Range(0, 1)] float m_DissolveSoftness = 0.5f;
[Tooltip("Dissolve edge color.")] [Tooltip("Dissolve edge color.")]
[SerializeField] [ColorUsage(false)] Color m_DissolveColor = new Color(0.0f, 0.25f, 1.0f); [SerializeField][ColorUsage(false)] Color m_DissolveColor = new Color(0.0f, 0.25f, 1.0f);
[Tooltip("Disable graphic's raycast target on hidden.")] [Tooltip("Disable graphic's raycast target on hidden.")]
[SerializeField] bool m_PassRayOnHidden; [SerializeField] bool m_PassRayOnHidden;
@ -263,12 +262,12 @@ namespace Coffee.UIExtensions
} }
bool isText = isTMPro || graphic is Text; bool isText = isTMPro || graphic is Text;
float normalizedIndex = ptex.GetNormalizedIndex (this); float normalizedIndex = ptex.GetNormalizedIndex(this);
// rect. // rect.
var tex = transitionTexture; var tex = transitionTexture;
var aspectRatio = m_KeepAspectRatio && tex ? ((float)tex.width) / tex.height : -1; var aspectRatio = m_KeepAspectRatio && tex ? ((float)tex.width) / tex.height : -1;
Rect rect = m_EffectArea.GetEffectArea (vh, rectTransform.rect, aspectRatio); Rect rect = m_EffectArea.GetEffectArea(vh, rectTransform.rect, aspectRatio);
// Set prameters to vertex. // Set prameters to vertex.
UIVertex vertex = default(UIVertex); UIVertex vertex = default(UIVertex);
@ -277,11 +276,11 @@ namespace Coffee.UIExtensions
for (int i = 0; i < count; i++) for (int i = 0; i < count; i++)
{ {
vh.PopulateUIVertex(ref vertex, i); vh.PopulateUIVertex(ref vertex, i);
m_EffectArea.GetPositionFactor (i, rect, vertex.position, isText, isTMPro, out x, out y); m_EffectArea.GetPositionFactor(i, rect, vertex.position, isText, isTMPro, out x, out y);
vertex.uv0 = new Vector2 ( vertex.uv0 = new Vector2(
Packer.ToFloat (vertex.uv0.x, vertex.uv0.y), Packer.ToFloat(vertex.uv0.x, vertex.uv0.y),
Packer.ToFloat (x, y, normalizedIndex) Packer.ToFloat(x, y, normalizedIndex)
); );
vh.SetUIVertex(vertex, i); vh.SetUIVertex(vertex, i);
} }
@ -306,7 +305,7 @@ namespace Coffee.UIExtensions
/// </summary> /// </summary>
protected override void OnDisable() protected override void OnDisable()
{ {
base.OnDisable (); base.OnDisable();
MaterialCache.Unregister(_materialCache); MaterialCache.Unregister(_materialCache);
_materialCache = null; _materialCache = null;
_player.OnDisable(); _player.OnDisable();
@ -316,7 +315,7 @@ namespace Coffee.UIExtensions
{ {
foreach (var m in materials) foreach (var m in materials)
{ {
ptex.RegisterMaterial (m); ptex.RegisterMaterial(m);
} }
ptex.SetData(this, 0, m_EffectFactor); // param1.x : effect factor ptex.SetData(this, 0, m_EffectFactor); // param1.x : effect factor
if (m_EffectMode == EffectMode.Dissolve) if (m_EffectMode == EffectMode.Dissolve)
@ -351,6 +350,6 @@ namespace Coffee.UIExtensions
//################################ //################################
MaterialCache _materialCache = null; MaterialCache _materialCache = null;
EffectPlayer _player{ get { return m_Player ?? (m_Player = new EffectPlayer()); } } EffectPlayer _player { get { return m_Player ?? (m_Player = new EffectPlayer()); } }
} }
} }

View File

@ -2,7 +2,6 @@
// Created: 2018/07/13 // Created: 2018/07/13
#if true // MODULE_MARKER #if true // MODULE_MARKER
using System;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using UnityEngine; using UnityEngine;
@ -50,11 +49,12 @@ namespace DG.Tweening
/// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param> /// <param name="endValue">The end value to reach</param><param name="duration">The duration of the tween</param>
public static TweenerCore<float, float, FloatOptions> DOSetFloat(this AudioMixer target, string floatName, float endValue, float duration) public static TweenerCore<float, float, FloatOptions> DOSetFloat(this AudioMixer target, string floatName, float endValue, float duration)
{ {
TweenerCore<float, float, FloatOptions> t = DOTween.To(()=> { TweenerCore<float, float, FloatOptions> t = DOTween.To(() =>
{
float currVal; float currVal;
target.GetFloat(floatName, out currVal); target.GetFloat(floatName, out currVal);
return currVal; return currVal;
}, x=> target.SetFloat(floatName, x), endValue, duration); }, x => target.SetFloat(floatName, x), endValue, duration);
t.SetTarget(target); t.SetTarget(target);
return t; return t;
} }

View File

@ -1,6 +1,4 @@
using UnityEngine; #if false || EPO_DOTWEEN // MODULE_MARKER
#if false || EPO_DOTWEEN // MODULE_MARKER
using EPOOutline; using EPOOutline;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;

View File

@ -2,7 +2,6 @@
// Created: 2018/07/13 // Created: 2018/07/13
#if true // MODULE_MARKER #if true // MODULE_MARKER
using System;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Core.Enums; using DG.Tweening.Core.Enums;
using DG.Tweening.Plugins; using DG.Tweening.Plugins;
@ -116,8 +115,10 @@ namespace DG.Tweening
.SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear) .SetOptions(AxisConstraint.Z, snapping).SetEase(Ease.Linear)
).Join(yTween) ).Join(yTween)
.SetTarget(target).SetEase(DOTween.defaultEaseType); .SetTarget(target).SetEase(DOTween.defaultEaseType);
yTween.OnUpdate(() => { yTween.OnUpdate(() =>
if (!offsetYSet) { {
if (!offsetYSet)
{
offsetYSet = true; offsetYSet = true;
offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; offsetY = s.isRelative ? endValue.y : endValue.y - startPosY;
} }

View File

@ -2,7 +2,6 @@
// Created: 2018/07/13 // Created: 2018/07/13
#if true // MODULE_MARKER #if true // MODULE_MARKER
using System;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins; using DG.Tweening.Plugins;
using DG.Tweening.Plugins.Core.PathCore; using DG.Tweening.Plugins.Core.PathCore;
@ -87,8 +86,10 @@ namespace DG.Tweening
.SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear)
).Join(yTween) ).Join(yTween)
.SetTarget(target).SetEase(DOTween.defaultEaseType); .SetTarget(target).SetEase(DOTween.defaultEaseType);
yTween.OnUpdate(() => { yTween.OnUpdate(() =>
if (!offsetYSet) { {
if (!offsetYSet)
{
offsetYSet = true; offsetYSet = true;
offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; offsetY = s.isRelative ? endValue.y : endValue.y - startPosY;
} }

View File

@ -2,10 +2,9 @@
// Created: 2018/07/13 // Created: 2018/07/13
#if true // MODULE_MARKER #if true // MODULE_MARKER
using System;
using UnityEngine;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using UnityEngine;
#pragma warning disable 1591 #pragma warning disable 1591
namespace DG.Tweening namespace DG.Tweening
@ -45,9 +44,11 @@ namespace DG.Tweening
Sequence s = DOTween.Sequence(); Sequence s = DOTween.Sequence();
GradientColorKey[] colors = gradient.colorKeys; GradientColorKey[] colors = gradient.colorKeys;
int len = colors.Length; int len = colors.Length;
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i)
{
GradientColorKey c = colors[i]; GradientColorKey c = colors[i];
if (i == 0 && c.time <= 0) { if (i == 0 && c.time <= 0)
{
target.color = c.color; target.color = c.color;
continue; continue;
} }
@ -75,7 +76,8 @@ namespace DG.Tweening
{ {
endValue = endValue - target.color; endValue = endValue - target.color;
Color to = new Color(0, 0, 0, 0); Color to = new Color(0, 0, 0, 0);
return DOTween.To(() => to, x => { return DOTween.To(() => to, x =>
{
Color diff = x - to; Color diff = x - to;
to = x; to = x;
target.color += diff; target.color += diff;

View File

@ -3,14 +3,13 @@
#if true // MODULE_MARKER #if true // MODULE_MARKER
using System;
using System.Globalization;
using UnityEngine;
using UnityEngine.UI;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Core.Enums; using DG.Tweening.Core.Enums;
using DG.Tweening.Plugins; using DG.Tweening.Plugins;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using System.Globalization;
using UnityEngine;
using UnityEngine.UI;
using Outline = UnityEngine.UI.Outline; using Outline = UnityEngine.UI.Outline;
using Text = UnityEngine.UI.Text; using Text = UnityEngine.UI.Text;
@ -102,9 +101,11 @@ namespace DG.Tweening
Sequence s = DOTween.Sequence(); Sequence s = DOTween.Sequence();
GradientColorKey[] colors = gradient.colorKeys; GradientColorKey[] colors = gradient.colorKeys;
int len = colors.Length; int len = colors.Length;
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i)
{
GradientColorKey c = colors[i]; GradientColorKey c = colors[i];
if (i == 0 && c.time <= 0) { if (i == 0 && c.time <= 0)
{
target.color = c.color; target.color = c.color;
continue; continue;
} }
@ -127,7 +128,8 @@ namespace DG.Tweening
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param> /// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOFlexibleSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) public static TweenerCore<Vector2, Vector2, VectorOptions> DOFlexibleSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false)
{ {
TweenerCore<Vector2, Vector2, VectorOptions> t = DOTween.To(() => new Vector2(target.flexibleWidth, target.flexibleHeight), x => { TweenerCore<Vector2, Vector2, VectorOptions> t = DOTween.To(() => new Vector2(target.flexibleWidth, target.flexibleHeight), x =>
{
target.flexibleWidth = x.x; target.flexibleWidth = x.x;
target.flexibleHeight = x.y; target.flexibleHeight = x.y;
}, endValue, duration); }, endValue, duration);
@ -141,7 +143,8 @@ namespace DG.Tweening
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param> /// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOMinSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) public static TweenerCore<Vector2, Vector2, VectorOptions> DOMinSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false)
{ {
TweenerCore<Vector2, Vector2, VectorOptions> t = DOTween.To(() => new Vector2(target.minWidth, target.minHeight), x => { TweenerCore<Vector2, Vector2, VectorOptions> t = DOTween.To(() => new Vector2(target.minWidth, target.minHeight), x =>
{
target.minWidth = x.x; target.minWidth = x.x;
target.minHeight = x.y; target.minHeight = x.y;
}, endValue, duration); }, endValue, duration);
@ -155,7 +158,8 @@ namespace DG.Tweening
/// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param> /// <param name="snapping">If TRUE the tween will smoothly snap all values to integers</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOPreferredSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false) public static TweenerCore<Vector2, Vector2, VectorOptions> DOPreferredSize(this LayoutElement target, Vector2 endValue, float duration, bool snapping = false)
{ {
TweenerCore<Vector2, Vector2, VectorOptions> t = DOTween.To(() => new Vector2(target.preferredWidth, target.preferredHeight), x => { TweenerCore<Vector2, Vector2, VectorOptions> t = DOTween.To(() => new Vector2(target.preferredWidth, target.preferredHeight), x =>
{
target.preferredWidth = x.x; target.preferredWidth = x.x;
target.preferredHeight = x.y; target.preferredHeight = x.y;
}, endValue, duration); }, endValue, duration);
@ -404,13 +408,15 @@ namespace DG.Tweening
Tween yTween = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, jumpPower), duration / (numJumps * 2)) Tween yTween = DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(0, jumpPower), duration / (numJumps * 2))
.SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative() .SetOptions(AxisConstraint.Y, snapping).SetEase(Ease.OutQuad).SetRelative()
.SetLoops(numJumps * 2, LoopType.Yoyo) .SetLoops(numJumps * 2, LoopType.Yoyo)
.OnStart(()=> startPosY = target.anchoredPosition.y); .OnStart(() => startPosY = target.anchoredPosition.y);
s.Append(DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue.x, 0), duration) s.Append(DOTween.To(() => target.anchoredPosition, x => target.anchoredPosition = x, new Vector2(endValue.x, 0), duration)
.SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear) .SetOptions(AxisConstraint.X, snapping).SetEase(Ease.Linear)
).Join(yTween) ).Join(yTween)
.SetTarget(target).SetEase(DOTween.defaultEaseType); .SetTarget(target).SetEase(DOTween.defaultEaseType);
s.OnUpdate(() => { s.OnUpdate(() =>
if (!offsetYSet) { {
if (!offsetYSet)
{
offsetYSet = true; offsetYSet = true;
offsetY = s.isRelative ? endValue.y : endValue.y - startPosY; offsetY = s.isRelative ? endValue.y : endValue.y - startPosY;
} }
@ -434,7 +440,8 @@ namespace DG.Tweening
public static Tweener DONormalizedPos(this ScrollRect target, Vector2 endValue, float duration, bool snapping = false) public static Tweener DONormalizedPos(this ScrollRect target, Vector2 endValue, float duration, bool snapping = false)
{ {
return DOTween.To(() => new Vector2(target.horizontalNormalizedPosition, target.verticalNormalizedPosition), return DOTween.To(() => new Vector2(target.horizontalNormalizedPosition, target.verticalNormalizedPosition),
x => { x =>
{
target.horizontalNormalizedPosition = x.x; target.horizontalNormalizedPosition = x.x;
target.verticalNormalizedPosition = x.y; target.verticalNormalizedPosition = x.y;
}, endValue, duration) }, endValue, duration)
@ -498,10 +505,12 @@ namespace DG.Tweening
/// <param name="culture">The <see cref="CultureInfo"/> to use (InvariantCulture if NULL)</param> /// <param name="culture">The <see cref="CultureInfo"/> to use (InvariantCulture if NULL)</param>
public static TweenerCore<int, int, NoOptions> DOCounter( public static TweenerCore<int, int, NoOptions> DOCounter(
this Text target, int fromValue, int endValue, float duration, bool addThousandsSeparator = true, CultureInfo culture = null this Text target, int fromValue, int endValue, float duration, bool addThousandsSeparator = true, CultureInfo culture = null
){ )
{
int v = fromValue; int v = fromValue;
CultureInfo cInfo = !addThousandsSeparator ? null : culture ?? CultureInfo.InvariantCulture; CultureInfo cInfo = !addThousandsSeparator ? null : culture ?? CultureInfo.InvariantCulture;
TweenerCore<int, int, NoOptions> t = DOTween.To(() => v, x => { TweenerCore<int, int, NoOptions> t = DOTween.To(() => v, x =>
{
v = x; v = x;
target.text = addThousandsSeparator target.text = addThousandsSeparator
? v.ToString("N0", cInfo) ? v.ToString("N0", cInfo)
@ -532,7 +541,8 @@ namespace DG.Tweening
/// Leave it to NULL (default) to use default ones</param> /// Leave it to NULL (default) to use default ones</param>
public static TweenerCore<string, string, StringOptions> DOText(this Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null) public static TweenerCore<string, string, StringOptions> DOText(this Text target, string endValue, float duration, bool richTextEnabled = true, ScrambleMode scrambleMode = ScrambleMode.None, string scrambleChars = null)
{ {
if (endValue == null) { if (endValue == null)
{
if (Debugger.logPriority > 0) Debugger.LogWarning("You can't pass a NULL string to DOText: an empty string will be used instead to avoid errors"); if (Debugger.logPriority > 0) Debugger.LogWarning("You can't pass a NULL string to DOText: an empty string will be used instead to avoid errors");
endValue = ""; endValue = "";
} }
@ -557,7 +567,8 @@ namespace DG.Tweening
{ {
endValue = endValue - target.color; endValue = endValue - target.color;
Color to = new Color(0, 0, 0, 0); Color to = new Color(0, 0, 0, 0);
return DOTween.To(() => to, x => { return DOTween.To(() => to, x =>
{
Color diff = x - to; Color diff = x - to;
to = x; to = x;
target.color += diff; target.color += diff;
@ -578,7 +589,8 @@ namespace DG.Tweening
{ {
endValue = endValue - target.color; endValue = endValue - target.color;
Color to = new Color(0, 0, 0, 0); Color to = new Color(0, 0, 0, 0);
return DOTween.To(() => to, x => { return DOTween.To(() => to, x =>
{
Color diff = x - to; Color diff = x - to;
to = x; to = x;
target.color += diff; target.color += diff;
@ -599,7 +611,8 @@ namespace DG.Tweening
{ {
endValue = endValue - target.color; endValue = endValue - target.color;
Color to = new Color(0, 0, 0, 0); Color to = new Color(0, 0, 0, 0);
return DOTween.To(() => to, x => { return DOTween.To(() => to, x =>
{
Color diff = x - to; Color diff = x - to;
to = x; to = x;
target.color += diff; target.color += diff;

View File

@ -1,10 +1,9 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
using System;
using UnityEngine;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using UnityEngine;
//#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0) //#if UNITY_2018_1_OR_NEWER && (NET_4_6 || NET_STANDARD_2_0)
//using Task = System.Threading.Tasks.Task; //using Task = System.Threading.Tasks.Task;
//#endif //#endif
@ -29,9 +28,11 @@ namespace DG.Tweening
Sequence s = DOTween.Sequence(); Sequence s = DOTween.Sequence();
GradientColorKey[] colors = gradient.colorKeys; GradientColorKey[] colors = gradient.colorKeys;
int len = colors.Length; int len = colors.Length;
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i)
{
GradientColorKey c = colors[i]; GradientColorKey c = colors[i];
if (i == 0 && c.time <= 0) { if (i == 0 && c.time <= 0)
{
target.color = c.color; target.color = c.color;
continue; continue;
} }
@ -54,9 +55,11 @@ namespace DG.Tweening
Sequence s = DOTween.Sequence(); Sequence s = DOTween.Sequence();
GradientColorKey[] colors = gradient.colorKeys; GradientColorKey[] colors = gradient.colorKeys;
int len = colors.Length; int len = colors.Length;
for (int i = 0; i < len; ++i) { for (int i = 0; i < len; ++i)
{
GradientColorKey c = colors[i]; GradientColorKey c = colors[i];
if (i == 0 && c.time <= 0) { if (i == 0 && c.time <= 0)
{
target.SetColor(property, c.color); target.SetColor(property, c.color);
continue; continue;
} }
@ -80,7 +83,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static CustomYieldInstruction WaitForCompletion(this Tween t, bool returnCustomYieldInstruction) public static CustomYieldInstruction WaitForCompletion(this Tween t, bool returnCustomYieldInstruction)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return null; return null;
} }
@ -94,7 +98,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static CustomYieldInstruction WaitForRewind(this Tween t, bool returnCustomYieldInstruction) public static CustomYieldInstruction WaitForRewind(this Tween t, bool returnCustomYieldInstruction)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return null; return null;
} }
@ -108,7 +113,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static CustomYieldInstruction WaitForKill(this Tween t, bool returnCustomYieldInstruction) public static CustomYieldInstruction WaitForKill(this Tween t, bool returnCustomYieldInstruction)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return null; return null;
} }
@ -123,7 +129,8 @@ namespace DG.Tweening
/// <param name="elapsedLoops">Elapsed loops to wait for</param> /// <param name="elapsedLoops">Elapsed loops to wait for</param>
public static CustomYieldInstruction WaitForElapsedLoops(this Tween t, int elapsedLoops, bool returnCustomYieldInstruction) public static CustomYieldInstruction WaitForElapsedLoops(this Tween t, int elapsedLoops, bool returnCustomYieldInstruction)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return null; return null;
} }
@ -139,7 +146,8 @@ namespace DG.Tweening
/// <param name="position">Position (loops included, delays excluded) to wait for</param> /// <param name="position">Position (loops included, delays excluded) to wait for</param>
public static CustomYieldInstruction WaitForPosition(this Tween t, float position, bool returnCustomYieldInstruction) public static CustomYieldInstruction WaitForPosition(this Tween t, float position, bool returnCustomYieldInstruction)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return null; return null;
} }
@ -154,7 +162,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static CustomYieldInstruction WaitForStart(this Tween t, bool returnCustomYieldInstruction) public static CustomYieldInstruction WaitForStart(this Tween t, bool returnCustomYieldInstruction)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return null; return null;
} }
@ -175,7 +184,8 @@ namespace DG.Tweening
/// <param name="duration">The duration of the tween</param> /// <param name="duration">The duration of the tween</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOOffset(this Material target, Vector2 endValue, int propertyID, float duration) public static TweenerCore<Vector2, Vector2, VectorOptions> DOOffset(this Material target, Vector2 endValue, int propertyID, float duration)
{ {
if (!target.HasProperty(propertyID)) { if (!target.HasProperty(propertyID))
{
if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID);
return null; return null;
} }
@ -191,7 +201,8 @@ namespace DG.Tweening
/// <param name="duration">The duration of the tween</param> /// <param name="duration">The duration of the tween</param>
public static TweenerCore<Vector2, Vector2, VectorOptions> DOTiling(this Material target, Vector2 endValue, int propertyID, float duration) public static TweenerCore<Vector2, Vector2, VectorOptions> DOTiling(this Material target, Vector2 endValue, int propertyID, float duration)
{ {
if (!target.HasProperty(propertyID)) { if (!target.HasProperty(propertyID))
{
if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID); if (Debugger.logPriority > 0) Debugger.LogMissingMaterialProperty(propertyID);
return null; return null;
} }
@ -215,7 +226,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static async System.Threading.Tasks.Task AsyncWaitForCompletion(this Tween t) public static async System.Threading.Tasks.Task AsyncWaitForCompletion(this Tween t)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return; return;
} }
@ -229,7 +241,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static async System.Threading.Tasks.Task AsyncWaitForRewind(this Tween t) public static async System.Threading.Tasks.Task AsyncWaitForRewind(this Tween t)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return; return;
} }
@ -243,7 +256,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static async System.Threading.Tasks.Task AsyncWaitForKill(this Tween t) public static async System.Threading.Tasks.Task AsyncWaitForKill(this Tween t)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return; return;
} }
@ -258,7 +272,8 @@ namespace DG.Tweening
/// <param name="elapsedLoops">Elapsed loops to wait for</param> /// <param name="elapsedLoops">Elapsed loops to wait for</param>
public static async System.Threading.Tasks.Task AsyncWaitForElapsedLoops(this Tween t, int elapsedLoops) public static async System.Threading.Tasks.Task AsyncWaitForElapsedLoops(this Tween t, int elapsedLoops)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return; return;
} }
@ -274,7 +289,8 @@ namespace DG.Tweening
/// <param name="position">Position (loops included, delays excluded) to wait for</param> /// <param name="position">Position (loops included, delays excluded) to wait for</param>
public static async System.Threading.Tasks.Task AsyncWaitForPosition(this Tween t, float position) public static async System.Threading.Tasks.Task AsyncWaitForPosition(this Tween t, float position)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return; return;
} }
@ -288,7 +304,8 @@ namespace DG.Tweening
/// </summary> /// </summary>
public static async System.Threading.Tasks.Task AsyncWaitForStart(this Tween t) public static async System.Threading.Tasks.Task AsyncWaitForStart(this Tween t)
{ {
if (!t.active) { if (!t.active)
{
if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t); if (Debugger.logPriority > 0) Debugger.LogInvalidTween(t);
return; return;
} }
@ -312,9 +329,13 @@ namespace DG.Tweening
{ {
public class WaitForCompletion : CustomYieldInstruction public class WaitForCompletion : CustomYieldInstruction
{ {
public override bool keepWaiting { get { public override bool keepWaiting
{
get
{
return t.active && !t.IsComplete(); return t.active && !t.IsComplete();
}} }
}
readonly Tween t; readonly Tween t;
public WaitForCompletion(Tween tween) public WaitForCompletion(Tween tween)
{ {
@ -324,9 +345,13 @@ namespace DG.Tweening
public class WaitForRewind : CustomYieldInstruction public class WaitForRewind : CustomYieldInstruction
{ {
public override bool keepWaiting { get { public override bool keepWaiting
{
get
{
return t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0); return t.active && (!t.playedOnce || t.position * (t.CompletedLoops() + 1) > 0);
}} }
}
readonly Tween t; readonly Tween t;
public WaitForRewind(Tween tween) public WaitForRewind(Tween tween)
{ {
@ -336,9 +361,13 @@ namespace DG.Tweening
public class WaitForKill : CustomYieldInstruction public class WaitForKill : CustomYieldInstruction
{ {
public override bool keepWaiting { get { public override bool keepWaiting
{
get
{
return t.active; return t.active;
}} }
}
readonly Tween t; readonly Tween t;
public WaitForKill(Tween tween) public WaitForKill(Tween tween)
{ {
@ -348,9 +377,13 @@ namespace DG.Tweening
public class WaitForElapsedLoops : CustomYieldInstruction public class WaitForElapsedLoops : CustomYieldInstruction
{ {
public override bool keepWaiting { get { public override bool keepWaiting
{
get
{
return t.active && t.CompletedLoops() < elapsedLoops; return t.active && t.CompletedLoops() < elapsedLoops;
}} }
}
readonly Tween t; readonly Tween t;
readonly int elapsedLoops; readonly int elapsedLoops;
public WaitForElapsedLoops(Tween tween, int elapsedLoops) public WaitForElapsedLoops(Tween tween, int elapsedLoops)
@ -362,9 +395,13 @@ namespace DG.Tweening
public class WaitForPosition : CustomYieldInstruction public class WaitForPosition : CustomYieldInstruction
{ {
public override bool keepWaiting { get { public override bool keepWaiting
{
get
{
return t.active && t.position * (t.CompletedLoops() + 1) < position; return t.active && t.position * (t.CompletedLoops() + 1) < position;
}} }
}
readonly Tween t; readonly Tween t;
readonly float position; readonly float position;
public WaitForPosition(Tween tween, float position) public WaitForPosition(Tween tween, float position)
@ -376,9 +413,13 @@ namespace DG.Tweening
public class WaitForStart : CustomYieldInstruction public class WaitForStart : CustomYieldInstruction
{ {
public override bool keepWaiting { get { public override bool keepWaiting
{
get
{
return t.active && !t.playedOnce; return t.active && !t.playedOnce;
}} }
}
readonly Tween t; readonly Tween t;
public WaitForStart(Tween tween) public WaitForStart(Tween tween)
{ {

View File

@ -1,12 +1,12 @@
// Author: Daniele Giardini - http://www.demigiant.com // Author: Daniele Giardini - http://www.demigiant.com
// Created: 2018/07/13 // Created: 2018/07/13
using System;
using System.Reflection;
using UnityEngine;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins.Core.PathCore; using DG.Tweening.Plugins.Core.PathCore;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using System;
using System.Reflection;
using UnityEngine;
#pragma warning disable 1591 #pragma warning disable 1591
namespace DG.Tweening namespace DG.Tweening
@ -69,7 +69,7 @@ namespace DG.Tweening
// Fires OnApplicationPause in DOTweenComponent even when Editor is paused (otherwise it's only fired at runtime) // Fires OnApplicationPause in DOTweenComponent even when Editor is paused (otherwise it's only fired at runtime)
#if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1 #if UNITY_4_3 || UNITY_4_4 || UNITY_4_5 || UNITY_4_6 || UNITY_5 || UNITY_2017_1
static void PlaymodeStateChanged() static void PlaymodeStateChanged()
#else #else
static void PlaymodeStateChanged(UnityEditor.PlayModeStateChange state) static void PlaymodeStateChanged(UnityEditor.PlayModeStateChange state)
#endif #endif
{ {
@ -128,13 +128,16 @@ namespace DG.Tweening
#endif #endif
public static TweenerCore<Vector3, Path, PathOptions> CreateDOTweenPathTween( public static TweenerCore<Vector3, Path, PathOptions> CreateDOTweenPathTween(
MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode MonoBehaviour target, bool tweenRigidbody, bool isLocal, Path path, float duration, PathMode pathMode
){ )
{
TweenerCore<Vector3, Path, PathOptions> t = null; TweenerCore<Vector3, Path, PathOptions> t = null;
bool rBodyFoundAndTweened = false; bool rBodyFoundAndTweened = false;
#if true // PHYSICS_MARKER #if true // PHYSICS_MARKER
if (tweenRigidbody) { if (tweenRigidbody)
{
Rigidbody rBody = target.GetComponent<Rigidbody>(); Rigidbody rBody = target.GetComponent<Rigidbody>();
if (rBody != null) { if (rBody != null)
{
rBodyFoundAndTweened = true; rBodyFoundAndTweened = true;
t = isLocal t = isLocal
? rBody.DOLocalPath(path, duration, pathMode) ? rBody.DOLocalPath(path, duration, pathMode)
@ -143,9 +146,11 @@ namespace DG.Tweening
} }
#endif #endif
#if true // PHYSICS2D_MARKER #if true // PHYSICS2D_MARKER
if (!rBodyFoundAndTweened && tweenRigidbody) { if (!rBodyFoundAndTweened && tweenRigidbody)
{
Rigidbody2D rBody2D = target.GetComponent<Rigidbody2D>(); Rigidbody2D rBody2D = target.GetComponent<Rigidbody2D>();
if (rBody2D != null) { if (rBody2D != null)
{
rBodyFoundAndTweened = true; rBodyFoundAndTweened = true;
t = isLocal t = isLocal
? rBody2D.DOLocalPath(path, duration, pathMode) ? rBody2D.DOLocalPath(path, duration, pathMode)
@ -153,7 +158,8 @@ namespace DG.Tweening
} }
} }
#endif #endif
if (!rBodyFoundAndTweened) { if (!rBodyFoundAndTweened)
{
t = isLocal t = isLocal
? target.transform.DOLocalPath(path, duration, pathMode) ? target.transform.DOLocalPath(path, duration, pathMode)
: target.transform.DOPath(path, duration, pathMode); : target.transform.DOPath(path, duration, pathMode);

View File

@ -1,86 +0,0 @@
fileFormatVersion: 2
guid: 1818bd4d6ed568f4f98c1750b011c967
PluginImporter:
externalObjects: {}
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
: Any
second:
enabled: 0
settings:
Exclude Android: 0
Exclude Editor: 0
Exclude Linux64: 0
Exclude OSXUniversal: 0
Exclude Win: 0
Exclude Win64: 0
Exclude iOS: 0
- first:
Android: Android
second:
enabled: 1
settings:
CPU: ARMv7
- first:
Any:
second:
enabled: 1
settings: {}
- first:
Editor: Editor
second:
enabled: 1
settings:
CPU: AnyCPU
DefaultValueInitialized: true
OS: AnyOS
- first:
Standalone: Linux64
second:
enabled: 1
settings:
CPU: None
- first:
Standalone: OSXUniversal
second:
enabled: 1
settings:
CPU: None
- first:
Standalone: Win
second:
enabled: 1
settings:
CPU: x86
- first:
Standalone: Win64
second:
enabled: 1
settings:
CPU: x86_64
- first:
Windows Store Apps: WindowsStoreApps
second:
enabled: 0
settings:
CPU: AnyCPU
- first:
iPhone: iOS
second:
enabled: 1
settings:
AddToEmbeddedBinaries: false
CPU: AnyCPU
CompileFlags:
FrameworkDependencies:
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,104 @@
%YAML 1.1
%TAG !u! tag:unity3d.com,2011:
--- !u!74 &7400000
AnimationClip:
m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Disable
serializedVersion: 7
m_Legacy: 0
m_Compressed: 0
m_UseHighQualityCurve: 1
m_RotationCurves: []
m_CompressedRotationCurves: []
m_EulerCurves: []
m_PositionCurves: []
m_ScaleCurves: []
m_FloatCurves:
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_Alpha
path:
classID: 225
script: {fileID: 0}
flags: 0
m_PPtrCurves: []
m_SampleRate: 60
m_WrapMode: 0
m_Bounds:
m_Center: {x: 0, y: 0, z: 0}
m_Extent: {x: 0, y: 0, z: 0}
m_ClipBindingConstant:
genericBindings:
- serializedVersion: 2
path: 0
attribute: 1574349066
script: {fileID: 0}
typeID: 225
customType: 0
isPPtrCurve: 0
isIntCurve: 0
isSerializeReferenceCurve: 0
pptrCurveMapping: []
m_AnimationClipSettings:
serializedVersion: 2
m_AdditiveReferencePoseClip: {fileID: 0}
m_AdditiveReferencePoseTime: 0
m_StartTime: 0
m_StopTime: 0
m_OrientationOffsetY: 0
m_Level: 0
m_CycleOffset: 0
m_HasAdditiveReferencePose: 0
m_LoopTime: 1
m_LoopBlend: 0
m_LoopBlendOrientation: 0
m_LoopBlendPositionY: 0
m_LoopBlendPositionXZ: 0
m_KeepOriginalOrientation: 0
m_KeepOriginalPositionY: 1
m_KeepOriginalPositionXZ: 0
m_HeightFromFeet: 0
m_Mirror: 0
m_EditorCurves:
- serializedVersion: 2
curve:
serializedVersion: 2
m_Curve:
- serializedVersion: 3
time: 0
value: 1
inSlope: 0
outSlope: 0
tangentMode: 136
weightedMode: 0
inWeight: 0
outWeight: 0
m_PreInfinity: 2
m_PostInfinity: 2
m_RotationOrder: 4
attribute: m_Alpha
path:
classID: 225
script: {fileID: 0}
flags: 0
m_EulerEditorCurves: []
m_HasGenericRootTransform: 0
m_HasMotionFloatCurves: 0
m_Events: []

View File

@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 25f1c28c99920124189b7173731c38b5
NativeFormatImporter:
externalObjects: {}
mainObjectFileID: 7400000
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,5 +1,57 @@
%YAML 1.1 %YAML 1.1
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!1101 &-6499513247890378152
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 2
m_ConditionEvent: active
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: -2169522966389634846}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.875
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &-2169522966389634846
AnimatorState:
serializedVersion: 6
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name: Disable
m_Speed: 1
m_CycleOffset: 0
m_Transitions:
- {fileID: 8949275168816232509}
m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0
m_WriteDefaultValues: 1
m_Mirror: 0
m_SpeedParameterActive: 0
m_MirrorParameterActive: 0
m_CycleOffsetParameterActive: 0
m_TimeParameterActive: 0
m_Motion: {fileID: 7400000, guid: 25f1c28c99920124189b7173731c38b5, type: 2}
m_Tag:
m_SpeedParameter:
m_MirrorParameter:
m_CycleOffsetParameter:
m_TimeParameter:
--- !u!91 &9100000 --- !u!91 &9100000
AnimatorController: AnimatorController:
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
@ -8,7 +60,19 @@ AnimatorController:
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: SelectBorder m_Name: SelectBorder
serializedVersion: 5 serializedVersion: 5
m_AnimatorParameters: [] m_AnimatorParameters:
- m_Name: active
m_Type: 4
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
- m_Name: reactive
m_Type: 9
m_DefaultFloat: 0
m_DefaultInt: 0
m_DefaultBool: 0
m_Controller: {fileID: 9100000}
m_AnimatorLayers: m_AnimatorLayers:
- serializedVersion: 5 - serializedVersion: 5
m_Name: Base Layer m_Name: Base Layer
@ -33,7 +97,10 @@ AnimatorStateMachine:
m_ChildStates: m_ChildStates:
- serializedVersion: 1 - serializedVersion: 1
m_State: {fileID: 5956899137579874003} m_State: {fileID: 5956899137579874003}
m_Position: {x: 340, y: 100, z: 0} m_Position: {x: 380, y: 70, z: 0}
- serializedVersion: 1
m_State: {fileID: -2169522966389634846}
m_Position: {x: 350, y: 200, z: 0}
m_ChildStateMachines: [] m_ChildStateMachines: []
m_AnyStateTransitions: [] m_AnyStateTransitions: []
m_EntryTransitions: [] m_EntryTransitions: []
@ -44,6 +111,31 @@ AnimatorStateMachine:
m_ExitPosition: {x: 800, y: 120, z: 0} m_ExitPosition: {x: 800, y: 120, z: 0}
m_ParentStateMachinePosition: {x: 800, y: 20, z: 0} m_ParentStateMachinePosition: {x: 800, y: 20, z: 0}
m_DefaultState: {fileID: 5956899137579874003} m_DefaultState: {fileID: 5956899137579874003}
--- !u!1101 &1182501105974621518
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: reactive
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 5956899137579874003}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0
m_TransitionOffset: 0
m_ExitTime: 0.875
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1
--- !u!1102 &5956899137579874003 --- !u!1102 &5956899137579874003
AnimatorState: AnimatorState:
serializedVersion: 6 serializedVersion: 6
@ -51,10 +143,12 @@ AnimatorState:
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: DEFAULT m_Name: Enable
m_Speed: 1.6 m_Speed: 1.6
m_CycleOffset: 0 m_CycleOffset: 0
m_Transitions: [] m_Transitions:
- {fileID: -6499513247890378152}
- {fileID: 1182501105974621518}
m_StateMachineBehaviours: [] m_StateMachineBehaviours: []
m_Position: {x: 50, y: 50, z: 0} m_Position: {x: 50, y: 50, z: 0}
m_IKOnFeet: 0 m_IKOnFeet: 0
@ -70,3 +164,28 @@ AnimatorState:
m_MirrorParameter: m_MirrorParameter:
m_CycleOffsetParameter: m_CycleOffsetParameter:
m_TimeParameter: m_TimeParameter:
--- !u!1101 &8949275168816232509
AnimatorStateTransition:
m_ObjectHideFlags: 1
m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0}
m_Name:
m_Conditions:
- m_ConditionMode: 1
m_ConditionEvent: active
m_EventTreshold: 0
m_DstStateMachine: {fileID: 0}
m_DstState: {fileID: 5956899137579874003}
m_Solo: 0
m_Mute: 0
m_IsExit: 0
serializedVersion: 3
m_TransitionDuration: 0.1
m_TransitionOffset: 0
m_ExitTime: 0.75
m_HasExitTime: 0
m_HasFixedDuration: 1
m_InterruptionSource: 0
m_OrderedInterruption: 1
m_CanTransitionToSelf: 1

View File

@ -1,7 +1,3 @@
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {
public static class EventInvoker public static class EventInvoker

View File

@ -26,7 +26,22 @@ namespace AxibugEmuOnline.Client
where t.DeclaringType.IsSubclassOf(typeof(FilterEffect)) where t.DeclaringType.IsSubclassOf(typeof(FilterEffect))
orderby t.MetadataToken orderby t.MetadataToken
select t); select t);
m_editableParamList = parameters.Select(p => new EditableParamerter(p.Name, (ParameterOverride)p.GetValue(this))).ToList();
m_editableParamList = new List<EditableParamerter>();
foreach (var param in parameters)
{
var paramObj = (ParameterOverride)param.GetValue(this);
var rangeAtt = param.GetCustomAttribute<RangeAttribute>();
float min = 0;
float max = 10;
if (rangeAtt != null)
{
min = rangeAtt.min; max = rangeAtt.max;
}
var editableParam = new EditableParamerter(param.Name, paramObj, min, max);
m_editableParamList.Add(editableParam);
}
} }
public class EditableParamerter public class EditableParamerter
@ -42,9 +57,13 @@ namespace AxibugEmuOnline.Client
set set
{ {
valueFieldInfo.SetValue(m_paramObject, value); valueFieldInfo.SetValue(m_paramObject, value);
m_paramObject.overrideState = true;
} }
} }
public EditableParamerter(string name, ParameterOverride paramObject) public object MinValue { get; private set; }
public object MaxValue { get; private set; }
public EditableParamerter(string name, ParameterOverride paramObject, object minValue, object maxValue)
{ {
m_paramObject = paramObject; m_paramObject = paramObject;
Name = name; Name = name;
@ -60,18 +79,16 @@ namespace AxibugEmuOnline.Client
{ {
ValueType = typeof(object); ValueType = typeof(object);
} }
MinValue = minValue;
MaxValue = maxValue;
} }
public void ResetToDefault() => m_paramObject.overrideState = false; public void ResetToDefault() => m_paramObject.overrideState = false;
public string Serilized()
{
return JsonUtility.ToJson(Value);
}
public void Apply(string json) public void Apply(object overrideValue)
{ {
var overrideValue = JsonUtility.FromJson(json, ValueType);
Value = overrideValue; Value = overrideValue;
} }
} }

View File

@ -1,6 +1,4 @@
using AxibugEmuOnline.Client; using AxibugEmuOnline.Client;
using AxibugEmuOnline.Client.ClientCore;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.Rendering.PostProcessing; using UnityEngine.Rendering.PostProcessing;

View File

@ -1,7 +1,4 @@
using System.Collections.Generic; namespace AxibugEmuOnline.Client
using UnityEngine;
namespace AxibugEmuOnline.Client
{ {
public abstract class CommandChanger : IKeyMapperChanger public abstract class CommandChanger : IKeyMapperChanger
{ {

View File

@ -3,7 +3,6 @@ using AxibugEmuOnline.Client.Common;
using AxibugEmuOnline.Client.Event; using AxibugEmuOnline.Client.Event;
using AxibugEmuOnline.Client.Network; using AxibugEmuOnline.Client.Network;
using AxibugProtobuf; using AxibugProtobuf;
using System;
namespace AxibugEmuOnline.Client.Manager namespace AxibugEmuOnline.Client.Manager
{ {

View File

@ -1,7 +1,5 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Event; using AxibugEmuOnline.Client.Event;
using MyNes.Core;
using System;
using UnityEngine; using UnityEngine;
namespace AxibugEmuOnline.Client.Manager namespace AxibugEmuOnline.Client.Manager
@ -74,7 +72,7 @@ namespace AxibugEmuOnline.Client.Manager
public void ResetGame() public void ResetGame()
{ {
if(m_emuCore.IsNull()) return; if (m_emuCore.IsNull()) return;
m_emuCore.DoReset(); m_emuCore.DoReset();
} }

View File

@ -316,7 +316,7 @@ namespace AxibugEmuOnline.Client.Manager
/// <param name="reqData"></param> /// <param name="reqData"></param>
void RecvLeavnRoom(byte[] reqData) void RecvLeavnRoom(byte[] reqData)
{ {
App.log.Debug("加入房间成功"); App.log.Debug("离开房间成功");
Protobuf_Room_Leave_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_Leave_RESP>(reqData); Protobuf_Room_Leave_RESP msg = ProtoBufHelper.DeSerizlize<Protobuf_Room_Leave_RESP>(reqData);
ReleaseRePlay(); ReleaseRePlay();
mineRoomMiniInfo = null; mineRoomMiniInfo = null;
@ -374,6 +374,7 @@ namespace AxibugEmuOnline.Client.Manager
byte[] decompressRawData = Helper.DecompressByteArray(msg.LoadStateRaw.ToByteArray()); byte[] decompressRawData = Helper.DecompressByteArray(msg.LoadStateRaw.ToByteArray());
App.log.Info($"收到即时存档数据 解压后;{decompressRawData.Length}"); App.log.Info($"收到即时存档数据 解压后;{decompressRawData.Length}");
RawData = decompressRawData; RawData = decompressRawData;
ReleaseRePlay();
} }
Eventer.Instance.PostEvent(EEvent.OnRoomWaitStepChange, WaitStep); Eventer.Instance.PostEvent(EEvent.OnRoomWaitStepChange, WaitStep);
} }

View File

@ -1,4 +1,4 @@
using DG.Tweening; using AxibugEmuOnline.Client.ClientCore;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
@ -95,7 +95,8 @@ namespace AxibugEmuOnline.Client
filter = Filters.FirstOrDefault(f => f.Name == value.filterName); filter = Filters.FirstOrDefault(f => f.Name == value.filterName);
if (filter != null) if (filter != null)
{ {
preset = filter.Presets.FirstOrDefault(p => p.Name == value.filterName); string presetName = value.presetName;
preset = filter.Presets.FirstOrDefault(p => p.Name == presetName);
} }
return (filter, preset); return (filter, preset);
@ -127,9 +128,9 @@ namespace AxibugEmuOnline.Client
else Presets = loadedPresets.presets; else Presets = loadedPresets.presets;
} }
private void savePresets() public void SavePresets()
{ {
var json = JsonUtility.ToJson(new FilterPresetList { presets = Presets }); var json = JsonUtility.ToJson(new FilterPresetList(Presets));
PlayerPrefs.SetString($"Filter_{Name}_PresetList", json); PlayerPrefs.SetString($"Filter_{Name}_PresetList", json);
} }
@ -142,7 +143,7 @@ namespace AxibugEmuOnline.Client
newPreset = new FilterPreset(presetName); newPreset = new FilterPreset(presetName);
Presets.Add(newPreset); Presets.Add(newPreset);
savePresets(); SavePresets();
return true; return true;
} }
@ -150,7 +151,7 @@ namespace AxibugEmuOnline.Client
public void RemovePreset(FilterPreset preset) public void RemovePreset(FilterPreset preset)
{ {
if (!Presets.Remove(preset)) return; if (!Presets.Remove(preset)) return;
savePresets(); SavePresets();
EventInvoker.RaiseFilterPresetRemoved(this, preset); EventInvoker.RaiseFilterPresetRemoved(this, preset);
} }
@ -167,11 +168,11 @@ namespace AxibugEmuOnline.Client
{ {
foreach (var param in Paramerters) foreach (var param in Paramerters)
{ {
var json = preset.GetParamValueJson(param.Name); var value = preset.GetParamValue(param.Name, param.ValueType);
if (string.IsNullOrEmpty(json)) if (value == null)
param.ResetToDefault(); param.ResetToDefault();
else else
param.Apply(json); param.Apply(value);
} }
} }
@ -183,6 +184,15 @@ namespace AxibugEmuOnline.Client
private class FilterPresetList private class FilterPresetList
{ {
public List<FilterPreset> presets; public List<FilterPreset> presets;
public FilterPresetList(List<FilterPreset> presets)
{
this.presets = presets;
foreach (var preset in presets)
{
preset.ReadyForJson();
}
}
} }
[Serializable] [Serializable]
@ -202,6 +212,14 @@ namespace AxibugEmuOnline.Client
Name = presetName; Name = presetName;
} }
public void ReadyForJson()
{
prepareCache();
m_paramName = m_paramName2ValueJson.Keys.ToList();
m_valueJson = m_paramName2ValueJson.Values.ToList();
}
public string GetParamValueJson(string paramName) public string GetParamValueJson(string paramName)
{ {
prepareCache(); prepareCache();
@ -210,6 +228,43 @@ namespace AxibugEmuOnline.Client
return value; return value;
} }
public object GetParamValue(string paramName, Type valueType)
{
var rawStr = GetParamValueJson(paramName);
if (rawStr == null) return null;
if (valueType == typeof(float))
{
float.TryParse(rawStr, out var floatVal);
return floatVal;
}
else if (valueType.IsEnum)
{
var names = Enum.GetNames(valueType);
var values = Enum.GetValues(valueType);
for (int i = 0; i < names.Length; i++)
{
if (names[i].Equals(rawStr))
{
return values.GetValue(i);
}
}
return null;
}
else
{
App.log.Error($"尚未支持的滤镜参数类型{valueType}");
return null;
}
}
public void SetParamValue(string paramName, Type valueType, object value)
{
prepareCache();
m_paramName2ValueJson[paramName] = value.ToString();
}
private void prepareCache() private void prepareCache()
{ {
if (m_cacheReady) return; if (m_cacheReady) return;

View File

@ -5,8 +5,6 @@ using AxibugEmuOnline.Client.Network;
using AxibugProtobuf; using AxibugProtobuf;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEngine.EventSystems;
using static AxibugEmuOnline.Client.ClientCore.RomDB;
namespace AxibugEmuOnline.Client.Manager namespace AxibugEmuOnline.Client.Manager
{ {

View File

@ -27,6 +27,7 @@ namespace AxibugEmuOnline.Client
int step = channels; int step = channels;
if (NesEmu == null || NesEmu.NesCore == null) return; if (NesEmu == null || NesEmu.NesCore == null) return;
if (NesEmu.IsPause) return;
ProcessSound(NesEmu.NesCore, (uint)(data.Length / channels)); ProcessSound(NesEmu.NesCore, (uint)(data.Length / channels));

View File

@ -1,6 +1,4 @@
using System; using UnityEngine;
using System.Text;
using UnityEngine;
using VirtualNes.Core; using VirtualNes.Core;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client

View File

@ -21,7 +21,9 @@ namespace AxibugEmuOnline.Client
//音频驱动这里是Unity接收模拟器音频数据的并播放出来的实现 //音频驱动这里是Unity接收模拟器音频数据的并播放出来的实现
public AudioProvider AudioProvider; public AudioProvider AudioProvider;
//是否暂停 //是否暂停
public bool m_bPause; private bool m_bPause;
/// <summary> 是否暂停 </summary>
public bool IsPause => m_bPause;
private void Start() private void Start()
{ {

View File

@ -2,24 +2,20 @@
%TAG !u! tag:unity3d.com,2011: %TAG !u! tag:unity3d.com,2011:
--- !u!21 &2100000 --- !u!21 &2100000
Material: Material:
serializedVersion: 8 serializedVersion: 6
m_ObjectHideFlags: 0 m_ObjectHideFlags: 0
m_CorrespondingSourceObject: {fileID: 0} m_CorrespondingSourceObject: {fileID: 0}
m_PrefabInstance: {fileID: 0} m_PrefabInstance: {fileID: 0}
m_PrefabAsset: {fileID: 0} m_PrefabAsset: {fileID: 0}
m_Name: NesEmulator_Screen m_Name: NesEmulator_Screen
m_Shader: {fileID: 4800000, guid: b351396ff606116478d7f4412abe4e2e, type: 3} m_Shader: {fileID: 4800000, guid: b351396ff606116478d7f4412abe4e2e, type: 3}
m_Parent: {fileID: 0} m_ShaderKeywords:
m_ModifiedSerializedProperties: 0
m_ValidKeywords: []
m_InvalidKeywords: []
m_LightmapFlags: 4 m_LightmapFlags: 4
m_EnableInstancingVariants: 0 m_EnableInstancingVariants: 0
m_DoubleSidedGI: 0 m_DoubleSidedGI: 0
m_CustomRenderQueue: -1 m_CustomRenderQueue: -1
stringTagMap: {} stringTagMap: {}
disabledShaderPasses: [] disabledShaderPasses: []
m_LockedProperties:
m_SavedProperties: m_SavedProperties:
serializedVersion: 3 serializedVersion: 3
m_TexEnvs: m_TexEnvs:
@ -63,7 +59,6 @@ Material:
m_Texture: {fileID: 0} m_Texture: {fileID: 0}
m_Scale: {x: 1, y: 1} m_Scale: {x: 1, y: 1}
m_Offset: {x: 0, y: 0} m_Offset: {x: 0, y: 0}
m_Ints: []
m_Floats: m_Floats:
- _BumpScale: 1 - _BumpScale: 1
- _ColorMask: 15 - _ColorMask: 15
@ -92,4 +87,3 @@ Material:
- _Color: {r: 1, g: 1, b: 1, a: 1} - _Color: {r: 1, g: 1, b: 1, a: 1}
- _EmissionColor: {r: 0, g: 0, b: 0, a: 1} - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}
m_BuildTextureStacks: [] m_BuildTextureStacks: []
m_AllowLocking: 1

View File

@ -1,11 +1,8 @@
using AxibugEmuOnline.Client.Common;
using System; using System;
using System.Runtime.InteropServices; using System.Runtime.InteropServices;
using System.Text;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;
using VirtualNes.Core; using VirtualNes.Core;
using static UnityEngine.UI.CanvasScaler;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {

View File

@ -4,7 +4,6 @@ using HaoYueNet.ClientNetworkNet.Standard2;
using System; using System;
using System.Net.Sockets; using System.Net.Sockets;
using System.Threading; using System.Threading;
using System.Threading.Tasks;
namespace AxibugEmuOnline.Client.Network namespace AxibugEmuOnline.Client.Network
{ {

View File

@ -1,8 +1,6 @@
using DG.Tweening; using DG.Tweening;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using System.Collections;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client

View File

@ -1,5 +1,6 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.UI; using AxibugEmuOnline.Client.UI;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using UnityEngine; using UnityEngine;
@ -88,12 +89,16 @@ namespace AxibugEmuOnline.Client
private Filter m_filter; private Filter m_filter;
private FilterPreset m_preset; private FilterPreset m_preset;
private OptionUI_MenuItem m_ui; private OptionUI_MenuItem m_ui;
private List<OptionMenu> m_menu;
public Opt_Presets(Filter filter, FilterPreset preset) : base(preset.Name, null) public Opt_Presets(Filter filter, FilterPreset preset) : base(preset.Name, null)
{ {
m_filter = filter; m_filter = filter;
m_preset = preset; m_preset = preset;
m_menu = new List<OptionMenu>();
m_menu.Add(new Opt_Delete(m_filter, m_preset));
foreach (var p in m_filter.Paramerters) m_menu.Add(new Opt_ParamEditor(m_filter, p, m_preset));
} }
public override void OnShow(OptionUI_MenuItem ui) public override void OnShow(OptionUI_MenuItem ui)
@ -122,7 +127,37 @@ namespace AxibugEmuOnline.Client
protected override List<OptionMenu> GetOptionMenus() protected override List<OptionMenu> GetOptionMenus()
{ {
return new List<OptionMenu> { new Opt_Delete(m_filter, m_preset) }; return m_menu;
}
public class Opt_ParamEditor : ValueSetMenu
{
private Filter m_filter;
private FilterEffect.EditableParamerter m_param;
private FilterPreset m_preset;
public Opt_ParamEditor(Filter filter, FilterEffect.EditableParamerter editParam, FilterPreset preset)
: base(editParam.Name)
{
m_filter = filter;
m_param = editParam;
m_preset = preset;
}
public override Type ValueType => m_param.ValueType;
public override object ValueRaw => m_preset.GetParamValue(m_param.Name, ValueType) ?? m_param.Value;
public override void OnValueChanged(object newValue)
{
m_preset.SetParamValue(m_param.Name, ValueType, newValue);
m_filter.SavePresets();
m_param.Apply(newValue);
}
public override object Min => m_param.MinValue;
public override object Max => m_param.MaxValue;
} }
public class Opt_Delete : ExecuteMenu public class Opt_Delete : ExecuteMenu
@ -141,6 +176,8 @@ namespace AxibugEmuOnline.Client
m_filter.RemovePreset(m_preset); m_filter.RemovePreset(m_preset);
} }
} }
} }
} }
} }

View File

@ -1,9 +1,5 @@
using AxibugEmuOnline.Client.ClientCore;
using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {

View File

@ -1,6 +1,4 @@
using AxibugEmuOnline.Client.UI; using AxibugEmuOnline.Client.UI;
using System.Collections;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client

View File

@ -38,7 +38,7 @@ namespace AxibugEmuOnline.Client
m_stepPerformer = new StepPerformer(this); m_stepPerformer = new StepPerformer(this);
//menus.Add(new InGameUI_FilterSetting(this)); menus.Add(new InGameUI_FilterSetting(this));
menus.Add(new InGameUI_Reset(this)); menus.Add(new InGameUI_Reset(this));
menus.Add(new InGameUI_SaveState(this)); menus.Add(new InGameUI_SaveState(this));
menus.Add(new InGameUI_LoadState(this)); menus.Add(new InGameUI_LoadState(this));

View File

@ -0,0 +1,62 @@
using AxibugEmuOnline.Client.ClientCore;
using System.Collections.Generic;
using System.Linq;
using static AxibugEmuOnline.Client.FilterManager;
namespace AxibugEmuOnline.Client
{
public class InGameUI_FilterSetting : ExpandMenu
{
private InGameUI m_gameUI;
public InGameUI_FilterSetting(InGameUI gameUI) : base("Â˾µ", null)
{
m_gameUI = gameUI;
}
protected override List<OptionMenu> GetOptionMenus()
{
return App.filter.Filters.Select(f => new FilterMenu(m_gameUI.RomFile, f) as OptionMenu).ToList();
}
public class FilterMenu : ExpandMenu
{
private Filter m_filter;
private List<OptionMenu> m_presetsMenuItems;
public FilterMenu(RomFile rom, Filter filter) : base(filter.Name, null)
{
m_filter = filter;
m_presetsMenuItems = new List<OptionMenu> { new FilterPresetMenu(rom, m_filter, m_filter.DefaultPreset) };
m_presetsMenuItems.AddRange(m_filter.Presets.Select(preset => new FilterPresetMenu(rom, m_filter, preset)));
}
protected override List<OptionMenu> GetOptionMenus()
{
return m_presetsMenuItems;
}
}
public class FilterPresetMenu : ExecuteMenu
{
private FilterPreset m_preset;
private RomFile m_rom;
private Filter m_filter;
public FilterPresetMenu(RomFile rom, Filter filter, FilterPreset preset) : base(preset.Name, null)
{
m_preset = preset;
m_rom = rom;
m_filter = filter;
}
public override void OnExcute(OptionUI optionUI, ref bool cancelHide)
{
m_filter.ApplyPreset(m_preset);
App.filter.EnableFilter(m_filter);
App.filter.SetupFilter(m_rom, m_filter, m_preset);
}
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: b6c80949e93f37f42a1af843fa9d77fa
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,8 +1,4 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {

View File

@ -1,8 +1,5 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using System.Diagnostics; using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Security.Cryptography;
using System.Text;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
{ {

View File

@ -1,4 +1,3 @@
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;

View File

@ -1,6 +1,4 @@
using System.Collections; using UnityEditor;
using System.Collections.Generic;
using UnityEditor;
using UnityEditor.UI; using UnityEditor.UI;
using UnityEngine; using UnityEngine;

View File

@ -1,4 +1,3 @@
using System;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;

View File

@ -1,7 +1,6 @@
using DG.Tweening; using DG.Tweening;
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using UnityEngine; using UnityEngine;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client
@ -16,6 +15,7 @@ namespace AxibugEmuOnline.Client
[Space] [Space]
[Header("模板")] [Header("模板")]
[SerializeField] OptionUI_ExecuteItem TEMPLATE_EXECUTEITEM; [SerializeField] OptionUI_ExecuteItem TEMPLATE_EXECUTEITEM;
[SerializeField] OptionUI_ValueEditItem TEMPLATE_VALUEEDITITEM;
private OptionUI m_child; private OptionUI m_child;
private OptionUI m_parent; private OptionUI m_parent;
@ -65,12 +65,15 @@ namespace AxibugEmuOnline.Client
protected override void Awake() protected override void Awake()
{ {
TEMPLATE_EXECUTEITEM.gameObject.SetActiveEx(false); TEMPLATE_EXECUTEITEM.gameObject.SetActiveEx(false);
TEMPLATE_VALUEEDITITEM.gameObject.SetActiveEx(false);
SelectBorder.gameObject.SetActiveEx(false); SelectBorder.gameObject.SetActiveEx(false);
base.Awake(); base.Awake();
} }
protected override void Update() protected override void Update()
{ {
SelectBorder.Active = Enable;
UpdateMenuState(); UpdateMenuState();
base.Update(); base.Update();
@ -177,6 +180,7 @@ namespace AxibugEmuOnline.Client
var itemUIRect = optionUI_MenuItem.transform as RectTransform; var itemUIRect = optionUI_MenuItem.transform as RectTransform;
SelectBorder.Target = itemUIRect; SelectBorder.Target = itemUIRect;
SelectBorder.RefreshPosition();
if (!m_bPoped) if (!m_bPoped)
{ {
@ -268,15 +272,19 @@ namespace AxibugEmuOnline.Client
{ {
if (menuData is ExecuteMenu executeMenu) if (menuData is ExecuteMenu executeMenu)
{ {
var menuUI = GameObject.Instantiate(TEMPLATE_EXECUTEITEM.gameObject, TEMPLATE_EXECUTEITEM.transform.parent).GetComponent<OptionUI_ExecuteItem>(); var menuUI = Instantiate(TEMPLATE_EXECUTEITEM.gameObject, TEMPLATE_EXECUTEITEM.transform.parent).GetComponent<OptionUI_ExecuteItem>();
menuUI.gameObject.SetActive(true); menuUI.gameObject.SetActive(true);
menuUI.SetData(this, executeMenu); menuUI.SetData(this, executeMenu);
m_runtimeMenuItems.Add(menuUI); m_runtimeMenuItems.Add(menuUI);
} }
else else if (menuData is ValueSetMenu valueSetMenu)
{ {
throw new NotImplementedException($"暂不支持的菜单类型{menuData.GetType().Name}"); var menuUI = Instantiate(TEMPLATE_VALUEEDITITEM.gameObject, TEMPLATE_VALUEEDITITEM.transform.parent).GetComponent<OptionUI_ValueEditItem>();
menuUI.gameObject.SetActive(true);
menuUI.SetData(this, valueSetMenu);
m_runtimeMenuItems.Add(menuUI);
} }
else throw new NotImplementedException($"暂不支持的菜单类型{menuData.GetType().Name}");
} }
private void ReleaseRuntimeMenus() private void ReleaseRuntimeMenus()
@ -304,10 +312,23 @@ namespace AxibugEmuOnline.Client
Hide(); Hide();
} }
protected override void OnCmdSelectItemLeft()
{
var executer = m_runtimeMenuItems[SelectIndex];
if (executer != null)
{
executer.OnLeft();
}
}
protected override void OnCmdSelectItemRight() protected override void OnCmdSelectItemRight()
{ {
var executer = m_runtimeMenuItems[SelectIndex]; var executer = m_runtimeMenuItems[SelectIndex];
if (!executer.IsExpandMenu) return; if (!executer.IsExpandMenu)
{
executer.OnRight();
return;
}
OnCmdEnter(); OnCmdEnter();
} }
@ -383,25 +404,6 @@ namespace AxibugEmuOnline.Client
protected abstract List<OptionMenu> GetOptionMenus(); protected abstract List<OptionMenu> GetOptionMenus();
} }
/// <summary>
/// 带有值类型显示和编辑的菜单
/// </summary>
/// <typeparam name="T"></typeparam>
public class ValueSetMenu<T> : ValueSetMenu
{
public sealed override Type ValueType => typeof(T);
public T Value { get; private set; }
public sealed override object ValueRaw => Value;
public sealed override void OnValueChanged(object newValue)
{
Value = (T)newValue;
}
protected ValueSetMenu(string name) : base(name) { }
}
/// <summary> 不要直接继承这个类 </summary> /// <summary> 不要直接继承这个类 </summary>
public abstract class OptionMenu public abstract class OptionMenu
{ {
@ -420,7 +422,9 @@ namespace AxibugEmuOnline.Client
public virtual void OnShow(OptionUI_MenuItem ui) { } public virtual void OnShow(OptionUI_MenuItem ui) { }
public virtual void OnHide() { } public virtual void OnHide() { }
} }
/// <summary> 不要直接继承这个类 </summary> /// <summary>
/// 带有值类型显示和编辑的菜单
/// </summary>
public abstract class ValueSetMenu : OptionMenu public abstract class ValueSetMenu : OptionMenu
{ {
public ValueSetMenu(string name) : base(name) { } public ValueSetMenu(string name) : base(name) { }
@ -428,7 +432,7 @@ namespace AxibugEmuOnline.Client
public abstract Type ValueType { get; } public abstract Type ValueType { get; }
public abstract object ValueRaw { get; } public abstract object ValueRaw { get; }
public abstract void OnValueChanged(object newValue); public abstract void OnValueChanged(object newValue);
public abstract object Min { get; }
public abstract object Max { get; }
} }
} }

View File

@ -35,6 +35,8 @@ namespace AxibugEmuOnline.Client
protected abstract void OnSetData(OptionMenu menuData); protected abstract void OnSetData(OptionMenu menuData);
public abstract void OnExecute(OptionUI optionUI, ref bool cancelHide); public abstract void OnExecute(OptionUI optionUI, ref bool cancelHide);
public virtual void OnLeft() { }
public virtual void OnRight() { }
public abstract void OnFocus(); public abstract void OnFocus();
public virtual void OnHide() { } public virtual void OnHide() { }
} }

View File

@ -0,0 +1,69 @@
using AxibugEmuOnline.Client.ClientCore;
using UnityEngine;
namespace AxibugEmuOnline.Client
{
public class OptionUI_ValueEditItem : OptionUI_MenuItem<ValueSetMenu>
{
[SerializeField]
OptionUI_ValueEditItem_FloatEdit com_floatEdit;
[SerializeField]
OptionUI_ValueEditItem_EnumEdit com_enumEdit;
IValueEditControl m_currentCom;
protected override void OnSetData(OptionMenu menuData)
{
com_floatEdit.gameObject.SetActive(false);
com_enumEdit.gameObject.SetActive(false);
if (menuData is ValueSetMenu valueMenu)
{
if (valueMenu.ValueType == typeof(float))
{
m_currentCom = com_floatEdit;
}
else if (valueMenu.ValueType.IsEnum)
{
m_currentCom = com_enumEdit;
}
else
{
App.log.Error($"ÉÐδ֧³ÖµÄÊý¾ÝÀàÐÍ:{valueMenu.ValueType}");
return;
}
m_currentCom.gameObject.SetActiveEx(true);
m_currentCom.SetData(valueMenu);
}
base.OnSetData(menuData);
}
public override void OnExecute(OptionUI optionUI, ref bool cancelHide)
{
cancelHide = true;
m_currentCom?.OnExecute();
}
public override void OnLeft()
{
m_currentCom?.OnLeft();
}
public override void OnRight()
{
m_currentCom?.OnRight();
}
}
public interface IValueEditControl
{
void SetData(ValueSetMenu valueMenu);
GameObject gameObject { get; }
void OnLeft();
void OnRight();
void OnExecute();
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: deae682aaf23cab458cba1b12cd3a1f7
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -0,0 +1,56 @@
using System;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
namespace AxibugEmuOnline.Client
{
public class OptionUI_ValueEditItem_EnumEdit : MonoBehaviour, IValueEditControl
{
[SerializeField]
Text txt_value;
private ValueSetMenu m_valueMenu;
private List<Enum> m_enumValues = new List<Enum>();
private int m_valueIndex;
public void SetData(ValueSetMenu valueMenu)
{
m_valueMenu = valueMenu;
txt_value.text = valueMenu.ValueRaw.ToString();
foreach (Enum enumValue in Enum.GetValues(valueMenu.ValueType))
{
m_enumValues.Add(enumValue);
}
m_valueIndex = m_enumValues.IndexOf((Enum)valueMenu.ValueRaw);
}
public void OnLeft()
{
m_valueIndex--;
if (m_valueIndex < 0) m_valueIndex = m_enumValues.Count - 1;
var value = m_enumValues[m_valueIndex];
txt_value.text = value.ToString();
m_valueMenu.OnValueChanged(value);
}
public void OnRight()
{
m_valueIndex++;
if (m_valueIndex >= m_enumValues.Count) m_valueIndex = 0;
var value = m_enumValues[m_valueIndex];
txt_value.text = value.ToString();
m_valueMenu.OnValueChanged(value);
}
public void OnExecute()
{
OnRight();
}
}
}

View File

@ -0,0 +1,2 @@
fileFormatVersion: 2
guid: ef1018f09e7c5b049b75128ee308d372

View File

@ -0,0 +1,53 @@
using System;
using UnityEngine;
using UnityEngine.UI;
namespace AxibugEmuOnline.Client
{
public class OptionUI_ValueEditItem_FloatEdit : MonoBehaviour, IValueEditControl
{
[SerializeField]
Slider slider;
[SerializeField]
Text txt_value;
float m_step;
private ValueSetMenu m_valueMenu;
private void Awake()
{
slider.onValueChanged.AddListener(OnSliderValueChanged);
}
private void OnSliderValueChanged(float value)
{
txt_value.text = $"{value:.00}";
m_valueMenu.OnValueChanged(value);
}
public void SetData(ValueSetMenu valueMenu)
{
m_valueMenu = valueMenu;
slider.minValue = (float)valueMenu.Min;
slider.maxValue = (float)valueMenu.Max;
slider.value = (float)valueMenu.ValueRaw;
m_step = (slider.maxValue - slider.minValue) * 0.05f;
}
public void OnLeft()
{
var newValue = Mathf.Clamp(slider.value - m_step, slider.minValue, slider.maxValue);
slider.value = newValue;
}
public void OnRight()
{
var newValue = Mathf.Clamp(slider.value + m_step, slider.minValue, slider.maxValue);
slider.value = newValue;
}
public void OnExecute()
{
}
}
}

View File

@ -0,0 +1,11 @@
fileFormatVersion: 2
guid: 8c9e9868e38e8ea44a0dad03b987cd73
MonoImporter:
externalObjects: {}
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

View File

@ -1,6 +1,4 @@
using DG.Tweening; using DG.Tweening;
using System.Collections;
using System.Collections.Generic;
using UnityEngine; using UnityEngine;
namespace AxibugEmuOnline.Client namespace AxibugEmuOnline.Client

View File

@ -2,7 +2,6 @@ using AxibugEmuOnline.Client.ClientCore;
using AxibugEmuOnline.Client.Event; using AxibugEmuOnline.Client.Event;
using AxibugEmuOnline.Client.UI; using AxibugEmuOnline.Client.UI;
using AxibugProtobuf; using AxibugProtobuf;
using System;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;

View File

@ -1,4 +1,4 @@
using DG.Tweening; using DG.Tweening;
using DG.Tweening.Core; using DG.Tweening.Core;
using DG.Tweening.Plugins.Options; using DG.Tweening.Plugins.Options;
using UnityEngine; using UnityEngine;
@ -7,6 +7,8 @@ namespace AxibugEmuOnline.Client
{ {
public class Selector : MonoBehaviour public class Selector : MonoBehaviour
{ {
[SerializeField]
private Animator animator;
private RectTransform m_rect => transform as RectTransform; private RectTransform m_rect => transform as RectTransform;
private RectTransform m_target; private RectTransform m_target;
@ -21,15 +23,13 @@ namespace AxibugEmuOnline.Client
m_target = value; m_target = value;
//重置选择游标的动画
gameObject.SetActive(false);
gameObject.SetActive(true);
var itemUIRect = m_target.transform as RectTransform; var itemUIRect = m_target.transform as RectTransform;
m_rect.pivot = itemUIRect.pivot; m_rect.pivot = itemUIRect.pivot;
m_rect.sizeDelta = itemUIRect.rect.size; m_rect.sizeDelta = itemUIRect.rect.size;
m_rect.SetAsLastSibling(); m_rect.SetAsLastSibling();
animator.SetTrigger("reactive");
if (m_trackTween != null) if (m_trackTween != null)
{ {
m_trackTween.Kill(); m_trackTween.Kill();
@ -40,15 +40,34 @@ namespace AxibugEmuOnline.Client
} }
} }
private void LateUpdate() private bool m_active;
public bool Active
{ {
if (m_trackTween != null) get => m_active;
set
{ {
m_trackTween.endValue = Target.position; if (m_active == value) return;
} m_active = value;
if (Target == null) return;
animator.SetBool("active", value);
}
}
public void RefreshPosition()
{
if (Target != null)
{
m_rect.position = Target.position; m_rect.position = Target.position;
} }
} }
private void LateUpdate()
{
if (m_trackTween != null && m_trackTween.endValue != Target.position)
{
m_trackTween.ChangeEndValue(Target.position, true);
}
if (Target == null) return;
}
}
} }

View File

@ -1,4 +1,3 @@
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
using UnityEngine.UI; using UnityEngine.UI;

View File

@ -1,7 +1,6 @@
using AxibugEmuOnline.Client.ClientCore; using AxibugEmuOnline.Client.ClientCore;
using AxibugProtobuf; using AxibugProtobuf;
using System; using System;
using System.Collections;
using System.Collections.Generic; using System.Collections.Generic;
using UnityEngine; using UnityEngine;
@ -42,7 +41,7 @@ namespace AxibugEmuOnline.Client
{ {
if (s_RomFileCahcesInRoomInfo.TryGetValue(roomInfo.GameRomID, out RomFile romFile)) if (s_RomFileCahcesInRoomInfo.TryGetValue(roomInfo.GameRomID, out RomFile romFile))
{ {
callback.Invoke(roomInfo,romFile); callback.Invoke(roomInfo, romFile);
return; return;
} }
switch (platform) switch (platform)
@ -54,7 +53,7 @@ namespace AxibugEmuOnline.Client
romFile.SetWebData(romWebData); romFile.SetWebData(romWebData);
s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = romFile; s_RomFileCahcesInRoomInfo[roomInfo.GameRomID] = romFile;
callback.Invoke(roomInfo,romFile); callback.Invoke(roomInfo, romFile);
})); }));
break; break;
} }

View File

@ -10,5 +10,5 @@
"autoReferenced": false, "autoReferenced": false,
"defineConstraints": [], "defineConstraints": [],
"versionDefines": [], "versionDefines": [],
"noEngineReferences": false "noEngineReferences": true
} }

View File

@ -8,7 +8,4 @@ EditorBuildSettings:
- enabled: 1 - enabled: 1
path: Assets/Scene/AxibugEmuOnline.Client.unity path: Assets/Scene/AxibugEmuOnline.Client.unity
guid: eb0c18a619175384d95147898a43054b guid: eb0c18a619175384d95147898a43054b
- enabled: 0
path: Assets/Scene/Emu_NES.unity
guid: 3dba71db67877594a9b5b77059205ec8
m_configObjects: {} m_configObjects: {}