private void OnDash(Vector2 direction) { Swapping = (lerp < 1f); lerpTarget = 1; returnTimer = 0.8f; burst = (base.Scene as Level).Displacement.AddBurst(base.Center, 0.2f, 0f, 16f); if (lerp >= 0.2f) { speed = maxForwardSpeed; } else { speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, lerp / 0.2f); } Audio.Stop(returnSfx); Audio.Stop(moveSfx); if (!Swapping) { Audio.Play("event:/game/05_mirror_temple/swapblock_move_end", base.Center); } else { moveSfx = Audio.Play("event:/game/05_mirror_temple/swapblock_move", base.Center); } }
private void OnDash(Vector2 direction) { Swapping = (lerp < 1f); target = 1; returnTimer = 0.8f; burst = (Scene as Level).Displacement.AddBurst(MasterCenter, 0.2f, 0f, 16f); if (lerp >= 0.2f) { speed = maxForwardSpeed; } else { speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, lerp / 0.2f); } Audio.Stop(returnSfx); Audio.Stop(moveSfx); if (!Swapping) { Audio.Play(SFX.game_05_swapblock_move_end, MasterCenter); } else { moveSfx = Audio.Play(SFX.game_05_swapblock_move, MasterCenter); } }
private static void EmitDreamBurst(Player player, Collider worldClipCollider) { Level level = player.SceneAs <Level>(); if (level.OnInterval(0.04f)) { DisplacementRenderer.Burst burst = level.Displacement.AddBurst(player.Center, 0.3f, 0f, 40f); burst.WorldClipCollider = worldClipCollider; burst.WorldClipPadding = 2; } }
public void FootstepRipple(Vector2 position) { bool flag = playerHasDreamDash; if (flag) { DisplacementRenderer.Burst burst = (Scene as Level).Displacement.AddBurst(position, 0.5f, 0f, 40f, 1f, null, null); burst.WorldClipCollider = Collider; burst.WorldClipPadding = 1; } }
public override void Added(Scene scene) { _sprite.Play("fade" + (_ghostberry ? "Ghost" : "")); _sprite.OnFinish = delegate { RemoveSelf(); }; base.Added(scene); foreach (Entity entity in base.Scene.Tracker.GetEntities <RustBerryPoints>()) { if (entity != this && Vector2.DistanceSquared(entity.Position, Position) <= 256f) { entity.RemoveSelf(); } } _burst = (scene as Level).Displacement.AddBurst(Position, 0.3f, 16f, 24f, 0.3f); }
public override void Added(Scene scene) { base.Added(scene); //Put each character where it should be, then play their animations. for (int i = 0; i < text.Length; i++) { sprites[i].CenterOrigin(); sprites[i].X = (sprites[i].X - (textWidth / 2) + ((sprites[i].Width * i) - 1)); sprites[i].Play("text" + text[i]); } foreach (Sprite spr in sprites) { spr.OnFinish = delegate(string a) { base.RemoveSelf(); }; } sound.Path = "event:/char/dialogue/" + narrator; if (narrated) { base.Add(sound); } if (narrator != "secret_character") { sound.Param("dialogue_portrait", portrait); //sound.Param("dialogue_end", 1); } //Not entirely sure what this is for, maybe garbage collection if something gets missed foreach (Entity entity in base.Scene.Tracker.GetEntities <StrawberryPoints>()) { if (entity != this && Vector2.DistanceSquared(entity.Position, this.Position) <= 256f) { entity.RemoveSelf(); } } //Graphics????? this.burst = (scene as Level).Displacement.AddBurst(this.Position, 0.3f, 16f, 24f, 0.3f, null, null); }
private void OnDash(Vector2 direction) { if (noReturn) { Swapping = true; target = 1 - target; burst = (Scene as Level).Displacement.AddBurst(Center, 0.2f, 0f, 16f); float relativeLerp = target == 1 ? lerp : 1 - lerp; if (relativeLerp >= 0.2f) { speed = maxForwardSpeed; } else { speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, relativeLerp / 0.2f); } Audio.Stop(moveSfx); moveSfx = Audio.Play(PlayerHasDreamDash ? CustomSFX.game_dreamSwapBlock_dream_swap_block_move : SFX.game_05_swapblock_move, Center); } else { Swapping = (lerp < 1f); target = 1; returnTimer = ReturnTime; burst = (Scene as Level).Displacement.AddBurst(Center, 0.2f, 0f, 16f); if (lerp >= 0.2f) { speed = maxForwardSpeed; } else { speed = MathHelper.Lerp(maxForwardSpeed * 0.333f, maxForwardSpeed, lerp / 0.2f); } Audio.Stop(returnSfx); Audio.Stop(moveSfx); if (!Swapping) { Audio.Play(PlayerHasDreamDash ? CustomSFX.game_dreamSwapBlock_dream_swap_block_move_end : SFX.game_05_swapblock_move_end, Center); } else { moveSfx = Audio.Play(PlayerHasDreamDash ? CustomSFX.game_dreamSwapBlock_dream_swap_block_move : SFX.game_05_swapblock_move, Center); } } }
// CUSTOM DREAM DASH STATE public static int DreamDashUpdate() { Player player = FrostModule.StateGetPlayer(); DynData <Player> data = new DynData <Player>(player); Input.Rumble(RumbleStrength.Light, RumbleLength.Medium); Vector2 position = player.Position; player.Speed = player.DashDir * data.Get <CustomDreamBlock>("customDreamBlock").DashSpeed; player.NaiveMove(player.Speed * Engine.DeltaTime); float dreamDashCanEndTimer = data.Get <float>("dreamDashCanEndTimer"); bool flag = dreamDashCanEndTimer > 0f; if (flag) { data.Set <float>("dreamDashCanEndTimer", dreamDashCanEndTimer -= Engine.DeltaTime); } CustomDreamBlock dreamBlock = player.CollideFirst <CustomDreamBlock>(); if (dreamBlock == null) { if (DreamDashedIntoSolid(player)) { bool invincible = SaveData.Instance.Assists.Invincible; if (invincible) { player.Position = position; player.Speed *= -1f; player.Play("event:/game/general/assist_dreamblockbounce", null, 0f); } else { player.Die(Vector2.Zero, false, true); } } else { if (dreamDashCanEndTimer <= 0f) { Celeste.Celeste.Freeze(0.05f); bool flag5 = Input.Jump.Pressed && player.DashDir.X != 0f; if (flag5) { data.Set("dreamJump", true); player.Jump(true, true); } else { if (player.DashDir.Y >= 0f || player.DashDir.X != 0f) { bool flag7 = player.DashDir.X > 0f && player.CollideCheck <Solid>(player.Position - Vector2.UnitX * 5f); if (flag7) { player.MoveHExact(-5, null, null); } else { bool flag8 = player.DashDir.X < 0f && player.CollideCheck <Solid>(player.Position + Vector2.UnitX * 5f); if (flag8) { player.MoveHExact(5, null, null); } } bool flag9 = player.ClimbCheck(-1, 0); bool flag10 = player.ClimbCheck(1, 0); int moveX = data.Get <int>("moveX"); bool flag11 = Input.Grab.Check && ((moveX == 1 && flag10) || (moveX == -1 && flag9)); if (flag11) { player.Facing = (Facings)moveX; bool noGrabbing = SaveData.Instance.Assists.NoGrabbing; if (!noGrabbing) { return(1); } player.ClimbTrigger(moveX); player.Speed.X = 0f; } } } return(0); } } } else { // new property data.Set("customDreamBlock", dreamBlock); if (player.Scene.OnInterval(0.1f)) { CreateTrail(player); } if (player.SceneAs <Level>().OnInterval(0.04f)) { DisplacementRenderer.Burst burst = player.SceneAs <Level>().Displacement.AddBurst(player.Center, 0.3f, 0f, 40f, 1f, null, null); burst.WorldClipCollider = dreamBlock.Collider; burst.WorldClipPadding = 2; } if (dreamBlock.AllowRedirects && player.CanDash) { bool sameDir = Input.GetAimVector(Facings.Right) == player.DashDir; bool flag4 = !sameDir || dreamBlock.AllowRedirectsInSameDir; if (flag4) { player.DashDir = Input.GetAimVector(Facings.Right); player.Speed = player.DashDir * player.Speed.Length(); player.Dashes = Math.Max(0, player.Dashes - 1); Audio.Play("event:/char/madeline/dreamblock_enter"); if (sameDir) { player.Speed *= dreamBlock.SameDirectionSpeedMultiplier; player.DashDir *= Math.Sign(dreamBlock.SameDirectionSpeedMultiplier); } Input.Dash.ConsumeBuffer(); } } } return(FrostModule.CustomDreamDashState); }
// Called via IL Delegate for non-returning blocks ONLY. new public void Update() { DisplacementRenderer.Burst burst = swapBlockData.Get <DisplacementRenderer.Burst>("burst"); if (burst != null) { burst.Position = Center; } int target = swapBlockData.Get <int>("target"); swapBlockData["redAlpha"] = Calc.Approach(swapBlockData.Get <float>("redAlpha"), (target != 1) ? 1 : 0, Engine.DeltaTime * 32f); float lerp = swapBlockData.Get <float>("lerp"); if (lerp is 0f or 1f) { middleRed.SetAnimationFrame(0); middleGreen.SetAnimationFrame(0); } swapBlockData["speed"] = Calc.Approach(swapBlockData.Get <float>("speed"), maxForwardSpeed, maxForwardSpeed / 0.2f * Engine.DeltaTime); Direction = difference * (target == 0 && Swapping ? -1 : 1); float previousLerp = lerp; swapBlockData["lerp"] = lerp = Calc.Approach(lerp, target, swapBlockData.Get <float>("speed") * Engine.DeltaTime); if (lerp != previousLerp) { Vector2 liftSpeed = difference * maxForwardSpeed; Vector2 position = Position; if (lerp < previousLerp) { liftSpeed *= -1f; } swapLiftSpeedTimer = 0; // Reset grace timer swapLiftSpeed = liftSpeed; if (Scene.OnInterval(0.02f)) { MoveParticles(difference); } MoveTo(Vector2.Lerp(start, end, lerp)); if (position != Position) { Audio.Position(swapBlockData.Get <EventInstance>("moveSfx"), Center); EventInstance returnSfx = swapBlockData.Get <EventInstance>("returnSfx"); Audio.Position(returnSfx, Center); if (Position == start && target == 0) { Audio.SetParameter(returnSfx, "end", 1f); Audio.Play(SFX.game_05_swapblock_return_end, Center); } else if (Position == end && target == 1) { Audio.Play(SFX.game_05_swapblock_move_end, Center); } } } if (Swapping && (lerp >= 1f || lerp <= 0f)) { Swapping = false; } StopPlayerRunIntoAnimation = (lerp is <= 0f or >= 1f); }
private static int DreamTunnelDashUpdate(this Player player) { DynData <Player> playerData = player.GetData(); if (FeatherMode) { Vector2 input = Input.Aim.Value.SafeNormalize(); if (input != Vector2.Zero) { Vector2 vector = player.Speed.SafeNormalize(); if (vector != Vector2.Zero) { vector = Vector2.Dot(input, vector) != -0.8f ? vector.RotateTowards(input.Angle(), 5f * Engine.DeltaTime) : vector; vector = vector.CorrectJoystickPrecision(); player.DashDir = vector; player.Speed = vector * 240f; } } } Input.Rumble(RumbleStrength.Light, RumbleLength.Medium); Vector2 position = player.Position; player.NaiveMove(player.Speed * Engine.DeltaTime); float dreamDashCanEndTimer = playerData.Get <float>(Player_dreamTunnelDashCanEndTimer); if (dreamDashCanEndTimer > 0f) { playerData[Player_dreamTunnelDashCanEndTimer] = dreamDashCanEndTimer - Engine.DeltaTime; } Solid solid = player.CollideFirst <Solid, DreamBlock>(); if (solid == null) { if (player.DreamTunneledIntoDeath()) { player.DreamDashDie(position); } else if (playerData.Get <float>(Player_dreamTunnelDashCanEndTimer) <= 0f) { Celeste.Freeze(0.05f); if (Input.Jump.Pressed && player.DashDir.X != 0f) { playerData["dreamJump"] = true; player.Jump(true, true); } else if (player.DashDir.Y >= 0f || player.DashDir.X != 0f) { if (player.DashDir.X > 0f && player.CollideCheck <DreamBlock>(player.Position - Vector2.UnitX * 5f)) { player.MoveHExact(-5, null, null); } else if (player.DashDir.X < 0f && player.CollideCheck <DreamBlock>(player.Position + Vector2.UnitX * 5f)) { player.MoveHExact(5, null, null); } bool flag = player.ClimbCheck(-1, 0); bool flag2 = player.ClimbCheck(1, 0); int moveX = playerData.Get <int>("moveX"); if (Input.Grab.Check && ((moveX == 1 && flag2) || (moveX == -1 && flag))) { player.Facing = (Facings)moveX; if (!SaveData.Instance.Assists.NoGrabbing) { return(Player.StClimb); } player.ClimbTrigger(moveX); player.Speed.X = 0f; } } return(Player.StNormal); } } else { playerData[Player_solid] = solid; if (player.Scene.OnInterval(0.1f)) { player.CreateDreamTrail(); } Level level = playerData.Get <Level>("level"); if (level.OnInterval(0.04f)) { DisplacementRenderer.Burst burst = level.Displacement.AddBurst(player.Center, 0.3f, 0f, 40f, 1f, null, null); burst.WorldClipCollider = solid.Collider; burst.WorldClipPadding = 2; } } return(StDreamTunnelDash); }