Пример #1
0
        /// <summary>Returns a routine for transitiong from the current active scene to a scene with given name in given load mode and
        /// with given provider</summary>
        private IEnumerator TransitionRoutine(string sceneName, LoadSceneMode mode, ITransitionProvider provider, Action onFinish = null)
        {
            IsTransitioning = true;

            yield return(UnLoadRoutine(provider));

            yield return(LoadRoutine(sceneName, mode, provider));

            IsTransitioning = false;
            onFinish?.Invoke();
        }
Пример #2
0
        /// <summary>Returns a routine that unloads the current active scene based on given provider</summary>
        private IEnumerator UnLoadRoutine(ITransitionProvider provider)
        {
            yield return(provider.Outro());

            AsyncOperation unloadOperation = SceneManager.UnloadSceneAsync(SceneManager.GetActiveScene());

            while (!unloadOperation.isDone)
            {
                provider.OnProgressUpdated(unloadOperation.progress / 2.0f);
                yield return(null);
            }
        }
Пример #3
0
        protected PdvmBasedAnalysis(
            GraphStructuredProgram <int> program,
            IContextProcessor <TState, TStackSymbol, Node, OperationEdge <Node>,
                               TContext, GssNode <TStackSymbol, TGssData> > contextProcessor,
            Func <PDVM <TState, TStackSymbol, Node, OperationEdge <Node>, TContext, TGssData> > pdvmProvider)
            : base(program)
        {
            InternalCacheProvider      = new CacheProvider <TState, TStackSymbol, TContext, GssNode <TStackSymbol, TGssData> >();
            InternalTransitionProvider = new TransitionProvider(program);

            InternalSimulation = new PDVMSimulation <TState, TStackSymbol, int, OperationEdge <int>, TContext, TGssData>(
                contextProcessor, InternalCacheProvider, InternalTransitionProvider, pdvmProvider);
        }
Пример #4
0
        public PDVMSimulation(
            IContextProcessor <TState, TStackSymbol, TPosition, TTransition, TContext, GssNode <TStackSymbol, TGssData> > contextProcessor,
            ICacheProvider <TState, TStackSymbol, TPosition, TContext, GssNode <TStackSymbol, TGssData> > cacheProvider,
            ITransitionProvider <TPosition, TTransition> transitionProvider,
            Func <PDVM <TState, TStackSymbol, TPosition, TTransition, TContext, TGssData> > pdvmProvider)
        {
            myContextProcessor   = contextProcessor;
            myCacheProvider      = cacheProvider;
            myTransitionProvider = transitionProvider;
            myPopHistory         = new PopHistory <TState, TTransition, TPosition, TContext, GssNode <TStackSymbol, TGssData> >();

            myPdvm = pdvmProvider();

            myGssRoots = new Dictionary <TStackSymbol, GssNode <TStackSymbol, TGssData> >();

            myStarts = new Queue <Head <TState, TPosition, TContext, GssNode <TStackSymbol, TGssData> > >();
        }
Пример #5
0
        public DPDASimulation(
            IDPDA <TState, TStackSymbol, TPosition, TTransition> pda,
            IContextProcessor <TState, TStackSymbol, TPosition, TTransition, TContext, GssNode <TStackSymbol, TGssData> > contextProcessor,
            ICacheProvider <TState, TStackSymbol, TPosition, TContext, GssNode <TStackSymbol, TGssData> > cacheProvider,
            ITransitionProvider <TPosition, TTransition> transitionProvider)
        {
            myPda = pda;
            myContextProcessor   = contextProcessor;
            myCacheProvider      = cacheProvider;
            myTransitionProvider = transitionProvider;

            myProcessing = new Stack <MyHead>();
            myStarts     = new Queue <MyHead>();

            myStackRoot = new GssNode <TStackSymbol, TGssData>(pda.GetInitialStackData());

            myPopHistory = new PopHistory <TState, TTransition, TPosition, TContext, GssNode <TStackSymbol, TGssData> >();
        }
Пример #6
0
        /// <summary>Returns a routine that loads a scene with given name in given load mode and
        /// with given provider</summary>
        private IEnumerator LoadRoutine(string sceneName, LoadSceneMode mode, ITransitionProvider provider, Action onFinish = null)
        {
            AsyncOperation loadOperation = SceneManager.LoadSceneAsync(sceneName, mode);

            while (!loadOperation.isDone)
            {
                provider.OnProgressUpdated(mode == LoadSceneMode.Single ? loadOperation.progress : ((1.0f + loadOperation.progress) / 2.0f));
                yield return(null);
            }

            Scene sceneLoaded = SceneManager.GetSceneByName(sceneName);

            SceneManager.SetActiveScene(sceneLoaded);

            yield return(provider.Intro());

            TransitionCompleted?.Invoke(sceneLoaded, mode);
            onFinish?.Invoke();
        }
Пример #7
0
        /// <summary>Starts transition with given transition provider to a scene with given scene name and in given load mode</summary>
        public void Transition(ITransitionProvider provider, string sceneName, LoadSceneMode loadMode)
        {
            if (IsTransitioning || !SceneIsLoadable(sceneName) || !providers.ContainsValue(provider))
            {
                return;
            }

            TransitionStarted?.Invoke(sceneName, loadMode);

            provider.OnProgressUpdated(0.0f);

            switch (loadMode)
            {
            case LoadSceneMode.Single:
                StartCoroutine(LoadRoutine(sceneName, loadMode, provider));
                break;

            case LoadSceneMode.Additive:
                StartCoroutine(TransitionRoutine(sceneName, loadMode, provider));
                break;
            }
        }
Пример #8
0
        /// <summary>Starts transition with given transitionName set by transition provider to a scene with given scene name and in given load mode</summary>
        public void Transition(string transitionName, string sceneName, LoadSceneMode loadMode, Action onFinish = null)
        {
            if (IsTransitioning || !SceneIsLoadable(sceneName) || !providers.ContainsKey(transitionName))
            {
                return;
            }

            TransitionStarted?.Invoke(sceneName, loadMode);

            ITransitionProvider provider = providers[transitionName];

            provider.OnProgressUpdated(0.0f);

            switch (loadMode)
            {
            case LoadSceneMode.Single:
                StartCoroutine(LoadRoutine(sceneName, loadMode, provider, onFinish));
                break;

            case LoadSceneMode.Additive:
                StartCoroutine(TransitionRoutine(sceneName, loadMode, provider, onFinish));
                break;
            }
        }
Пример #9
0
 public TranScope(ITransitionProvider transitionInfoProvider)
 {
     //_entireHistory = entireHistory;
     _transitionInfoProvider = transitionInfoProvider;
 }