Browse Source

feat: add some fuctions to InTheRange

dev
shangfengh 2 years ago
parent
commit
6bfe654cee
2 changed files with 80 additions and 16 deletions
  1. +1
    -1
      logic/GameClass/GameObj/Character/Character.cs
  2. +79
    -15
      logic/Preparation/Utility/SafeValue/InTheRange.cs

+ 1
- 1
logic/GameClass/GameObj/Character/Character.cs View File

@@ -159,7 +159,7 @@ namespace GameClass.GameObj
lock (treatLock) lock (treatLock)
{ {
degreeOfTreatment += value; degreeOfTreatment += value;
long addV = HP.TryAddAll(degreeOfTreatment);
long addV = HP.TryAddToMaxV(degreeOfTreatment);
if (addV == 0) if (addV == 0)
{ {
degreeOfTreatment = 0; degreeOfTreatment = 0;


+ 79
- 15
logic/Preparation/Utility/SafeValue/InTheRange.cs View File

@@ -3,8 +3,8 @@ using System.Threading;


namespace Preparation.Utility namespace Preparation.Utility
{ {

//其对应属性不应当有set访问器,避免不安全的=赋值 //其对应属性不应当有set访问器,避免不安全的=赋值

/// <summary> /// <summary>
/// 一个保证在[0,maxValue]的可变int,支持可变的maxValue(请确保大于0) /// 一个保证在[0,maxValue]的可变int,支持可变的maxValue(请确保大于0)
/// </summary> /// </summary>
@@ -171,13 +171,14 @@ namespace Preparation.Utility
/// <returns>返回实际改变量</returns> /// <returns>返回实际改变量</returns>
public int SubV(int subV) public int SubV(int subV)
{ {

lock (vLock) 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;
} }
/// <summary> /// <summary>
/// 应当保证该减少值大于0 /// 应当保证该减少值大于0
@@ -197,7 +198,7 @@ namespace Preparation.Utility
/// 试图加到满,如果无法加到maxValue则不加并返回-1 /// 试图加到满,如果无法加到maxValue则不加并返回-1
/// </summary> /// </summary>
/// <returns>返回实际改变量</returns> /// <returns>返回实际改变量</returns>
public int TryAddAll(int addV)
public int TryAddToMaxV(int addV)
{ {
lock (vLock) lock (vLock)
{ {
@@ -263,13 +264,20 @@ namespace Preparation.Utility
/// </summary> /// </summary>
public bool SetMaxV(long maxValue) public bool SetMaxV(long maxValue)
{ {
if (maxValue < 0) maxValue = 0;
if (maxValue <= 0)
{
lock (vLock)
{
v = maxV = 0;
return false;
}
}
lock (vLock) lock (vLock)
{ {
maxV = maxValue; maxV = maxValue;
if (v > maxValue) v = maxValue; if (v > maxValue) v = maxValue;
} }
return maxValue > 0;
return true;
} }
/// <summary> /// <summary>
/// 应当保证该maxValue>=0 /// 应当保证该maxValue>=0
@@ -282,6 +290,19 @@ namespace Preparation.Utility
if (v > maxValue) v = maxValue; if (v > maxValue) v = maxValue;
} }
} }
/// <summary>
/// 如果当前值大于maxValue,则更新maxValue失败
/// </summary>
public bool TrySetMaxV(long maxValue)
{
lock (vLock)
{
if (v > maxValue) return false;
maxV = maxValue;
return true;
}
}

/// <summary> /// <summary>
/// 应当保证该value>=0 /// 应当保证该value>=0
/// </summary> /// </summary>
@@ -294,15 +315,19 @@ namespace Preparation.Utility
} }
public long SetV(long value) public long SetV(long value)
{ {
if (value < 0) value = 0;
if (value <= 0)
{
lock (vLock)
{
return v = 0;
}
}
lock (vLock) lock (vLock)
{ {
return v = (value > maxV) ? maxV : value; return v = (value > maxV) ? maxV : value;
} }
} }
/// <summary>
/// 返回实际改变量
/// </summary>
/// <returns>返回实际改变量</returns>
public long AddV(long addV) public long AddV(long addV)
{ {
lock (vLock) lock (vLock)
@@ -315,8 +340,9 @@ namespace Preparation.Utility
} }
} }
/// <summary> /// <summary>
/// 应当保证增加值大于0,返回实际改变量
/// 应当保证增加值大于0
/// </summary> /// </summary>
/// <returns>返回实际改变量</returns>
public long AddPositiveV(long addPositiveV) public long AddPositiveV(long addPositiveV)
{ {
lock (vLock) lock (vLock)
@@ -326,9 +352,46 @@ namespace Preparation.Utility
} }
return addPositiveV; return addPositiveV;
} }
public void MulV(long mulV)
{
if (mulV <= 0)
{
lock (vLock) v = 0;
return;
}
lock (vLock)
{
v *= mulV;
if (v > maxV) v = maxV;
}
}
/// <summary> /// <summary>
/// 应当保证该减少值大于0,返回实际改变量
/// 应当保证乘数大于0
/// </summary> /// </summary>
public void MulPositiveV(long mulPositiveV)
{
lock (vLock)
{
v *= mulPositiveV;
if (v > maxV) v = maxV;
}
}
/// <returns>返回实际改变量</returns>
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;
}
}
/// <summary>
/// 应当保证该减少值大于0
/// </summary>
/// <returns>返回实际改变量</returns>
public long SubPositiveV(long subPositiveV) public long SubPositiveV(long subPositiveV)
{ {
lock (vLock) lock (vLock)
@@ -342,7 +405,8 @@ namespace Preparation.Utility
/// <summary> /// <summary>
/// 试图加到满,如果无法加到maxValue则不加并返回-1 /// 试图加到满,如果无法加到maxValue则不加并返回-1
/// </summary> /// </summary>
public long TryAddAll(long addV)
/// <returns>返回实际改变量</returns>
public long TryAddToMaxV(long addV)
{ {
lock (vLock) lock (vLock)
{ {


Loading…
Cancel
Save