209 lines
6.9 KiB
TypeScript
209 lines
6.9 KiB
TypeScript
import { _decorator, instantiate, isValid, Label, Node,VideoClip, Sprite, UITransform, Vec3, VideoPlayer, view } from 'cc';
|
|
import Utils from '../../Main/Common/Utils';
|
|
import { InnerMsgCode } from '../../Main/Config/InnerMsgCode';
|
|
import li_BaseView from '../../Main/Common/li_BaseView';
|
|
import ResManager from '../../Main/Manager/ResManager';
|
|
import GlobalValue, { VideoRoleType } from '../../Main/Common/GlobalValue';
|
|
import { SDKManager } from '../../Main/Channel/SDKManager';
|
|
import { BgVideo } from '../../Main/Channel/BgVideo';
|
|
const { ccclass, property } = _decorator;
|
|
|
|
//场景背景层 - 视频模式
|
|
@ccclass('SceneBgVideoLayer')
|
|
export class SceneBgVideoLayer extends li_BaseView {
|
|
private _nodeTab: any = {};
|
|
private _data;
|
|
|
|
static handle: SceneBgVideoLayer | null = null;
|
|
|
|
private remoteLoopPath: string = "" //远程循环路径
|
|
private curVideoType: VideoRoleType = VideoRoleType.None;
|
|
private sceneBg: Sprite = null;
|
|
private videoInited: boolean = false; //视频是否初始化完成
|
|
private vpWait: BgVideo | null = null; //播表情视频时暂停的背景视频
|
|
private emoReady: BgVideo | null = null; //已准备好播放的表情
|
|
|
|
private videoPlayer: VideoPlayer = null;
|
|
|
|
/**获取videoplayer副本 */
|
|
getVideoClone() {
|
|
let vp = instantiate(this._nodeTab.videoRole)
|
|
this.node.addChild(vp)
|
|
let bv = vp.getComponent(BgVideo)!
|
|
return bv
|
|
}
|
|
|
|
//----重写父类接口---------------------------------------
|
|
onLoadCT() {
|
|
this.registerListenner();
|
|
Utils.parseNode(this.node, this._nodeTab)
|
|
this.sceneBg = this._nodeTab.sceneBg.getComponent(Sprite)!;
|
|
this.videoPlayer = this._nodeTab.videoRole.getComponent(VideoPlayer);
|
|
if (GlobalValue.NpcVideoMod) {
|
|
this.setVideoInited(true, true)
|
|
}
|
|
SceneBgVideoLayer.handle = this;
|
|
}
|
|
openUIDataCT(data: any): void {
|
|
this._data = data
|
|
}
|
|
|
|
|
|
registerListenner() {
|
|
Utils.addInnerEL(InnerMsgCode.SimplePlayVide,this,this.playLocalLoopVideo);
|
|
Utils.addInnerEL(InnerMsgCode.SceneLayerBgUp, this, this.resiveBgUp)
|
|
Utils.addInnerEL(InnerMsgCode.BgVideo_Ready, this, this.resiveBgVideoReady)
|
|
Utils.addInnerEL(InnerMsgCode.BgVideo_End, this, this.resiveBgVideoEnd)
|
|
}
|
|
|
|
|
|
|
|
//刷新场景背景消息
|
|
resiveBgUp(data) {
|
|
if (!GlobalValue.NpcVideoMod) {
|
|
return
|
|
}
|
|
if (data) {
|
|
if (data.videoPath) {
|
|
console.log("bgvideo 收到播放视频消息:", data)
|
|
if (data.videoType == VideoRoleType.Idle) {
|
|
this.playLoopVideo(data.videoPath, false)
|
|
} else {
|
|
this.playOnceVideo(data.videoPath)
|
|
}
|
|
}
|
|
|
|
if (!this.videoInited && data.bgPath) {
|
|
ResManager.I.changeBundleSpriteFrame(this.sceneBg, data.bgPath, "Raw", ()=>{
|
|
//调整背景图适配
|
|
Utils.adjustBgPixelRatio(this.sceneBg.node, 1)
|
|
})
|
|
}
|
|
}
|
|
}
|
|
|
|
/**视频准备好消息 */
|
|
resiveBgVideoReady(data:any) {
|
|
if (!this.videoInited) {
|
|
this.setVideoInited(true)
|
|
}
|
|
if (data.compo) {
|
|
if (data.compo.vtype == VideoRoleType.emo) {
|
|
this.setEmoReadyAudio(data.compo)
|
|
if (this.curVideoType == VideoRoleType.emo) {
|
|
this.doPlayEmoReadyAudio()
|
|
}
|
|
} else if (data.compo.vtype == VideoRoleType.Idle) {
|
|
this.curVideoType = VideoRoleType.Idle;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**视频播放完毕消息 */
|
|
resiveBgVideoEnd(data:any) {
|
|
if (data.compo) {
|
|
if (data.compo.vtype == VideoRoleType.emo) {
|
|
// this.playLoopVideo(this.remoteLoopPath, true)
|
|
this.doEmoFinish()
|
|
} else if (data.compo.vtype == VideoRoleType.Idle) {
|
|
//主视频播完后,检测一下有没有要播的表情视频
|
|
if (this.doPlayEmoReadyAudio()) {
|
|
this.setBgAudioPause(data.compo)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
playLocalLoopVideo(data:any) {
|
|
ResManager.I.changeBundleVideo(this.videoPlayer,data.path,"Chat18x",(res:VideoClip)=>{
|
|
this.videoPlayer.play();
|
|
let uiT:UITransform = this.videoPlayer.node.getComponent(UITransform);
|
|
|
|
const size = uiT.contentSize;
|
|
console.log(size);
|
|
const targetSize = data.size;
|
|
console.log(targetSize);
|
|
|
|
this.videoPlayer.node.setScale(new Vec3(targetSize.y/576,targetSize.y/576,1));
|
|
});
|
|
}
|
|
|
|
/**播放循环视频 */
|
|
playLoopVideo(path: string, force = false) {
|
|
if (this.remoteLoopPath == path && !force) {
|
|
return
|
|
}
|
|
console.log("bgvideo 播放循环视频", path)
|
|
this.remoteLoopPath = path
|
|
SDKManager.PlayBgAudio(path, VideoRoleType.Idle, true)
|
|
}
|
|
|
|
/**播放单次视频 */
|
|
playOnceVideo(path: string) {
|
|
console.log("bgvideo 播放单次视频", path)
|
|
SDKManager.AddEmoAudio(path, VideoRoleType.emo, false)
|
|
}
|
|
|
|
|
|
//设置视频是否初始化完成
|
|
setVideoInited(inited: boolean, force: boolean = false) {
|
|
if (this.videoInited == inited && !force) {
|
|
return
|
|
}
|
|
console.log("bgvideo setVideoInited", inited)
|
|
this.videoInited = inited
|
|
this._nodeTab.sceneBg.active = !inited
|
|
}
|
|
|
|
|
|
//设置暂停播放的主视频
|
|
setBgAudioPause(wait:BgVideo) {
|
|
console.log("bgvideo 主视频暂停播放")
|
|
this.vpWait = wait
|
|
this.vpWait.pauseVideo()
|
|
}
|
|
replayBgAudioPause() {
|
|
console.log("bgvideo 主视频继续播放")
|
|
if (this.vpWait) {
|
|
this.vpWait.replayVideo()
|
|
}
|
|
}
|
|
|
|
//设置准备好要播放的表情视频
|
|
setEmoReadyAudio(au: BgVideo) {
|
|
console.log("bgvideo 设置ready视频", au)
|
|
if (this.emoReady) {
|
|
this.emoReady.recycleVideo()
|
|
}
|
|
this.emoReady = au;
|
|
this.emoReady.pauseVideo()
|
|
}
|
|
//移除准备好要播放的表情视频
|
|
removeEmoReadyAudio() {
|
|
console.log("bgvideo 移除ready视频")
|
|
if (this.emoReady) {
|
|
this.emoReady.recycleVideo()
|
|
}
|
|
this.emoReady = null
|
|
}
|
|
//播放准备好要播放的表情视频
|
|
doPlayEmoReadyAudio():boolean {
|
|
if (this.emoReady) {
|
|
console.log("bgvideo 播放ready视频")
|
|
this.emoReady.replayVideo()
|
|
this.emoReady.moveIn()
|
|
this.curVideoType = VideoRoleType.emo
|
|
return true
|
|
}
|
|
return false
|
|
}
|
|
//表情视频播放结束
|
|
doEmoFinish() {
|
|
console.log("bgvideo ready视频播放结束")
|
|
this.removeEmoReadyAudio()
|
|
this.replayBgAudioPause()
|
|
this.curVideoType = VideoRoleType.Idle
|
|
}
|
|
|
|
}
|