Exemple #1
0
    IEnumerator MoveForewardFromStop()
    {
        groundMovementState = GroundMovementState.Stop;
        yield return(new WaitForSeconds(1.0f));

        groundMovementState = GroundMovementState.MoveForward;
    }
Exemple #2
0
    IEnumerator JumpAndWait()
    {
        groundMovementState = GroundMovementState.Stop;
        yield return(new WaitForSeconds(2.0f));

        groundMovementState = GroundMovementState.Jump;
    }
Exemple #3
0
    private void Awake()
    {
        m_groundMovementState = transform.parent.parent.Find("States").GetComponentInChildren(typeof(GroundMovementState)) as GroundMovementState;

        m_stateMachine        = transform.parent.parent.GetComponentInChildren(typeof(StateMachine)) as StateMachine;
        m_groundChecks        = transform.parent.parent.GetComponent(typeof(GroundChecks)) as GroundChecks;
        m_characterController = transform.parent.parent.GetComponent(typeof(CharacterController)) as CharacterController;
    }
Exemple #4
0
    private void Awake()
    {
        m_inputController     = transform.parent.parent.GetComponent(typeof(InputController)) as InputController;
        m_playerStateMachine  = transform.parent.GetComponent(typeof(StateMachine)) as StateMachine;
        m_groundMovementState = transform.parent.GetComponentInChildren(typeof(GroundMovementState)) as GroundMovementState;

        m_cameraStateMachine = transform.parent.parent.GetComponentInChildren(typeof(StateMachineCamera)) as StateMachineCamera;
        m_talkingCameraState = m_cameraStateMachine.GetComponentInChildren(typeof(TalkingCameraState)) as TalkingCameraState;
        m_defaultCameraState = m_cameraStateMachine.GetComponentInChildren(typeof(DefaultCameraState)) as DefaultCameraState;
    }
Exemple #5
0
        // Start is called before the first frame update
        private void Start()
        {
            player = GameObject.FindGameObjectWithTag("Player");
            CharacterController        = gameObject.GetComponent <CharacterController2D>();
            defaultGroundMovementState = GroundMovementState;

            if (!hasStartedFacingRight)
            {
                transform.eulerAngles = 180 * Vector3.up;
                IsFacingRight         = false;
            }
        }
Exemple #6
0
        // Update is called once per frame
        private void Update()
        {
            if (isGrounded)
            {
                var facingMultiplier = IsFacingRight ? (sbyte)1 : (sbyte)-1;

                switch (GroundMovementState)
                {
                case GroundMovementState.Stop:
                    moveDirection = Vector3.zero;
                    break;

                case GroundMovementState.MoveForward:
                    //TryOrientateCharacter();
                    moveDirection.x = facingMultiplier * moveSpeed;
                    break;

                case GroundMovementState.Jump:
                    //TryOrientateCharacter();
                    moveDirection.y = JumpSpeed;
                    if (canJumpForward)
                    {
                        moveDirection.x = facingMultiplier * moveSpeed;
                    }
                    if (jumpDelay > 0)
                    {
                        StartCoroutine(JumpWaiter(jumpDelay));
                    }
                    break;

                case GroundMovementState.Patrol:
                    if (!currentWaypoint)
                    {
                        currentWaypoint = waypoints[waypointIndex];
                    }

                    var   difference = currentWaypoint.position - transform.position;
                    float distanceX  = Mathf.Abs(difference.x);

                    if (distanceX > .1f && difference.x != 0)
                    {
                        moveDirection.x = Mathf.Sign(difference.x) * moveSpeed;

                        transform.eulerAngles = difference.x > 0f ? Vector3.zero : 180 * Vector3.up;
                    }
                    else
                    {
                        StartCoroutine(ArriveAtWaypoint(arriveDelay));
                    }
                    break;

                case GroundMovementState.Dash:
                    break;

                case GroundMovementState.Chase:
                    //var tempFacingMultiplier = player.transform.position.x > transform.position.x ? (sbyte)1 : (sbyte)-1;
                    //IsFacingRight = facingMultiplier == tempFacingMultiplier ? IsFacingRight : !IsFacingRight;
                    //facingMultiplier = IsFacingRight ? (sbyte)1 : (sbyte)-1;
                    //OrientateCharacter();
                    //moveDirection.x = facingMultiplier * moveSpeed;
                    //if (!hasChased)
                    //{
                    //    facingMultiplier = player.transform.position.x > transform.position.x ? (sbyte)1 : (sbyte)-1;
                    //    moveDirection.x = facingMultiplier * moveSpeed;
                    //    hasChased = true;
                    //}

                    //transform.position = Vector2.MoveTowards(transform.position, new Vector2(player.transform.position.x, transform.position.y), moveSpeed * Time.deltaTime / 2);
                    var playerDifference = player.transform.position - transform.position;
                    if (!hasChased)
                    {
                        transform.position = Vector2.MoveTowards(transform.position, new Vector2(player.transform.position.x, transform.position.y), moveSpeed * Time.deltaTime);

                        transform.eulerAngles = playerDifference.x > 0f ? Vector3.zero : 180 * Vector3.up;

                        hasChased = true;
                    }
                    break;

                case GroundMovementState.Attack:
                    //timer = defaultTimer;
                    print("\t\t\tATTACKING");
                    moveDirection = Vector3.zero;
                    break;

                default:
                    break;
                }
            }

            moveDirection.y -= gravity * Time.deltaTime;

            CharacterController.move(moveDirection * Time.deltaTime);
            Flags = CharacterController.collisionState;

            isGrounded = Flags.below;


            if (GroundMovementState.Equals(GroundMovementState.Chase))
            {
                OrientateCharacter();
            }
            else
            {
                TryOrientateCharacter();
            }

            hit = Physics2D.Raycast(raycast.position, (IsFacingRight ? (sbyte)-1 : (sbyte)1) * Vector2.left, raycastLength, layerMask);
            DebugRaycast();
            if (hit.collider && hit.collider.tag == "Player")
            {
                distance = Vector2.Distance(transform.position, player.transform.position);
                if (distance > attackDistance || hasCooldown)
                {
                    GroundMovementState = GroundMovementState.Chase;
                }
                else
                {
                    GroundMovementState = GroundMovementState.Attack;
                }
            }
            else
            {
                //GroundMovementState = defaultGroundMovementState;
            }
        }