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;
protected override bool IgnoreCollideExecutor(IGameObj targetObj)
{
if (!IsOpen()) return false;
if (targetObj.Type != GameObjType.Character)
return true; // 非玩家不碰撞
else if (!((Character)targetObj).IsGhost())
return true; // 不是鬼不碰撞
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)
{
if (!canOpen) return true;
if (!IsOpen) return false;
if (targetObj.Type != GameObjType.Character)
return true; // 非玩家不碰撞
else if (!((Character)targetObj).IsGhost())
return true; // 不是鬼不碰撞
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;
protected override bool IgnoreCollideExecutor(IGameObj targetObj)
{
if (targetObj.Type != GameObjType.Character)
return true; // 非玩家不碰撞
if (targetObj == whoIsClimbing)
return true;
return false;


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

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


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

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

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

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


Loading…
Cancel
Save