Пример #1
0
 /// <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);
 }
Пример #2
0
    /// <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);
    }