Main/Assets/Code/Logic/RealTimeVoice/GuildVoiceSetting.cs

254 lines
7.4 KiB
C#
Raw Permalink Normal View History

2025-01-25 04:38:09 +08:00
using Thousandto.Code.Center;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Thousandto.Code.Logic
{
/// <summary>
/// 帮会语音的设置
/// </summary>
public class GuildVoiceSetting : IGuildVoiceSetting
{
//是否是指挥者模式
private bool _voiceIsCmderModel = false;
//召集的时间
private DateTime _recieveTogetherTime;
private int _togetherCDTimeSpan = 300;//秒
//全体静音的时间
private DateTime _recieveAllMuteTime ;
private int _allMuteCDTimeSpan = 30;//秒
//麦权
private bool _mcPermission = false;
public bool McPermisson
{
get
{
//如果是自由模式,那么就是上麦,如果不是自由模式,那么就需要判断当前状态讲话状态
//(!_voiceIsCmderModel || (_voiceIsCmderModel && GameCenter.GuildSystem.TalkState != VoiceState.None))
return _mcPermission;
}
set
{
if (_mcPermission != value)
{
_mcPermission = value;
ReqPlayerTalk();
}
}
}
public bool McIsMute
{
get
{
return GameCenter.RealTimeVoiceSystem.GetMicrophoneMute();
}
set
{
GameCenter.RealTimeVoiceSystem.SetMicrophoneMute(value);
}
}
public bool VoiceModel
{
get
{
return _voiceIsCmderModel;
}
set
{
if (_voiceIsCmderModel != value)
{
_voiceIsCmderModel = value;
ReqSetVoiceModel();
}
}
}
public string TogetherCDText
{
get
{
var ts = _recieveTogetherTime.AddSeconds(_togetherCDTimeSpan) - DateTime.Now;
if (ts > TimeSpan.Zero)
{
return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_TOGETHER) + string.Format("[ff0000]{0:d2}:{1:d2}[-]", ts.Minutes, ts.Seconds);
}
return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_TOGETHER);
}
}
public bool EnableCallTogether
{
get
{
return IsGuildLeader() && _recieveTogetherTime.AddSeconds(_togetherCDTimeSpan) < DateTime.Now;
}
}
public bool EnableChangeVoiceModel
{
get
{
return IsGuildLeader();
}
}
public bool EnableChangeMcPermisson
{
get
{
return _voiceIsCmderModel;
}
}
public string AllMuteCDText
{
get
{
var ts = _recieveAllMuteTime.AddSeconds(_allMuteCDTimeSpan) - DateTime.Now;
if (ts > TimeSpan.Zero)
{
return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_ALLMUTE) + string.Format("[ff0000]{0:d2}:{1:d2}[-]", ts.Minutes, ts.Seconds);
}
return Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_ALLMUTE);
}
}
public bool EnableAllMute
{
get
{
return IsGuildLeader() && _recieveAllMuteTime.AddSeconds(_allMuteCDTimeSpan) < DateTime.Now;
}
}
private bool IsGuildLeader()
{
//if (LocalPlayerRoot.LocalPlayer != null)
//{
// var item = GameCenter.GuildSystem.OnGetGuildOfficial();
// if (item != null)
// {
// //官职1普通成员2长老3副会长4会长,0学徒
// return item.Level == 3 || item.Level == 4;
// }
//}
return false;
}
#region//服务器处理
#region//请求
//请求讲话
public void ReqPlayerTalk()
{
//发送给服务器一个我要讲话的需求
//new MSG_Guild.ReqSetMicState() { state = (_mcPermission ? 1 : 0) }.Send();
}
//请求集合
public void ReqCallTogether()
{
//这里给服务器发送一个集合的请求,应该会分发到所有的玩家
// new MSG_Guild.ReqCallUpVoicer().Send();
}
public void ReqSetVoiceModel()
{
//发送给服务器一个模式改变的消息
//new MSG_Guild.ReqModifyVoiceMode() { mode = _voiceIsCmderModel?1:0 }.Send();
}
public void ReqSetAllUserMute()
{
//new MSG_Guild.ReqSynVoiceMode().Send();
//发送一个全体静音的消息
_recieveAllMuteTime = DateTime.Now;
_allMuteCDTimeSpan = 30;
}
#endregion
#region//接受
//接受模式改变的消息
public void RespVoiceModelChanged(bool isCmderModel)
{
_voiceIsCmderModel = isCmderModel;
//接受一个全体静音的消息
_recieveAllMuteTime = DateTime.Now;
_allMuteCDTimeSpan = 30;
}
//获得集合请求调用成功的消息
public void RespTogetherSuccess()
{
_recieveTogetherTime = DateTime.Now;
_togetherCDTimeSpan = 300;
}
//接收到集合消息
public void RespTogetther()
{
_recieveTogetherTime = DateTime.Now;
_togetherCDTimeSpan = 300;
GameCenter.MsgPromptSystem.ShowMsgBox(Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_GUILD_VOICE_TOGETHER_MSG_TEXT), Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_MSSAGEBOX_CANCEL), Thousandto.Cfg.Data.DeclareMessageString.Get(Thousandto.Cfg.Data.DeclareMessageString.C_MSSAGEBOX_OK), x =>
{
if (x == MsgBoxResultCode.Button2)
{
GameCenter.RealTimeVoiceSystem.ReqChangeChannel(VoiceChannel.Guild);
}
});
}
#endregion
#endregion
}
public interface IGuildVoiceSetting
{
//语音模式
bool VoiceModel { get; set; }
//Mc状态
bool McIsMute { get; set; }
//Mc权限
bool McPermisson { get; set; }
//召集的CD文本
string TogetherCDText { get; }
//全部静音的CD文本
string AllMuteCDText { get; }
//是否可以点击召集
bool EnableCallTogether { get; }
//是否可以点击全体静音
bool EnableAllMute { get; }
//是否可以改变帮会及时语音模式
bool EnableChangeVoiceModel { get; }
//是否可以上麦
bool EnableChangeMcPermisson { get; }
//方法:
//请求集合
void ReqCallTogether();
//全体静音的消息
void ReqSetAllUserMute();
}
}