Browse Source

build: 🚧 adjust the Collision about EmergencyExit,Doorway,and Window

tags/0.1.0
shangfengh 2 years ago
parent
commit
66141b0942
5 changed files with 10 additions and 9 deletions
  1. +1
    -2
      logic/GameClass/GameObj/Map/Doorway.cs
  2. +2
    -2
      logic/GameClass/GameObj/Map/EmergencyExit.cs
  3. +2
    -0
      logic/GameClass/GameObj/Map/Window.cs
  4. +2
    -2
      logic/Gaming/ActionManager.cs
  5. +3
    -3
      logic/规则Logic.md

+ 1
- 2
logic/GameClass/GameObj/Map/Doorway.cs View File

@@ -18,10 +18,9 @@ namespace GameClass.GameObj
public override ShapeType Shape => ShapeType.Square; public override ShapeType Shape => ShapeType.Square;
protected override bool IgnoreCollideExecutor(IGameObj targetObj) protected override bool IgnoreCollideExecutor(IGameObj targetObj)
{ {
if (!IsOpen()) return false;
if (targetObj.Type != GameObjType.Character) if (targetObj.Type != GameObjType.Character)
return true; // 非玩家不碰撞 return true; // 非玩家不碰撞
else if (!((Character)targetObj).IsGhost())
return true; // 不是鬼不碰撞
return false; return false;
} }




+ 2
- 2
logic/GameClass/GameObj/Map/EmergencyExit.cs View File

@@ -19,10 +19,10 @@ namespace GameClass.GameObj


protected override bool IgnoreCollideExecutor(IGameObj targetObj) protected override bool IgnoreCollideExecutor(IGameObj targetObj)
{ {
if (!canOpen) return true;
if (!IsOpen) return false;
if (targetObj.Type != GameObjType.Character) if (targetObj.Type != GameObjType.Character)
return true; // 非玩家不碰撞 return true; // 非玩家不碰撞
else if (!((Character)targetObj).IsGhost())
return true; // 不是鬼不碰撞
return false; return false;
} }




+ 2
- 0
logic/GameClass/GameObj/Map/Window.cs View File

@@ -18,6 +18,8 @@ namespace GameClass.GameObj
public override ShapeType Shape => ShapeType.Square; public override ShapeType Shape => ShapeType.Square;
protected override bool IgnoreCollideExecutor(IGameObj targetObj) protected override bool IgnoreCollideExecutor(IGameObj targetObj)
{ {
if (targetObj.Type != GameObjType.Character)
return true; // 非玩家不碰撞
if (targetObj == whoIsClimbing) if (targetObj == whoIsClimbing)
return true; return true;
return false; return false;


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

@@ -164,7 +164,7 @@ namespace Gaming
{ {
if (!(player.Commandable()) || player.CharacterType == CharacterType.Robot) if (!(player.Commandable()) || player.CharacterType == CharacterType.Robot)
return false; return false;
Doorway? doorwayForEscape = (Doorway?)gameMap.OneInTheSameCell(player.Position, GameObjType.Doorway);
Doorway? doorwayForEscape = (Doorway?)gameMap.OneForInteractInACross(player.Position, GameObjType.Doorway);
if (doorwayForEscape != null) if (doorwayForEscape != null)
{ {
if (doorwayForEscape.IsOpen()) if (doorwayForEscape.IsOpen())
@@ -179,7 +179,7 @@ namespace Gaming
} }
else else
{ {
EmergencyExit? emergencyExit = (EmergencyExit?)gameMap.OneInTheSameCell(player.Position, GameObjType.EmergencyExit);
EmergencyExit? emergencyExit = (EmergencyExit?)gameMap.OneForInteractInACross(player.Position, GameObjType.EmergencyExit);
if (emergencyExit != null && emergencyExit.IsOpen) if (emergencyExit != null && emergencyExit.IsOpen)
{ {
player.Die(PlayerStateType.Escaped); player.Die(PlayerStateType.Escaped);


+ 3
- 3
logic/规则Logic.md View File

@@ -203,9 +203,9 @@


### 交互 ### 交互
- 除了逃离和翻窗,交互目标与交互者在一个九宫格内则为可交互 - 除了逃离和翻窗,交互目标与交互者在一个九宫格内则为可交互
- 逃离时学生应当与出口在同一格子内
- 翻窗时玩家应当在窗前后一个格子内
- 逃离或翻窗时玩家应当在目标前后左右一个格子内
- 在指令仍在进行时,重复发出同一类型的交互指令是无效的,你需要先发出Stop指令终止进行的指令 - 在指令仍在进行时,重复发出同一类型的交互指令是无效的,你需要先发出Stop指令终止进行的指令
- 实际上救援或治疗不同的人是有效的


### 破译与逃脱 ### 破译与逃脱
- 每张地图都有10台电机,求生者需要破译其中的7台,并开启任意一个大门后从任意一个开启的大门- 逃脱,亦或者在只剩1名求生者的情况下从紧急出口逃脱; - 每张地图都有10台电机,求生者需要破译其中的7台,并开启任意一个大门后从任意一个开启的大门- 逃脱,亦或者在只剩1名求生者的情况下从紧急出口逃脱;
@@ -245,7 +245,7 @@
### 窗 ### 窗
- 求生者和监管者都可以翻越窗户,但通常情况下监管者翻越窗户的速度**高于**求生者。 - 求生者和监管者都可以翻越窗户,但通常情况下监管者翻越窗户的速度**高于**求生者。
- 在求生者或监管者正在翻越窗户时,其他玩家均不可以翻越该窗户。 - 在求生者或监管者正在翻越窗户时,其他玩家均不可以翻越该窗户。
- 窗始终有碰撞体积
- 攻击可以穿过窗,道具可以在窗上
- 翻窗时玩家应当在窗前后一个格子内 - 翻窗时玩家应当在窗前后一个格子内
- 翻越窗户是一种交互行为,翻窗一共有两个过程 - 翻越窗户是一种交互行为,翻窗一共有两个过程
- 跳上窗:从当前位置到窗边缘中点,位置瞬移,时间=距离/爬窗速度,中断时,停留在原位置 - 跳上窗:从当前位置到窗边缘中点,位置瞬移,时间=距离/爬窗速度,中断时,停留在原位置


Loading…
Cancel
Save