using BeinLab.Util;
using ShadowStudio.Mgr;
using ShadowStudio.UI;
using System;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
using XRTool.Util;
using XRTool.WorldUI;
using static BoundingBox;
namespace ShadowStudio.Model
{
///
/// 用户的视频通话窗口
///
public class PlayerViewComponent : UIComponent
{
public static string viewId = "ArtId_PlayerView";
public static Dictionary viewDic = new Dictionary();
private string peerid;
private bool isInit = false;
private Peer _peer;
public static event Action ViewChange;
///
/// 创建一个视频通话窗口
/// 即时同步
///
/// 点击的用户的id
///
public static void CreateViewComponent(string peerid, Transform target, bool isDel = false)
{
if (viewDic.ContainsKey(peerid))
{
return;
}
GoodsInfo data = new GoodsInfo();
var info = ArtInfoMgr.Instance.GetArtInfo(viewId);
data.art_id = viewId;
data.id = UnityEngine.Random.Range(100000, 999999999);
if (target)
{
data.goods_info = UnityUtil.TransferToString(target, 2);
}
else
{
data.goods_info = UnityUtil.ArtTransferInfo(info);
}
data.goods_name = peerid;
data.rid = int.Parse(UserInfoMgr.Instance.userConfig.Id);
data.scene_id = -1;
///创建本地窗口
ArtInfoMgr.Instance.SyncGoods(data);
///
///ArtInfoMgr.Instance.SendTransfer(data);
if (target && isDel)
{
Destroy(target.gameObject);
}
}
private bool checkRtc()
{
if (_peer != null && StudioRtc.Instance != null && StudioRtc.Instance.customPeerList != null)
{
cPeer = (CustomPeer)StudioRtc.Instance.customPeerList.getPeerName(_peer.PeerId);
if (cPeer != null)
{
// Debug.Log("cPeer Not NULL" + _peer.PeerId);
cPeer.onChangeInfo -= OnChangeInfo;
cPeer.onChangeInfo += OnChangeInfo;
if (!_peer.IsSlef)
{
if (cPeer.isAudio && cPeer.cIdA != "")
{
openAudioEffect();
}
else
{
closeAudioEffect();
}
if (cPeer.isVideo && cPeer.cIdV != "")
{
openVideoEffect();
}
else
{
closeVideoEffect();
}
}
}
if (cPeer != null)
{
return true;
}
}
// Debug.Log("cPeer is NULL" + _peer.PeerId);
return false;
}
void StateUpdata()
{
if (cPeer == null)
return;
if (cPeer.isVideo)
{
if (cPeer.isCloseVideo)
{
openVideo.SetActive(false);
closeVideo.SetActive(false);
pauseVideo.SetActive(true);
VideoEmpty.gameObject.SetActive(true);
}
else
{
openVideo.SetActive(false);
closeVideo.SetActive(true);
pauseVideo.SetActive(false);
VideoEmpty.gameObject.SetActive(false);
}
}
else
{
openVideo.SetActive(true);
closeVideo.SetActive(false);
pauseVideo.SetActive(false);
VideoEmpty.gameObject.SetActive(true);
}
if (cPeer.isAudio)
{
if (cPeer.isCloseAudio)
{
openAudio.SetActive(false);
closeAudio.SetActive(false);
pauseAudio.SetActive(true);
}
else
{
openAudio.SetActive(false);
closeAudio.SetActive(true);
pauseAudio.SetActive(false);
}
}
else
{
openAudio.SetActive(true);
closeAudio.SetActive(false);
pauseAudio.SetActive(false);
}
}
public float volume = 0.2f;
public Text textMic;
public GameObject pauseCerAudio;
public GameObject pauseCerVideo;
public GameObject pauseAudio;
public GameObject pauseVideo;
public GameObject openVideo;
public GameObject closeVideo;
public MeshRenderer videoBG;
public Text nametext;
public XRIcon touxiang;
public GameObject openAudio;
public GameObject closeAudio;
public GameObject VolumnGo;
public RawImage agoraShowVideo;
private void closeVideoEffect()
{
if(openVideo)
{
openVideo.SetActive(true);
closeVideo.SetActive(false);
VideoEmpty.gameObject.SetActive(true);
if (cPeer != null)
{
pauseCerVideo.SetActive(true);
pauseVideo.SetActive(false);
}
if (peerid == CommonMethod.MyPeer.PeerId)
AgoraVideoAudioManager.Instance.EnableLocalVideo(false);
}
}
private void openVideoEffect()
{
openVideo.SetActive(false);
closeVideo.SetActive(true);
if (cPeer != null)
{
ShowVideo.material.mainTexture = cPeer.tex;
if (cPeer.isCloseVideo)
{
pauseCerVideo.SetActive(false);
pauseVideo.SetActive(true);
}
}
VideoEmpty.gameObject.SetActive(false);
if (peerid == CommonMethod.MyPeer.PeerId)
AgoraVideoAudioManager.Instance.EnableLocalVideo(true);
}
private void closeAudioEffect()
{
pauseCerAudio.SetActive(true);
pauseAudio.SetActive(false);
openAudio.SetActive(true);
closeAudio.SetActive(false);
VolumnGo.SetActive(false);
if (peerid == CommonMethod.MyPeer.PeerId)
AgoraVideoAudioManager.Instance.EnableLoacalAudio(false);
//else
// AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, false);
}
private void openAudioEffect()
{
openAudio.SetActive(false);
closeAudio.SetActive(true);
VolumnGo.SetActive(true);
if (cPeer != null)
{
volume = cPeer.volumn;
if (cPeer.isCloseAudio)
{
pauseCerAudio.SetActive(false);
pauseAudio.SetActive(true);
}
}
textMic.text = volume.ToString("F2");
if (peerid == CommonMethod.MyPeer.PeerId)
AgoraVideoAudioManager.Instance.EnableLoacalAudio(true);
//else
// AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, true);
}
private void OnChangeInfo(string type, string id)
{
if (type == "video")
{
if (cPeer.isVideo)
{
openVideoEffect();
if (cPeer.isCloseVideo)
{
StudioRtc.Instance.closeRev(cPeer.cIdV);
}
}
else
{
closeVideoEffect();
}
}
else
{
if (cPeer.isAudio)
{
openAudioEffect();
if (cPeer.isCloseAudio)
{
StudioRtc.Instance.closeRev(cPeer.cIdA);
}
}
else
{
closeAudioEffect();
}
}
}
private void Update()
{
if (checkRtc() && !isRtcInit)
{
ShowVideo.material.mainTexture = cPeer.tex;
isRtcInit = true;
}
StateUpdata();
}
bool isRtcInit = false;
CustomPeer cPeer;
public void setVideo(string peerid)
{
_peer = UserItemList.Instance.GetPeer(peerid);
nametext.text = _peer.NickName;
if (peerid == CommonMethod.MyPeer.PeerId)
{
if (StudioRtc.Instance.me.cIdA != "")
{
openAudioEffect();
}
else
{
closeAudioEffect();
}
if (StudioRtc.Instance.me.cIdV != "")
{
openVideoEffect();
}
else
{
closeVideoEffect();
}
ShowVideo.material.mainTexture = StudioRtc.Instance.rt;
isRtcInit = true;
return;
}
else
{
Debug.Log(" Peerid != MyPeer" + peerid);
}
if (checkRtc())
{
ShowVideo.material.mainTexture = cPeer.tex;
}
/*
if (peerid == CommonMethod.MyPeer.PeerId)
{
ShowVideo.material.mainTexture = ConsoleDlg.Instance.vufora_camera.GetComponent().targetTexture;
return;
}
peer = UserItemList.Instance.GetPeer(peerid);
if (peer != null)
{
ShowVideo.material.mainTexture = peer.CustomPeer.tex;
}
else
{
UnityLog.Instance.LogError("Cant Find peerid" + peerid);
}
*/
}
public void addMic()
{
volume += 0.1f;
if (_peer.IsSlef)
{
StudioRtc.Instance.setVolume(volume);
}
else
{
if (cPeer != null && cPeer.cIdA != "")
{
StudioRtc.Instance.setVolume(cPeer.cIdA, volume);
}
}
textMic.text = volume.ToString("F2");
}
public void redMic()
{
volume -= 0.1f;
if (_peer.IsSlef)
{
StudioRtc.Instance.setVolume(volume);
}
else
{
if (cPeer != null && cPeer.cIdA != "")
{
StudioRtc.Instance.setVolume(cPeer.cIdA, volume);
}
}
textMic.text = volume.ToString("F2");
}
public void closeMic()
{
if (_peer.IsSlef)
{
if (StudioRtc.Instance.me.cIdA != "")
{
WSHandler.Rtc.closeProducer(StudioRtc.Instance.me.cIdA);
StudioRtc.Instance.sendMic(false);
closeAudioEffect();
StudioRtc.Instance.me.cIdA = "";
}
}
else
{
if (cPeer != null && cPeer.isAudio && cPeer.cIdA != "" && !cPeer.isCloseAudio)
{
pauseCerAudio.SetActive(false);
pauseAudio.SetActive(true);
StudioRtc.Instance.closeRev(cPeer.cIdA);
cPeer.isCloseAudio = true;
// cPeer.setInfo("audio", cPeer.cIdA, false);
//AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, true);
}
AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(cPeer.name, false);
}
}
public void openMic()
{
if (_peer.IsSlef)
{
StudioRtc.Instance.sendMic(true);
volume = StudioRtc.Instance.me.volumn;
openAudioEffect();
}
else
{
if (cPeer != null && cPeer.isAudio && cPeer.cIdA != "" && cPeer.isCloseAudio)
{
pauseCerAudio.SetActive(true);
pauseAudio.SetActive(false);
StudioRtc.Instance.startRev(cPeer.cIdA);
cPeer.isCloseAudio = false;
// cPeer.setInfo("audio", cPeer.cIdA,true);
// AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(peerid, false);
}
AgoraVideoAudioManager.Instance.MuteRemoteAudioStream(cPeer.name, true);
}
}
public void OpenVideo()
{
agoraShowVideo.gameObject.SetActive(true);
if (_peer.IsSlef)
{
StudioRtc.Instance.startCamera();
// videoBG.gameObject.SetActive(true);
//videoBG.material.mainTexture = StudioRtc.Instance.rt;
StudioRtc.Instance.sendVideo(true);
openVideoEffect();
}
else
{
if (cPeer != null && cPeer.isVideo && cPeer.cIdV != "" && cPeer.isCloseVideo)
{
pauseCerVideo.SetActive(true);
pauseVideo.SetActive(false);
StudioRtc.Instance.startRev(cPeer.cIdV);
cPeer.isCloseVideo = false;
// cPeer.setInfo("audio", cPeer.cIdA,true);
}
AgoraVideoAudioManager.Instance.MuteRemoteVideoStream(cPeer.name, true);
}
}
public void CloseVideo()
{
agoraShowVideo.gameObject.SetActive(false);
if (_peer.IsSlef)
{
if (StudioRtc.Instance.me.cIdV != "")
{
WSHandler.Rtc.closeProducer(StudioRtc.Instance.me.cIdV);
StudioRtc.Instance.stopCamera();
StudioRtc.Instance.sendVideo(false);
closeVideoEffect();
StudioRtc.Instance.me.cIdV = "";
}
}
else
{
if (cPeer != null && cPeer.isVideo && cPeer.cIdV != "" && !cPeer.isCloseVideo)
{
pauseCerVideo.SetActive(false);
pauseVideo.SetActive(true);
StudioRtc.Instance.closeRev(cPeer.cIdV);
cPeer.isCloseVideo = true;
// cPeer.setInfo("audio", cPeer.cIdA,true);
}
AgoraVideoAudioManager.Instance.MuteRemoteVideoStream(cPeer.name, false);
}
}
private Button closeBtn;
public Button CloseBtn
{
get
{
if (!closeBtn)
{
closeBtn = UnityUtil.GetBreadthChild