Greasy Fork is available in English.

Typingtube拡張new02

・。・

// ==UserScript==
// @name         Typingtube拡張new02
// @license MIT
// @namespace    http://tampermonkey.net/
// @version      1.3
// @description  ・。・
// @author       つべ
// @match       https://typing-tube.net/movie/show*
// @icon         https://www.gEoogle.com/s2/favicons?sz=64&domain=typing-tube.net
// @grant        none
// ==/UserScript==
const settings = {
    videoBelow: true,        // 動画を下に配置
    scroll: true,     // 指定場所までエンターでスクロール
    showKPM: false,           // KPM表示
    showPossibleScore: true, // 達成可能スコア表示
};

const scrollDistance = -15;
/*指定場所までエンターでスクロールが有効のときのみ*/
/*スクロールの高さ調整。マイナスにすると上に、プラスにすると下に行きます。*/
let is_play = false;

let is_keydown_addEventListener = false;
function moveVideoBelow(){
    const YOUTUBE = document.getElementById("youtube-movie");
    const TYPING_AREA = document.getElementById("controlbox");
    YOUTUBE.parentNode.insertBefore(YOUTUBE,TYPING_AREA.nextSibling);
    /*動画下に表示  Toshi氏のを借用*/
}

function addTypingLineListContainer(){
    document.getElementsByClassName('modal-content')[1].insertAdjacentHTML('beforeend',`<div class="modal-body" id="typing-line-list-container"></div>`);
}
/*F4等で消えてしまったResult表示のdivを追加*/

function hideRanks(){
    document.getElementById('status').style.display = 'block'
    document.getElementById('ranking_roma').style.display = 'none'
    document.getElementById('ranking_kana').style.display = 'none'
    document.getElementById('ranking_flick').style.display = 'none'
};
/*エンターを押したら下の表示をstatusに切り替えてその他を表示しなくする*/

function updateKPMAndPossibleScore() {
    if (!is_play) return;

    if (settings.showKPM && !document.getElementById('line-speed-kpm')) {
        document.getElementById('line_remaining_time').insertAdjacentHTML("beforeend", ` - <span id="line-speed-kpm">0KPM</span>`);
    }

    if (settings.showPossibleScore && !document.getElementById('PS')) {
        document.getElementById('score-value').insertAdjacentHTML("afterend", `<span id="PS" style="font-size: 0.7em; color: rgb(204, 153, 204);">0</span>`);
    }

    if (settings.showKPM) {
        //document.getElementById("line-speed-kpm").textContent = `${Math.floor(line_typingspeed * 60)}KPM`;
    }

    if (settings.showPossibleScore) {
        const scoreParChar = parseLyric.scoreParChar
        const possibleScore = (200000 - ((lineResult.lostTypeLength * scoreParChar) +(typingCounter.missCount * (scoreParChar / 4)) )) / 2000
        document.getElementById("PS").textContent = Math.round(possibleScore * 100) / 100;
    }
}

function Event_func(e){
    if (is_play && is_keydown_addEventListener) {
        updateKPMAndPossibleScore();
    }

    if (e.code === 'Enter' && settings.scroll) {
        document.getElementById("tab w-100").scrollIntoView(true);
        scrollBy(0, scrollDistance);
        hideRanks();
    }

    if (e.code === 'F4') {
        addTypingLineListContainer();
    }
};

(function() {
    if (!is_keydown_addEventListener) {
        is_keydown_addEventListener = true;
        document.addEventListener('keydown', Event_func);
    }
})();
document.getElementById('restart').addEventListener('click', addTypingLineListContainer);

if (settings.videoBelow) {
    moveVideoBelow();
}


//書き換えここから
onPlayerStateChange = function (event) {

	switch(event.data){

		case 1: //再生(player.playVideo)
			console.log("再生 1")
            PlayerEvent.play()
            is_play = true;
			break;

		case 0: //プレイ終了(最後まで再生した)
		case 5://動画停止(途中でStopVideo)

			if(event.data == 0){
				console.log("プレイ終了 0")
                is_play = false;
			}else{
				console.log("動画停止 5")
                is_play = false;
			}

            PlayerEvent.end()
			break;

		case 2 : //一時停止(player.pauseVideo)
			console.log("一時停止 2")
            PlayerEvent.pause()
            is_play = false;
			break;

		case 3: //再生時間移動 スキップ(player.seekTo)
			console.log("シーク 3")
            PlayerEvent.seek()
			break;

		case -1: //	未スタート、他の動画に切り替えた時など
			console.log("未スタート -1")
            PlayerEvent.ready()
            is_play = false;
			break;
	}

}


document.addEventListener("keydown",(e)=>{
    if(e.code === 'Escape' && !is_play) player.playVideo();
})