protected override void SetSongObjectAndController()
    {
        visuals = GetComponentInChildren <NoteVisualsManager>();
        note    = new Note(0, Note.GuitarFret.Green);

        controller      = GetComponent <NoteController>();
        controller.note = note;
        note.controller = controller;
    }
    bool ObjectCanClap(SongObject songObject)
    {
        SongObject.ID           id = (SongObject.ID)songObject.classID;
        GameSettings.ClapToggle toggleValue;

        // Must have some kind of visual representation on screen
        if (songObject.controller == null || !songObject.controller.isActiveAndEnabled)
        {
            return(false);
        }

        bool playClap = false;

        if (SongObjectHelper.songObjectIdToClapOption.TryGetValue(id, out toggleValue))
        {
            if ((GameSettings.clapProperties & toggleValue) != 0)
            {
                playClap = true;
            }
        }
        else if (id == SongObject.ID.Note)
        {
            Note          note     = songObject as Note;
            Note.NoteType noteType = NoteVisualsManager.GetVisualNoteType(note);

            switch (noteType)
            {
            case Note.NoteType.Strum:
            case Note.NoteType.Cymbal:
                playClap = (GameSettings.clapProperties & GameSettings.ClapToggle.STRUM) != 0;
                break;

            case Note.NoteType.Hopo:
                playClap = (GameSettings.clapProperties & GameSettings.ClapToggle.HOPO) != 0;
                break;

            case Note.NoteType.Tap:
                playClap = (GameSettings.clapProperties & GameSettings.ClapToggle.TAP) != 0;
                break;

            default:
                break;
            }
        }

        return(playClap);
    }
    bool CheckTextureInSkin()
    {
        Skin customSkin = SkinManager.Instance.currentSkin;

        Note note = nCon.note;

        Note.NoteType    noteType    = NoteVisualsManager.GetVisualNoteType(note);
        Note.SpecialType specialType = NoteVisualsManager.IsStarpower(note);

        int arrayPos = NoteVisuals2DManager.GetNoteArrayPos(note, ChartEditor.Instance.laneInfo);

        Note.NoteType visualNoteType = noteType;

        if (!Globals.ghLiveMode)
        {
            if (noteType == Note.NoteType.Hopo && Globals.drumMode)
            {
                visualNoteType = Note.NoteType.Strum;
            }
        }

        bool isInSkin;
        bool isGhl = Globals.ghLiveMode;
        int  hash  = NoteVisuals2DManager.GetSkinKeyHash(arrayPos, noteType, specialType, isGhl);

        if (textureInSkinCache.TryGetValue(hash, out isInSkin))
        {
            return(isInSkin);
        }
        else
        {
            string   noteKey = NoteVisuals2DManager.GetSkinKey(arrayPos, noteType, specialType, isGhl);
            Sprite[] sprites = SkinManager.Instance.currentSkin.GetSprites(noteKey);

            isInSkin = sprites != null && sprites.Length > 0;
            textureInSkinCache[hash] = isInSkin;

            return(isInSkin);
        }
    }