From 361a30e359e69e7d97d63036caa058aaf22c79bb Mon Sep 17 00:00:00 2001 From: shangfengh <3495281661@qq.com> Date: Sat, 20 May 2023 00:33:39 +0800 Subject: [PATCH] fix: :art: deprecate moveReaderWriterLock --- CAPI/cpp/API/include/constants.h | 10 +-- CAPI/python/PyAPI/constants.py | 18 +++-- logic/GameClass/GameObj/Bullet/Bullet.cs | 2 +- .../GameObj/Character/Character.Skill.cs | 2 +- .../GameClass/GameObj/Character/Character.cs | 16 ++--- logic/GameClass/GameObj/GameObj.cs | 25 ++----- logic/GameClass/GameObj/Moveable.cs | 66 +++---------------- logic/GameClass/GameObj/Prop/Gadget.cs | 2 +- logic/GameClass/GameObj/Prop/Item.cs | 2 +- logic/GameEngine/MoveEngine.cs | 8 +-- logic/Preparation/Interface/IMoveable.cs | 2 +- 11 files changed, 38 insertions(+), 115 deletions(-) diff --git a/CAPI/cpp/API/include/constants.h b/CAPI/cpp/API/include/constants.h index 6f0375f..f67555a 100644 --- a/CAPI/cpp/API/include/constants.h +++ b/CAPI/cpp/API/include/constants.h @@ -138,13 +138,13 @@ namespace Constants SCCI int moveSpeed = basicStudentSpeed * 9 / 10; SCCI int maxHp = basicHp * 10; SCCI int maxAddiction = basicMaxGamingAddiction * 10; - SCCI int fixSpeed = (int)(basicFixSpeed * 0.4); + SCCI int fixSpeed = (int)(basicFixSpeed * 50 / 123); SCCI int encourageSpeed = basicEncourageSpeed * 8 / 10; SCCI double concealment = 0.5; - SCCI int alertnessRadius = basicStudentAlertnessRadius * 3 / 4; + SCCI int alertnessRadius = basicStudentAlertnessRadius * 2 / 3; SCCI int viewRange = basicStudentViewRange * 8 / 10; SCCI int speedOfOpeningOrLocking = basicSpeedOfOpeningOrLocking; - SCCI int speedOfClimbingThroughWindows = (int)(basicStudentSpeedOfClimbingThroughWindows * 0.82); + SCCI int speedOfClimbingThroughWindows = (int)(basicStudentSpeedOfClimbingThroughWindows * 1000 / 1222); SCCI int speedOfOpenChest = basicSpeedOfOpenChest; }; @@ -377,7 +377,7 @@ namespace Constants struct Strike { SCCI double BulletBombRange = 0; - SSC double BulletAttackRange = basicAttackShortRange; + SCCI double BulletAttackRange = basicAttackShortRange; SCCI int ap = basicApOfTricker * 16 / 15; SCCI int Speed = basicBulletMoveSpeed * 125 / 148; SCCI bool IsRemoteAttack = false; @@ -385,7 +385,7 @@ namespace Constants SCCI int CastTime = basicCastTime * 16 / 25; SCCI int Backswing = basicBackswing; SCCI int RecoveryFromHit = basicRecoveryFromHit; - SCCI int cd = basicBackswing * 3 / 4; + SCCI int cd = basicBackswing; SCCI int maxBulletNum = 1; }; } // namespace Constants diff --git a/CAPI/python/PyAPI/constants.py b/CAPI/python/PyAPI/constants.py index 773b0ab..15ee9ed 100644 --- a/CAPI/python/PyAPI/constants.py +++ b/CAPI/python/PyAPI/constants.py @@ -159,14 +159,14 @@ class Teacher: moveSpeed = (int)(0.9 * Constants.basicStudentSpeed) maxHp = (int)(10.0 * Constants.basicHp) maxAddiction = (int)(10.0 * Constants.basicMaxGamingAddiction) - LearnSpeed = (int)(0.4 * Constants.basicLearnSpeed) + LearnSpeed = (int)( Constants.basicLearnSpeed* 50//123) EncourageSpeed = (int)(0.8 * Constants.basicEncourageSpeed) concealment = 0.5 * Constants.basicConcealment - alertnessRadius = (int)(0.75 * Constants.basicStudentAlertnessRadius) + alertnessRadius = (int)(Constants.basicStudentAlertnessRadius * 2 // 3) viewRange = (int)(0.8 * Constants.basicStudentViewRange) speedOfOpeningOrLocking = (int)(1.0 * Constants.basicSpeedOfOpeningOrLocking) speedOfClimbingThroughWindows = (int)( - 0.82 * Constants.basicStudentSpeedOfClimbingThroughWindows + Constants.basicStudentSpeedOfClimbingThroughWindows* 1000 // 1222 ) speedOfOpenChest = (int)(1.0 * Constants.basicSpeedOfOpenChest) @@ -197,9 +197,7 @@ class Robot: alertnessRadius = (int)(0.0 * Constants.basicStudentAlertnessRadius) viewRange = (int)(0.0 * Constants.basicStudentViewRange) speedOfOpeningOrLocking = (int)(0.0 * Constants.basicSpeedOfOpeningOrLocking) - speedOfClimbingThroughWindows = (int)( - 0.0008 * Constants.basicStudentSpeedOfClimbingThroughWindows - ) + speedOfClimbingThroughWindows = 1 speedOfOpenChest = (int)(0.8 * Constants.basicSpeedOfOpenChest) @@ -209,7 +207,7 @@ class TechOtaku: maxAddiction = (int)(1.0 * Constants.basicMaxGamingAddiction) LearnSpeed = (int)(0.9 * Constants.basicLearnSpeed) EncourageSpeed = (int)(1.0 * Constants.basicEncourageSpeed) - concealment = 1.0 * Constants.basicConcealment + concealment = 1.1 * Constants.basicConcealment alertnessRadius = (int)(1.0 * Constants.basicStudentAlertnessRadius) viewRange = (int)(0.9 * Constants.basicStudentViewRange) speedOfOpeningOrLocking = (int)(1.0 * Constants.basicSpeedOfOpeningOrLocking) @@ -296,7 +294,7 @@ class UseKnife: class UseRobot: - skillCD = (int)(0.0667 * Constants.commonSkillCD) + skillCD = (int)(2 * Constants.commonSkillCD // 30) durationTime = (int)(0.0 * Constants.commonSkillTime) @@ -306,7 +304,7 @@ class WriteAnswers: class SummonGolem: - skillCD = (int)(1.25 * Constants.commonSkillCD) + skillCD = (int)(4 * Constants.commonSkillCD//3) durationTime = (int)(6.0 * Constants.commonSkillTime) @@ -366,5 +364,5 @@ class Strike: CastTime = Constants.basicCastTime * 16 // 25 Backswing = Constants.basicBackswing RecoveryFromHit = Constants.basicRecoveryFromHit - cd = Constants.basicBackswing * 3 // 4 + cd = Constants.basicBackswing maxBulletNum = 1 diff --git a/logic/GameClass/GameObj/Bullet/Bullet.cs b/logic/GameClass/GameObj/Bullet/Bullet.cs index b7c20a9..54a242c 100644 --- a/logic/GameClass/GameObj/Bullet/Bullet.cs +++ b/logic/GameClass/GameObj/Bullet/Bullet.cs @@ -52,7 +52,7 @@ namespace GameClass.GameObj public Bullet(Character player, int radius, XY Position) : base(Position, radius, GameObjType.Bullet) { - this.canMove = true; + this.ReSetCanMove(true); this.MoveSpeed = this.Speed; this.hasSpear = player.TryUseSpear(); this.Parent = player; diff --git a/logic/GameClass/GameObj/Character/Character.Skill.cs b/logic/GameClass/GameObj/Character/Character.Skill.cs index 1132ff5..195d954 100644 --- a/logic/GameClass/GameObj/Character/Character.Skill.cs +++ b/logic/GameClass/GameObj/Character/Character.Skill.cs @@ -50,7 +50,7 @@ namespace GameClass.GameObj protected Character(XY initPos, int initRadius, CharacterType characterType) : base(initPos, initRadius, GameObjType.Character) { - this.canMove = true; + this.ReSetCanMove(true); this.score = 0; this.buffManager = new BuffManager(); this.occupation = OccupationFactory.FindIOccupation(characterType); diff --git a/logic/GameClass/GameObj/Character/Character.cs b/logic/GameClass/GameObj/Character/Character.cs index 79d1e4b..dfd4148 100644 --- a/logic/GameClass/GameObj/Character/Character.cs +++ b/logic/GameClass/GameObj/Character/Character.cs @@ -362,7 +362,7 @@ namespace GameClass.GameObj lock (actionLock) { if (playerState == PlayerStateType.Moving) - return (IsMoving == 1) ? PlayerStateType.Moving : PlayerStateType.Null; + return (IsMoving) ? PlayerStateType.Moving : PlayerStateType.Null; return playerState; } } @@ -594,17 +594,9 @@ namespace GameClass.GameObj { lock (actionLock) { - MoveReaderWriterLock.EnterWriteLock(); - try - { - canMove = false; - isRemoved = true; - } - finally - { - MoveReaderWriterLock.ExitWriteLock(); - } - playerState = playerStateType; + TryToRemove(); + ReSetCanMove(false); + SetPlayerState(playerStateType); position = GameData.PosWhoDie; } } diff --git a/logic/GameClass/GameObj/GameObj.cs b/logic/GameClass/GameObj/GameObj.cs index eb8dcaf..46065cd 100644 --- a/logic/GameClass/GameObj/GameObj.cs +++ b/logic/GameClass/GameObj/GameObj.cs @@ -29,40 +29,23 @@ namespace GameClass.GameObj protected XY facingDirection = new(1, 0); public abstract XY FacingDirection { get; } - protected bool canMove; public abstract bool CanMove { get; } public abstract bool IsRigid { get; } public abstract ShapeType Shape { get; } - protected bool isRemoved = false; - public virtual bool IsRemoved + protected int isRemoved = 0; + public bool IsRemoved { get { - gameObjReaderWriterLock.EnterReadLock(); - try - { - return isRemoved; - } - finally - { - gameObjReaderWriterLock.ExitReadLock(); - } + return (Interlocked.CompareExchange(ref isRemoved, 0, 0) == 1); } } public virtual void TryToRemove() { - gameObjReaderWriterLock.EnterWriteLock(); - try - { - isRemoved = true; - } - finally - { - gameObjReaderWriterLock.ExitWriteLock(); - } + Interlocked.Exchange(ref isRemoved, 1); } public int Radius { get; } diff --git a/logic/GameClass/GameObj/Moveable.cs b/logic/GameClass/GameObj/Moveable.cs index 21bf524..8ab496c 100644 --- a/logic/GameClass/GameObj/Moveable.cs +++ b/logic/GameClass/GameObj/Moveable.cs @@ -48,10 +48,10 @@ namespace GameClass.GameObj } private int isMoving = 0; - public int IsMoving + public bool IsMoving { - get => Interlocked.CompareExchange(ref isMoving, 0, 0); - set => Interlocked.Exchange(ref isMoving, value); + get => (Interlocked.CompareExchange(ref isMoving, 0, 0) == 1); + set => Interlocked.Exchange(ref isMoving, value ? 1 : 0); } // 移动,改变坐标 @@ -62,15 +62,7 @@ namespace GameClass.GameObj { lock (actionLock) { - moveReaderWriterLock.EnterReadLock(); - try - { - if (!canMove || isRemoved) return -1; - } - finally - { - moveReaderWriterLock.ExitReadLock(); - } + if (!CanMove || IsRemoved) return -1; if (stateNo != stateNum) return -1; facingDirection = moveVec; this.position += moveVec; @@ -87,49 +79,15 @@ namespace GameClass.GameObj } } + private int canMove; public override bool CanMove { - get - { - moveReaderWriterLock.EnterReadLock(); - try - { - return canMove; - } - finally - { - moveReaderWriterLock.ExitReadLock(); - } - } + get => (Interlocked.CompareExchange(ref canMove, 0, 0) == 1); } public void ReSetCanMove(bool value) { - moveReaderWriterLock.EnterWriteLock(); - try - { - canMove = value; - } - finally - { - moveReaderWriterLock.ExitWriteLock(); - } - } - - public override bool IsRemoved - { - get - { - moveReaderWriterLock.EnterReadLock(); - try - { - return isRemoved; - } - finally - { - moveReaderWriterLock.ExitReadLock(); - } - } + Interlocked.Exchange(ref canMove, (value ? 1 : 0)); } public bool IsAvailableForMove // 是否能接收移动指令 @@ -138,15 +96,7 @@ namespace GameClass.GameObj { lock (actionLock) { - moveReaderWriterLock.EnterReadLock(); - try - { - return isMoving == 0 && canMove && !isRemoved; - } - finally - { - moveReaderWriterLock.ExitReadLock(); - } + return !IsMoving && CanMove && !IsRemoved; } } } diff --git a/logic/GameClass/GameObj/Prop/Gadget.cs b/logic/GameClass/GameObj/Prop/Gadget.cs index 82611b3..4f03443 100644 --- a/logic/GameClass/GameObj/Prop/Gadget.cs +++ b/logic/GameClass/GameObj/Prop/Gadget.cs @@ -24,7 +24,7 @@ namespace GameClass.GameObj public Gadget(XY initPos, int radius = GameData.propRadius) : base(initPos, radius, GameObjType.Gadget) { - this.canMove = false; + this.ReSetCanMove(false); this.MoveSpeed = GameData.propMoveSpeed; } } diff --git a/logic/GameClass/GameObj/Prop/Item.cs b/logic/GameClass/GameObj/Prop/Item.cs index b4d3ea0..4ddb9b2 100644 --- a/logic/GameClass/GameObj/Prop/Item.cs +++ b/logic/GameClass/GameObj/Prop/Item.cs @@ -17,7 +17,7 @@ namespace GameClass.GameObj public Item(XY initPos, int radius = GameData.propRadius) : base(initPos, radius, GameObjType.Item) { - this.canMove = false; + this.ReSetCanMove(false); this.MoveSpeed = 0; } } diff --git a/logic/GameEngine/MoveEngine.cs b/logic/GameEngine/MoveEngine.cs index c94d3cd..c3f0d45 100644 --- a/logic/GameEngine/MoveEngine.cs +++ b/logic/GameEngine/MoveEngine.cs @@ -102,7 +102,7 @@ namespace GameEngine lock (obj.ActionLock) { if (!obj.IsAvailableForMove) { EndMove(obj); return; } - obj.IsMoving = 1; + obj.IsMoving = true; } new Thread @@ -139,7 +139,7 @@ namespace GameEngine if (isEnded) { - obj.IsMoving = 0; + obj.IsMoving = false; EndMove(obj); return; } @@ -184,7 +184,7 @@ namespace GameEngine } if (isEnded) { - obj.IsMoving = 0; + obj.IsMoving = false; EndMove(obj); return; } @@ -224,7 +224,7 @@ namespace GameEngine } } while (flag); } - obj.IsMoving = 0; // 结束移动 + obj.IsMoving = false; // 结束移动 EndMove(obj); } } diff --git a/logic/Preparation/Interface/IMoveable.cs b/logic/Preparation/Interface/IMoveable.cs index e33c1fb..ad87c31 100644 --- a/logic/Preparation/Interface/IMoveable.cs +++ b/logic/Preparation/Interface/IMoveable.cs @@ -8,7 +8,7 @@ namespace Preparation.Interface { object ActionLock { get; } public int MoveSpeed { get; } - public int IsMoving { get; set; } + public bool IsMoving { get; set; } public bool IsRemoved { get; } public bool IsAvailableForMove { get; } public long StateNum { get; }