예제 #1
0
        void ContinuousMove(InGameDirection direction)
        {
            if (direction < 0)
            {
                direction = (InGameDirection )(-1 * (int)direction);
            }
            Vector3 vMovement = IsometricMovement.HorizontalVector(direction);

            target.DirectTranslate(vMovement * Time.deltaTime);
        }
예제 #2
0
        protected void ExecuteDir(InGameDirection dir)
        {
            bool bMove = dir > 0;

            if (!bMove)
            {
                dir = (InGameDirection)(-1 * (int)dir);
            }

            if (dir.Equals(InGameDirection.Dash) || (!bOnMoving && (isOnGround || bJumpWithMove)))
            {
                if (!bJumpWithMove && dir.Equals(InGameDirection.Jump_Move))
                {
                    jumpStart();
                    dir = LastDirection;
                }

                if (bDashing = dir.Equals(InGameDirection.Dash))
                {
                    dir = LastDirection;
                }
                else
                {
                    LastDirection = dir;
                }

                // float fAngle = IsometricMovement.AngleOfForward(dir);

                if (bRotateToDirection)
                {
                    RotateTo(dir);
                    // cTransform.localEulerAngles = new Vector3(0, fAngle, 0);
                }

                if (bMove)
                {
                    Vector3 v3TmpCoordinates = IsometricMovement.HorizontalVector(dir);
                    if (!bDashing && bSnapToGroundGrid)
                    {
                        Vector3 vUnSnapedPosition = groundGridUnSnapedPosition(cTransform.position);
                        if (vUnSnapedPosition.magnitude > 0.2f &&
                            Vector3.Dot(v3TmpCoordinates.normalized, vUnSnapedPosition.normalized) > 0.866f) //0.866 means angle < 30
                        {
                            v3TmpCoordinates = -vUnSnapedPosition;
                        }
                    }

                    Vector3 v3TmpPosition = cTransform.position + groundGridPos(v3TmpCoordinates, bSnapToGroundGrid);
                    if (!bDashing && bSnapToGroundGrid)
                    {
                        v3TmpPosition += groundGridUnSnapedPosition(v3TmpPosition);
                    }

                    if (bDashing)
                    {
                        v3TmpPosition += vHorizontalMovement;
                    }

                    bMove = Grounding(v3TmpPosition, fMaxDropHeight);
                    if (bMove)
                    {
                        if (!bDashing)
                        {
                            vLastCoordinates = vDestinationCoordinates;
                        }
                        vDestinationCoordinates += v3TmpCoordinates;
                        SetHorizontalMovement(v3TmpPosition - cTransform.position);
                    }
                }
            }
            else
            {
                EnQueueDirection(dir);
            }
        }
        protected void ExecuteDir(InGameDirection dir)
        {
            isMoving = true;
            bool bMove = dir > 0 && alive;

            if (!bMove)
            {
                dir = (InGameDirection)(-1 * (int)dir);
            }

            if (dir.Equals(InGameDirection.Dash) || (!bOnMoving && (isOnGround || bJumpWithMove)))
            {
                if (!bJumpWithMove && dir.Equals(InGameDirection.Jump_Move))
                {
                    jumpStart();
                    dir = LastDirection;
                }

                if (bDashing = dir.Equals(InGameDirection.Dash))
                {
                    dir = LastDirection;
                }
                else
                {
                    LastDirection = dir;
                }

                // float fAngle = IsometricMovement.AngleOfForward(dir);

                if (bRotateToDirection)
                {
                    RotateTo(dir);
                    // cTransform.localEulerAngles = new Vector3(0, fAngle, 0);
                }

                if (bMove)
                {
                    Vector3 v3TmpCoordinates = IsometricMovement.HorizontalVector(dir);
                    if (!bDashing && bSnapToGroundGrid)
                    {
                        Vector3 vUnSnapedPosition = groundGridUnSnapedPosition(cTransform.position);
                        if (vUnSnapedPosition.magnitude > 0.2f &&
                            Vector3.Dot(v3TmpCoordinates.normalized, vUnSnapedPosition.normalized) > 0.866f) //0.866 means angle < 30
                        {
                            v3TmpCoordinates = -vUnSnapedPosition;
                        }
                    }

                    Vector3 v3TmpPosition = cTransform.position + groundGridPos(v3TmpCoordinates, bSnapToGroundGrid);
                    if (!bDashing && bSnapToGroundGrid)
                    {
                        v3TmpPosition += groundGridUnSnapedPosition(v3TmpPosition);
                    }

                    if (bDashing)
                    {
                        v3TmpPosition += vHorizontalMovement;
                    }

                    bMove = Grounding(v3TmpPosition, fMaxDropHeight);
                    if (!bDashing)
                    {
                        vLastCoordinates = vDestinationCoordinates;
                    }
                    vDestinationCoordinates += v3TmpCoordinates;
                    SetHorizontalMovement(v3TmpPosition - cTransform.position);
                    if (!bMove)
                    {
                        if (!GameObject.FindWithTag("Player").GetComponent <KeyInputAssist>().illegalJump)
                        {
                            alive = false;
                            GameObject.FindWithTag("Player").GetComponent <KeyInputAssist>().illegalJump = false;
                        }

                        //Get grid location where Player was standing before they fell to their doom.
                        deathType = deathByFalling;
                        // var deathlocation = GameObject.FindWithTag("Player").GetComponent<KeyInputAssist>().GetCurrAlpacaLocationProperty();
                    }
                }
            }
            else
            {
                EnQueueDirection(dir);
            }
        }