25ea9496-df8d-4783-9850-f431d0c5c925.js.map 10.4 KB
{"version":3,"sources":["assets/script/common/components/Typewriter.ts"],"names":[],"mappings":"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","file":"","sourceRoot":"/","sourcesContent":["const { ccclass, property, menu } = cc._decorator;\n\n@ccclass\n@menu(\"自定义UI组件/Typewriter\")\nexport default class Typewriter extends cc.Component {\n    typerTimer: any = null; // 计时器Id\n    private showingString: string = \"\";\n    private showingNode: any;\n    private finishCallFunc: Function | undefined;\n\n    onLoad() {\n    }\n\n    clearParam() {\n        this.showingString = \"\";\n        this.showingNode = undefined;\n        this.finishCallFunc = undefined;\n    }\n\n    onDisable() {\n        this.clearParam();\n        this.clearTimer();\n    }\n\n    onDestroy() {\n        this.clearParam();\n        this.clearTimer();\n    }\n\n    clearTimer() {\n        // Destroy前确保定时器关闭\n        this.typerTimer && clearInterval(this.typerTimer);\n    }\n\n    showLabelTyper(label: cc.Label, str: string) {\n        label.string = '';\n        this.showingString = str;\n        this.showingNode = label;\n        this.makeLaberTyper(label, str);\n    }\n\n    showRichTextTyper(richText: cc.RichText, str: string, finishCallFunc?: Function, showIngCallFunc?: Function, playSpeed: number = 1) {\n        richText.string = '';\n        this.showingString = str;\n        this.showingNode = richText;\n        this.finishCallFunc = finishCallFunc;\n        this._makeRichTextTyper(richText, str, finishCallFunc, showIngCallFunc, playSpeed);\n    }\n\n    stopTyperShowString() {\n        this.clearTimer();\n        this.showingNode.string = this.showingString;\n        if (this.finishCallFunc) {\n            this.finishCallFunc();\n        }\n        this.clearParam();\n    }\n\n    getShowingString() {\n        return this.showingString;\n    }\n\n    makeLaberTyper(label: cc.Label, str: string) {\n        let charArr = str.split('');\n        let charIdx = 0;\n\n        this.clearTimer()\n        this.typerTimer = setInterval(() => {\n            if (charIdx >= charArr.length) {\n                this.clearTimer();\n                this.showingString = \"\";\n                this.showingNode = undefined;\n            } else {\n                charIdx += 1;\n                label.string = charArr.slice(0, charIdx).join('');\n            }\n        }, 50);\n    }\n\n    _makeRichTextTyper(richText: cc.RichText, str: string, finishCallFunc?: Function, showIngCallFunc?: Function, playSpeed: number = 1) {\n        let delimiterCharList: any = ['✁', '✂', '✃', '✄', '✺', '✻', '✼', '❄', '❅', '❆', '❇', '❈', '❉', '❊'];\n        let regexp = /<.+?\\/?>/g;\n        let matchArr = str.match(regexp);\n        let delimiterChar = delimiterCharList.find((item) => str.indexOf(item) == -1);\n        let replaceStr = str.replace(regexp, delimiterChar);\n        let tagInfoArr: any[] = [];\n        let temp: number[] = [];\n        let tagInfo: { endStr?; endtIdx?; startIdx?; startStr?} = {};\n        let num = 0;\n        for (let i = 0; i < replaceStr.length; i++) {\n            if (replaceStr[i] == delimiterChar) {\n                temp.push(i);\n                if (temp.length >= 2) {\n                    if (matchArr)\n                        tagInfo.endStr = matchArr[tagInfoArr.length * 2 + 1];\n                    tagInfo.endtIdx = i - num;\n                    tagInfoArr.push(tagInfo);\n                    temp = [];\n                    tagInfo = {};\n                } else {\n                    tagInfo.startIdx = i - num;\n                    if (matchArr)\n                        tagInfo.startStr = matchArr[tagInfoArr.length * 2];\n                }\n                num += 1;\n            }\n        }\n\n        let showCharArr = str.replace(regexp, '').split('');\n        let typerArr: string[] = [];\n        for (let i = 1; i <= showCharArr.length; i++) {\n            let temp = showCharArr.join('').slice(0, i);\n            let addLen = 0;\n            for (let j = 0; j < tagInfoArr.length; j++) {\n                let tagInfo = tagInfoArr[j];\n                let start = tagInfo.startIdx;\n                let end = tagInfo.endtIdx;\n                if (i > start && i <= end) {\n                    temp = temp.slice(0, start + addLen) + tagInfo.startStr + temp.slice(start + addLen) + tagInfo.endStr;\n                    addLen += tagInfo.startStr.length + tagInfo.endStr.length;\n                } else if (i > end) {\n                    temp =\n                        temp.slice(0, start + addLen) +\n                        tagInfo.startStr +\n                        temp.slice(start + addLen, end + addLen) +\n                        tagInfo.endStr +\n                        temp.slice(end + addLen);\n                    addLen += tagInfo.startStr.length + tagInfo.endStr.length;\n                }\n            }\n            typerArr.unshift(temp);\n        }\n\n        this.clearTimer()\n        this.typerTimer = setInterval(() => {\n            if (typerArr.length) {\n                // this.isShowTyper = true;\n                if (richText) {\n                    let str = typerArr.pop();\n                    richText.string = str ? str : \"\";\n                    if (showIngCallFunc) showIngCallFunc();\n                }\n            } else {\n                this.showingString = \"\";\n                this.showingNode = undefined;\n                this.clearTimer();\n                if (finishCallFunc) finishCallFunc();\n            }\n        }, 50 / playSpeed);\n    }\n}"]}