﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using UnityEditor;
using UnityEngine;

[CreateAssetMenu(fileName = "NewEngine.asset",menuName = "Vehicle/Engine", order =0)]
public class Engine : ScriptableObject
{
    [SerializeField]
    public float MinRPM;
    [SerializeField]
    public float MaxRPM;
    [SerializeField]
    public float MaxTorque;
    [SerializeField]
    public float IdleRPM;
    [SerializeField]
    float MotorBrake;
    [SerializeField]
    public float Mass;
    [SerializeField]
    public AnimationCurve Feature;
    public float GetMotorBrake()
    {
        return MotorBrake;
    }
    public float Evaluate(float rpm,float accelerator)
    {
        float ret;
        ret = Feature.Evaluate((rpm - MinRPM) / (MaxRPM - MinRPM)) * MaxTorque;
        if (rpm < MinRPM)
            ret = Feature.Evaluate(0) * MaxTorque;
        if (rpm >= MaxRPM )
            ret= 0;
        float targetRPM = IdleRPM + accelerator * (MaxRPM - IdleRPM);
        float fac;
        fac = (rpm - targetRPM) / (0.2f * MaxRPM);
        if (fac > 1) fac = 1;
        if (fac < 0) fac = 0;
        if (rpm > targetRPM) return -MotorBrake*fac;
        fac = (targetRPM - rpm) / (0.2f * MaxRPM);
        if (fac > 1) fac = 1;
        if (fac < 0) fac = 0;
        if (rpm <= targetRPM) return ret * fac;
        return 0;
    }

    /*[MenuItem("Assets/Create/Vehicle/Engine")]
    public static void CreateEngine()
    {
        Engine asset = ScriptableObject.CreateInstance<Engine>();

        AssetDatabase.CreateAsset(asset, "Assets/NewEngine.asset");
        AssetDatabase.SaveAssets();

        EditorUtility.FocusProjectWindow();

        Selection.activeObject = asset;
    }*/
}
