void CreateSceneBundleCommand(string bundleName, string internalName, GUID scene, List <GUID> bundledScenes, Dictionary <GUID, string> assetToMainFile)
        {
            var fileObjects = m_WriteData.FileToObjects[internalName];

#if !UNITY_2019_1_OR_NEWER
            // ContentBuildInterface.PrepareScene was not returning stable sorted references, causing a indeterminism and loading errors in some cases
            // Add correct sorting here until patch lands to fix the API.
            fileObjects = GetSortedSceneObjectIdentifiers(fileObjects);
#endif


            var command        = CreateWriteCommand(internalName, fileObjects, new LinearPackedIdentifiers(3)); // Start at 3: PreloadData = 1, AssetBundle = 2
            var usageSet       = new BuildUsageTagSet();
            var referenceMap   = new BuildReferenceMap();
            var preloadObjects = new List <ObjectIdentifier>();
            var bundleScenes   = new List <SceneLoadInfo>();
            var dependencyInfo = m_DependencyData.SceneInfo[scene];
            var fileObjectSet  = new HashSet <ObjectIdentifier>(fileObjects);


            usageSet.UnionWith(m_DependencyData.SceneUsage[scene]);
            referenceMap.AddMappings(command.internalName, command.serializeObjects.ToArray());
            foreach (var referencedObject in dependencyInfo.referencedObjects)
            {
                if (fileObjectSet.Contains(referencedObject))
                {
                    continue;
                }
                preloadObjects.Add(referencedObject);
            }
            foreach (var bundledScene in bundledScenes)
            {
                var loadInfo = new SceneLoadInfo();
                loadInfo.asset        = bundledScene;
                loadInfo.internalName = Path.GetFileNameWithoutExtension(assetToMainFile[bundledScene]);
                loadInfo.address      = m_BuildContent.Addresses[bundledScene];
                bundleScenes.Add(loadInfo);
            }


            var operation = new SceneBundleWriteOperation();
            operation.Command        = command;
            operation.UsageSet       = usageSet;
            operation.ReferenceMap   = referenceMap;
            operation.DependencyHash = m_DependencyData.DependencyHash.TryGetValue(scene, out var hash) ? hash : new Hash128();
            operation.Scene          = dependencyInfo.scene;
#if !UNITY_2019_3_OR_NEWER
            operation.ProcessedScene = dependencyInfo.processedScene;
#endif
            operation.PreloadInfo = new PreloadInfo();
            operation.PreloadInfo.preloadObjects = preloadObjects;
            operation.Info              = new SceneBundleInfo();
            operation.Info.bundleName   = bundleName;
            operation.Info.bundleScenes = bundleScenes;


            m_WriteData.WriteOperations.Add(operation);
            m_WriteData.FileToUsageSet.Add(command.internalName, usageSet);
            m_WriteData.FileToReferenceMap.Add(command.internalName, referenceMap);
        }
        protected override void OnUpdate()
        {
            Entity        loaderSingleton = GetSingletonEntity <SceneLoadInfo>();
            SceneLoadInfo loadInfo        = EntityManager.GetComponentData <SceneLoadInfo>(loaderSingleton);
            string        toLoad          = loadInfo.sceneToLoad.ToString().Trim();
            string        toUnload        = loadInfo.sceneToUnload.ToString().Trim();

            PostUpdateCommands.DestroyEntity(loaderSingleton);

            bool isClient = World.GetExistingSystem <ClientSimulationSystemGroup>() != null;

            UnityEngine.Debug.Log($"client: {isClient}, Processing scene request - load {toLoad} - unload {toUnload}");

            if (toLoad.Length > 0 && SubSceneReferences.Instance.ContainsScene(toLoad))
            {
                SubSceneReferences.Instance.LoadScene(toLoad, this.sceneSystem);
                GameFlow flow   = toLoad == GameStateSystem.LobbySceneName ? GameFlow.Lobby : GameFlow.InGame;
                Entity   entity = GetSingletonEntity <GameStateSystem.GameState>();
                PostUpdateCommands.SetComponent(entity, new GameStateSystem.GameState
                {
                    loadedScene = toLoad,
                    stage       = flow,
                });
            }
            if (toUnload.Length > 0 && SubSceneReferences.Instance.ContainsScene(toUnload))
            {
                SubSceneReferences.Instance.UnloadScene(toUnload, this.sceneSystem);
            }
        }
Exemplo n.º 3
0
    // Use this for initialization
    void Awake()
    {
        sli = GameObject.FindWithTag("SceneLoadInfo").GetComponent <SceneLoadInfo>();

        if (!player)
        {
            player = gameObject;
        }
        else
        {
            Destroy(gameObject);
        }

        DontDestroyOnLoad(gameObject);

        startEncounter  = false;
        disableControls = false;

        currentFrame     = 0;
        encounterTracker = 0;

        animationTimer = 0.0f;
        encounterTimer = 0.0f;

        lastKey = null;
        currKey = null;

        gameObject.AddComponent <AudioSource>();
    }
Exemplo n.º 4
0
    // Use this for initialization
    void Awake()
    {
        bossInstanced = false;

        sli = GameObject.FindWithTag("SceneLoadInfo").GetComponent <SceneLoadInfo>();

        overWorldController = GameObject.FindWithTag("OverworldController");

        InstanceEnemies(sli.activateBoss);

        UpdateList();
    }
Exemplo n.º 5
0
 internal static void WriteHashData(SceneLoadInfo info, BinaryWriter writer)
 {
     writer.Write(info.asset.ToString());
     writer.Write(info.address ?? string.Empty);
     writer.Write(info.internalName ?? string.Empty);
 }