internal static bool LoadSkin(string skin = null, bool clearCache = false) { InitializeSkinList(); bool found = true; if (skin == null || Skins.Find(s => s.Equals(skin, StringComparison.CurrentCultureIgnoreCase)) == null) { found = skin == null; skin = ConfigManager.sSkin; } bool forceDefault = false; if ((GameBase.Mode == OsuModes.Edit || GameBase.TestMode) && ConfigManager.sEditorDefaultSkin) { skin = DEFAULT_SKIN; forceDefault = true; } if (!Directory.Exists(Path.Combine(SKINS_FOLDER, skin))) { skin = DEFAULT_SKIN; forceDefault = true; } bool isNewSkin = false; if (clearCache || Current == null || !skin.Equals(Current.RawName, StringComparison.CurrentCultureIgnoreCase)) { if (Current != null) { Debug.Print(@"Skin reloaded"); } TextureManager.ClearSkinCache(true); SkinOsu newSkin = LoadSkinRaw(skin); if (newSkin != null) { isNewSkin = true; Current = newSkin; if (skin == ConfigManager.sSkin) { CurrentUserSkin = Current; } AudioEngine.ClearSkinCache(); if (GameBase.Mode == OsuModes.Play) //todo: check if we actually need to load samples here. { AudioEngine.LoadAllSamples(); } else { AudioEngine.LoadPrioritySamples(); } } } BeatmapColours.Clear(); ResetColoursToSkin(); if (ConfigManager.sUseSkinCursor && Current != CurrentUserSkin && !forceDefault) { //Special user override. SkinOsu tempHolder = Current; Current = CurrentUserSkin; LoadCursor(); Current = tempHolder; } else { LoadCursor(); } if (isNewSkin) { OnSkinChanged?.Invoke(); } return(found); }
internal static void LoadSkin(bool clearCache) { if (clearCache || Current == null) { ClearCaches(); Current = LoadSkinRaw(ConfigManager.sSkin); AudioEngine.ClearSkinCache(); AudioEngine.LoadSampleSet(AudioEngine.CurrentSampleSet); AudioEngine.LoadAllSamples(); } ClearBeatmapCache(); BeatmapColours.Clear(); ResetColoursToSkin(); if (InputManager.spriteCursor == null) { InputManager.spriteCursor = new pSprite(Load("cursor"), FieldTypes.WindowScaleOnly, (Current.CursorCentre ? OriginTypes.Centre : OriginTypes.TopLeft), ClockTypes.Game, Vector2.Zero, 1, true, Color.White); if (Current.CursorRotate) { Transformation tr = new Transformation(TransformationType.Rotation, 0, (float)Math.PI * 2, 0, 10000); InputManager.spriteCursor.IsLoopable = true; tr.Loop = true; InputManager.spriteCursor.Transformations.Add(tr); } GameBase.spriteManagerOverlay.Add(InputManager.spriteCursor); } else { InputManager.spriteCursor.OriginType = Current.CursorCentre ? OriginTypes.Centre : OriginTypes.TopLeft; InputManager.spriteCursor.Texture = Load("cursor"); if (Current.CursorRotate) { InputManager.spriteCursor.Transformations.Clear(); Transformation tr = new Transformation(TransformationType.Rotation, 0, (float)Math.PI * 2, 0, 10000); InputManager.spriteCursor.IsLoopable = true; tr.Loop = true; InputManager.spriteCursor.Transformations.Add(tr); } else { InputManager.spriteCursor.IsLoopable = false; InputManager.spriteCursor.Transformations.Clear(); InputManager.spriteCursor.CurrentRotation = 0; } /*for (int i = 0; i < 4; i++) * { * InputManager.cursorTrail[i].Texture = Load("cursortrail"); * InputManager.cursorTrail[i].OriginType = Current.CursorCentre * ? OriginTypes.Centre * : OriginTypes.TopLeft; * }*/ } }