unity ObservableValues

using System;
using System.Collections.Generic;
using System.Runtime.CompilerServices;

using UnityEngine;

namespace Server
{
public class ObservableValues where T : ITuple
{
public event EventHandler<ValuesChangedEventArgs> ValuesChanged;
public T Values { get; private set; }

    public ObservableValues(T initialValues)
    {

#if UNITY_EDITOR

#endif
Values = initialValues;
}

    public void SetValues(T newValues)
    {
        if (!EqualityComparer<T>.Default.Equals(Values, newValues))
        {
            T oldValues = Values;
            Values = newValues;
            OnValuesChanged(new ValuesChangedEventArgs<T>(Values));
        }
    }

    protected virtual void OnValuesChanged(ValuesChangedEventArgs<T> e)
    {
        ValuesChanged?.Invoke(this, e);
    }

    public void Invoke()
    {
        ValuesChanged?.Invoke(this, new ValuesChangedEventArgs<T>(Values));
    }
}

public class ValuesChangedEventArgs<T> : EventArgs where T : ITuple
{
    public T NewValues { get; }
    public ValuesChangedEventArgs(T newValues)
    {
        NewValues = newValues;
    }
}

public static class Test
{
    public static void ObservableValuesTest()
    {
        // 创建一个单值元组
        ObservableValues<ValueTuple<int>> observableSingle1 = new ObservableValues<ValueTuple<int>>(ValueTuple.Create(5));
        observableSingle1.ValuesChanged += (sender, e) =>
        {
            DebugUtils.Log($"Single value updated to {e.NewValues.Item1}");
        };
        observableSingle1.SetValues(ValueTuple.Create(10));

        // 创建一个双值元组
        ObservableValues<(int, string)> observablePair1 = new ObservableValues<(int, string)>((10, "ten"));
        observablePair1.ValuesChanged += (sender, e) =>
        {
            DebugUtils.Log($"Pair values updated to ({e.NewValues.Item1}, {e.NewValues.Item2})");
        };
        observablePair1.SetValues((20, "twenty"));
        DebugUtils.Log($"{observablePair1.Values.Item1}");

        // 创建一个三值元组
        ObservableValues<(int, string, bool)> observableTriple1 = new ObservableValues<(int, string, bool)>((15, "fifteen", true));
        observableTriple1.ValuesChanged += (sender, e) =>
        {
            DebugUtils.Log($"Triple values updated to ({e.NewValues.Item1}, {e.NewValues.Item2}, {e.NewValues.Item3})");
        };
        observableTriple1.SetValues((30, "thirty", false));

        // 创建一个四值元组
        ObservableValues<(int, string, bool, double)> observableQuadruple1 = new ObservableValues<(int, string, bool, double)>((20, "twenty", false, 20.0));
        observableQuadruple1.ValuesChanged += (sender, e) =>
        {
            DebugUtils.Log($"Quadruple values updated to ({e.NewValues.Item1}, {e.NewValues.Item2}, {e.NewValues.Item3}, {e.NewValues.Item4})");
        };
        observableQuadruple1.SetValues((40, "forty", true, 40.0));
    }
}

public static class DebugUtils
{
    public static void Log(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string filePath = "",
        [CallerLineNumber] int lineNumber = 0)
    {
        string logMessage = FormatMessage("Info", message, memberName, filePath, lineNumber);
        Debug.Log(logMessage);
        if (Debug.isDebugBuild)
        {
            CustomLogger.Instance.Log(logMessage);
        }
    }

    public static void LogError(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string filePath = "",
        [CallerLineNumber] int lineNumber = 0)
    {
        string logMessage = FormatMessage("Error", message, memberName, filePath, lineNumber);
        Debug.LogError(logMessage);
        if (Debug.isDebugBuild)
        {
            CustomLogger.Instance.LogError(logMessage);
        }
    }

    public static void LogWarning(string message,
        [CallerMemberName] string memberName = "",
        [CallerFilePath] string filePath = "",
        [CallerLineNumber] int lineNumber = 0)
    {
        string logMessage = FormatMessage("Warning", message, memberName, filePath, lineNumber);
        Debug.LogWarning(logMessage);
        if (Debug.isDebugBuild)
        {
            CustomLogger.Instance.LogWarning(logMessage);
        }
    }

    private static string FormatMessage(string logType, string message, string memberName, string filePath, int lineNumber)
    {
        string fileName = System.IO.Path.GetFileName(filePath);
        string projectName = Application.productName;
        return $"【{projectName}】 {logType} - {fileName}:{lineNumber} <{memberName}> : {message}";
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值