public bool ChangeMenuLevel(MenuLevel next, bool silent = false) { if (this.CurrentMenuLevel == null) return false; bool flag1 = this.CurrentMenuLevel.SelectedItem == null || !this.CurrentMenuLevel.SelectedItem.Selectable; this.selectorPhase = flag1 ? SelectorPhase.FadeIn : SelectorPhase.Grow; bool flag2 = next == this.CurrentMenuLevel.Parent; if (this.CurrentMenuLevel.OnClose != null) this.CurrentMenuLevel.OnClose(); if (next == null) { this.ResumeGame(); return true; } else { this.nextMenuLevel = next; this.nextMenuLevel.Reset(); this.RenderToTexture(); this.sinceSelectorPhaseStarted = 0.0f; this.lastMenuLevel = this.CurrentMenuLevel; if (flag1) { this.CurrentMenuLevel = this.nextMenuLevel; this.CurrentMenuLevelTexture = this.NextMenuLevelTexture; if (this.CurrentMenuLevel == null) this.DestroyMenu(); } else if (!silent) { if (flag2) SoundEffectExtensions.Emit(this.sReturnLevel); else SoundEffectExtensions.Emit(this.sAdvanceLevel); if (this.lastMenuLevel.Oversized && !this.CurrentMenuLevel.Oversized) SoundEffectExtensions.Emit(this.sScreenNarrowen); } if (!this.lastMenuLevel.Oversized && this.CurrentMenuLevel.Oversized) SoundEffectExtensions.Emit(this.sScreenWiden); return true; } }
private void UpOneLevel(MenuLevel activeLevel) { SoundEffectExtensions.Emit(this.sCancel); activeLevel.ForceCancel = false; if (this.EndGameMenu) { this.GameState.EndGame = true; this.GameState.Restart(); this.Enabled = false; Waiters.Wait(0.400000005960464, (Action) (() => ServiceHelper.RemoveComponent<MenuBase>(this))); } else if (activeLevel is SaveSlotSelectionLevel) { this.sinceSelectorPhaseStarted = 0.0f; this.selectorPhase = SelectorPhase.Disappear; this.GameState.ReturnToArcade(); } else { if (activeLevel.Parent == this.HelpOptionsMenu) SettingsManager.Save(); this.ChangeMenuLevel(activeLevel.Parent, false); } }
private void UpdateSelector(float elapsedSeconds) { Vector3 vector3_1 = Vector3.Zero; Vector3 vector3_2 = Vector3.Zero; float viewScale = SettingsManager.GetViewScale(this.GraphicsDevice); if (this.CurrentMenuLevel != null && this.CurrentMenuLevel.SelectedItem != null) { float num1 = (this.CurrentMenuLevel.Oversized ? 512f : 256f) * viewScale; int num2 = Enumerable.Count<MenuItem>((IEnumerable<MenuItem>) this.CurrentMenuLevel.Items, (Func<MenuItem, bool>) (x => !x.Hidden)); float num3 = this.CurrentMenuLevel.Items.Count == 0 ? 0.0f : (this.CurrentMenuLevel.SelectedItem.Size.Y + this.Fonts.TopSpacing) * this.Fonts.BigFactor; int selectedIndex = this.CurrentMenuLevel.SelectedIndex; MenuItem menuItem = this.CurrentMenuLevel.Items[selectedIndex]; vector3_1 = new Vector3((menuItem.Size + new Vector2(this.Fonts.SideSpacing * 2f, this.Fonts.TopSpacing)) * this.Fonts.BigFactor / 2f, 1f); if (num2 > 10) { bool flag = false; switch (Culture.Language) { case Language.English: case Language.Chinese: case Language.Japanese: case Language.Korean: for (int index = 0; index <= this.CurrentMenuLevel.SelectedIndex; ++index) { if (this.CurrentMenuLevel.Items[index].Hidden) --selectedIndex; } float num4 = 5f; if (selectedIndex == num2 - 1) vector3_2 = new Vector3(0.0f, (float) (((double) num4 - 9.0) * (double) num3 - (double) num3 / 2.0), 0.0f); else if (selectedIndex < 8) { vector3_2 = new Vector3(num1 / 2f, (float) (((double) num4 - (double) selectedIndex) * (double) num3 - (double) num3 / 2.0), 0.0f); } else { selectedIndex -= 8; vector3_2 = new Vector3((float) (-(double) num1 / 2.0), (float) (((double) num4 - (double) selectedIndex) * (double) num3 - (double) num3 / 2.0), 0.0f); } if (flag && selectedIndex != num2 - 1) vector3_1 = vector3_1 * this.Fonts.SmallFactor / this.Fonts.BigFactor; string str = WordWrap.Split(menuItem.ToString(), this.Fonts.Small, (float) (((double) ((float) this.Game.GraphicsDevice.Viewport.Width * 0.45f) + (double) vector3_2.X / 2.0) / ((double) this.Fonts.SmallFactor * (double) viewScale))); int num5 = 0; foreach (int num6 in str) { if (num6 == 10) ++num5; } if (num5 > 0) { vector3_1.Y *= (float) (1 + num5); break; } else break; default: flag = true; goto case Language.English; } } else { float num4 = (float) num2 / 2f; for (int index = 0; index <= this.CurrentMenuLevel.SelectedIndex; ++index) { if (this.CurrentMenuLevel.Items[index].Hidden) --selectedIndex; } vector3_2 = new Vector3(0.0f, (float) (((double) num4 - (double) selectedIndex) * (double) num3 - (double) num3 / 2.0), 0.0f); } } this.sinceSelectorPhaseStarted += elapsedSeconds; switch (this.selectorPhase) { case SelectorPhase.Appear: case SelectorPhase.Disappear: Group group1 = this.Selector.Groups[0]; Group group2 = this.Selector.Groups[1]; Group group3 = this.Selector.Groups[2]; this.Frame.Enabled = false; this.Selector.Material.Opacity = 1f; this.Selector.Enabled = true; this.Selector.Position = Vector3.Zero; this.Selector.Scale = Vector3.One; float num7 = Easing.EaseInOut((double) FezMath.Saturate(this.sinceSelectorPhaseStarted / 0.75f), EasingType.Sine, EasingType.Cubic); if (this.selectorPhase == SelectorPhase.Disappear) num7 = 1f - num7; group2.Enabled = group3.Enabled = (double) num7 > 0.5; float x1 = (this.nextMenuLevel.Oversized ? 512f : 352f) * viewScale; float num8 = FezMath.Saturate((float) (((double) num7 - 0.5) * 2.0)); float num9 = FezMath.Saturate(num7 * 2f); group1.Scale = new Vector3(x1, 256f * num9 * viewScale, 1f); group2.Scale = new Vector3(x1 * num8, 256f * viewScale, 1f); group2.Position = new Vector3((float) (-(double) x1 * (1.0 - (double) num8)), 0.0f, 1f); group3.Scale = new Vector3(x1 * num8, 256f * viewScale, 1f); group3.Position = new Vector3(x1 * (1f - num8), 0.0f, 1f); if ((double) num7 <= 0.0 && this.selectorPhase == SelectorPhase.Disappear && !this.StartedNewGame) this.DestroyMenu(); if ((double) num7 < 1.0 || this.selectorPhase != SelectorPhase.Appear) break; this.selectorPhase = SelectorPhase.Shrink; group1.Scale = group2.Scale = group3.Scale = Vector3.One; group2.Position = group3.Position = Vector3.Zero; this.Frame.Scale = this.Selector.Scale = new Vector3(x1, 256f * viewScale, 1f); this.Frame.Enabled = true; this.sinceSelectorPhaseStarted = 0.0f; this.CurrentMenuLevel = this.nextMenuLevel; this.CurrentMenuLevelTexture = this.NextMenuLevelTexture; break; case SelectorPhase.Shrink: float amount1 = Easing.EaseInOut((double) FezMath.Saturate(this.sinceSelectorPhaseStarted * 2.5f), EasingType.Sine, EasingType.Cubic); if (this.CurrentMenuLevel.SelectedItem == null || !this.CurrentMenuLevel.SelectedItem.Selectable) { this.Selector.Material.Opacity = 0.0f; } else { this.Selector.Material.Opacity = 1f; this.Selector.Scale = Vector3.Lerp(new Vector3((this.lastMenuLevel ?? this.CurrentMenuLevel).Oversized ? 512f : 352f, 256f, 1f) * viewScale, vector3_1, amount1); this.Selector.Position = Vector3.Lerp(Vector3.Zero, vector3_2, amount1); } this.Frame.Scale = Vector3.Lerp(new Vector3((this.lastMenuLevel ?? this.CurrentMenuLevel).Oversized ? 512f : 352f, 256f, 1f) * viewScale, new Vector3(this.CurrentMenuLevel.Oversized ? 512f : 352f, 256f, 1f) * viewScale, amount1); if ((double) amount1 < 1.0) break; this.selectorPhase = SelectorPhase.Select; break; case SelectorPhase.Grow: float amount2 = 1f - Easing.EaseInOut((double) FezMath.Saturate(this.sinceSelectorPhaseStarted / 0.3f), EasingType.Sine, EasingType.Quadratic); if (this.CurrentMenuLevel.SelectedItem == null || !this.CurrentMenuLevel.SelectedItem.Selectable) { this.Selector.Material.Opacity = 0.0f; } else { this.Selector.Material.Opacity = 1f; this.Selector.Scale = Vector3.Lerp(new Vector3(this.nextMenuLevel.Oversized ? 512f : 352f, 256f, 1f) * viewScale, vector3_1, amount2); this.Selector.Position = Vector3.Lerp(Vector3.Zero, vector3_2, amount2); } this.Frame.Scale = Vector3.Lerp(new Vector3(this.CurrentMenuLevel.Oversized ? 512f : 352f, 256f, 1f) * viewScale, new Vector3(this.nextMenuLevel.Oversized ? 512f : 352f, 256f, 1f) * viewScale, 1f - amount2); if ((double) amount2 > 0.0) break; this.lastMenuLevel = this.CurrentMenuLevel; this.CurrentMenuLevel = this.nextMenuLevel; this.CurrentMenuLevelTexture = this.NextMenuLevelTexture; if (this.CurrentMenuLevel.SelectedItem == null || !this.CurrentMenuLevel.SelectedItem.Selectable) { this.CurrentMenuLevel.Reset(); this.selectorPhase = SelectorPhase.Select; } else { this.CurrentMenuLevel.Reset(); this.selectorPhase = SelectorPhase.FadeIn; } this.sinceSelectorPhaseStarted = 0.0f; break; case SelectorPhase.Select: if (this.CurrentMenuLevel.SelectedItem == null || !this.CurrentMenuLevel.SelectedItem.Selectable) { this.Selector.Material.Opacity = 0.0f; break; } else { this.Selector.Material.Opacity = 1f; this.Selector.Scale = Vector3.Lerp(this.Selector.Scale, vector3_1, 0.3f); this.Selector.Position = Vector3.Lerp(this.Selector.Position, vector3_2, 0.3f); break; } case SelectorPhase.FadeIn: float amount3 = Easing.EaseInOut((double) FezMath.Saturate(this.sinceSelectorPhaseStarted / 0.25f), EasingType.Sine, EasingType.Cubic); this.Selector.Material.Opacity = amount3; this.Selector.Scale = Vector3.Lerp(this.Selector.Scale, vector3_1, 0.3f); this.Selector.Position = Vector3.Lerp(this.Selector.Position, vector3_2, 0.3f); float x2 = (this.CurrentMenuLevel.Oversized ? 512f : 352f) * viewScale; if ((double) this.Frame.Scale.X != (double) x2) this.Frame.Scale = Vector3.Lerp(new Vector3((this.lastMenuLevel ?? this.CurrentMenuLevel).Oversized ? 512f : 352f, 256f, 1f) * viewScale, new Vector3(x2, 256f * viewScale, 1f), amount3); if ((double) amount3 < 1.0) break; this.selectorPhase = SelectorPhase.Select; this.sinceSelectorPhaseStarted = 0.0f; break; } }
protected virtual void StartNewGame() { this.sinceSelectorPhaseStarted = 0.0f; this.selectorPhase = SelectorPhase.Disappear; SoundEffectExtensions.Emit(this.sDisappear).Persistent = true; }