예제 #1
0
        protected CutsceneEntity CreateEntity(string modelPath)
        {
            var entity = new CutsceneEntity(Model.Get(modelPath), RenderPass.Opaque);

            Level.Entities.Add(entity);
            return(entity);
        }
예제 #2
0
        protected override void OnReveal()
        {
            base.OnReveal();

            // Create robot
            m_robot = CreateEntity("models/entities/new/red_robot.obj");

            // Start animation
            StartCameraAnimation("animation/menus/startscreen/camera_initial.anim.lua");
            m_robot.StartAnimation(LuaAnimation.Get("animation/menus/startscreen/robot.anim.lua"), false);

            // Reposition sky
            Game.Sky.ForegroundModelTransform = Matrix4.CreateTranslation(-5.0f, 5.0f, -20.0f);
        }
예제 #3
0
        public LuaArgs createEntity(LuaArgs args)
        {
            var path          = args.GetString(0);
            var renderPassStr = args.IsNil(1) ? "opaque" : args.GetString(1);

            if (Assets.Exists <Model>(path))
            {
                RenderPass renderPass;
                switch (renderPassStr)
                {
                case "opaque":
                {
                    renderPass = RenderPass.Opaque;
                    break;
                }

                case "cutout":
                {
                    renderPass = RenderPass.Cutout;
                    break;
                }

                case "translucent":
                {
                    renderPass = RenderPass.Translucent;
                    break;
                }

                default:
                {
                    throw new LuaError("Unsupported render pass: "******"No such model: {0}", path));
            }
        }
예제 #4
0
 public LuaCutsceneEntity(CutsceneEntity entity)
 {
     m_entity = entity;
 }
        private IEnumerator Cutscene(Level level)
        {
            this.sfx      = Audio.Play("event:/game/general/seed_complete_main", this.Position);
            this.snapshot = Audio.CreateSnapshot("snapshot:/music_mains_mute", true);

            Player player = base.Scene.Tracker.GetEntity <Player>();

            if (player != null)
            {
                this.cameraStart = player.CameraTarget;
            }

            // Shorten code for reading.
            List <GenericStrawberrySeed> seeds = strawberry.Seeds;
            Entity entity = (Entity)this.strawberry;

            foreach (GenericStrawberrySeed seed in seeds)
            {
                seed.OnAllCollected();
            }

            entity.Depth = -2000002;
            entity.AddTag(Tags.FrozenUpdate);

            yield return(0.35f);


            base.Tag     = (Tags.FrozenUpdate | Tags.HUD);
            level.Frozen = true;
            level.FormationBackdrop.Display = true;
            level.FormationBackdrop.Alpha   = 0.5f;
            level.Displacement.Clear();
            level.Displacement.Enabled = false;

            Audio.BusPaused("bus:/gameplay_sfx/ambience", new bool?(true));
            Audio.BusPaused("bus:/gameplay_sfx/char", new bool?(true));
            Audio.BusPaused("bus:/gameplay_sfx/game/general/yes_pause", new bool?(true));
            Audio.BusPaused("bus:/gameplay_sfx/game/chapters", new bool?(true));

            yield return(0.1f);


            this.system     = new ParticleSystem(-2000002, 50);
            this.system.Tag = Tags.FrozenUpdate;
            level.Add(this.system);
            float   angleSep = 6.2831855f / (float)seeds.Count;
            float   angle    = 1.5707964f;
            Vector2 avg      = Vector2.Zero;

            foreach (GenericStrawberrySeed seed in seeds)
            {
                avg += seed.Position;
            }

            avg /= (float)seeds.Count;
            foreach (GenericStrawberrySeed seed in seeds)
            {
                seed.StartSpinAnimation(avg, entity.Position, angle, 4f);
                angle -= angleSep;
            }

            avg = default(Vector2);
            Vector2 target = entity.Position - new Vector2(160f, 90f);

            target = target.Clamp((float)level.Bounds.Left, (float)level.Bounds.Top, (float)(level.Bounds.Right - 320), (float)(level.Bounds.Bottom - 180));
            base.Add(new Coroutine(CutsceneEntity.CameraTo(target, 3.5f, Ease.CubeInOut, 0f), true));
            target = default(Vector2);
            yield return(4f);


            Input.Rumble(RumbleStrength.Light, RumbleLength.Long);
            Audio.Play("event:/game/general/seed_complete_berry", entity.Position);

            foreach (GenericStrawberrySeed seed in seeds)
            {
                seed.StartCombineAnimation(entity.Position, 0.6f, this.system);
            }

            yield return(0.6f);


            Input.Rumble(RumbleStrength.Medium, RumbleLength.Medium);
            foreach (GenericStrawberrySeed seed in seeds)
            {
                seed.RemoveSelf();
            }

            this.strawberry.CollectedSeeds();
            yield return(0.5f);


            float dist = (level.Camera.Position - this.cameraStart).Length();

            yield return(CutsceneEntity.CameraTo(this.cameraStart, dist / 180f, null, 0f));


            if (dist > 80f)
            {
                yield return(0.25f);
            }

            level.EndCutscene();
            this.OnEnd(level);
            yield break;
        }
예제 #6
0
 private static void OnStartCutscene2(On.Celeste.CutsceneEntity.orig_Added orig, CutsceneEntity self, Scene scene)
 {
     orig(self, scene);
     OnStartCutsceneCommon(self.Scene as Level);
 }