Commit 1e1c910f authored by Jérémy Lacoche's avatar Jérémy Lacoche
Browse files

Add the possibility to register custom tracking module to WorldAnalysis ARFoundation

parent 374cc818
Loading
Loading
Loading
Loading
+46 −32
Original line number Diff line number Diff line
@@ -81,37 +81,7 @@ public class WorldAnalysisARFoundation : MonoBehaviour, WorldAnalysisInterface
        m_subscriptionsPoses = new Dictionary<Guid, SubscriptionInfo>();

        m_trackableModules = new List<WorldAnalysisARFoundationModule>();
        WorldAnalysisARFoundationModuleImage imageModule = new WorldAnalysisARFoundationModuleImage();
        m_trackableModules.Add(imageModule);

#if UNITY_IOS
        WorldAnalysisARFoundationModuleMesh meshModule = new WorldAnalysisARFoundationModuleMesh();
        m_trackableModules.Add(meshModule);
        WorldAnalysisARFoundationModuleARKitWorldMap worldMapModule = new WorldAnalysisARFoundationModuleARKitWorldMap();
        m_trackableModules.Add(worldMapModule);
#endif
#if ETSIARF_ARCORE_EXTENSIONS
    
#if UNITY_ANDROID
        // todo add script define symbol for using arcore extensions
        WorldAnalysisARFoundationModuleARCoreAnchor arCoreAnchorModule = new WorldAnalysisARFoundationModuleARCoreAnchor();
        m_trackableModules.Add(arCoreAnchorModule);
        WorldAnalysisARFoundationModuleGeospatial geospatialModule = new WorldAnalysisARFoundationModuleGeospatial();
        m_trackableModules.Add(geospatialModule);
#else
        /// on other os : if arcore extensions is in the scene we disable it
        Google.XR.ARCoreExtensions.ARCoreExtensions arCoreExtensions = Component.FindObjectOfType<Google.XR.ARCoreExtensions.ARCoreExtensions>();
        if (arCoreExtensions != null)
        {
            arCoreExtensions.enabled = false; 
        }
#endif
#endif

        foreach (WorldAnalysisARFoundationModule module in m_trackableModules)
        {
            module.Initialize();
        } 
        CreateModules();

        m_storageInfo = FindObjectOfType<WorldStorageInfo>();
        m_worldStorageServer = m_storageInfo.worldStorageServer;
@@ -288,6 +258,50 @@ public class WorldAnalysisARFoundation : MonoBehaviour, WorldAnalysisInterface

    #region Lifecycle
    
    /// <summary>
    /// Create Builtin ARFoundation module
    /// </summary>
    protected virtual void CreateModules()
    {
        WorldAnalysisARFoundationModuleImage imageModule = new WorldAnalysisARFoundationModuleImage();
        RegisterModule(imageModule);

#if UNITY_IOS
        WorldAnalysisARFoundationModuleMesh meshModule = new WorldAnalysisARFoundationModuleMesh();
        RegisterModule(meshModule);
        WorldAnalysisARFoundationModuleARKitWorldMap worldMapModule = new WorldAnalysisARFoundationModuleARKitWorldMap();
        RegisterModule(worldMapModule);
#endif

#if ETSIARF_ARCORE_EXTENSIONS
    
#if UNITY_ANDROID
        // todo add script define symbol for using arcore extensions
        WorldAnalysisARFoundationModuleARCoreAnchor arCoreAnchorModule = new WorldAnalysisARFoundationModuleARCoreAnchor();
        RegisterModule(arCoreAnchorModule);
        WorldAnalysisARFoundationModuleGeospatial geospatialModule = new WorldAnalysisARFoundationModuleGeospatial();
        RegisterModule(geospatialModule);
#else
        /// on other os : if arcore extensions is in the scene we disable it
        Google.XR.ARCoreExtensions.ARCoreExtensions arCoreExtensions = Component.FindObjectOfType<Google.XR.ARCoreExtensions.ARCoreExtensions>();
        if (arCoreExtensions != null)
        {
            arCoreExtensions.enabled = false; 
        }
#endif
#endif
    }

    /// <summary>
    /// Register a new tracking module and initialize it
    /// </summary>
    /// <param name="module">new tracking module</param>
    public void RegisterModule(WorldAnalysisARFoundationModule module)
    {
        m_trackableModules.Add(module);
        module.Initialize();
    }

    /// <summary>
    /// Check the validity of all subscriptions and delete one if needed
    /// </summary>