IEnumerator MoveForewardFromStop() { groundMovementState = GroundMovementState.Stop; yield return(new WaitForSeconds(1.0f)); groundMovementState = GroundMovementState.MoveForward; }
IEnumerator JumpAndWait() { groundMovementState = GroundMovementState.Stop; yield return(new WaitForSeconds(2.0f)); groundMovementState = GroundMovementState.Jump; }
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; }
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; }
// 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; } }
// 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; } }