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