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

public void 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();
try
{
return !isMoving && canMove && !isRemoved;
return isMoving == 0 && canMove && !isRemoved;
}
finally
{


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

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

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

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


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

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

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;
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; }
public int MoveSpeed { get; }
public bool IsMoving { get; set; }
public int IsMoving { get; set; }
public bool IsRemoved { get; }
public bool IsAvailableForMove { 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<PassiveSkillType> ListOfIPassiveSkill => new(new PassiveSkillType[] { });

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

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 double Concealment => concealment;

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

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

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

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

public int speedOfOpenChest = GameData.basicSpeedOfOpenChest;


Loading…
Cancel
Save