Exemplo n.º 1
0
        private bool CheckClimbJump(Collider2DCom collider2DCom, Vector2 inputMove)
        {
            if (collider2DCom.Collider.Down)
            {
                return(false);
            }

            if (inputMove.y == 0)
            {
                return(false);
            }

            if (collider2DCom.Collider.Left)
            {
                //右横跳
                if (inputMove.x > 0)
                {
                    return(true);
                }
            }

            if (collider2DCom.Collider.Right)
            {
                //左横跳
                if (inputMove.x < 0)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 2
0
        private MoveType CalcMoveType(Collider2DCom collider2DCom, PlayerMoveCom moveCom, Vector2 inputMove)
        {
            //没有输入
            if (inputMove == Vector2.zero)
            {
                return(MoveType.None);
            }

            if (CheckClimb(collider2DCom, inputMove))
            {
                return(MoveType.Climb);
            }

            if (CheckClimbJump(collider2DCom, inputMove))
            {
                return(MoveType.ClimbJump);
            }
            else
            {
                if (CheckGrabWall(collider2DCom, inputMove))
                {
                    return(MoveType.GrabWall);
                }
            }

            if (CheckCanJump(moveCom, inputMove))
            {
                return(MoveType.Jump);
            }

            return(MoveType.Run);
        }
Exemplo n.º 3
0
        private void HandleMove(TransformCom transCom, Collider2DCom collider2DCom, AnimCom animCom)
        {
            if (transCom.ReqMove.x != 0)
            {
                if (collider2DCom.Collider.Left && transCom.ReqMove.x < 0)
                {
                    transCom.ReqMove.x = 0;
                }
                if (collider2DCom.Collider.Right && transCom.ReqMove.x > 0)
                {
                    transCom.ReqMove.x = 0;
                }
            }
            if (transCom.ReqMove.y != 0)
            {
                if (collider2DCom.Collider.Up && transCom.ReqMove.y > 0)
                {
                    transCom.ReqMove.y = 0;
                }
                if (collider2DCom.Collider.Down && transCom.ReqMove.y < 0)
                {
                    transCom.ReqMove.y = 0;
                }
            }

            if (transCom.ReqMove == Vector3.zero)
            {
                return;
            }

            transCom.Translate(transCom.ReqMove);
            animCom.SetReqAnim("run");

            transCom.ReqMove = Vector3.zero;
        }
Exemplo n.º 4
0
 //重置跳跃阶段
 private void ResetJumpStep(PlayerMoveCom moveCom, Collider2DCom collider2DCom)
 {
     if (!collider2DCom.Collider.Down)
     {
         return;
     }
     moveCom.JumpStep = 0;
 }
Exemplo n.º 5
0
        private Shape GetEntityColliderShape(Entity entity)
        {
            Collider2DCom collider2DCom = entity.GetCom <Collider2DCom>();
            TransformCom  transCom      = entity.GetCom <TransformCom>();
            Shape         shape         = collider2DCom.colliderShape;

            shape.Translate(transCom.GetPos());
            return(shape);
        }
Exemplo n.º 6
0
        //碰撞处理
        private void HandleCollider(Collider2DCom collider2DCom)
        {
            Vector2 pos = collider2DCom.trans.position;

            collider2DCom.Collider.Up    = CheckCollider(pos + collider2DCom.UpCheckPoint);
            collider2DCom.Collider.Down  = CheckCollider(pos + collider2DCom.DownCheckPoint);
            collider2DCom.Collider.Left  = CheckCollider(pos + collider2DCom.LeftCheckPoint);
            collider2DCom.Collider.Right = CheckCollider(pos + collider2DCom.RightCheckPoint);
        }
Exemplo n.º 7
0
        protected override void HandleComs(List <BaseCom> comList)
        {
            TransformCom  transCom      = GetCom <TransformCom>(comList[0]);
            Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[1]);
            AnimCom       animCom       = GetCom <AnimCom>(comList[2]);

            HandleDir(transCom);
            HandleMove(transCom, collider2DCom, animCom);
            transCom.UpdatePos();
        }
Exemplo n.º 8
0
        private void HandleMoveAnim(List <BaseCom> comList)
        {
            PlayerMoveCom moveCom       = GetCom <PlayerMoveCom>(comList[1]);
            AnimCom       animCom       = GetCom <AnimCom>(comList[2]);
            Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[3]);

            //地面
            if (collider2DCom.Collider.Down)
            {
                if (moveCom.Rig.velocity.y > 0)
                {
                    animCom.SetReqAnim("jumpUp");
                    return;
                }
                if (moveCom.Rig.velocity.x != 0)
                {
                    animCom.SetReqAnim("run");
                    return;
                }
                else
                {
                    animCom.SetReqAnim("idle");
                    return;
                }
            }
            else
            {
                if (collider2DCom.Collider.Left || collider2DCom.Collider.Right)
                {
                    animCom.SetReqAnim("climb");
                    return;
                }
                //空中
                if (collider2DCom.Collider.IsNull() || collider2DCom.Collider.Up)
                {
                    if (moveCom.Rig.velocity.y > 0)
                    {
                        animCom.SetReqAnim("jumpUp");
                        return;
                    }
                    else
                    {
                        animCom.SetReqAnim("jumpDown");
                        return;
                    }
                }
            }
        }
Exemplo n.º 9
0
 private void ClampMoveSpeed(PlayerMoveCom moveCom, Collider2DCom collider2DCom)
 {
     if (collider2DCom.Collider.Left)
     {
         if (moveCom.ReqMoveSpeed < 0)
         {
             moveCom.ReqMoveSpeed = 0;
         }
     }
     if (collider2DCom.Collider.Right)
     {
         if (moveCom.ReqMoveSpeed > 0)
         {
             moveCom.ReqMoveSpeed = 0;
         }
     }
 }
Exemplo n.º 10
0
        protected override void HandleComs(List <BaseCom> comList)
        {
            WanderCom     wanderCom     = GetCom <WanderCom>(comList[0]);
            TransformCom  transCom      = GetCom <TransformCom>(comList[1]);
            Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[2]);
            PropertyCom   propertyCom   = GetCom <PropertyCom>(comList[3]);

            wanderCom.WanderDir = CalcWanderMoveDir(transCom, wanderCom, collider2DCom);

            //更新方向
            transCom.ReqDir = wanderCom.WanderDir;

            //位移
            Vector3 delta = new Vector3(wanderCom.WanderDir == DirType.Right ? 1 : -1, 0, 0);

            delta            = delta * propertyCom.MoveSpeed.Curr * Time.deltaTime;
            transCom.ReqMove = delta;
        }
Exemplo n.º 11
0
        public DirType CalcWanderMoveDir(TransformCom transCom, WanderCom wanderCom, Collider2DCom collider2DCom)
        {
            //碰撞判断
            if (wanderCom.WanderDir == DirType.None)
            {
                return((DirType)UnityEngine.Random.Range((int)DirType.Left, (int)DirType.Right));
            }
            //不在地面
            if (!collider2DCom.Collider.Down)
            {
                return(wanderCom.WanderDir == DirType.Left ? DirType.Right : DirType.Left);
            }
            if (collider2DCom.Collider.Left)
            {
                return(DirType.Right);
            }
            if (collider2DCom.Collider.Right)
            {
                return(DirType.Left);
            }

            //范围判断
            if (wanderCom.WanderRange > 0)
            {
                Vector3 currPos = transCom.GetPos();
                if (Vector2.Distance(transCom.CreatePos, currPos) > wanderCom.WanderRange)
                {
                    if (currPos.x - transCom.CreatePos.x > 0)
                    {
                        return(DirType.Left);
                    }
                    else
                    {
                        return(DirType.Right);
                    }
                }
            }

            return(wanderCom.WanderDir);
        }
Exemplo n.º 12
0
        private bool CheckGrabWall(Collider2DCom collider2DCom, Vector2 inputMove)
        {
            if (collider2DCom.Collider.Down)
            {
                return(false);
            }

            if (!collider2DCom.Collider.Right && !collider2DCom.Collider.Left)
            {
                return(false);
            }

            if (inputMove.y != 0)
            {
                return(false);
            }

            if (collider2DCom.Collider.Left)
            {
                //右横跳
                if (inputMove.x > 0)
                {
                    return(true);
                }
            }

            if (collider2DCom.Collider.Right)
            {
                //左横跳
                if (inputMove.x < 0)
                {
                    return(true);
                }
            }

            return(false);
        }
Exemplo n.º 13
0
        private bool CheckClimb(Collider2DCom collider2DCom, Vector2 inputMove)
        {
            if (inputMove.y != 0)
            {
                return(false);
            }

            if (!collider2DCom.Collider.Left && !collider2DCom.Collider.Right)
            {
                return(false);
            }

            if (inputMove.x < 0 && collider2DCom.Collider.Right)
            {
                return(false);
            }

            if (inputMove.x > 0 && collider2DCom.Collider.Left)
            {
                return(false);
            }

            return(true);
        }
Exemplo n.º 14
0
        protected override void OnEnter(NodeData wData)
        {
            EntityWorkData workData = wData as EntityWorkData;

            //参数
            Vector2 inputMove = workData.GetParam().GetVect2();

            //组件
            PlayerMoveCom moveCom       = workData.MEntity.GetCom <PlayerMoveCom>();
            TransformCom  transCom      = workData.MEntity.GetCom <TransformCom>();
            Collider2DCom collider2DCom = workData.MEntity.GetCom <Collider2DCom>();
            PropertyCom   propertyCom   = workData.MEntity.GetCom <PropertyCom>();

            //跳跃阶段重置
            ResetJumpStep(moveCom, collider2DCom);

            if (CheckMoveTypeInCD(moveCom))
            {
                moveCom.HasNoReqMove = true;
                return;
            }
            else
            {
                moveCom.HasNoReqMove = false;
            }

            MoveType moveType = CalcMoveType(collider2DCom, moveCom, inputMove);

            switch (moveType)
            {
            case MoveType.None:
                moveCom.ReqMoveSpeed = 0;
                moveCom.ReqJumpSpeed = 0;
                break;

            case MoveType.Run:
                moveCom.ReqMoveSpeed = propertyCom.MoveSpeed.Curr * inputMove.x;
                moveCom.ReqJumpSpeed = 0;
                break;

            case MoveType.Jump:
                moveCom.JumpStep++;
                moveCom.ReqMoveSpeed = 0;
                moveCom.ReqJumpSpeed = propertyCom.JumpSpeed.Curr * inputMove.y;
                break;

            case MoveType.Climb:
                inputMove.x          = inputMove.x < 0 ? -inputMove.x : inputMove.x;
                moveCom.ReqMoveSpeed = 0;
                moveCom.ReqJumpSpeed = propertyCom.ClimbSpeed.Curr * inputMove.x;
                break;

            case MoveType.ClimbJump:
                int moveValue = inputMove.x < 0 ? -1 : 1;
                moveCom.ReqMoveSpeed = propertyCom.MoveSpeed.Curr * moveValue;
                moveCom.ReqJumpSpeed = propertyCom.ClimbSpeed.Curr;
                break;

            case MoveType.GrabWall:
                moveCom.ReqMoveSpeed = 0;
                moveCom.ReqJumpSpeed = 0;
                break;

            default:
                break;
            }

            ClampMoveSpeed(moveCom, collider2DCom);
            HandleMoveTypeCD(moveType, moveCom);
            HandleMoveDir(moveCom, transCom);

            //记录状态
            moveCom.CurrMoveType = moveType;
            if (inputMove.y != 0)
            {
                Debug.LogWarningFormat("BEV_ACT_Move>>>>>{0}--ReqMoveSpeed:{1}--ReqJumpSpeed:{2}", moveType.ToString(), moveCom.ReqMoveSpeed, moveCom.ReqJumpSpeed);
            }
        }
Exemplo n.º 15
0
        protected override void HandleComs(List <BaseCom> comList)
        {
            Collider2DCom collider2DCom = GetCom <Collider2DCom>(comList[0]);

            HandleCollider(collider2DCom);
        }