Typingtube拡張new02

・。・

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==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();
})