Esempio n. 1
0
        public static void Open(Player player, AreaData area, out bool opened, Action <Overworld> callback = null)
        {
            opened = false;

            if (overworldWrapper?.Scene == Engine.Scene || player.StateMachine.State == Player.StDummy)
            {
                return;
            }
            player.StateMachine.State = Player.StDummy;

            opened = true;

            Level level = player.Scene as Level;

            level.Entities.FindFirst <TotalStrawberriesDisplay>().Active = false;

            overworldWrapper = new SceneWrappingEntity <Overworld>(new Overworld(new OverworldLoader((Overworld.StartMode)(-1),
                                                                                                     new HiresSnow()
            {
                Alpha         = 0f,
                ParticleAlpha = 0.25f,
            }
                                                                                                     )));
            overworldWrapper.OnBegin += (overworld) => {
                overworld.RendererList.Remove(overworld.RendererList.Renderers.Find(r => r is MountainRenderer));
                overworld.RendererList.Remove(overworld.RendererList.Renderers.Find(r => r is ScreenWipe));
                overworld.RendererList.UpdateLists();
            };
            overworldWrapper.OnEnd += (overworld) => {
                if (overworldWrapper?.WrappedScene == overworld)
                {
                    overworldWrapper = null;
                }
            };

            level.Add(overworldWrapper);
            new DynData <Overworld>(overworldWrapper.WrappedScene).Set("collabInGameForcedArea", area);
            callback?.Invoke(overworldWrapper.WrappedScene);

            overworldWrapper.Add(new Coroutine(UpdateRoutine(overworldWrapper)));
        }
Esempio n. 2
0
        private static IEnumerator UpdateRoutine(SceneWrappingEntity <Overworld> wrapper)
        {
            Level     level     = wrapper.Scene as Level;
            Overworld overworld = wrapper.WrappedScene;

            while (overworldWrapper?.Scene == Engine.Scene)
            {
                if (overworld.Next is OuiChapterSelect)
                {
                    overworld.Next.RemoveSelf();
                    overworldWrapper.Add(new Coroutine(DelayedCloseRoutine(level)));
                }

                overworld.Snow.ParticleAlpha = 0.25f;

                if (overworld.Current != null || overworld.Next?.Scene != null)
                {
                    overworld.Snow.Alpha = Calc.Approach(overworld.Snow.Alpha, 1f, Engine.DeltaTime * 2f);
                }
                else
                {
                    overworld.Snow.Alpha = Calc.Approach(overworld.Snow.Alpha, 0, Engine.DeltaTime * 2f);
                    if (overworld.Snow.Alpha <= 0.01f)
                    {
                        Close(level, true, true);
                    }
                }

                yield return(null);
            }

            if (wrapper.Scene != null)
            {
                wrapper.RemoveSelf();
            }
        }