using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.MainPage.Controls
{
///
/// 场景卡片控件
///
public class SceneCardControl : FrameLayoutStatuControl
{
#region ■ 变量声明___________________________
///
/// 卡片需要被移除的事件
///
public Action CardNeedRemoveEvent = null;
///
/// 场景图片控件
///
private ImageView btnScenePic = null;
///
/// 场景背景图控件
///
private PicViewControl btnSceneBackGroud = null;
///
/// 时间图标控件
///
private IconViewControl btnTimeIcon = null;
///
/// 延时时间显示控件
///
private NormalViewControl btnTimeView = null;
///
/// 场景名字控件
///
private NormalViewControl btnSceneName = null;
///
/// 场景ID
///
private int SceneId = 0;
#endregion
#region ■ 初始化_____________________________
///
/// 场景卡片控件(宽度:458 + 14 * 2 高度:305 + 43)
///
public SceneCardControl()
{
//图片真实宽度+图片自身左右空白
this.Width = HdlControlLogic.Current.GetPictrueRealSize(458 + 14 * 2);
//图片高度+阴影
this.Height = HdlControlLogic.Current.GetPictrueRealSize(305 + 43);
//取消点击特效
this.UseClickStatu = false;
this.ButtonClickEvent += (sender, e) =>
{
//调用场景
this.CanClick = false;
this.SetSceneAction();
};
}
///
/// 初始化控件
///
/// 场景对象
public void InitControl(Common.SceneUI i_scene)
{
this.SceneId = i_scene.Id;
string hourText = Language.StringByID(R.MyInternationalizationString.Hour);
string minuText = Language.StringByID(R.MyInternationalizationString.Minute);
string secondText = Language.StringByID(R.MyInternationalizationString.Second);
//场景图片控件
this.btnScenePic = new ImageView();
btnScenePic.X = HdlControlLogic.Current.GetPictrueRealSize(14);
btnScenePic.Width = HdlControlLogic.Current.GetPictrueRealSize(458);
btnScenePic.Height = HdlControlLogic.Current.GetPictrueRealSize(305);
btnScenePic.Radius = (uint)Application.GetRealHeight(17);
this.AddChidren(btnScenePic, ChidrenBindMode.NotBind);
//场景背景图控件
this.btnSceneBackGroud = new PicViewControl(this.Width, this.Height, false);
btnSceneBackGroud.UnSelectedImagePath = "Scene/Background.png";
this.AddChidren(btnSceneBackGroud, ChidrenBindMode.BindEvent);
//延时时间显示控件
this.btnTimeView = new NormalViewControl(HdlControlLogic.Current.GetPictrueRealSize(280), HdlControlLogic.Current.GetPictrueRealSize(63), false);
btnTimeView.X = HdlControlLogic.Current.GetPictrueRealSize(37);
btnTimeView.Y = HdlControlLogic.Current.GetPictrueRealSize(10);
btnTimeView.TextColor = 0xffffb400;
btnTimeView.IsBold = true;
if (i_scene.SceneDelayTime > 0)
{
btnTimeView.Text= this.GetTimeString(i_scene.SceneDelayTime, hourText, minuText, secondText);
}
this.AddChidren(btnTimeView, ChidrenBindMode.BindEvent);
//时间图标控件
this.btnTimeIcon = new IconViewControl(63);
btnTimeIcon.X = HdlControlLogic.Current.GetPictrueRealSize(37);
btnTimeIcon.Y = HdlControlLogic.Current.GetPictrueRealSize(20);
btnTimeIcon.UnSelectedImagePath = "Item/Time.png";
this.AddChidren(btnTimeIcon, ChidrenBindMode.NotBind);
if (i_scene.SceneDelayTime > 0)
{
btnTimeIcon.Visible = false;
}
btnTimeIcon.ButtonClickEvent += (sender, e) =>
{
if (i_scene.RemainTime > 0)
{
//该场景正在延时,请稍后
var msgContr = new ShowMsgControl(ShowMsgType.Tip, Language.StringByID(R.MyInternationalizationString.TheSceneIsDelaying));
msgContr.Show();
return;
}
var timeSelect = new Device.CommonForm.SelectTime();
Common.CommonPage.Instance.AddChidren(timeSelect);
timeSelect.TempTime = i_scene.SceneDelayTime;
timeSelect.Init();
timeSelect.TimeAction = (time) =>
{
//选择的是不开启
if (time == 0) { return; }
i_scene.SceneDelayTime = time;
//时间图标不显示
this.btnTimeIcon.Visible = false;
//显示剩余的时间
this.btnTimeView.Text = this.GetTimeString(time, hourText, minuText, secondText);
//选择延时时,需要刷新主页
UserView.UserPage.Instance.RefreshAllForm = true;
};
};
//收藏控件
var btnCollect = new IconViewControl(107);
btnCollect.X = HdlControlLogic.Current.GetPictrueRealSize(350);
btnCollect.Y = HdlControlLogic.Current.GetPictrueRealSize(12);
btnCollect.UnSelectedImagePath = "Item/Collection1.png";
btnCollect.SelectedImagePath = "Item/CollectionSelected1.png";
this.AddChidren(btnCollect, ChidrenBindMode.NotBind);
btnCollect.IsSelected = HdlRoomLogic.Current.IsCollectInRoom(i_scene);
btnCollect.ButtonClickEvent += (sender, e) =>
{
//状态取反
btnCollect.IsSelected = !btnCollect.IsSelected;
if (btnCollect.IsSelected == false)
{
//取消收藏
HdlSceneLogic.Current.DeleteLoveScene(i_scene);
if (HdlRoomLogic.Current.NowMainPageRoom.IsLove == true)
{
//如果当前房间是我的喜爱的话,回调卡片被删除的事件
this.CardNeedRemoveEvent?.Invoke();
}
}
else
{
//添加收藏
HdlSceneLogic.Current.AddLoveScene(i_scene);
}
};
//场景名称控件
this.btnSceneName = new NormalViewControl(HdlControlLogic.Current.GetPictrueRealSize(280), HdlControlLogic.Current.GetPictrueRealSize(63), false);
btnSceneName.X = HdlControlLogic.Current.GetPictrueRealSize(37);
btnSceneName.Y = HdlControlLogic.Current.GetPictrueRealSize(236);
btnSceneName.IsBold = true;
btnSceneName.TextColor = UserCenterColor.Current.White;
this.AddChidren(btnSceneName, ChidrenBindMode.BindEvent);
//刷新控件状态
this.RefreshControlInfo(i_scene);
}
#endregion
#region ■ 调用场景___________________________
///
/// 调用场景
///
private async void SetSceneAction()
{
//这个场景不见的情况应该不可能
var scene = HdlSceneLogic.Current.GetSceneUIBySceneId(this.SceneId);
if (scene.SceneDelayTime <= 0 && scene.RemainTime <= 0)
{
//如果没有延迟的话,直接开启Loading特效
this.StartLoadingApreal();
}
//执行调用场景
var result = await HdlSceneLogic.Current.ControlScene(scene);
if (result == false)
{
this.CanClick = true;
return;
}
if (scene.SceneDelayTime > 0)
{
//调用有延时的场景,需要刷新主页
UserView.UserPage.Instance.RefreshAllForm = true;
}
//修改时间
scene.RemainTime = scene.SceneDelayTime;
scene.SceneDelayTime = 0;
//开启延时倒计时特效
this.StartRemainTimeApreal(scene);
}
#endregion
#region ■ 刷新控件状态_______________________
///
/// 刷新控件状态
///
/// 场景对象
public void RefreshControlInfo(Common.SceneUI i_scene)
{
//场景名称必须刷新
this.btnSceneName.Text = i_scene.Name;
//刷新图片
if (i_scene.IconPathType == 0)
{
//主页的场景卡片用的是另外的图
string newPath = i_scene.IconPath.Replace("SceneIcon", "SceneCardIcon");
if (this.btnScenePic.ImagePath != newPath)
{
this.btnScenePic.ImagePath = newPath;
}
}
else
{
string fullPath = System.IO.Path.Combine(Common.Config.Instance.FullPath, i_scene.IconPath);
if (this.btnScenePic.ImagePath != fullPath)
{
this.btnScenePic.ImagePath = fullPath;
}
}
//开启延时倒计时特效
this.CanClick = false;
this.StartRemainTimeApreal(i_scene);
}
#endregion
#region ■ 延时倒计时特效_____________________
///
/// 开启延时倒计时特效
///
///
private void StartRemainTimeApreal(Common.SceneUI i_scene)
{
if (i_scene.RemainTime <= 0)
{
this.CanClick = true;
return;
}
int remainTine = i_scene.RemainTime;
string hourText = Language.StringByID(R.MyInternationalizationString.Hour);
string minuText = Language.StringByID(R.MyInternationalizationString.Minute);
string secondText = Language.StringByID(R.MyInternationalizationString.Second);
//时间图标不显示
this.btnTimeIcon.Visible = false;
//显示剩余的时间
this.btnTimeView.Text = this.GetTimeString(i_scene.RemainTime, hourText, minuText, secondText);
//开启内部延时时间线程(旨在全部地方的同一场景时间同步)
HdlSceneLogic.Current.StartDelayTimeThread(i_scene);
new System.Threading.Thread(() =>
{
while (remainTine > 0 && this.Parent != null)
{
System.Threading.Thread.Sleep(1000);
HdlThreadLogic.Current.RunMain(() =>
{
this.btnTimeView.Text = this.GetTimeString(remainTine, hourText, minuText, secondText);
}, ShowErrorMode.NO);
remainTine--;
}
HdlThreadLogic.Current.RunMain(() =>
{
//倒计时结束时,时间图标显示
this.btnTimeIcon.Visible = true;
this.btnTimeView.Text = string.Empty;
//直接开启Loading特效
this.StartLoadingApreal();
this.CanClick = true;
}, ShowErrorMode.NO);
})
{ IsBackground = true }.Start();
}
#endregion
#region ■ Loading特效________________________
///
/// 开启Loading特效
///
private void StartLoadingApreal()
{
//弄个遮罩遮住
var frameBack = new FrameLayout();
frameBack.BackgroundImagePath = "Scene/SceneActionGroud.png";
this.AddChidren(frameBack);
//再加个转圈的
var loadContr = new MyProgressLoading();
loadContr.LoadingBackgroundColor = UserCenterColor.Current.Transparent;
frameBack.AddChidren(loadContr);
loadContr.StartLoading(1000);
loadContr.DisponeEvent += () =>
{
frameBack.RemoveFromParent();
};
}
#endregion
#region ■ 控件摧毁___________________________
///
/// 控件摧毁
///
public override void RemoveFromParent()
{
this.CardNeedRemoveEvent = null;
base.RemoveFromParent();
}
#endregion
#region ■ 一般方法___________________________
///
/// 获取时间的翻译文本
///
///
/// 小时的文本
/// 分的文本
/// 秒的文本
///
private string GetTimeString(int second, string hourText, string minuText, string secondText)
{
string timeStr = string.Empty;
int hour = second / 3600;
int minu = second % 3600 / 60;
int sec = second % 60;
if (hour > 0)
{
timeStr += hour + hourText;
}
if (minu > 0)
{
timeStr += minu + minuText;
}
if (sec > 0)
{
timeStr += sec + secondText;
}
return timeStr;
}
#endregion
#region ■ 自定义控件_________________________
///
/// 自定义控件(需要的它移除事件)
///
private class MyProgressLoading : ProgressLoading
{
///
/// 控件销毁的事件
///
public Action DisponeEvent = null;
///
/// 控件销毁
///
public override void RemoveFromParent()
{
base.RemoveFromParent();
this.DisponeEvent?.Invoke();
this.DisponeEvent = null;
}
}
#endregion
}
}