Main/Assets/Code/Logic/RealTimeVoice/GuildVoiceSetting.cs
2025-01-25 04:38:09 +08:00

254 lines
7.4 KiB
C#
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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();
}
}