Repository URL to install this package:
|
Version:
1.3.1 ▾
|
using Fluctio.FluctioSim.Utils.General;
using MoreLinq;
using Mujoco;
using Unity.MLAgents;
using UnityEngine;
using Object = UnityEngine.Object;
using Timer = System.Timers.Timer;
namespace Fluctio.FluctioSim.Core.Components.GlobalSceneSettings
{
public static class MujocoSceneRecreator
{
private static Timer _timer;
private static MujocoResettingSettings Settings => SceneSettings.Instance.PhysicsResetSettings;
[RuntimeInitializeOnLoadMethod]
private static void ConnectTimer()
{
if (Settings.ResettingMode != MujocoResettingMode.WithFixedInterval)
{
return;
}
_timer = new Timer();
_timer.Interval = Settings.ResetInterval.TimeSpan.TotalMilliseconds;
_timer.Elapsed += (_, _) =>
{
Util.ExecuteOnMainThread(RecreateMujocoScene);
};
_timer.AutoReset = true;
Application.quitting += _timer.Stop;
_timer.Start();
}
private static void RecreateMujocoScene()
{
MjScene.Instance.RecreateScene();
if (Settings.EndEpisodesAfterReset)
{
EndAllEpisodes();
}
}
private static void EndAllEpisodes()
{
var agents = Object.FindObjectsByType<Agent>(FindObjectsInactive.Exclude, FindObjectsSortMode.None);
agents.ForEach(agent => agent.EndEpisode());
}
}
}