| @@ -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; | ||||
| } | } | ||||
| @@ -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; | ||||
| } | } | ||||
| @@ -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; | ||||
| @@ -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); | ||||
| @@ -203,9 +203,9 @@ | |||||
| ### 交互 | ### 交互 | ||||
| - 除了逃离和翻窗,交互目标与交互者在一个九宫格内则为可交互 | - 除了逃离和翻窗,交互目标与交互者在一个九宫格内则为可交互 | ||||
| - 逃离时学生应当与出口在同一格子内 | |||||
| - 翻窗时玩家应当在窗前后一个格子内 | |||||
| - 逃离或翻窗时玩家应当在目标前后左右一个格子内 | |||||
| - 在指令仍在进行时,重复发出同一类型的交互指令是无效的,你需要先发出Stop指令终止进行的指令 | - 在指令仍在进行时,重复发出同一类型的交互指令是无效的,你需要先发出Stop指令终止进行的指令 | ||||
| - 实际上救援或治疗不同的人是有效的 | |||||
| ### 破译与逃脱 | ### 破译与逃脱 | ||||
| - 每张地图都有10台电机,求生者需要破译其中的7台,并开启任意一个大门后从任意一个开启的大门- 逃脱,亦或者在只剩1名求生者的情况下从紧急出口逃脱; | - 每张地图都有10台电机,求生者需要破译其中的7台,并开启任意一个大门后从任意一个开启的大门- 逃脱,亦或者在只剩1名求生者的情况下从紧急出口逃脱; | ||||
| @@ -245,7 +245,7 @@ | |||||
| ### 窗 | ### 窗 | ||||
| - 求生者和监管者都可以翻越窗户,但通常情况下监管者翻越窗户的速度**高于**求生者。 | - 求生者和监管者都可以翻越窗户,但通常情况下监管者翻越窗户的速度**高于**求生者。 | ||||
| - 在求生者或监管者正在翻越窗户时,其他玩家均不可以翻越该窗户。 | - 在求生者或监管者正在翻越窗户时,其他玩家均不可以翻越该窗户。 | ||||
| - 窗始终有碰撞体积 | |||||
| - 攻击可以穿过窗,道具可以在窗上 | |||||
| - 翻窗时玩家应当在窗前后一个格子内 | - 翻窗时玩家应当在窗前后一个格子内 | ||||
| - 翻越窗户是一种交互行为,翻窗一共有两个过程 | - 翻越窗户是一种交互行为,翻窗一共有两个过程 | ||||
| - 跳上窗:从当前位置到窗边缘中点,位置瞬移,时间=距离/爬窗速度,中断时,停留在原位置 | - 跳上窗:从当前位置到窗边缘中点,位置瞬移,时间=距离/爬窗速度,中断时,停留在原位置 | ||||