Files
RedHotRoast-ios/Assets/Scripts/ModuleUI/LiveDetail/LiveDetailUI.cs
T

378 lines
13 KiB
C#
Raw Normal View History

using System;
using System.IO;
using FairyGUI;
using FGUI.LG_Common;
using FGUI.LG_live;
using Newtonsoft.Json;
using SGModule.Common.Extensions;
using SGModule.NetKit;
using UnityEngine;
using UnityEngine.Video;
using Object = UnityEngine.Object;
namespace RedHotRoast
{
public class LiveDetailUI : BaseUI
{
private LiveDetailUICtrl ctrl;
private LiveDetailModel model;
private com_liveDetail ui;
private VideoPlayer video;
public LiveDetailUI(LiveDetailUICtrl ctrl) : base(ctrl)
{
uiName = UIConst.LiveDetailUI;
this.ctrl = ctrl;
}
protected override void SetUIInfo(UIInfo uiInfo)
{
uiInfo.packageName = "LG_live";
uiInfo.assetName = "com_liveDetail";
uiInfo.layerType = UILayerType.Popup;
uiInfo.isNeedOpenAnim = false;
uiInfo.isNeedCloseAnim = false;
uiInfo.isNeedUIMask = true;
}
//初始化页面逻辑
private void Updata()
{
if (GameHelper.GetNowTime() < livedata_.LiveADTime)
{
Debug.Log("??????????????????");
(ui.btn_watchad as btn_claim_4).state.selectedIndex = 1;
(ui.btn_watchad as btn_claim_4).text_time.text = CommonHelper.TimeFormat(
(int)livedata_.LiveADTime - Convert.ToInt32(GameHelper.GetNowTime()),
CountDownType.Hour);
}
else
{
(ui.btn_watchad as btn_claim_4).state.selectedIndex = 0;
if (LiveConfig.AD == livedata_.AD_num + 1)
ui.btn_watchad.title = "+" + (100 - livedata_.progress) + "%";
else
ui.btn_watchad.title = "+" + livedata_.Singleprogress + "%";
}
}
private void InitView()
{
Updata();
var btn_down_coin = ((btn_unlock_1)ui.btn_download_coin);
if (GameHelper.GetVipPrivilege(Subscription.FreeDownImage.As<int>()))
{
(ui.btn_download as btn_claim).have_vip.selectedIndex = 1;
ui.is_vip.selectedIndex = 1;
}
else
{
ui.is_vip.selectedIndex = 0;
btn_down_coin.down_load.selectedIndex = 1;
}
if (livedata_.progress < 100)
{
ui.state.selectedIndex = 0;
if (LiveConfig.AD == 0)
{
ui.can_speed.selectedIndex = 1;
}
if (LiveConfig.SubscribeUnlock == 1)
{
ui.SubscribeUnlock.selectedIndex = 1;
if (GameHelper.GetVipLevel() > 0)
{
ui.btn_pay.visible = false;
ui.btn_watchad.visible = false;
}
} else
{
ui.SubscribeUnlock.selectedIndex = 0;
}
}
else
{
ui.state.selectedIndex = 1;
ui.SubscribeUnlock.selectedIndex = 0;
if (video != null) video.Play();
}
ui.img_mask.fillAmount = (float)(100 - livedata_.progress) / 100;
ui.progress_live.value = (float)livedata_.progress;
//ui.btn_pay.title = LiveConfig.GoldCoins.ToString();
Debug.Log(LiveConfig.GoldCoins);
var need_gold = (int)MathF.Ceiling((100f - livedata_.progress) * LiveConfig.GoldCoins / 100);
ui.btn_pay.title = need_gold.ToString();
if (LiveConfig.AD == livedata_.AD_num + 1)
ui.btn_watchad.title = "+" + (100 - livedata_.progress) + "%";
else
ui.btn_watchad.title = "+" + livedata_.Singleprogress + "%";
ui.btn_pay.SetClick(() =>
{
if (DataMgr.Coin.Value >= need_gold)
{
DataMgr.Coin.Value -= need_gold;
livedata_.progress = 100;
DataMgr.LiveDataDic.Value[index] = livedata_;
Debug.Log($"[解锁成功 0] LiveData总数为: {DataMgr.LiveDataDic.Value.Count}");
DataMgr.LiveDataDic.Save();
GameDispatcher.Instance.Dispatch(GameMsg.Gold_refresh);
GameDispatcher.Instance.Dispatch(GameMsg.Update101);
GameDispatcher.Instance.Dispatch(GameMsg.LiveChange, index);
// HandlePvPlay();
InitView();
GameHelper.ShowTips("unlock_success", true);
}
else
{
GameHelper.ShowTips("no_enough_gold", true);
UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.BuygoldUI_Open);
}
});
ui.btn_watchad.SetClick(() =>
{
if (livedata_.LiveADTime < GameHelper.GetNowTime())
GameHelper.ShowVideoAd("UnlockLive", isSuccess =>
{
if (isSuccess)
{
livedata_.AD_num++;
if (LiveConfig.AD == livedata_.AD_num)
{
livedata_.progress = 100;
GameHelper.ShowTips("unlock_success", true);
}
else
{
livedata_.progress += livedata_.Singleprogress;
}
DataMgr.LiveDataDic.Value[index] = livedata_;
Debug.Log($"[解锁成功 1] LiveData总数为: {DataMgr.LiveDataDic.Value.Count}");
DataMgr.LiveDataDic.Save();
livedata_.LiveADTime = GameHelper.GetNowTime() + LiveConfig.CD;
SaveData.SaveDataFunc();
// if (livedata_.progress == 100) HandlePvPlay();
InitView();
GameDispatcher.Instance.Dispatch(GameMsg.LiveChange, index);
}
});
});
ui.btn_vip_unlock.SetClick(() =>
{
if (GameHelper.GetVipLevel() > 0)
{
livedata_.progress = 100;
DataMgr.LiveDataDic.Value[index] = livedata_;
Debug.Log($"[解锁成功 0] LiveData总数为: {DataMgr.LiveDataDic.Value.Count}");
DataMgr.LiveDataDic.Save();
GameDispatcher.Instance.Dispatch(GameMsg.LiveChange, index);
HandlePvPlay();
InitView();
GameHelper.ShowTips("unlock_success", true);
string eventName = ADEventTrack.Property.vip_live_unclock_ + (index + 1);
TrackKit.SendEvent(ADEventTrack.VipLive, eventName);
}
else
{
uiCtrlDispatcher.Dispatch(UICtrlMsg.VipClubViewUI_Open,2);
TrackKit.SendEvent(ADEventTrack.VipLive, ADEventTrack.Property.vip_live_unclock);
}
});
}
#region
protected override void OnInit()
{
//model = ModuleManager.Instance.GetModel(ModelConst.LiveDetailModel) as LiveDetailModel;
}
protected override void OnClose()
{
if (video != null) Object.Destroy(video.gameObject);
HallManager.Instance.UpdateSecondEvent -= Updata;
VideoPlayerHandover.Return();
// var loader = ui.com_loader.GetChild("loader") as GLoader;
// if (loader?.texture != null)
// {
// loader.texture.Dispose();
// loader.texture = null;
// }
}
protected override void OnBind()
{
ui = baseUI as com_liveDetail;
}
private void HandlePvPlay()
{
Debug.Log("HandlePvPlay: " + index);
var secondUIRoot = ui.displayObject.gameObject.transform;
var loader = ui.com_loader.GetChild("loader") as GLoader;
// 接管播放器
VideoPlayerHandover.TakeOver(player, secondUIRoot, loader, () =>
{
// ui.img_cover.visible = false;
});
var localPath = Path.Combine(TextureHelper.getResPath(), "LiveVideos", LiveConfig.Name + ".mp4");
if (!File.Exists(localPath))
{
ui.img_cover.visible = true;
setCover();
} else
{
ui.img_cover.visible = false;
}
}
private int index;
private VideoPlayer player;
private LiveData livedata_;
private Live LiveConfig;
protected override void OnOpenBefore(object args)
{
var tuple = ((int index, VideoPlayer player))args;
index = tuple.index;
player = tuple.player;
if (player != null)
player.audioOutputMode = VideoAudioOutputMode.None;
// 从配置表取配置(这里还是 List,如果有 Id 字段可改成字典)
LiveConfig = ConfigSystem.GetConfig<Live>()[index];
livedata_ = PreDownloadManager.GetLiveDataByIndex(LiveConfig, index);
ui.btn_close.SetClick(() => { CtrlCloseUI(); });
if (livedata_.progress >= 100)
HandlePvPlay();
else
{
setCover();
}
var btn_down_coin = ((btn_unlock_1)ui.btn_download_coin);
var downloadCoinNum = ConfigSystem.GetCommonConf().CoinsDownload;
btn_down_coin.title = downloadCoinNum.ToString();
HallManager.Instance.UpdateSecondEvent += Updata;
btn_down_coin.SetClick(() =>
{
if (GameHelper.Get101() >= downloadCoinNum)
{
DataMgr.Coin.Value -= downloadCoinNum;
GameDispatcher.Instance.Dispatch(GameMsg.Update101);
TextureHelper.SaveVideoToAlbum(LiveConfig.Name);
}
else
{
GameHelper.ShowTips("no_enough_gold", true);
UICtrlDispatcher.Instance.Dispatch(UICtrlMsg.BuygoldUI_Open);
}
});
ui.btn_download.SetClick(() =>
{
if (GameHelper.GetVipPrivilege(Subscription.FreeDownImage.As<int>()))
TextureHelper.SaveVideoToAlbum(LiveConfig.Name);
else
GameHelper.ShowVideoAd("DownloadLive", isSuccess =>
{
if (isSuccess) TextureHelper.SaveVideoToAlbum(LiveConfig.Name);
});
});
InitView();
}
private void setCover()
{
var coverLoader = ui.img_cover.GetChild("loader") as GLoader;
if (coverLoader?.texture != null)
{
coverLoader.texture.Dispose();
coverLoader.texture = null;
}
LiveVideoManager.Instance.GetVideoCover(coverLoader, LiveConfig.Name + "_cover", (tex) =>
{
if (tex != null && coverLoader != null && !coverLoader.isDisposed)
{
coverLoader.texture = new NTexture(tex)
{
destroyMethod = DestroyMethod.Destroy
};
coverLoader.visible = true;
}
else
{
Debug.LogError("封面获取失败");
}
});
}
protected override void OnOpen(object args)
{
}
protected override void OnHide()
{
}
protected override void OnDisplay(object args)
{
}
#endregion
#region
private void vipLevelChange(object o)
{
InitView();
}
private void liveVideoLoaded(object o)
{
HandlePvPlay();
// InitView();
}
protected override void AddListener()
{
GameDispatcher.Instance.AddListener(GameMsg.BuyVip, vipLevelChange);//VIP订阅后更新头像的vip图标
GameDispatcher.Instance.AddListener(GameMsg.liveVideoLoaded, liveVideoLoaded);
}
protected override void RemoveListener()
{
HallManager.Instance.UpdateSecondEvent -= Updata;
GameDispatcher.Instance.RemoveListener(GameMsg.BuyVip, vipLevelChange);//VIP订阅后更新头像的vip图标
GameDispatcher.Instance.RemoveListener(GameMsg.liveVideoLoaded, liveVideoLoaded);
}
#endregion
}
}