Beispiel #1
0
        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);
        }
Beispiel #2
0
        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;
                 * }*/
            }
        }