新增数值系统
This commit is contained in:
@@ -0,0 +1,35 @@
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 数值容器
|
||||
/// </summary>
|
||||
public class ValueContainer {
|
||||
/// <summary> 数值字典 </summary>
|
||||
public Dictionary<string, ValueInstance> dictionary = new Dictionary<string, ValueInstance>();
|
||||
|
||||
/// <summary> 所引器 </summary>
|
||||
public ValueInstance this[string id] => dictionary[id];
|
||||
|
||||
/// <summary> 循环集合 </summary>
|
||||
public void ForEach(Action<string, ValueInstance> action) {
|
||||
foreach (var item in dictionary) { action?.Invoke(item.Key, item.Value); }
|
||||
}
|
||||
|
||||
/// <summary> 添加数值 </summary>
|
||||
public void AddInstance(ValueType type, string name) {
|
||||
var instance = new ValueInstance(type, name);
|
||||
AddInstance(instance);
|
||||
}
|
||||
/// <summary> 添加数值 </summary>
|
||||
public void AddInstance(ValueInstance instance) {
|
||||
if (dictionary.ContainsKey(instance.name)) { return; }
|
||||
dictionary.Add(instance.name, instance);
|
||||
}
|
||||
/// <summary> 重新计算值 </summary>
|
||||
public void RecalculateValue() {
|
||||
foreach (var item in dictionary) { item.Value.RecalculateValue(); }
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2cd07e4908c0bde4380bcc2be0f5e13c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,20 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 数值容器 - 常量
|
||||
/// </summary>
|
||||
[CreateAssetMenu(menuName = "MuHua/数值模块/数值容器")]
|
||||
public class ValueContainerConst : ScriptableObject {
|
||||
/// <summary> 属性列表 </summary>
|
||||
[HideInInspector]
|
||||
public List<ValueInstanceConst> instances = new List<ValueInstanceConst>();
|
||||
|
||||
/// <summary> 转换数据 </summary>
|
||||
public ValueContainer To() {
|
||||
ValueContainer container = new ValueContainer();
|
||||
instances.ForEach(obj => container.AddInstance(obj.To()));
|
||||
return container;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 11c3d0ab6f395eb41bcf0e66676f68a3
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,67 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 数值实例
|
||||
/// </summary>
|
||||
public class ValueInstance {
|
||||
/// <summary> 数值类型 </summary>
|
||||
public readonly ValueType type;
|
||||
/// <summary> 数值名称 </summary>
|
||||
public readonly string name;
|
||||
|
||||
/// <summary> 最小值 </summary>
|
||||
public float minValue;
|
||||
/// <summary> 最大值 </summary>
|
||||
public float maxValue;
|
||||
|
||||
/// <summary> 基础值 </summary>
|
||||
public float baseValue;
|
||||
/// <summary> 附加值% </summary>
|
||||
public float addedValue;
|
||||
/// <summary> 当前值 </summary>
|
||||
public float currentValue;
|
||||
/// <summary> 最终数值 </summary>
|
||||
public float value;
|
||||
|
||||
/// <summary> 修改器列表 </summary>
|
||||
public List<ValueModifier> modifiers = new List<ValueModifier>();
|
||||
|
||||
/// <summary> 是布尔值 </summary>
|
||||
public bool isBoolean => type == ValueType.Boolean && value == maxValue;
|
||||
|
||||
public ValueInstance(ValueType type, string name) {
|
||||
this.type = type;
|
||||
this.name = name;
|
||||
if (type == ValueType.Float) { minValue = 0; maxValue = float.MaxValue; }
|
||||
if (type == ValueType.Integer) { minValue = 0; maxValue = float.MaxValue; }
|
||||
if (type == ValueType.Boolean) { minValue = 0; maxValue = 1; }
|
||||
if (type == ValueType.Percentage) { minValue = 0; maxValue = 100; }
|
||||
}
|
||||
|
||||
/// <summary> 添加修改器 </summary>
|
||||
public void AddModifier(ValueModifier modifier, bool isUpdate) {
|
||||
modifiers.Add(modifier);
|
||||
if (isUpdate) { RecalculateValue(); }
|
||||
}
|
||||
/// <summary> 添加修改器 </summary>
|
||||
public void AddModifier(List<ValueModifier> modifier, bool isUpdate) {
|
||||
modifiers.AddRange(modifier);
|
||||
if (isUpdate) { RecalculateValue(); }
|
||||
}
|
||||
/// <summary> 重新计算值 </summary>
|
||||
public void RecalculateValue() {
|
||||
addedValue = 1;
|
||||
currentValue = baseValue;
|
||||
modifiers.ForEach(Modify);
|
||||
}
|
||||
|
||||
/// <summary> 修改 </summary>
|
||||
public void Modify(ValueModifier modifier) {
|
||||
addedValue += modifier.AddedValue;
|
||||
currentValue += modifier.FixedValue;
|
||||
value = currentValue * addedValue;
|
||||
value = Mathf.Clamp(currentValue, minValue, maxValue);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fc8206be3feda78499952ab2635f5e3c
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,59 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 数值实例 - 常量
|
||||
/// </summary>
|
||||
// [CreateAssetMenu(menuName = "MuHua/数值模块/数值实例")]
|
||||
public class ValueInstanceConst : ScriptableObject {
|
||||
/// <summary> 数值类型 </summary>
|
||||
public ValueType type;
|
||||
|
||||
/// <summary> 最小值 </summary>
|
||||
public float minValue;
|
||||
/// <summary> 最大值 </summary>
|
||||
public float maxValue = 9999;
|
||||
|
||||
/// <summary> 基础值 </summary>
|
||||
public float baseValue;
|
||||
|
||||
/// <summary> 数值容器 </summary>
|
||||
[HideInInspector]
|
||||
public ValueContainerConst container;
|
||||
|
||||
public void InitialFloat() {
|
||||
type = ValueType.Float;
|
||||
minValue = 0;
|
||||
maxValue = 9999;
|
||||
baseValue = 0;
|
||||
}
|
||||
public void InitialInteger() {
|
||||
type = ValueType.Integer;
|
||||
minValue = 0;
|
||||
maxValue = 9999;
|
||||
baseValue = 0;
|
||||
}
|
||||
public void InitialBoolean() {
|
||||
type = ValueType.Boolean;
|
||||
minValue = 0;
|
||||
maxValue = 1;
|
||||
baseValue = 0;
|
||||
}
|
||||
public void InitialPercentage() {
|
||||
type = ValueType.Percentage;
|
||||
minValue = 0;
|
||||
maxValue = 100;
|
||||
baseValue = 0;
|
||||
}
|
||||
|
||||
/// <summary> 转换数据 </summary>
|
||||
public ValueInstance To() {
|
||||
ValueInstance instance = new ValueInstance(type, name);
|
||||
instance.minValue = minValue;
|
||||
instance.maxValue = maxValue;
|
||||
instance.baseValue = baseValue;
|
||||
instance.RecalculateValue();
|
||||
return instance;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e49882beb2bb280438028a6a8a591abf
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,18 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 数值修改器
|
||||
/// </summary>
|
||||
public class ValueModifier {
|
||||
/// <summary> 固定值 </summary>
|
||||
public float Fixed;
|
||||
/// <summary> 附加值 </summary>
|
||||
public float Added;
|
||||
|
||||
/// <summary> 固定值 </summary>
|
||||
public virtual float FixedValue => Fixed;
|
||||
/// <summary> 附加值% </summary>
|
||||
public virtual float AddedValue => Added;
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: cdb2930b691f3b64aa6e28c7df2ea724
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,17 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
/// <summary>
|
||||
/// 数值类型
|
||||
/// </summary>
|
||||
public enum ValueType {
|
||||
/// <summary> 浮点数值 </summary>
|
||||
Float,
|
||||
/// <summary> 整数值 </summary>
|
||||
Integer,
|
||||
/// <summary> 布尔值 </summary>
|
||||
Boolean,
|
||||
/// <summary> 百分比值 </summary>
|
||||
Percentage
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a8d90ca942106514a85e67acff5554fb
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Reference in New Issue
Block a user