From 6bfe654cee7c43d483f4d97162ecbb3b37f310dd Mon Sep 17 00:00:00 2001
From: shangfengh <3495281661@qq.com>
Date: Tue, 10 Oct 2023 20:54:02 +0800
Subject: [PATCH] feat: :sparkles: add some fuctions to InTheRange
---
.../GameClass/GameObj/Character/Character.cs | 2 +-
.../Utility/SafeValue/InTheRange.cs | 94 ++++++++++++++++---
2 files changed, 80 insertions(+), 16 deletions(-)
diff --git a/logic/GameClass/GameObj/Character/Character.cs b/logic/GameClass/GameObj/Character/Character.cs
index b0c2d10..94a1da0 100644
--- a/logic/GameClass/GameObj/Character/Character.cs
+++ b/logic/GameClass/GameObj/Character/Character.cs
@@ -159,7 +159,7 @@ namespace GameClass.GameObj
lock (treatLock)
{
degreeOfTreatment += value;
- long addV = HP.TryAddAll(degreeOfTreatment);
+ long addV = HP.TryAddToMaxV(degreeOfTreatment);
if (addV == 0)
{
degreeOfTreatment = 0;
diff --git a/logic/Preparation/Utility/SafeValue/InTheRange.cs b/logic/Preparation/Utility/SafeValue/InTheRange.cs
index 2aa6bbb..46acd4c 100644
--- a/logic/Preparation/Utility/SafeValue/InTheRange.cs
+++ b/logic/Preparation/Utility/SafeValue/InTheRange.cs
@@ -3,8 +3,8 @@ using System.Threading;
namespace Preparation.Utility
{
-
//其对应属性不应当有set访问器,避免不安全的=赋值
+
///
/// 一个保证在[0,maxValue]的可变int,支持可变的maxValue(请确保大于0)
///
@@ -171,13 +171,14 @@ namespace Preparation.Utility
/// 返回实际改变量
public int SubV(int subV)
{
-
lock (vLock)
{
- subPositiveV = Math.Min(subPositiveV, v);
- v -= subPositiveV;
+ int previousV = v;
+ v -= subV;
+ if (v < 0) v = 0;
+ if (v > maxV) v = maxV;
+ return v - previousV;
}
- return subPositiveV;
}
///
/// 应当保证该减少值大于0
@@ -197,7 +198,7 @@ namespace Preparation.Utility
/// 试图加到满,如果无法加到maxValue则不加并返回-1
///
/// 返回实际改变量
- public int TryAddAll(int addV)
+ public int TryAddToMaxV(int addV)
{
lock (vLock)
{
@@ -263,13 +264,20 @@ namespace Preparation.Utility
///
public bool SetMaxV(long maxValue)
{
- if (maxValue < 0) maxValue = 0;
+ if (maxValue <= 0)
+ {
+ lock (vLock)
+ {
+ v = maxV = 0;
+ return false;
+ }
+ }
lock (vLock)
{
maxV = maxValue;
if (v > maxValue) v = maxValue;
}
- return maxValue > 0;
+ return true;
}
///
/// 应当保证该maxValue>=0
@@ -282,6 +290,19 @@ namespace Preparation.Utility
if (v > maxValue) v = maxValue;
}
}
+ ///
+ /// 如果当前值大于maxValue,则更新maxValue失败
+ ///
+ public bool TrySetMaxV(long maxValue)
+ {
+ lock (vLock)
+ {
+ if (v > maxValue) return false;
+ maxV = maxValue;
+ return true;
+ }
+ }
+
///
/// 应当保证该value>=0
///
@@ -294,15 +315,19 @@ namespace Preparation.Utility
}
public long SetV(long value)
{
- if (value < 0) value = 0;
+ if (value <= 0)
+ {
+ lock (vLock)
+ {
+ return v = 0;
+ }
+ }
lock (vLock)
{
return v = (value > maxV) ? maxV : value;
}
}
- ///
- /// 返回实际改变量
- ///
+ /// 返回实际改变量
public long AddV(long addV)
{
lock (vLock)
@@ -315,8 +340,9 @@ namespace Preparation.Utility
}
}
///
- /// 应当保证该增加值大于0,返回实际改变量
+ /// 应当保证增加值大于0
///
+ /// 返回实际改变量
public long AddPositiveV(long addPositiveV)
{
lock (vLock)
@@ -326,9 +352,46 @@ namespace Preparation.Utility
}
return addPositiveV;
}
+ public void MulV(long mulV)
+ {
+ if (mulV <= 0)
+ {
+ lock (vLock) v = 0;
+ return;
+ }
+ lock (vLock)
+ {
+ v *= mulV;
+ if (v > maxV) v = maxV;
+ }
+ }
///
- /// 应当保证该减少值大于0,返回实际改变量
+ /// 应当保证乘数大于0
///
+ public void MulPositiveV(long mulPositiveV)
+ {
+ lock (vLock)
+ {
+ v *= mulPositiveV;
+ if (v > maxV) v = maxV;
+ }
+ }
+ /// 返回实际改变量
+ public long SubV(long subV)
+ {
+ lock (vLock)
+ {
+ long previousV = v;
+ v -= subV;
+ if (v < 0) v = 0;
+ if (v > maxV) v = maxV;
+ return v - previousV;
+ }
+ }
+ ///
+ /// 应当保证该减少值大于0
+ ///
+ /// 返回实际改变量
public long SubPositiveV(long subPositiveV)
{
lock (vLock)
@@ -342,7 +405,8 @@ namespace Preparation.Utility
///
/// 试图加到满,如果无法加到maxValue则不加并返回-1
///
- public long TryAddAll(long addV)
+ /// 返回实际改变量
+ public long TryAddToMaxV(long addV)
{
lock (vLock)
{