using Milimoe.FunGame.Core.Api.Utility;
using Milimoe.FunGame.Core.Entity;
using Milimoe.FunGame.Core.Library.Common.Addon;
using Milimoe.FunGame.Core.Library.Common.Event;
using Milimoe.FunGame.Core.Library.Constant;
namespace Milimoe.FunGame.Core.Model
{
///
/// 游戏局内类
/// 客户端需要使用创建此类单例
///
public class Gaming
{
///
/// 使用的模组实例
///
public GameModule GameModule { get; }
///
/// 游戏的参数
///
public GamingEventArgs EventArgs { get; }
///
/// 此实例所属的玩家
///
public User CurrentUser { get; }
private Gaming(GameModule module, Room room, User user, List users)
{
GameModule = module;
EventArgs = new(room, users);
CurrentUser = user;
}
///
/// 传入游戏所需的参数,构造一个Gaming实例
///
///
///
///
///
///
///
///
public static Gaming StartGame(GameModule module, Room room, User user, List users, GameModuleLoader loader, params object[] args)
{
Gaming instance = new(module, room, user, users);
// 读取模组的依赖集合
module.GameModuleDepend.GetDependencies(loader);
// 新建线程来启动模组的界面
TaskUtility.NewTask(() => module.StartUI());
// 启动模组主线程
module.StartGame(instance, args);
return instance;
}
///
/// 需在RunTimeController的SocketHandler_Gaming方法中调用此方法
/// 客户端也可以参照此方法自行实现
/// 此方法目的是为了触发 的局内事件实现
///
/// 消息类型
/// 接收到的数据
public void GamingHandler(GamingType type, Dictionary data)
{
switch (type)
{
case GamingType.Connect:
Connect(data);
break;
case GamingType.Disconnect:
Disconnect(data);
break;
case GamingType.Reconnect:
Reconnect(data);
break;
case GamingType.BanCharacter:
BanCharacter(data);
break;
case GamingType.PickCharacter:
PickCharacter(data);
break;
case GamingType.Random:
Random(data);
break;
case GamingType.Round:
Round(data);
break;
case GamingType.LevelUp:
LevelUp(data);
break;
case GamingType.Move:
Move(data);
break;
case GamingType.Attack:
Attack(data);
break;
case GamingType.Skill:
Skill(data);
break;
case GamingType.Item:
Item(data);
break;
case GamingType.Magic:
Magic(data);
break;
case GamingType.Buy:
Buy(data);
break;
case GamingType.SuperSkill:
SuperSkill(data);
break;
case GamingType.Pause:
Pause(data);
break;
case GamingType.Unpause:
Unpause(data);
break;
case GamingType.Surrender:
Surrender(data);
break;
case GamingType.UpdateInfo:
UpdateInfo(data);
break;
case GamingType.Punish:
Punish(data);
break;
case GamingType.None:
default:
break;
}
}
private void Connect(Dictionary data)
{
GameModule.OnGamingConnectEvent(this, EventArgs, data);
}
private void Disconnect(Dictionary data)
{
GameModule.OnGamingDisconnectEvent(this, EventArgs, data);
}
private void Reconnect(Dictionary data)
{
GameModule.OnGamingReconnectEvent(this, EventArgs, data);
}
private void BanCharacter(Dictionary data)
{
GameModule.OnGamingBanCharacterEvent(this, EventArgs, data);
}
private void PickCharacter(Dictionary data)
{
GameModule.OnGamingPickCharacterEvent(this, EventArgs, data);
}
private void Random(Dictionary data)
{
GameModule.OnGamingRandomEvent(this, EventArgs, data);
}
private void Round(Dictionary data)
{
GameModule.OnGamingRoundEvent(this, EventArgs, data);
}
private void LevelUp(Dictionary data)
{
GameModule.OnGamingLevelUpEvent(this, EventArgs, data);
}
private void Move(Dictionary data)
{
GameModule.OnGamingMoveEvent(this, EventArgs, data);
}
private void Attack(Dictionary data)
{
GameModule.OnGamingAttackEvent(this, EventArgs, data);
}
private void Skill(Dictionary data)
{
GameModule.OnGamingSkillEvent(this, EventArgs, data);
}
private void Item(Dictionary data)
{
GameModule.OnGamingItemEvent(this, EventArgs, data);
}
private void Magic(Dictionary data)
{
GameModule.OnGamingMagicEvent(this, EventArgs, data);
}
private void Buy(Dictionary data)
{
GameModule.OnGamingBuyEvent(this, EventArgs, data);
}
private void SuperSkill(Dictionary data)
{
GameModule.OnGamingSuperSkillEvent(this, EventArgs, data);
}
private void Pause(Dictionary data)
{
GameModule.OnGamingPauseEvent(this, EventArgs, data);
}
private void Unpause(Dictionary data)
{
GameModule.OnGamingUnpauseEvent(this, EventArgs, data);
}
private void Surrender(Dictionary data)
{
GameModule.OnGamingSurrenderEvent(this, EventArgs, data);
}
private void UpdateInfo(Dictionary data)
{
GameModule.OnGamingUpdateInfoEvent(this, EventArgs, data);
}
private void Punish(Dictionary data)
{
GameModule.OnGamingPunishEvent(this, EventArgs, data);
}
}
}