/// <summary> /// 判定是否对于其他事件可通行,会处理事件的目标位置 /// </summary> /// <returns><c>true</c>, if pre passable was ised, <c>false</c> otherwise.</returns> /// <param name="polygon">Polygon.</param> /// <param name="character">Character.</param> public bool isPreOtherEventsPassable(Intersection.Polygon polygon, GameCharacterBase character) { if (character.through) { return(true); } // 检测事件通行 foreach (GameEvent e in this.events) { Intersection.Polygon eventTargetCollider = e.targetCollider(); if (e.through == false && Intersection.polygonPolygon(eventTargetCollider, polygon)) { if (character.GetType() == typeof(GameEvent)) { GameEvent eChar = (GameEvent)character; if (!e.erased && !e.through && e.priorityType == GameCharacterBase.PRIORITIES.SAME && e.isPageActive() && character != e && !eChar.erased && !eChar.through && eChar.priorityType == GameCharacterBase.PRIORITIES.SAME) { return(false); } } else { if (!e.erased && !e.through && e.priorityType == GameCharacterBase.PRIORITIES.SAME && e.isPageActive() && character != e) { return(false); } } } } return(true); }
/// <summary> /// 判断碰撞盒是否可通行 /// </summary> /// <param name="polygon"></param> /// <param name="character"></param> /// <param name="isPlayerStep">判定玩家的行走</param> /// <returns></returns> public bool isPassable(Intersection.Polygon polygon, GameCharacterBase character) { if (character.through) { return(true); } // 检测图块通行 foreach (Intersection.Polygon mapCollider in this.mapInfo.passageColliders) { if (Intersection.polygonPolygon(mapCollider, polygon)) { return(false); } } // 检测事件通行 character.lastHit.Clear(); foreach (GameEvent e in this.events) { Intersection.Polygon eventCollider = e.currCollider(); if (e.through == false && Intersection.polygonPolygon(eventCollider, polygon)) { if (character != null && character != e && !e.erased && !character.lastHit.Contains(e)) { character.lastHit.Add(e); } if (character.GetType() == typeof(GameEvent)) { GameEvent eChar = (GameEvent)character; if (!e.erased && !e.through && e.priorityType == GameCharacterBase.PRIORITIES.SAME && e.isPageActive() && character != e && !eChar.erased && !eChar.through && eChar.priorityType == GameCharacterBase.PRIORITIES.SAME) { return(false); } } else { if (!e.erased && !e.through && e.priorityType == GameCharacterBase.PRIORITIES.SAME && e.isPageActive() && character != e) { return(false); } } } } // 检查事件碰到主角 if (character.GetType() == typeof(GameEvent)) { Intersection.Polygon playerCollider = GameTemp.gamePlayer.currCollider(); GameEvent e = (GameEvent)character; if (e.through == false && Intersection.polygonPolygon(playerCollider, polygon)) { if (e != null && !e.erased && !e.lastHit.Contains(GameTemp.gamePlayer)) { e.lastHit.Add(GameTemp.gamePlayer); if (!GameTemp.gamePlayer.lastHit.Contains(e)) { GameTemp.gamePlayer.lastHit.Add(e); // 给玩家碰撞数据加上本事件 } } if (!e.erased && !e.through && e.isPageActive() && e.priorityType == GameCharacterBase.PRIORITIES.SAME) { return(false); } } } return(true); }