using System.Collections;
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
{
private readonly GameMode GameMode;
private readonly Room Room;
private readonly List Users;
private readonly List Characters;
private readonly GamingEventArgs EventArgs;
private Gaming(GameMode GameMode, Room Room, List Users)
{
this.GameMode = GameMode;
this.Room = Room;
this.Users = Users;
Characters = [];
EventArgs = new(Room, Users, Characters);
}
///
/// 传入游戏所需的参数,构造一个Gaming实例
///
///
///
///
///
public static Gaming StartGame(GameMode GameMode, Room Room, List Users)
{
Gaming instance = new(GameMode, Room, Users);
// 新建线程来启动模组的界面
TaskUtility.NewTask(() =>
{
GameMode.StartUI(instance.EventArgs);
});
return instance;
}
///
/// 需在RunTimeController的SocketHandler_Gaming方法中调用此方法
/// 客户端也可以参照此方法自行实现
/// 此方法目的是为了触发 的局内事件实现
///
///
///
public void GamingHandler(GamingType GamingType, Hashtable Data)
{
switch (GamingType)
{
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(Hashtable data)
{
GameMode.OnBeforeGamingConnectEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingConnectEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingConnectEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingConnectEvent(this, EventArgs, data);
}
private void Disconnect(Hashtable data)
{
GameMode.OnBeforeGamingDisconnectEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingDisconnectEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingDisconnectEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingDisconnectEvent(this, EventArgs, data);
}
private void Reconnect(Hashtable data)
{
GameMode.OnBeforeGamingReconnectEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingReconnectEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingReconnectEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingReconnectEvent(this, EventArgs, data);
}
private void BanCharacter(Hashtable data)
{
GameMode.OnBeforeGamingBanCharacterEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingBanCharacterEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingBanCharacterEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingBanCharacterEvent(this, EventArgs, data);
}
private void PickCharacter(Hashtable data)
{
GameMode.OnBeforeGamingPickCharacterEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingPickCharacterEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingPickCharacterEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingPickCharacterEvent(this, EventArgs, data);
}
private void Random(Hashtable data)
{
GameMode.OnBeforeGamingRandomEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingRandomEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingRandomEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingRandomEvent(this, EventArgs, data);
}
private void Round(Hashtable data)
{
GameMode.OnBeforeGamingRoundEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingRoundEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingRoundEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingRoundEvent(this, EventArgs, data);
}
private void LevelUp(Hashtable data)
{
GameMode.OnBeforeGamingLevelUpEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingLevelUpEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingLevelUpEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingLevelUpEvent(this, EventArgs, data);
}
private void Move(Hashtable data)
{
GameMode.OnBeforeGamingMoveEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingMoveEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingMoveEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingMoveEvent(this, EventArgs, data);
}
private void Attack(Hashtable data)
{
GameMode.OnBeforeGamingAttackEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingAttackEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingAttackEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingAttackEvent(this, EventArgs, data);
}
private void Skill(Hashtable data)
{
GameMode.OnBeforeGamingSkillEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingSkillEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingSkillEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingSkillEvent(this, EventArgs, data);
}
private void Item(Hashtable data)
{
GameMode.OnBeforeGamingItemEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingItemEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingItemEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingItemEvent(this, EventArgs, data);
}
private void Magic(Hashtable data)
{
GameMode.OnBeforeGamingMagicEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingMagicEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingMagicEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingMagicEvent(this, EventArgs, data);
}
private void Buy(Hashtable data)
{
GameMode.OnBeforeGamingBuyEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingBuyEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingBuyEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingBuyEvent(this, EventArgs, data);
}
private void SuperSkill(Hashtable data)
{
GameMode.OnBeforeGamingSuperSkillEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingSuperSkillEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingSuperSkillEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingSuperSkillEvent(this, EventArgs, data);
}
private void Pause(Hashtable data)
{
GameMode.OnBeforeGamingPauseEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingPauseEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingPauseEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingPauseEvent(this, EventArgs, data);
}
private void Unpause(Hashtable data)
{
GameMode.OnBeforeGamingUnpauseEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingUnpauseEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingUnpauseEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingUnpauseEvent(this, EventArgs, data);
}
private void Surrender(Hashtable data)
{
GameMode.OnBeforeGamingSurrenderEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingSurrenderEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingSurrenderEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingSurrenderEvent(this, EventArgs, data);
}
private void UpdateInfo(Hashtable data)
{
GameMode.OnBeforeGamingUpdateInfoEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingUpdateInfoEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingUpdateInfoEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingUpdateInfoEvent(this, EventArgs, data);
}
private void Punish(Hashtable data)
{
GameMode.OnBeforeGamingPunishEvent(this, EventArgs, data);
if (EventArgs.Cancel)
{
return;
}
if (!EventArgs.Cancel)
{
GameMode.OnSucceedGamingPunishEvent(this, EventArgs, data);
}
else
{
GameMode.OnFailedGamingPunishEvent(this, EventArgs, data);
}
GameMode.OnAfterGamingPunishEvent(this, EventArgs, data);
}
}
}