Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

style: 🎨 divide SafeValue.cs into 5 files #666

Merged
merged 3 commits into from
Sep 26, 2023
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
46 changes: 13 additions & 33 deletions logic/GameClass/GameObj/Character/Character.BuffManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -15,35 +15,15 @@ public partial class Character
/// </summary>
private class BuffManager
{
[StructLayout(LayoutKind.Explicit, Size = 8)]
private struct BuffValue // buff参数联合体类型,可能是int或double
{
[FieldOffset(0)]
public int iValue;
[FieldOffset(0)]
public double lfValue;

public BuffValue(int intValue)
{
this.lfValue = 0.0;
this.iValue = intValue;
}
public BuffValue(double longFloatValue)
{
this.iValue = 0;
this.lfValue = longFloatValue;
}
}

/// <summary>
/// buff列表
/// </summary>
private readonly LinkedList<BuffValue>[] buffList;
private readonly LinkedList<double>[] buffList;
private readonly object[] buffListLock;

private void AddBuff(BuffValue bf, int buffTime, BuffType buffType, Action ReCalculateFunc)
private void AddBuff(double bf, int buffTime, BuffType buffType, Action ReCalculateFunc)
{
LinkedListNode<BuffValue> buffNode;
LinkedListNode<double> buffNode;
lock (buffListLock[(int)buffType])
{
buffNode = buffList[(int)buffType].AddLast(bf);
Expand Down Expand Up @@ -80,13 +60,13 @@ public int ReCalculateFloatBuff(BuffType buffType, int orgVal, int maxVal, int m
{
foreach (var add in buffList[(int)buffType])
{
times *= add.lfValue;
times *= add;
}
}
return Math.Max(Math.Min((int)Math.Round(orgVal * times), maxVal), minVal);
}

public void AddMoveSpeed(double add, int buffTime, Action<int> SetNewMoveSpeed, int orgMoveSpeed) => AddBuff(new BuffValue(add), buffTime, BuffType.AddSpeed, () => SetNewMoveSpeed(ReCalculateFloatBuff(BuffType.AddSpeed, orgMoveSpeed, GameData.MaxSpeed, GameData.MinSpeed)));
public void AddMoveSpeed(double add, int buffTime, Action<int> SetNewMoveSpeed, int orgMoveSpeed) => AddBuff(add, buffTime, BuffType.AddSpeed, () => SetNewMoveSpeed(ReCalculateFloatBuff(BuffType.AddSpeed, orgMoveSpeed, GameData.MaxSpeed, GameData.MinSpeed)));
public bool HasFasterSpeed
{
get
Expand All @@ -98,7 +78,7 @@ public bool HasFasterSpeed
}
}

public void AddShield(int shieldTime) => AddBuff(new BuffValue(), shieldTime, BuffType.Shield, () =>
public void AddShield(int shieldTime) => AddBuff(0, shieldTime, BuffType.Shield, () =>
{ });
public bool HasShield
{
Expand All @@ -123,7 +103,7 @@ public bool TryUseShield()
return false;
}

public void AddAp(int time) => AddBuff(new BuffValue(), time, BuffType.AddAp, () => { });
public void AddAp(int time) => AddBuff(0, time, BuffType.AddAp, () => { });
public bool HasAp
{
get
Expand All @@ -147,7 +127,7 @@ public bool TryAddAp()
return false;
}

public void AddLife(int totelTime) => AddBuff(new BuffValue(), totelTime, BuffType.AddLife, () =>
public void AddLife(int totelTime) => AddBuff(0, totelTime, BuffType.AddLife, () =>
{ });
public bool HasLIFE
{
Expand All @@ -172,7 +152,7 @@ public bool TryActivatingLIFE()
return false;
}

public void AddSpear(int spearTime) => AddBuff(new BuffValue(), spearTime, BuffType.Spear, () =>
public void AddSpear(int spearTime) => AddBuff(0, spearTime, BuffType.Spear, () =>
{ });
public bool HasSpear
{
Expand Down Expand Up @@ -210,7 +190,7 @@ public bool TryDeleteInvisible()
return false;
}

public void AddClairaudience(int shieldTime) => AddBuff(new BuffValue(), shieldTime, BuffType.Clairaudience, () =>
public void AddClairaudience(int shieldTime) => AddBuff(0, shieldTime, BuffType.Clairaudience, () =>
{ });
public bool HasClairaudience
{
Expand All @@ -223,7 +203,7 @@ public bool HasClairaudience
}
}

public void AddInvisible(int shieldTime) => AddBuff(new BuffValue(), shieldTime, BuffType.Invisible, () =>
public void AddInvisible(int shieldTime) => AddBuff(0, shieldTime, BuffType.Invisible, () =>
{ });
public bool HasInvisible
{
Expand Down Expand Up @@ -253,12 +233,12 @@ public void ClearAll()
public BuffManager()
{
var buffTypeArray = Enum.GetValues(typeof(BuffType));
buffList = new LinkedList<BuffValue>[buffTypeArray.Length];
buffList = new LinkedList<double>[buffTypeArray.Length];
buffListLock = new object[buffList.Length];
int i = 0;
foreach (BuffType type in buffTypeArray)
{
buffList[i] = new LinkedList<BuffValue>();
buffList[i] = new LinkedList<double>();
buffListLock[i++] = new object();
}
}
Expand Down
7 changes: 3 additions & 4 deletions logic/Preparation/Utility/SafeValue.cs
Original file line number Diff line number Diff line change
Expand Up @@ -301,9 +301,7 @@ public int SetV(int value)
return v = (value > maxV) ? maxV : value;
}
}
/// <summary>
/// 返回实际改变量
/// </summary>
/// <returns>返回实际改变量</returns>
public int AddV(int addV)
{
lock (vLock)
Expand All @@ -316,8 +314,9 @@ public int AddV(int addV)
}
}
/// <summary>
/// 应当保证该增加值大于0,返回实际改变量
/// 应当保证增加值大于0
/// </summary>
/// <returns>返回实际改变量</returns>
public int AddPositiveV(int addPositiveV)
{
lock (vLock)
Expand Down
Loading