void CheckForMoving() { if (golfBallRb.IsSleeping() && ballScript.isAlive) { HitState = HitStateEnum.AIMING; } }
// Update is called once per frame void Update() { if (AreAllDead()) { losingMessage.SetActive(true); } else { if (HitState == HitStateEnum.AIMING) { arrow.SetActive(true); DirAngle += Input.GetAxis("Horizontal") * 100f * Time.deltaTime; //Debug.Log(HitState); if (Input.GetKeyUp(KeyCode.Space)) { HitState = HitStateEnum.FORCE; return; } } else { arrow.SetActive(false); } if (HitState == HitStateEnum.FORCE) { //Debug.Log(HitState); HitForce += (ForceFillingSpeed * fillDirection) * Time.deltaTime; if (HitForce > MaxForce) { HitForce = MaxForce; fillDirection = -1; } if (MinForce > 0 && HitForce < MinForce) { HitForce = MinForce; fillDirection = 1; } else { if (HitForce < 0) { HitForce = 0; fillDirection = 1; } } if (Input.GetKeyUp(KeyCode.Space)) { HitState = HitStateEnum.READYTOHIT; //Debug.Log(HitState); } } } }
//FixedUpdate runs on every tick of the physics engine void FixedUpdate() { if (golfBallRb == null) { return; } if (HitState != HitStateEnum.READYTOHIT) { if (HitState == HitStateEnum.ROLLING) { CheckForMoving(); //wait to stop } return; } Vector3 forceVec = new Vector3(0, 0, HitForce); golfBallRb.AddForce(Quaternion.Euler(0, DirAngle, 0) * forceVec, ForceMode.Impulse); HitForce = MinForce > 0 ? MinForce : 0; fillDirection = 1; HitState = HitStateEnum.ROLLING; }