public void SetWarpRates(TimeWarpRates rates, bool message = true)
        {
            if (TimeWarp.fetch != null)
            {
                if (TimeWarp.fetch.warpRates.Length == rates.Rates.Length && !rates.Physics)
                {
                    TimeWarp.fetch.warpRates = rates.Rates;
                    CurrentWarp = rates;

                    for (var i = 0; i < warpRates.Length; i++)
                    {
                        var r = warpRates[i];
                        if (r == rates)
                        {
                            currWarpIndex = i;
                        }
                    }

                    Log.Info("Set time warp rates to " + rates.ToString());
                    if (message)
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage("New time warp rates: " + rates.Name, 3f, ScreenMessageStyle.UPPER_CENTER));
                    }
                    return;
                }
                else if (TimeWarp.fetch.physicsWarpRates.Length == rates.Rates.Length && rates.Physics)
                {
                    TimeWarp.fetch.physicsWarpRates = rates.Rates;
                    CurrentPhysWarp = rates;

                    for (var i = 0; i < physRates.Length; i++)
                    {
                        var r = physRates[i];
                        if (r == rates)
                        {
                            currPhysIndex = i;
                        }
                    }

                    print("[BetterTimeWarp]: Set time warp rates to " + rates.ToString());
                    if (message)
                    {
                        ScreenMessages.PostScreenMessage(new ScreenMessage("New physic warp rates: " + rates.Name, 3f, ScreenMessageStyle.UPPER_CENTER));
                    }
                    return;
                }
                return;
            }
            Debug.LogWarning("[BetterTimeWarp]: Failed to set warp rates");

#if false
            //reset it to standard in case of  failiure
            if (rates.Physics)
            {
                for (var i = 0; i < physRates.Length; i++)
                {
                    var r = physRates[i];
                    if (r == StandardPhysWarp)
                    {
                        currPhysIndex   = i;
                        CurrentPhysWarp = StandardPhysWarp;
                    }
                }
            }
            else
            {
                for (var i = 0; i < warpRates.Length; i++)
                {
                    var r = warpRates[i];
                    if (r == StandardWarp)
                    {
                        currWarpIndex = i;
                        CurrentWarp   = StandardWarp;
                        Log.Info("CurrentWarp set to StandardWarp  1");
                    }
                }
            }
#endif
        }
        public void SetWarpRates(TimeWarpRates rates, bool message = true)
        {
            if (TimeWarp.fetch != null)
            {
                if (TimeWarp.fetch.warpRates.Length == rates.Rates.Length && !rates.Physics)
                {
                    TimeWarp.fetch.warpRates = rates.Rates;
                    CurrentWarp = rates;

                    for (var i = 0; i < warpRates.Length; i++)
                    {
                        var r = warpRates [i];
                        if (r == rates)
                        {
                            currWarpIndex = i;
                        }
                    }

                    print ("[BetterTimeWarp]: Set time warp rates to " + rates.ToString());
                    if (message)
                        ScreenMessages.PostScreenMessage (new ScreenMessage ("New time warp rates: " + rates.Name, 3f, ScreenMessageStyle.UPPER_CENTER), false);
                    return;
                }
                else if (TimeWarp.fetch.physicsWarpRates.Length == rates.Rates.Length && rates.Physics)
                {
                    TimeWarp.fetch.physicsWarpRates = rates.Rates;
                    CurrentPhysWarp = rates;

                    for (var i = 0; i < physRates.Length; i++)
                    {
                        var r = physRates [i];
                        if (r == rates)
                        {
                            currPhysIndex = i;
                        }
                    }

                    print ("[BetterTimeWarp]: Set time warp rates to " + rates.ToString());
                    if (message)
                        ScreenMessages.PostScreenMessage (new ScreenMessage ("New physic warp rates: " + rates.Name, 3f, ScreenMessageStyle.UPPER_CENTER), false);
                    return;
                }
                return;
            }
            Debug.LogWarning ("[BetterTimeWarp]: Failed to set warp rates");

            //reset it to standard in case of  failiure
            if (rates.Physics)
            {
                for (var i = 0; i < physRates.Length; i++)
                {
                    var r = physRates [i];
                    if (r == StandardPhysWarp)
                    {
                        currPhysIndex = i;
                        CurrentPhysWarp = StandardPhysWarp;
                    }
                }
            }
            else
            {
                for (var i = 0; i < warpRates.Length; i++)
                {
                    var r = warpRates [i];
                    if (r == StandardWarp)
                    {
                        currWarpIndex = i;
                        CurrentWarp = StandardWarp;
                    }
                }
            }
        }