public override MovementState UpdateState(ref Vector3 velocity, ref Vector3 externalForces) { col = GetComponent<Collider2D>(); //check to see if the tether has been thrown if (isThrown) { //check if temp exists, and if so, is it moving if (temp && !temp.Moving) { //find the angle between the player and the stopped weapon //then pull the player continuously towards the tether Vector2 pullDirection = temp.transform.position - player.transform.position; velocity = pullDirection * tetherForce; //check for collisions in the x and y directions that the player is moving if ((controller.collisions.Left && direction.x < 0) || (controller.collisions.Right && direction.x > 0)) { velocity.x = 0; } if ((controller.collisions.Above && direction.y > 0) || (controller.collisions.Below && direction.x < 0)) { velocity.y = 0; } DecayExternalForces(ref externalForces); controller.Move(velocity * Time.deltaTime + externalForces * Time.deltaTime); } //If no on existing, exit the state if (!temp) { return checkState(); } //otherwise update the state as it would if the tether wasn't thrown else { currentState = checkState(); currentState = currentState.UpdateState(ref velocity, ref externalForces); } } //if not thrown, exit state else { return checkState(); } timeLeft -= Time.deltaTime; return null; }