// Update is called once per frame void Update() { if (Input.GetKey(KeyCode.A) || Input.GetKey(KeyCode.LeftArrow)) { rudder.SteerLeft(); } else if (Input.GetKey(KeyCode.D) || Input.GetKey(KeyCode.RightArrow)) { rudder.SteerRight(); } else if (Input.GetKey(KeyCode.W) || Input.GetKey(KeyCode.UpArrow)) { // sails up sails.SpreadSails(); } else if (Input.GetKey(KeyCode.S) || Input.GetKey(KeyCode.DownArrow)) { // sails down sails.ReefSails(); } else if (Input.GetKeyDown(KeyCode.Space)) { // fire! if (weapons != null) { weapons.FireCannons(); } } }
protected void Sail() { if (Vector3.Distance(destination, transform.position) > 1.5f) { var angle = Utils.Math.AngleSigned(transform.up, transform.position - destination); if (angle < 5f && angle > -5f && (rudder.Angle > 20f || rudder.Angle < -20f)) { ;// don't turn anymore, let it gooooooo } else if (angle < -1f) { rudder.SteerRight(); } else if (angle > 1f) { rudder.SteerLeft(); } // calculate force pushing the boat // it should depend on the wind and boat params var forwardForce = (10f - rigidBody.velocity.magnitude) * speedModifier * transform.up * shipConfig.GetSailForce(GetAngleOfAttack()); forwardForce.y = 0f; rigidBody.AddForce(forwardForce); //Debug.Log("velocity: " + rigidBody.velocity.magnitude); } else { DestinationReached(); } }