Browse Source

refactor: Interlock the property IsMoving

tags/v0.1.0
shangfengh 2 years ago
parent
commit
5b4fc786aa
6 changed files with 19 additions and 33 deletions
  1. +4
    -8
      logic/GameClass/GameObj/Character/Character.cs
  2. +5
    -15
      logic/GameClass/GameObj/Moveable.cs
  3. +4
    -4
      logic/GameEngine/MoveEngine.cs
  4. +1
    -1
      logic/Gaming/ActionManager.cs
  5. +1
    -1
      logic/Preparation/Interface/IMoveable.cs
  6. +4
    -4
      logic/Preparation/Interface/IOccupation.cs

+ 4
- 8
logic/GameClass/GameObj/Character/Character.cs View File

@@ -361,7 +361,7 @@ namespace GameClass.GameObj
{ {
lock (actionLock) lock (actionLock)
{ {
if (playerState == PlayerStateType.Null && IsMoving) return PlayerStateType.Moving;
if (playerState == PlayerStateType.Moving && IsMoving == 1) return PlayerStateType.Moving;
return playerState; return playerState;
} }
} }
@@ -423,9 +423,7 @@ namespace GameClass.GameObj
{ {
//只能被SetPlayerState引用 //只能被SetPlayerState引用
whatInteractingWith = gameObj; whatInteractingWith = gameObj;
if (value != PlayerStateType.Moving)
IsMoving = false;
playerState = (value == PlayerStateType.Moving) ? PlayerStateType.Null : value;
playerState = value;
//Debugger.Output(this,playerState.ToString()+" "+IsMoving.ToString()); //Debugger.Output(this,playerState.ToString()+" "+IsMoving.ToString());
return ++stateNum; return ++stateNum;
} }
@@ -434,9 +432,7 @@ namespace GameClass.GameObj
{ {
//只能被SetPlayerState引用 //只能被SetPlayerState引用
whatInteractingWith = gameObj; whatInteractingWith = gameObj;
if (value != PlayerStateType.Moving)
IsMoving = false;
playerState = (value == PlayerStateType.Moving) ? PlayerStateType.Null : value;
playerState = value;
//Debugger.Output(this,playerState.ToString()+" "+IsMoving.ToString()); //Debugger.Output(this,playerState.ToString()+" "+IsMoving.ToString());
return stateNum; return stateNum;
} }
@@ -574,7 +570,6 @@ namespace GameClass.GameObj
lock (actionLock) lock (actionLock)
{ {
whatInteractingWith = null; whatInteractingWith = null;
IsMoving = false;
playerState = PlayerStateType.Null; playerState = PlayerStateType.Null;
return ++stateNum; return ++stateNum;
} }
@@ -803,6 +798,7 @@ namespace GameClass.GameObj
return false; return false;
} }
} }

public void TryActivatingLIFE() public void TryActivatingLIFE()
{ {
if (buffManager.TryActivatingLIFE()) if (buffManager.TryActivatingLIFE())


+ 5
- 15
logic/GameClass/GameObj/Moveable.cs View File

@@ -47,21 +47,11 @@ namespace GameClass.GameObj
} }
} }


private bool isMoving;
public bool IsMoving
private int isMoving = 0;
public int IsMoving
{ {
get
{
lock (actionLock)
return isMoving;
}
set
{
lock (actionLock)
{
isMoving = value;
}
}
get => Interlocked.CompareExchange(ref isMoving, 0, 1);
set => Interlocked.Exchange(ref isMoving, value);
} }


// 移动,改变坐标 // 移动,改变坐标
@@ -151,7 +141,7 @@ namespace GameClass.GameObj
moveReaderWriterLock.EnterReadLock(); moveReaderWriterLock.EnterReadLock();
try try
{ {
return !isMoving && canMove && !isRemoved;
return isMoving == 0 && canMove && !isRemoved;
} }
finally finally
{ {


+ 4
- 4
logic/GameEngine/MoveEngine.cs View File

@@ -102,7 +102,7 @@ namespace GameEngine
lock (obj.ActionLock) lock (obj.ActionLock)
{ {
if (!obj.IsAvailableForMove) { EndMove(obj); return; } if (!obj.IsAvailableForMove) { EndMove(obj); return; }
obj.IsMoving = true;
obj.IsMoving = 1;
} }


new Thread new Thread
@@ -139,7 +139,7 @@ namespace GameEngine


if (isEnded) if (isEnded)
{ {
obj.IsMoving = false;
obj.IsMoving = 0;
EndMove(obj); EndMove(obj);
return; return;
} }
@@ -184,7 +184,7 @@ namespace GameEngine
} }
if (isEnded) if (isEnded)
{ {
obj.IsMoving = false;
obj.IsMoving = 0;
EndMove(obj); EndMove(obj);
return; return;
} }
@@ -224,7 +224,7 @@ namespace GameEngine
} }
} while (flag); } while (flag);
} }
obj.IsMoving = false; // 结束移动
obj.IsMoving = 0; // 结束移动
EndMove(obj); EndMove(obj);
} }
} }


+ 1
- 1
logic/Gaming/ActionManager.cs View File

@@ -76,7 +76,7 @@ namespace Gaming


public bool Fix(Student player)// 自动检查有无发电机可修 public bool Fix(Student player)// 自动检查有无发电机可修
{ {
if (player.CharacterType == CharacterType.Teacher || (!player.Commandable()) || player.PlayerState == PlayerStateType.Fixing)
if ((!player.Commandable()) || player.PlayerState == PlayerStateType.Fixing)
return false; return false;
Generator? generatorForFix = (Generator?)gameMap.OneForInteract(player.Position, GameObjType.Generator); Generator? generatorForFix = (Generator?)gameMap.OneForInteract(player.Position, GameObjType.Generator);




+ 1
- 1
logic/Preparation/Interface/IMoveable.cs View File

@@ -8,7 +8,7 @@ namespace Preparation.Interface
{ {
object ActionLock { get; } object ActionLock { get; }
public int MoveSpeed { get; } public int MoveSpeed { get; }
public bool IsMoving { get; set; }
public int IsMoving { get; set; }
public bool IsRemoved { get; } public bool IsRemoved { get; }
public bool IsAvailableForMove { get; } public bool IsAvailableForMove { get; }
public long StateNum { get; } public long StateNum { get; }


+ 4
- 4
logic/Preparation/Interface/IOccupation.cs View File

@@ -169,7 +169,7 @@ namespace Preparation.Interface
public List<ActiveSkillType> ListOfIActiveSkill => new(new ActiveSkillType[] { ActiveSkillType.Punish }); public List<ActiveSkillType> ListOfIActiveSkill => new(new ActiveSkillType[] { ActiveSkillType.Punish });
public List<PassiveSkillType> ListOfIPassiveSkill => new(new PassiveSkillType[] { }); public List<PassiveSkillType> ListOfIPassiveSkill => new(new PassiveSkillType[] { });


public const int fixSpeed = 0;
public const int fixSpeed = 50;
public int FixSpeed => fixSpeed; public int FixSpeed => fixSpeed;


public const int treatSpeed = (int)(GameData.basicTreatSpeed * 0.8); public const int treatSpeed = (int)(GameData.basicTreatSpeed * 0.8);
@@ -178,16 +178,16 @@ namespace Preparation.Interface
public const double concealment = GameData.basicConcealment * 0.5; public const double concealment = GameData.basicConcealment * 0.5;
public double Concealment => concealment; public double Concealment => concealment;


public const int alertnessRadius = GameData.basicStudentAlertnessRadius / 2;
public const int alertnessRadius = GameData.basicStudentAlertnessRadius * 2 / 3;
public int AlertnessRadius => alertnessRadius; public int AlertnessRadius => alertnessRadius;


public int viewRange = GameData.basicStudentViewRange * 9 / 10;
public int viewRange = GameData.basicStudentViewRange * 8 / 10;
public int ViewRange => viewRange; public int ViewRange => viewRange;


public int speedOfOpeningOrLocking = GameData.basicSpeedOfOpeningOrLocking; public int speedOfOpeningOrLocking = GameData.basicSpeedOfOpeningOrLocking;
public int SpeedOfOpeningOrLocking => speedOfOpeningOrLocking; public int SpeedOfOpeningOrLocking => speedOfOpeningOrLocking;


public int speedOfClimbingThroughWindows = GameData.basicStudentSpeedOfClimbingThroughWindows / 2;
public int speedOfClimbingThroughWindows = GameData.basicStudentSpeedOfClimbingThroughWindows * 1000 / 1222;
public int SpeedOfClimbingThroughWindows => speedOfClimbingThroughWindows; public int SpeedOfClimbingThroughWindows => speedOfClimbingThroughWindows;


public int speedOfOpenChest = GameData.basicSpeedOfOpenChest; public int speedOfOpenChest = GameData.basicSpeedOfOpenChest;


Loading…
Cancel
Save