modded class ArmaReforgerScripted
{
 protected int m_ERRScopeProbeStage;
 protected float m_ERRScopeProbeWait;
 protected IEntity m_ERRScopeProbeEntity;
 protected ref ERR_ObserverScopeDisplay m_ERRScopeProbeDisplay;
 override void OnUpdate(BaseWorld world, float timeslice)
 {
  super.OnUpdate(world, timeslice);
  ERR_GameMode mode = ERR_GameMode.Get();
  if (!mode || !mode.Active() || m_ERRScopeProbeStage >= 6 || world.GetWorldTime() < m_ERRScopeProbeWait) return;
  PlayerController pc = GetPlayerController();
  if (!pc || !pc.GetControlledEntity()) return;
  if (m_ERRScopeProbeStage == 0)
  {
   EntitySpawnParams params = new EntitySpawnParams(); params.TransformMode = ETransformMode.WORLD;
   params.Transform[3] = GetCameraManager().CurrentCamera().GetOrigin() + "0 0 3";
   m_ERRScopeProbeEntity = SpawnEntityPrefabLocal(Resource.Load("{C850A33226B8F9C1}Prefabs/Weapons/Attachments/Optics/Optic_PSO1/Optic_PSO1.et"), world, params);
   m_ERRScopeProbeDisplay = new ERR_ObserverScopeDisplay();
   m_ERRScopeProbeStage = 1; m_ERRScopeProbeWait = world.GetWorldTime() + 2000; return;
  }
  SCR_2DOpticsComponent optic = SCR_2DOpticsComponent.Cast(m_ERRScopeProbeEntity.FindComponent(SCR_2DOpticsComponent));
  if (m_ERRScopeProbeStage == 1)
  {
   if (!optic || !m_ERRScopeProbeDisplay.RenderScope(optic, m_ERRScopeProbeEntity, 12, "1 0 0"))
   { Print("ERR SCOPE FAIL: native scope display creation", LogLevel.ERROR); m_ERRScopeProbeStage = 6; return; }
   Print("ERR SCOPE PASS: native PSO reticle display created");
   m_ERRScopeProbeStage = 2; m_ERRScopeProbeWait = world.GetWorldTime() + 3000; return;
  }
  if (m_ERRScopeProbeStage == 2)
  {
   Widget root = m_ERRScopeProbeDisplay.GetRootWidget();
   float width, height;
   if (root) root.GetScreenSize(width, height);
   PrintFormat("ERR SCOPE ROOT: exists=%1 width=%2 height=%3", root != null, width, height);
   System.MakeScreenshot("$logs:err-scope-pso");
   m_ERRScopeProbeStage = 3; m_ERRScopeProbeWait = world.GetWorldTime() + 1000; return;
  }
  if (m_ERRScopeProbeStage == 3)
  {
   m_ERRScopeProbeDisplay.Close();
   if ((m_ERRScopeProbeEntity.GetFlags() & EntityFlags.VISIBLE) == 0) Print("ERR SCOPE FAIL: visibility restore", LogLevel.ERROR);
   else Print("ERR SCOPE PASS: close restored optic visibility");
   if (!m_ERRScopeProbeDisplay.RenderScope(optic, m_ERRScopeProbeEntity, 6, "1 0 1")) Print("ERR SCOPE FAIL: scope reopen", LogLevel.ERROR);
   else Print("ERR SCOPE PASS: scope reopened at new zoom with illumination");
   m_ERRScopeProbeStage = 4; m_ERRScopeProbeWait = world.GetWorldTime() + 3000; return;
  }
  if (m_ERRScopeProbeStage == 4)
  {
   System.MakeScreenshot("$logs:err-scope-zoom");
   m_ERRScopeProbeStage = 5; m_ERRScopeProbeWait = world.GetWorldTime() + 1000; return;
  }
  m_ERRScopeProbeDisplay.Close(); delete m_ERRScopeProbeEntity; m_ERRScopeProbeDisplay = null;
  Print("ERR SCOPE COMPLETE"); m_ERRScopeProbeStage = 6;
 }
}
