﻿using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class FloatControl : MonoBehaviour
{
    public WaterController wc;
    public bool floating = true;
    public bool drifting = true;
    public float driftAmount = 1f;

    Rigidbody rb;

    public float buoyancy = 0.1f;

    void Start()
    {
        if(!wc) print("please attach a water controller");

        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        if(floating && wc){
            if(transform.position.y < wc.waterLevel) {
                Vector3 buoyancyForce = BuoyancyForce(buoyancy, transform.position.y - wc.waterLevel);
                
                if(drifting) {
                    float xDrift = Mathf.PerlinNoise(Time.time * driftAmount, 0f) * 2 - 1;
                    float zDrift = Mathf.PerlinNoise(0f, Time.time * driftAmount) * 2 - 1;
                    buoyancyForce += new Vector3(xDrift, 0f, zDrift);
                }

                rb.AddForceAtPosition(new Vector3(0,15f,0), transform.position);
            }
        }
    }

    private Vector3 BuoyancyForce(float rho, float distanceToSurface)
    {
        return new Vector3 (0f, rho * Physics.gravity.y * distanceToSurface, 0f);
    }
}
