Browse Source

fix: 🐛 fix the bug about OpenDoorWay

tags/v0.1.0
shangfengh 2 years ago
parent
commit
a10bfe7f33
2 changed files with 21 additions and 7 deletions
  1. +10
    -4
      logic/GameClass/GameObj/Character/Character.cs
  2. +11
    -3
      logic/Gaming/ActionManager.cs

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

@@ -516,10 +516,16 @@ namespace GameClass.GameObj
((Chest)whatInteractingWith!).StopOpen(); ((Chest)whatInteractingWith!).StopOpen();
return ChangePlayerState(value, gameObj); return ChangePlayerState(value, gameObj);
case PlayerStateType.OpeningTheDoorway: case PlayerStateType.OpeningTheDoorway:
Doorway doorway = (Doorway)whatInteractingWith!;
doorway.StopOpenning();
return ChangePlayerState(value, gameObj);

try
{
Doorway doorway = (Doorway)whatInteractingWith!;
doorway.StopOpenning();
return ChangePlayerState(value, gameObj);
}
finally
{
ThreadNum.Release();
}
case PlayerStateType.OpeningTheDoor: case PlayerStateType.OpeningTheDoor:
Door door = (Door)whatInteractingWith!; Door door = (Door)whatInteractingWith!;
try try


+ 11
- 3
logic/Gaming/ActionManager.cs View File

@@ -126,8 +126,6 @@ namespace Gaming


public bool OpenDoorway(Student player) public bool OpenDoorway(Student player)
{ {
if (!(player.Commandable()))
return false;
Doorway? doorwayToOpen = (Doorway?)gameMap.OneForInteract(player.Position, GameObjType.Doorway); Doorway? doorwayToOpen = (Doorway?)gameMap.OneForInteract(player.Position, GameObjType.Doorway);
if (doorwayToOpen == null) return false; if (doorwayToOpen == null) return false;


@@ -137,7 +135,16 @@ namespace Gaming
( (
() => () =>
{ {
//player.ThreadNum.WaitOne();
player.ThreadNum.WaitOne();
lock (player.ActionLock)
{
if (stateNum != player.StateNum)
{
player.ThreadNum.Release();
return;
}
}
doorwayToOpen.TryToOpen();
Thread.Sleep(GameData.degreeOfOpenedDoorway - doorwayToOpen.OpenDegree); Thread.Sleep(GameData.degreeOfOpenedDoorway - doorwayToOpen.OpenDegree);
lock (player.ActionLock) lock (player.ActionLock)
{ {
@@ -145,6 +152,7 @@ namespace Gaming
{ {
player.SetPlayerStateNaturally(); player.SetPlayerStateNaturally();
doorwayToOpen.FinishOpenning(); doorwayToOpen.FinishOpenning();
player.ThreadNum.Release();
} }
} }
} }


Loading…
Cancel
Save