Browse Source

Merge pull request #598 from shangfengh/new

fix: 🚑 fix the wrong PlayerState setting about addicted
tags/v0.1.0
shangfengh GitHub 2 years ago
parent
commit
0572c63a90
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 16 additions and 22 deletions
  1. +1
    -0
      docs/CAPI接口(cpp).md
  2. +4
    -4
      logic/GameClass/GameObj/Character/Character.cs
  3. +9
    -16
      logic/Gaming/ActionManager.cs
  4. +1
    -1
      logic/Preparation/Interface/ICharacter.cs
  5. +1
    -1
      logic/Preparation/Utility/GameData.cs

+ 1
- 0
docs/CAPI接口(cpp).md View File

@@ -9,6 +9,7 @@


#### 移动 #### 移动
- `std::future<bool> Move(int64_t timeInMilliseconds, double angleInRadian)`:移动,`timeInMilliseconds` 为移动时间,单位毫秒;`angleInRadian` 表示移动方向,单位弧度,使用极坐标,**竖直向下方向为 x 轴,水平向右方向为 y 轴**。因为移动过程中你会受到多种干扰使得移动结果不符合你的预期;因此建议小步移动,边移动边考虑之后的行为。 - `std::future<bool> Move(int64_t timeInMilliseconds, double angleInRadian)`:移动,`timeInMilliseconds` 为移动时间,单位毫秒;`angleInRadian` 表示移动方向,单位弧度,使用极坐标,**竖直向下方向为 x 轴,水平向右方向为 y 轴**。因为移动过程中你会受到多种干扰使得移动结果不符合你的预期;因此建议小步移动,边移动边考虑之后的行为。
- 5ms 以内的移动指令会被禁止,你不应当使用过小的移动指令
- `std::future<bool> MoveRight(uint32_t timeInMilliseconds)`即向右移动,`MoveLeft`、`MoveDown`、`MoveUp` 同理 - `std::future<bool> MoveRight(uint32_t timeInMilliseconds)`即向右移动,`MoveLeft`、`MoveDown`、`MoveUp` 同理


#### 使用技能 #### 使用技能


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

@@ -594,14 +594,14 @@ namespace GameClass.GameObj
} }
} }


public bool ResetPlayerState(long state)
public bool ResetPlayerState(long state, RunningStateType running = RunningStateType.Null, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null)
{ {
lock (actionLock) lock (actionLock)
{ {
if (state != stateNum) return false; if (state != stateNum) return false;
runningState = RunningStateType.Null;
whatInteractingWith = null;
playerState = PlayerStateType.Null;
this.runningState = running;
whatInteractingWith = (GameObj?)obj;
playerState = value;
++stateNum; ++stateNum;
return true; return true;
} }


+ 9
- 16
logic/Gaming/ActionManager.cs View File

@@ -305,11 +305,7 @@ namespace Gaming
long stateNum = player.SetPlayerState(RunningStateType.Waiting, PlayerStateType.Rescuing); long stateNum = player.SetPlayerState(RunningStateType.Waiting, PlayerStateType.Rescuing);
if (stateNum == -1) if (stateNum == -1)
{ {
lock (playerRescued.ActionLock)
{
if (playerRescued.StateNum == stateNumRescued)
player.SetPlayerStateNaturally();
}
playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted);
return false; return false;
} }


@@ -321,14 +317,14 @@ namespace Gaming
if (!player.StartThread(stateNum, RunningStateType.RunningSleepily)) if (!player.StartThread(stateNum, RunningStateType.RunningSleepily))
{ {
player.ThreadNum.Release(); player.ThreadNum.Release();
playerRescued.ResetPlayerState(stateNum);
playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted);
return; return;
} }


playerRescued.ThreadNum.WaitOne(); playerRescued.ThreadNum.WaitOne();
if (!GameData.ApproachToInteract(playerRescued.Position, player.Position)) return; if (!GameData.ApproachToInteract(playerRescued.Position, player.Position)) return;


if (!playerRescued.StartThread(stateNum, RunningStateType.RunningSleepily))
if (!playerRescued.StartThread(stateNumRescued, RunningStateType.RunningSleepily))
{ {
playerRescued.ThreadNum.Release(); playerRescued.ThreadNum.Release();
if (!player.ResetPlayerState(stateNum)) if (!player.ResetPlayerState(stateNum))
@@ -344,7 +340,7 @@ namespace Gaming
{ {
if (playerRescued.StateNum == stateNumRescued) if (playerRescued.StateNum == stateNumRescued)
{ {
if (playerRescued.AddTimeOfRescue(GameData.checkInterval * player.TreatSpeed))
if (playerRescued.AddTimeOfRescue(GameData.checkInterval))
{ {
playerRescued.SetPlayerStateNaturally(); playerRescued.SetPlayerStateNaturally();
playerRescued.HP = playerRescued.MaxHp / 2; playerRescued.HP = playerRescued.MaxHp / 2;
@@ -362,16 +358,11 @@ namespace Gaming
.Start(); .Start();
playerRescued.SetTimeOfRescue(0); playerRescued.SetTimeOfRescue(0);


player.ThreadNum.Release();
playerRescued.ThreadNum.Release();
if (player.ResetPlayerState(stateNum)) return; if (player.ResetPlayerState(stateNum)) return;


lock (playerRescued.ActionLock)
{
if (playerRescued.StateNum == stateNumRescued)
{
playerRescued.SetPlayerState(RunningStateType.RunningForcibly, PlayerStateType.Addicted);
return;
}
}
playerRescued.ResetPlayerState(stateNumRescued, RunningStateType.RunningForcibly, PlayerStateType.Addicted);
} }
) )
{ IsBackground = true }.Start(); { IsBackground = true }.Start();
@@ -428,6 +419,7 @@ namespace Gaming


return true; return true;
} }

public bool ClimbingThroughWindow(Character player) public bool ClimbingThroughWindow(Character player)
{ {
Window? windowForClimb = (Window?)gameMap.OneForInteractInACross(player.Position, GameObjType.Window); Window? windowForClimb = (Window?)gameMap.OneForInteractInACross(player.Position, GameObjType.Window);
@@ -501,6 +493,7 @@ namespace Gaming


return true; return true;
} }

public bool LockDoor(Character player) public bool LockDoor(Character player)
{ {
if (player.CharacterType == CharacterType.Robot) return false; if (player.CharacterType == CharacterType.Robot) return false;


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

@@ -16,7 +16,7 @@ namespace Preparation.Interface
public ActiveSkill FindActiveSkill(ActiveSkillType activeSkillType); public ActiveSkill FindActiveSkill(ActiveSkillType activeSkillType);
public int UpdateBulletNum(int time); public int UpdateBulletNum(int time);
public long SetPlayerState(RunningStateType running, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null); public long SetPlayerState(RunningStateType running, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null);
public bool ResetPlayerState(long state);
public bool ResetPlayerState(long state, RunningStateType running = RunningStateType.Null, PlayerStateType value = PlayerStateType.Null, IGameObj? obj = null);


public bool IsGhost(); public bool IsGhost();
} }


+ 1
- 1
logic/Preparation/Utility/GameData.cs View File

@@ -105,7 +105,7 @@ namespace Preparation.Utility
public const int basicTimeOfRescue = 1000; public const int basicTimeOfRescue = 1000;


#if DEBUG #if DEBUG
public const int basicStudentMoveSpeed = 3000;// 基本移动速度,单位:s-1
public const int basicStudentMoveSpeed = 9000;// 基本移动速度,单位:s-1
#else #else
public const int basicStudentMoveSpeed = 3000; public const int basicStudentMoveSpeed = 3000;
#endif #endif


Loading…
Cancel
Save