示例#1
0
        public ScoreInfo CreateScoreInfo(RulesetStore rulesets, PlaylistItem playlistItem, [NotNull] BeatmapInfo beatmap)
        {
            var ruleset = rulesets.GetRuleset(playlistItem.RulesetID);

            if (ruleset == null)
            {
                throw new InvalidOperationException($"Couldn't create score with unknown ruleset: {playlistItem.RulesetID}");
            }

            var rulesetInstance = ruleset.CreateInstance();

            var scoreInfo = new ScoreInfo
            {
                OnlineID    = ID,
                TotalScore  = TotalScore,
                MaxCombo    = MaxCombo,
                BeatmapInfo = beatmap,
                Ruleset     = rulesets.GetRuleset(playlistItem.RulesetID) ?? throw new InvalidOperationException(),
                                    Statistics = Statistics,
                                    User       = User,
                                    Accuracy   = Accuracy,
                                    Date       = EndedAt,
                                    Hash       = string.Empty, // todo: temporary?
                                    Rank       = Rank,
                                    Mods       = Mods?.Select(m => m.ToMod(rulesetInstance)).ToArray() ?? Array.Empty <Mod>(),
                                    Position   = Position,
            };

            return(scoreInfo);
        }
示例#2
0
        private void load(RulesetStore rulesets)
        {
            Add(new Info());

            AddStep(@"set name", () => Room.Name.Value = @"Room Name?");
            AddStep(@"set availability", () => Room.Availability.Value = RoomAvailability.FriendsOnly);
            AddStep(@"set status", () => Room.Status.Value             = new RoomStatusPlaying());
            AddStep(@"set beatmap", () =>
            {
                Room.Playlist.Clear();
                Room.Playlist.Add(new PlaylistItem
                {
                    Beatmap =
                    {
                        Value                = new BeatmapInfo
                        {
                            StarDifficulty =                    2.4,
                            Ruleset        = rulesets.GetRuleset(0),
                            Metadata       = new BeatmapMetadata
                            {
                                Title        = @"My Song",
                                Artist       = @"VisualTests",
                                AuthorString = @"osu!lazer",
                            },
                        }
                    }
                });
            });

            AddStep(@"change name", () => Room.Name.Value = @"Room Name!");
            AddStep(@"change availability", () => Room.Availability.Value = RoomAvailability.InviteOnly);
            AddStep(@"change status", () => Room.Status.Value             = new RoomStatusOpen());
            AddStep(@"null beatmap", () => Room.Playlist.Clear());
            AddStep(@"change beatmap", () =>
            {
                Room.Playlist.Clear();
                Room.Playlist.Add(new PlaylistItem
                {
                    Beatmap =
                    {
                        Value                = new BeatmapInfo
                        {
                            StarDifficulty =                    4.2,
                            Ruleset        = rulesets.GetRuleset(3),
                            Metadata       = new BeatmapMetadata
                            {
                                Title        = @"Your Song",
                                Artist       = @"Tester",
                                AuthorString = @"Someone",
                            },
                        }
                    }
                });
            });
        }
示例#3
0
        public void TestRetrievedRulesetsAreDetached()
        {
            RunTestWithRealm((realm, storage) =>
            {
                var rulesets = new RulesetStore(realm, storage);

                Assert.IsFalse(rulesets.AvailableRulesets.First().IsManaged);
                Assert.IsFalse(rulesets.GetRuleset(0)?.IsManaged);
                Assert.IsFalse(rulesets.GetRuleset("mania")?.IsManaged);
            });
        }
示例#4
0
        public virtual BeatmapInfo ToBeatmapInfo(RulesetStore rulesets)
        {
            var set = BeatmapSet?.ToBeatmapSet(rulesets);

            return(new BeatmapInfo
            {
                Metadata = set?.Metadata ?? new BeatmapMetadata(),
                Ruleset = rulesets.GetRuleset(RulesetID),
                StarDifficulty = StarRating,
                OnlineBeatmapID = OnlineID,
                Version = DifficultyName,
                // this is actually an incorrect mapping (Length is calculated as drain length in lazer's import process, see BeatmapManager.calculateLength).
                Length = Length,
                Status = Status,
                MD5Hash = Checksum,
                BeatmapSet = set,
                Metrics = metrics,
                MaxCombo = maxCombo,
                BaseDifficulty = new BeatmapDifficulty
                {
                    DrainRate = drainRate,
                    CircleSize = circleSize,
                    ApproachRate = approachRate,
                    OverallDifficulty = overallDifficulty,
                },
                OnlineInfo = new BeatmapOnlineInfo
                {
                    PlayCount = playCount,
                    PassCount = passCount,
                    CircleCount = circleCount,
                    SliderCount = sliderCount,
                },
            });
        }
示例#5
0
        protected override void OnRoomUpdated()
        {
            base.OnRoomUpdated();

            if (Room == null)
            {
                return;
            }

            const double fade_time = 50;

            userStateDisplay.Status = User.State;

            if (Room.Host?.Equals(User) == true)
            {
                crown.FadeIn(fade_time);
            }
            else
            {
                crown.FadeOut(fade_time);
            }

            // If the mods are updated at the end of the frame, the flow container will skip a reflow cycle: https://github.com/ppy/osu-framework/issues/4187
            // This looks particularly jarring here, so re-schedule the update to that start of our frame as a fix.
            Schedule(() =>
            {
                var ruleset = rulesets.GetRuleset(Room.Settings.RulesetID).CreateInstance();
                userModsDisplay.Current.Value = User.Mods.Select(m => m.ToMod(ruleset)).ToList();
            });
        }
示例#6
0
        /// <summary>
        /// Create all required <see cref="BeatmapInfo"/>s for the provided archive.
        /// </summary>
        private List <BeatmapInfo> createBeatmapDifficulties(ArchiveReader reader)
        {
            var beatmapInfos = new List <BeatmapInfo>();

            foreach (var name in reader.Filenames.Where(f => f.EndsWith(".osu")))
            {
                using (var raw = reader.GetStream(name))
                    using (var ms = new MemoryStream()) //we need a memory stream so we can seek and shit
                        using (var sr = new StreamReader(ms))
                        {
                            raw.CopyTo(ms);
                            ms.Position = 0;

                            var     decoder = Decoder.GetDecoder(sr);
                            Beatmap beatmap = decoder.DecodeBeatmap(sr);

                            beatmap.BeatmapInfo.Path    = name;
                            beatmap.BeatmapInfo.Hash    = ms.ComputeSHA2Hash();
                            beatmap.BeatmapInfo.MD5Hash = ms.ComputeMD5Hash();

                            RulesetInfo ruleset = rulesets.GetRuleset(beatmap.BeatmapInfo.RulesetID);

                            // TODO: this should be done in a better place once we actually need to dynamically update it.
                            beatmap.BeatmapInfo.Ruleset        = ruleset;
                            beatmap.BeatmapInfo.StarDifficulty = ruleset?.CreateInstance()?.CreateDifficultyCalculator(beatmap).Calculate() ?? 0;

                            beatmapInfos.Add(beatmap.BeatmapInfo);
                        }
            }

            return(beatmapInfos);
        }
示例#7
0
        private void load(FrameworkConfigManager frameworkConfig)
        {
            this.frameworkConfig = frameworkConfig;

            ScoreStore.ScoreImported += score => Schedule(() => LoadScore(score));

            if (!Host.IsPrimaryInstance)
            {
                Logger.Log(@"osu! does not support multiple running instances.", LoggingTarget.Runtime, LogLevel.Error);
                Environment.Exit(0);
            }

            if (args?.Length > 0)
            {
                var paths = args.Where(a => !a.StartsWith(@"-"));

                Task.Run(() => Import(paths.ToArray()));
            }

            dependencies.CacheAs(this);

            // bind config int to database RulesetInfo
            configRuleset         = LocalConfig.GetBindable <int>(OsuSetting.Ruleset);
            Ruleset.Value         = RulesetStore.GetRuleset(configRuleset.Value) ?? RulesetStore.AvailableRulesets.First();
            Ruleset.ValueChanged += r => configRuleset.Value = r.ID ?? 0;

            // bind config int to database SkinInfo
            configSkin = LocalConfig.GetBindable <int>(OsuSetting.Skin);
            SkinManager.CurrentSkinInfo.ValueChanged += s => configSkin.Value = s.ID;
            configSkin.ValueChanged += id => SkinManager.CurrentSkinInfo.Value = SkinManager.Query(s => s.ID == id) ?? SkinInfo.Default;
            configSkin.TriggerChange();

            LocalConfig.BindWith(OsuSetting.VolumeInactive, inactiveVolumeAdjust);
        }
示例#8
0
        public BeatmapInfo ToBeatmap(RulesetStore rulesets)
        {
            var set = BeatmapSet?.ToBeatmapSet(rulesets);

            return(new BeatmapInfo
            {
                Metadata = set?.Metadata ?? this,
                Ruleset = rulesets.GetRuleset(ruleset),
                StarDifficulty = starDifficulty,
                OnlineBeatmapID = OnlineBeatmapID,
                Version = version,
                Length = TimeSpan.FromSeconds(length).TotalMilliseconds,
                Status = Status,
                BeatmapSet = set,
                Metrics = metrics,
                MaxCombo = maxCombo,
                BaseDifficulty = new BeatmapDifficulty
                {
                    DrainRate = drainRate,
                    CircleSize = circleSize,
                    ApproachRate = approachRate,
                    OverallDifficulty = overallDifficulty,
                },
                OnlineInfo = new BeatmapOnlineInfo
                {
                    PlayCount = playCount,
                    PassCount = passCount,
                    CircleCount = circleCount,
                    SliderCount = sliderCount,
                },
            });
        }
示例#9
0
            private void showMore()
            {
                var req = new GetUserScoresRequest(user.Id, type, visiblePages++ *5);

                showMoreLoading.Show();
                showMoreButton.Hide();

                req.Success += scores =>
                {
                    foreach (var s in scores)
                    {
                        s.ApplyRuleset(rulesets.GetRuleset(s.OnlineRulesetID));
                    }

                    showMoreButton.FadeTo(scores.Count == 5 ? 1 : 0);
                    showMoreLoading.Hide();

                    if (scores.Any())
                    {
                        missing.Hide();
                        foreach (OnlineScore score in scores)
                        {
                            scoreContainer.Add(new DrawableScore(score, includeWeigth ? Math.Pow(0.95, scoreContainer.Count) : -1)
                            {
                                RelativeSizeAxes = Axes.X,
                                Height           = 60,
                            });
                        }
                    }
                };

                Schedule(() => { api.Queue(req); });
            }
示例#10
0
        private void load()
        {
            dependencies.CacheAs(this);

            dependencies.Cache(SentryLogger);

            dependencies.Cache(osuLogo = new OsuLogo {
                Alpha = 0
            });

            // bind config int to database RulesetInfo
            configRuleset = LocalConfig.GetBindable <int>(OsuSetting.Ruleset);

            var preferredRuleset = RulesetStore.GetRuleset(configRuleset.Value);

            try
            {
                Ruleset.Value = preferredRuleset ?? RulesetStore.AvailableRulesets.First();
            }
            catch (Exception e)
            {
                // on startup, a ruleset may be selected which has compatibility issues.
                Logger.Error(e, $@"Failed to switch to preferred ruleset {preferredRuleset}.");
                Ruleset.Value = RulesetStore.AvailableRulesets.First();
            }

            Ruleset.ValueChanged += r => configRuleset.Value = r.NewValue.ID ?? 0;

            // bind config int to database SkinInfo
            configSkin = LocalConfig.GetBindable <int>(OsuSetting.Skin);
            SkinManager.CurrentSkinInfo.ValueChanged += skin => configSkin.Value = skin.NewValue.ID;
            configSkin.ValueChanged += skinId =>
            {
                var skinInfo = SkinManager.Query(s => s.ID == skinId.NewValue);

                if (skinInfo == null)
                {
                    switch (skinId.NewValue)
                    {
                    case -1:
                        skinInfo = DefaultLegacySkin.Info;
                        break;

                    default:
                        skinInfo = SkinInfo.Default;
                        break;
                    }
                }

                SkinManager.CurrentSkinInfo.Value = skinInfo;
            };
            configSkin.TriggerChange();

            IsActive.BindValueChanged(active => updateActiveState(active.NewValue), true);

            Audio.AddAdjustment(AdjustableProperty.Volume, inactiveVolumeFade);

            SelectedMods.BindValueChanged(modsChanged);
            Beatmap.BindValueChanged(beatmapChanged, true);
        }
示例#11
0
        public ScoreInfo CreateScoreInfo(RulesetStore rulesets, PlaylistItem playlistItem, [NotNull] BeatmapInfo beatmap)
        {
            var rulesetInstance = playlistItem.Ruleset.Value.CreateInstance();

            var scoreInfo = new ScoreInfo
            {
                OnlineScoreID = ID,
                TotalScore    = TotalScore,
                MaxCombo      = MaxCombo,
                BeatmapInfo   = beatmap,
                BeatmapInfoID = playlistItem.BeatmapID,
                Ruleset       = rulesets.GetRuleset(playlistItem.RulesetID),
                RulesetID     = playlistItem.RulesetID,
                Statistics    = Statistics,
                User          = User,
                Accuracy      = Accuracy,
                Date          = EndedAt,
                Hash          = string.Empty, // todo: temporary?
                Rank          = Rank,
                Mods          = Mods?.Select(m => m.ToMod(rulesetInstance)).ToArray() ?? Array.Empty <Mod>(),
                Position      = Position,
            };

            return(scoreInfo);
        }
示例#12
0
        private void load(RulesetStore rulesets)
        {
            var rateAdjustClock = new StopwatchClock(true);

            framedClock = new FramedClock(rateAdjustClock);

            AddStep(@"circles", () => loadHitobjects(HitObjectType.Circle));
            AddStep(@"slider", () => loadHitobjects(HitObjectType.Slider));
            AddStep(@"spinner", () => loadHitobjects(HitObjectType.Spinner));

            AddToggleStep("Auto", state => { auto = state; loadHitobjects(mode); });
            AddSliderStep("Playback speed", 0.0, 2.0, 0.5, v => rateAdjustClock.Rate = v);

            framedClock.ProcessFrame();

            var clockAdjustContainer = new Container
            {
                RelativeSizeAxes = Axes.Both,
                Clock            = framedClock,
                Children         = new[]
                {
                    playfieldContainer = new OsuInputManager(rulesets.GetRuleset(0))
                    {
                        RelativeSizeAxes = Axes.Both
                    },
                    approachContainer = new Container {
                        RelativeSizeAxes = Axes.Both
                    }
                }
            };

            Add(clockAdjustContainer);
        }
示例#13
0
        protected override void OnRoomUpdated()
        {
            base.OnRoomUpdated();

            if (Room == null)
            {
                return;
            }

            const double fade_time = 50;

            var ruleset = rulesets.GetRuleset(Room.Settings.RulesetID).CreateInstance();

            var currentModeRank = User.User?.RulesetsStatistics?.GetValueOrDefault(ruleset.ShortName)?.GlobalRank;

            userRankText.Text = currentModeRank != null ? $"#{currentModeRank.Value:N0}" : string.Empty;

            userStateDisplay.UpdateStatus(User.State, User.BeatmapAvailability);

            if (Room.Host?.Equals(User) == true)
            {
                crown.FadeIn(fade_time);
            }
            else
            {
                crown.FadeOut(fade_time);
            }

            // If the mods are updated at the end of the frame, the flow container will skip a reflow cycle: https://github.com/ppy/osu-framework/issues/4187
            // This looks particularly jarring here, so re-schedule the update to that start of our frame as a fix.
            Schedule(() => userModsDisplay.Current.Value = User.Mods.Select(m => m.ToMod(ruleset)).ToList());
        }
示例#14
0
 public BeatmapInfo ToBeatmap(RulesetStore rulesets)
 {
     return(new BeatmapInfo
     {
         Metadata = this,
         Ruleset = rulesets.GetRuleset(ruleset),
         StarDifficulty = starDifficulty,
         OnlineBeatmapID = onlineBeatmapID,
         Version = version,
         BaseDifficulty = new BeatmapDifficulty
         {
             DrainRate = drainRate,
             CircleSize = circleSize,
             ApproachRate = approachRate,
             OverallDifficulty = overallDifficulty,
         },
         OnlineInfo = new BeatmapOnlineInfo
         {
             PlayCount = playCount,
             PassCount = passCount,
             Length = length,
             CircleCount = circleCount,
             SliderCount = sliderCount,
         },
     });
 }
示例#15
0
        public virtual BeatmapInfo ToBeatmap(RulesetStore rulesets)
        {
            var set = BeatmapSet?.ToBeatmapSet(rulesets);

            return(new BeatmapInfo
            {
                Metadata = set?.Metadata ?? this,
                Ruleset = rulesets.GetRuleset(ruleset),
                StarDifficulty = starDifficulty,
                OnlineBeatmapID = OnlineBeatmapID,
                Version = version,
                // this is actually an incorrect mapping (Length is calculated as drain length in lazer's import process, see BeatmapManager.calculateLength).
                Length = TimeSpan.FromSeconds(length).TotalMilliseconds,
                Status = Status,
                BeatmapSet = set,
                Metrics = metrics,
                MaxCombo = maxCombo,
                BaseDifficulty = new BeatmapDifficulty
                {
                    DrainRate = drainRate,
                    CircleSize = circleSize,
                    ApproachRate = approachRate,
                    OverallDifficulty = overallDifficulty,
                },
                OnlineInfo = new BeatmapOnlineInfo
                {
                    PlayCount = playCount,
                    PassCount = passCount,
                    CircleCount = circleCount,
                    SliderCount = sliderCount,
                },
            });
        }
        private void load(RulesetStore rulesets)
        {
            var rateAdjustClock = new StopwatchClock(true);

            framedClock = new FramedClock(rateAdjustClock);

            AddStep(@"KaraokeObject_Demo001", () => loadHitobjects(DemoKaraokeObject.GenerateDemo001()));

            AddStep(@"ResetPosition", () => { appearPosition = new Vector2(0, -200); });

            framedClock.ProcessFrame();

            var clockAdjustContainer = new Container
            {
                RelativeSizeAxes = Axes.Both,
                Clock            = framedClock,
                Children         = new[]
                {
                    playfieldContainer = new KaraokeInputManager(rulesets.GetRuleset(0))
                    {
                        RelativeSizeAxes = Axes.Both
                    },
                }
            };

            Add(clockAdjustContainer);
        }
        public ScoreInfo CreateScoreInfo(RulesetStore rulesets)
        {
            var ruleset = rulesets.GetRuleset(OnlineRulesetID);

            var mods = Mods != null?ruleset.CreateInstance().GetAllMods().Where(mod => Mods.Contains(mod.Acronym)).ToArray() : Array.Empty <Mod>();

            var scoreInfo = new ScoreInfo
            {
                TotalScore    = TotalScore,
                MaxCombo      = MaxCombo,
                User          = User,
                Accuracy      = Accuracy,
                OnlineScoreID = OnlineScoreID,
                Date          = Date,
                PP            = PP,
                Beatmap       = Beatmap,
                RulesetID     = OnlineRulesetID,
                Hash          = Replay ? "online" : string.Empty, // todo: temporary?
                Rank          = Rank,
                Ruleset       = ruleset,
                Mods          = mods,
                IsLegacyScore = true
            };

            if (Statistics != null)
            {
                foreach (var kvp in Statistics)
                {
                    switch (kvp.Key)
                    {
                    case @"count_geki":
                        scoreInfo.SetCountGeki(kvp.Value);
                        break;

                    case @"count_300":
                        scoreInfo.SetCount300(kvp.Value);
                        break;

                    case @"count_katu":
                        scoreInfo.SetCountKatu(kvp.Value);
                        break;

                    case @"count_100":
                        scoreInfo.SetCount100(kvp.Value);
                        break;

                    case @"count_50":
                        scoreInfo.SetCount50(kvp.Value);
                        break;

                    case @"count_miss":
                        scoreInfo.SetCountMiss(kvp.Value);
                        break;
                    }
                }
            }

            return(scoreInfo);
        }
示例#18
0
文件: OsuGame.cs 项目: moccy/osu
        private void load()
        {
            if (!Host.IsPrimaryInstance && !DebugUtils.IsDebugBuild)
            {
                Logger.Log(@"osu! does not support multiple running instances.", LoggingTarget.Runtime, LogLevel.Error);
                Environment.Exit(0);
            }

            if (args?.Length > 0)
            {
                var paths = args.Where(a => !a.StartsWith('-')).ToArray();
                if (paths.Length > 0)
                    Task.Run(() => Import(paths));
            }

            dependencies.CacheAs(this);

            dependencies.Cache(SentryLogger);

            dependencies.Cache(osuLogo = new OsuLogo { Alpha = 0 });

            // bind config int to database RulesetInfo
            configRuleset = LocalConfig.GetBindable<int>(OsuSetting.Ruleset);
            Ruleset.Value = RulesetStore.GetRuleset(configRuleset.Value) ?? RulesetStore.AvailableRulesets.First();
            Ruleset.ValueChanged += r => configRuleset.Value = r.NewValue.ID ?? 0;

            // bind config int to database SkinInfo
            configSkin = LocalConfig.GetBindable<int>(OsuSetting.Skin);
            SkinManager.CurrentSkinInfo.ValueChanged += skin => configSkin.Value = skin.NewValue.ID;
            configSkin.ValueChanged += skinId =>
            {
                var skinInfo = SkinManager.Query(s => s.ID == skinId.NewValue);

                if (skinInfo == null)
                {
                    switch (skinId.NewValue)
                    {
                        case -1:
                            skinInfo = DefaultLegacySkin.Info;
                            break;

                        default:
                            skinInfo = SkinInfo.Default;
                            break;
                    }
                }

                SkinManager.CurrentSkinInfo.Value = skinInfo;
            };
            configSkin.TriggerChange();

            IsActive.BindValueChanged(active => updateActiveState(active.NewValue), true);

            Audio.AddAdjustment(AdjustableProperty.Volume, inactiveVolumeFade);

            SelectedMods.BindValueChanged(modsChanged);
            Beatmap.BindValueChanged(beatmapChanged, true);
        }
示例#19
0
        private void load(RulesetStore rulesets, SettingsStore settings)
        {
            maniaRuleset = rulesets.GetRuleset(0);

            if (maniaRuleset != null)
            {
                dependencies.Cache(new KaraokeConfigManager(settings, maniaRuleset, 0));
            }
        }
示例#20
0
        private void load(OsuGame game, RulesetStore rulesets, OsuColour colours)
        {
            DisplayStyleControl.Dropdown.AccentColour = colours.BlueDark;

            Ruleset.Value = game?.Ruleset.Value ?? rulesets.GetRuleset(0);
            foreach (var r in rulesets.AvailableRulesets)
            {
                modeButtons.Add(new RulesetToggleButton(Ruleset, r));
            }
        }
示例#21
0
        private void load(RulesetStore rulesets, OsuColour colours, Bindable <RulesetInfo> ruleset)
        {
            DisplayStyleControl.Dropdown.AccentColour = colours.BlueDark;

            Ruleset.Value = ruleset ?? rulesets.GetRuleset(0);
            foreach (var r in rulesets.AvailableRulesets)
            {
                modeButtons.Add(new RulesetToggleButton(Ruleset, r));
            }
        }
示例#22
0
        private void load(OsuGame game, RulesetStore rulesets, OsuColour colours)
        {
            DisplayStyleControl.Dropdown.AccentColour = colours.BlueDark;

            Ruleset.BindTo(game?.Ruleset ?? new Bindable <RulesetInfo> {
                Value = rulesets.GetRuleset(0)
            });
            foreach (var r in rulesets.AllRulesets)
            {
                modeButtons.Add(new RulesetToggleButton(Ruleset, r));
            }
        }
示例#23
0
        private void load(RulesetStore rulesets)
        {
            Info info = new Info();

            Add(info);

            AddStep(@"set name", () => info.Name = @"Room Name?");
            AddStep(@"set availability", () => info.Availability = RoomAvailability.FriendsOnly);
            AddStep(@"set status", () => info.Status             = new RoomStatusPlaying());
            AddStep(@"set beatmap", () => info.Beatmap           = new BeatmapInfo
            {
                StarDifficulty = 2.4,
                Ruleset        = rulesets.GetRuleset(0),
                Metadata       = new BeatmapMetadata
                {
                    Title        = @"My Song",
                    Artist       = @"VisualTests",
                    AuthorString = @"osu!lazer",
                },
            });

            AddStep(@"set type", () => info.Type = new GameTypeTagTeam());

            AddStep(@"change name", () => info.Name = @"Room Name!");
            AddStep(@"change availability", () => info.Availability = RoomAvailability.InviteOnly);
            AddStep(@"change status", () => info.Status             = new RoomStatusOpen());
            AddStep(@"null beatmap", () => info.Beatmap             = null);
            AddStep(@"change type", () => info.Type       = new GameTypeTeamVersus());
            AddStep(@"change beatmap", () => info.Beatmap = new BeatmapInfo
            {
                StarDifficulty = 4.2,
                Ruleset        = rulesets.GetRuleset(3),
                Metadata       = new BeatmapMetadata
                {
                    Title        = @"Your Song",
                    Artist       = @"Tester",
                    AuthorString = @"Someone",
                },
            });
        }
示例#24
0
        public void TestRulesetChange()
        {
            ScoreInfo testScoreInfo;

            AddStep("Add score for current user", () =>
            {
                testScoreInfo = TestResources.CreateTestScoreInfo(importedBeatmap);

                testScoreInfo.User = API.LocalUser.Value;
                testScoreInfo.Rank = ScoreRank.B;

                scoreManager.Import(testScoreInfo);
            });

            AddUntilStep("Wait for initial presence", () => topLocalRank.IsPresent);

            AddStep("Change ruleset", () => Ruleset.Value = rulesets.GetRuleset("fruits"));
            AddUntilStep("Became not present", () => !topLocalRank.IsPresent);

            AddStep("Change ruleset back", () => Ruleset.Value = rulesets.GetRuleset("osu"));
            AddUntilStep("Became present", () => topLocalRank.IsPresent);
        }
示例#25
0
        protected override void OnRoomUpdated()
        {
            base.OnRoomUpdated();

            if (Room == null || Client.LocalUser == null)
            {
                return;
            }

            const double fade_time = 50;

            // Todo: Should use the room's selected item to determine ruleset.
            var ruleset = rulesets.GetRuleset(0).CreateInstance();

            int?currentModeRank = User.User?.RulesetsStatistics?.GetValueOrDefault(ruleset.ShortName)?.GlobalRank;

            userRankText.Text = currentModeRank != null ? $"#{currentModeRank.Value:N0}" : string.Empty;

            userStateDisplay.UpdateStatus(User.State, User.BeatmapAvailability);

            if ((User.BeatmapAvailability.State == DownloadState.LocallyAvailable) && (User.State != MultiplayerUserState.Spectating))
            {
                userModsDisplay.FadeIn(fade_time);
            }
            else
            {
                userModsDisplay.FadeOut(fade_time);
            }

            if (Client.IsHost && !User.Equals(Client.LocalUser))
            {
                kickButton.FadeIn(fade_time);
            }
            else
            {
                kickButton.FadeOut(fade_time);
            }

            if (Room.Host?.Equals(User) == true)
            {
                crown.FadeIn(fade_time);
            }
            else
            {
                crown.FadeOut(fade_time);
            }

            // If the mods are updated at the end of the frame, the flow container will skip a reflow cycle: https://github.com/ppy/osu-framework/issues/4187
            // This looks particularly jarring here, so re-schedule the update to that start of our frame as a fix.
            Schedule(() => userModsDisplay.Current.Value = User.Mods.Select(m => m.ToMod(ruleset)).ToList());
        }
示例#26
0
 public BeatmapInfo ToBeatmap(RulesetStore rulesets)
 {
     return(new BeatmapInfo
     {
         Metadata = this,
         Ruleset = rulesets.GetRuleset(ruleset),
         StarDifficulty = starDifficulty,
         OnlineInfo = new BeatmapOnlineInfo
         {
             PlayCount = playCount,
             PassCount = passCount,
         },
     });
 }
示例#27
0
        private void showMore()
        {
            var req = new GetUserScoresRequest(user.Value.Id, type, visiblePages++ *5);

            showMoreLoading.Show();
            showMoreButton.Hide();

            req.Success += scores =>
            {
                foreach (var s in scores)
                {
                    s.ApplyRuleset(rulesets.GetRuleset(s.OnlineRulesetID));
                }

                showMoreButton.FadeTo(scores.Count == 5 ? 1 : 0);
                showMoreLoading.Hide();

                if (!scores.Any())
                {
                    return;
                }

                missing.Hide();

                foreach (OnlineScore score in scores)
                {
                    DrawableScore drawableScore;

                    switch (type)
                    {
                    default:
                        drawableScore = new DrawablePerformanceScore(score, includeWeight ? Math.Pow(0.95, scoreContainer.Count) : (double?)null);
                        break;

                    case ScoreType.Recent:
                        drawableScore = new DrawableTotalScore(score);
                        break;
                    }

                    drawableScore.RelativeSizeAxes = Axes.X;
                    drawableScore.Height           = 60;

                    scoreContainer.Add(drawableScore);
                }
            };

            api.Queue(req);
        }
示例#28
0
        private void load(GameHost host, AudioManager audio)
        {
            Dependencies.Cache(rulesets = new RulesetStore(ContextFactory));
            Dependencies.Cache(manager  = new BeatmapManager(LocalStorage, ContextFactory, rulesets, null, audio, Resources, host, Beatmap.Default));

            beatmaps = new List <BeatmapInfo>();

            var metadata = new BeatmapMetadata
            {
                Artist       = "Some Artist",
                Title        = "Some Beatmap",
                AuthorString = "Some Author"
            };

            var beatmapSetInfo = new BeatmapSetInfo
            {
                OnlineID  = 10,
                Hash      = Guid.NewGuid().ToString().ComputeMD5Hash(),
                Metadata  = metadata,
                DateAdded = DateTimeOffset.UtcNow
            };

            for (int i = 0; i < 8; ++i)
            {
                int beatmapId = 10 * 10 + i;

                int    length = RNG.Next(30000, 200000);
                double bpm    = RNG.NextSingle(80, 200);

                var beatmap = new BeatmapInfo
                {
                    Ruleset        = rulesets.GetRuleset(i % 4),
                    OnlineID       = beatmapId,
                    Length         = length,
                    BPM            = bpm,
                    Metadata       = metadata,
                    BaseDifficulty = new BeatmapDifficulty()
                };

                beatmaps.Add(beatmap);
                beatmapSetInfo.Beatmaps.Add(beatmap);
            }

            manager.Import(beatmapSetInfo).Wait();
        }
示例#29
0
文件: OsuGame.cs 项目: DKooPK/osu
        private void load(FrameworkConfigManager frameworkConfig)
        {
            this.frameworkConfig = frameworkConfig;

            if (!Host.IsPrimaryInstance)
            {
                Logger.Log(@"osu! does not support multiple running instances.", LoggingTarget.Runtime, LogLevel.Error);
                Environment.Exit(0);
            }

            if (args?.Length > 0)
            {
                var paths = args.Where(a => !a.StartsWith(@"-")).ToArray();
                if (paths.Length > 0)
                {
                    Task.Run(() => Import(paths));
                }
            }

            dependencies.CacheAs(this);

            dependencies.Cache(RavenLogger);

            dependencies.CacheAs(ruleset);
            dependencies.CacheAs <IBindable <RulesetInfo> >(ruleset);

            dependencies.Cache(osuLogo = new OsuLogo {
                Alpha = 0
            });

            // bind config int to database RulesetInfo
            configRuleset         = LocalConfig.GetBindable <int>(OsuSetting.Ruleset);
            ruleset.Value         = RulesetStore.GetRuleset(configRuleset.Value) ?? RulesetStore.AvailableRulesets.First();
            ruleset.ValueChanged += r => configRuleset.Value = r.NewValue.ID ?? 0;

            // bind config int to database SkinInfo
            configSkin = LocalConfig.GetBindable <int>(OsuSetting.Skin);
            SkinManager.CurrentSkinInfo.ValueChanged += skin => configSkin.Value = skin.NewValue.ID;
            configSkin.ValueChanged += skinId => SkinManager.CurrentSkinInfo.Value = SkinManager.Query(s => s.ID == skinId.NewValue) ?? SkinInfo.Default;
            configSkin.TriggerChange();

            LocalConfig.BindWith(OsuSetting.VolumeInactive, inactiveVolumeAdjust);

            IsActive.BindValueChanged(active => updateActiveState(active.NewValue), true);
        }
示例#30
0
 private void load(RulesetStore rulesets)
 {
     Children = new Drawable[]
     {
         new CatchInputManager(rulesets.GetRuleset(2))
         {
             RelativeSizeAxes = Axes.Both,
             Child            = new CatcherArea
             {
                 RelativePositionAxes = Axes.Both,
                 RelativeSizeAxes     = Axes.Both,
                 Anchor = Anchor.BottomLeft,
                 Origin = Anchor.BottomLeft,
                 Size   = new Vector2(1, 0.2f),
             }
         },
     };
 }