Example #1
0
        private void ProcessButtons(On.Celeste.Level.orig_Update orig, Level self)
        {
            orig(self);
            if (!SpeedrunToolModule.Enabled)
            {
                return;
            }

            if (GetVirtualButton(Mappings.ResetRoomPb).Pressed&& !self.Paused)
            {
                GetVirtualButton(Mappings.ResetRoomPb).ConsumePress();
                ClearPbTimes();
            }

            if (GetVirtualButton(Mappings.SwitchRoomTimer).Pressed&& !self.Paused)
            {
                GetVirtualButton(Mappings.SwitchRoomTimer).ConsumePress();
                RoomTimerType roomTimerType = SpeedrunToolModule.Settings.RoomTimerType;
                SwitchRoomTimer(((int)roomTimerType + 1) % Enum.GetNames(typeof(RoomTimerType)).Length);
                SpeedrunToolModule.Instance.SaveSettings();
            }

            if (GetVirtualButton(Mappings.SetEndPoint).Pressed&& !self.Paused)
            {
                GetVirtualButton(Mappings.SetEndPoint).ConsumePress();
                ClearPbTimes();
                CreateEndPoint(self);
            }
        }
        private void ProcessButtons(On.Celeste.Level.orig_Update orig, Level self)
        {
            orig(self);
            if (!SpeedrunToolModule.Enabled || self.Paused)
            {
                return;
            }

            if (Mappings.ResetRoomPb.Pressed() && !self.Paused)
            {
                Mappings.ResetRoomPb.ConsumePress();
                ClearPbTimes();
            }

            if (Mappings.SwitchRoomTimer.Pressed() && !self.Paused)
            {
                Mappings.SwitchRoomTimer.ConsumePress();
                RoomTimerType roomTimerType = SpeedrunToolModule.Settings.RoomTimerType;
                SwitchRoomTimer(((int)roomTimerType + 1) % Enum.GetNames(typeof(RoomTimerType)).Length);
                SpeedrunToolModule.Instance.SaveSettings();
            }

            if (Mappings.SetEndPoint.Pressed() && !self.Paused)
            {
                Mappings.SetEndPoint.ConsumePress();
                ClearPbTimes();
                CreateEndPoint(self);
            }

            if (Mappings.SetAdditionalEndPoint.Pressed() && !self.Paused)
            {
                Mappings.SetAdditionalEndPoint.ConsumePress();
                if (!EndPoint.IsExist)
                {
                    ClearPbTimes();
                }

                CreateEndPoint(self, true);
            }
        }
Example #3
0
 public RoomTimerData(RoomTimerType roomTimerType)
 {
     this.roomTimerType = roomTimerType;
     ResetTime();
 }
        private void Render(On.Celeste.SpeedrunTimerDisplay.orig_Render orig, SpeedrunTimerDisplay self)
        {
            SpeedrunToolSettings settings = SpeedrunToolModule.Settings;

            if (!settings.Enabled || settings.RoomTimerType == RoomTimerType.Off || self.DrawLerp <= 0f)
            {
                orig(self);
                return;
            }

            RoomTimerType roomTimeType  = SpeedrunToolModule.Settings.RoomTimerType;
            RoomTimerData roomTimerData = roomTimeType == RoomTimerType.NextRoom ? nextRoomTimerData : currentRoomTimerData;

            string roomTimeString = roomTimerData.TimeString;
            string pbTimeString   = roomTimerData.PbTimeString;

            pbTimeString = "PB " + pbTimeString;

            const float topBlackBarWidth = 32f;
            const float topTimeHeight    = 38f;
            const float pbWidth          = 100;
            const float timeMarginLeft   = 32f;
            const float pbScale          = 0.6f;

            MTexture bg = GFX.Gui["strawberryCountBG"];
            float    x  = -300f * Ease.CubeIn(1f - self.DrawLerp);

            Draw.Rect(x, self.Y, topBlackBarWidth + 2, topTimeHeight, Color.Black);
            bg.Draw(new Vector2(x + topBlackBarWidth, self.Y));

            float roomTimeScale = 1f;

            if (roomTimerData.IsCompleted)
            {
                Wiggler wiggler = (Wiggler)self.GetFieldValue("wiggler");
                if (wiggler != null)
                {
                    roomTimeScale = 1f + wiggler.Value * 0.15f;
                }
            }

            SpeedrunTimerDisplay.DrawTime(new Vector2(x + timeMarginLeft, self.Y + 44f), roomTimeString, roomTimeScale,
                                          true,
                                          roomTimerData.IsCompleted, roomTimerData.BeatBestTime);

            if (roomTimerData.IsCompleted)
            {
                string comparePbString = ComparePb(roomTimerData.Time, roomTimerData.LastPbTime);
                DrawTime(
                    new Vector2(x + timeMarginLeft + SpeedrunTimerDisplay.GetTimeWidth(roomTimeString) + 10,
                                self.Y + 36f),
                    comparePbString, 0.5f,
                    roomTimerData.IsCompleted, roomTimerData.BeatBestTime);
            }

            // 遮住上下两块的间隙,游戏原本的问题
            Draw.Rect(x, self.Y + topTimeHeight - 1, pbWidth + bg.Width * pbScale, 1f, Color.Black);

            Draw.Rect(x, self.Y + topTimeHeight, pbWidth + 2, bg.Height * pbScale + 1f, Color.Black);
            bg.Draw(new Vector2(x + pbWidth, self.Y + topTimeHeight), Vector2.Zero, Color.White, pbScale);
            DrawTime(new Vector2(x + timeMarginLeft, (float)(self.Y + 66.4)), pbTimeString, pbScale, false, false, 0.6f);
        }