| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311 |
- using Client.MirGraphics;
- using Client.MirNetwork;
- using Client.MirScenes;
- using SlimDX.Direct3D9;
- using S = ServerPackets;
- namespace Client.MirControls
- {
- public abstract class MirScene : MirControl
- {
- public static MirScene ActiveScene = new LoginScene();
- private static MouseButtons _buttons;
- private static long _lastClickTime;
- private static MirControl _clickedControl;
- protected MirScene()
- {
- DrawControlTexture = true;
- BackColour = Color.Magenta;
- Size = new Size(Settings.ScreenWidth, Settings.ScreenHeight);
- }
- public override sealed Size Size
- {
- get { return base.Size; }
- set { base.Size = value; }
- }
- public override void Draw()
- {
- if (IsDisposed || !Visible)
- return;
- OnBeforeShown();
- DrawControl();
- if (CMain.DebugBaseLabel != null && !CMain.DebugBaseLabel.IsDisposed)
- CMain.DebugBaseLabel.Draw();
- if (CMain.HintBaseLabel != null && !CMain.HintBaseLabel.IsDisposed)
- CMain.HintBaseLabel.Draw();
- OnShown();
- }
- protected override void CreateTexture()
- {
- if (Size != TextureSize)
- DisposeTexture();
- if (ControlTexture == null || ControlTexture.Disposed)
- {
- DXManager.ControlList.Add(this);
- ControlTexture = new Texture(DXManager.Device, Size.Width, Size.Height, 1, Usage.RenderTarget, Format.A8R8G8B8, Pool.Default);
- TextureSize = Size;
- }
- Surface oldSurface = DXManager.CurrentSurface;
- Surface surface = ControlTexture.GetSurfaceLevel(0);
- DXManager.SetSurface(surface);
- DXManager.Device.Clear(ClearFlags.Target, BackColour, 0, 0);
- BeforeDrawControl();
- DrawChildControls();
- AfterDrawControl();
- DXManager.Sprite.Flush();
- DXManager.SetSurface(oldSurface);
- TextureValid = true;
- surface.Dispose();
- }
- public override void OnMouseDown(MouseEventArgs e)
- {
- if (!Enabled)
- return;
- if (MouseControl != null && MouseControl != this)
- MouseControl.OnMouseDown(e);
- else
- base.OnMouseDown(e);
- }
- public override void OnMouseUp(MouseEventArgs e)
- {
- if (!Enabled)
- return;
- if (MouseControl != null && MouseControl != this)
- MouseControl.OnMouseUp(e);
- else
- base.OnMouseUp(e);
- }
- public override void OnMouseMove(MouseEventArgs e)
- {
- if (!Enabled)
- return;
- if (MouseControl != null && MouseControl != this && MouseControl.Moving)
- MouseControl.OnMouseMove(e);
- else
- base.OnMouseMove(e);
- }
- public override void OnMouseWheel(MouseEventArgs e)
- {
- if (!Enabled)
- return;
- if (MouseControl != null && MouseControl != this)
- MouseControl.OnMouseWheel(e);
- else
- base.OnMouseWheel(e);
- }
- public override void OnMouseClick(MouseEventArgs e)
- {
- if (!Enabled)
- return;
- if (_buttons == e.Button)
- {
- if (_lastClickTime + SystemInformation.DoubleClickTime >= CMain.Time)
- {
- OnMouseDoubleClick(e);
- return;
- }
- }
- else
- _lastClickTime = 0;
- if (ActiveControl != null && ActiveControl.IsMouseOver(CMain.MPoint) && ActiveControl != this)
- ActiveControl.OnMouseClick(e);
- else
- base.OnMouseClick(e);
- _clickedControl = ActiveControl;
- _lastClickTime = CMain.Time;
- _buttons = e.Button;
- }
- public override void OnMouseDoubleClick(MouseEventArgs e)
- {
- if (!Enabled)
- return;
- _lastClickTime = 0;
- _buttons = MouseButtons.None;
- if (ActiveControl != null && ActiveControl.IsMouseOver(CMain.MPoint) && ActiveControl != this)
- {
- if (ActiveControl == _clickedControl)
- ActiveControl.OnMouseDoubleClick(e);
- else
- ActiveControl.OnMouseClick(e);
- }
- else
- {
- if (ActiveControl == _clickedControl)
- base.OnMouseDoubleClick(e);
- else
- base.OnMouseClick(e);
- }
- }
- public override void Redraw()
- {
- TextureValid = false;
- }
-
- public virtual void ProcessPacket(Packet p)
- {
- switch (p.Index)
- {
- case (short)ServerPacketIds.Disconnect: // Disconnected
- Disconnect((S.Disconnect) p);
- Network.Disconnect();
- break;
- case (short)ServerPacketIds.NewItemInfo:
- NewItemInfo((S.NewItemInfo) p);
- break;
- case (short)ServerPacketIds.NewMonsterInfo:
- NewMonsterInfo((S.NewMonsterInfo)p);
- break;
- case (short)ServerPacketIds.NewNPCInfo:
- NewNPCInfo((S.NewNPCInfo)p);
- break;
- case (short)ServerPacketIds.NewChatItem:
- NewChatItem((S.NewChatItem)p);
- break;
- case (short)ServerPacketIds.NewQuestInfo:
- NewQuestInfo((S.NewQuestInfo)p);
- break;
- case (short)ServerPacketIds.NewRecipeInfo:
- NewRecipeInfo((S.NewRecipeInfo)p);
- break;
- case (short)ServerPacketIds.NewHeroInfo:
- NewHeroInfo((S.NewHeroInfo)p);
- break;
- }
- }
- private void NewItemInfo(S.NewItemInfo info)
- {
- GameScene.ItemInfoList.Add(info.Info);
- GameScene.OnItemInfoReceived(info.Info.Index);
- }
- private void NewMonsterInfo(S.NewMonsterInfo info)
- {
- GameScene.MonsterInfoList.RemoveAll(x => x.Index == info.Info.Index);
- GameScene.MonsterInfoList.Add(info.Info);
- GameScene.OnMonsterInfoReceived(info.Info.Index);
- }
- private void NewNPCInfo(S.NewNPCInfo info)
- {
- GameScene.NPCInfoList.RemoveAll(x => x.Index == info.Info.Index);
- GameScene.NPCInfoList.Add(info.Info);
- GameScene.OnNPCInfoReceived(info.Info.Index);
- }
- private void NewHeroInfo(S.NewHeroInfo info)
- {
- AddHeroInformation(info.Info, info.StorageIndex);
- }
- public void AddHeroInformation(ClientHeroInformation info, int storageIndex = -1)
- {
- if (info == null) return;
- GameScene.HeroInfoList.RemoveAll(x => x.Index == info.Index);
- GameScene.HeroInfoList.Add(info);
- if (storageIndex < 0) return;
- GameScene.HeroStorage[storageIndex] = info;
- }
- private void NewChatItem(S.NewChatItem p)
- {
- if (GameScene.ChatItemList.Any(x => x.UniqueID == p.Item.UniqueID)) return;
- GameScene.Bind(p.Item);
- GameScene.ChatItemList.Add(p.Item);
- }
- private void NewQuestInfo(S.NewQuestInfo info)
- {
- GameScene.QuestInfoList.Add(info.Info);
- }
- private void NewRecipeInfo(S.NewRecipeInfo info)
- {
- GameScene.RecipeInfoList.Add(info.Info);
- GameScene.Bind(info.Info.Item);
- for (int j = 0; j < info.Info.Tools.Count; j++)
- GameScene.Bind(info.Info.Tools[j]);
- for (int j = 0; j < info.Info.Ingredients.Count; j++)
- GameScene.Bind(info.Info.Ingredients[j]);
- }
- private static void Disconnect(S.Disconnect p)
- {
- switch (p.Reason)
- {
- case 0:
- MirMessageBox.Show(GameLanguage.ClientTextMap.GetLocalization(ClientTextKeys.ShuttingDown), true);
- break;
- case 1:
- MirMessageBox.Show(GameLanguage.ClientTextMap.GetLocalization(ClientTextKeys.DisconnectedAnotherUserLogged), true);
- break;
- case 2:
- MirMessageBox.Show(GameLanguage.ClientTextMap.GetLocalization(ClientTextKeys.DisconnectedPacketError), true);
- break;
- case 3:
- MirMessageBox.Show(GameLanguage.ClientTextMap.GetLocalization(ClientTextKeys.DisconnectedServerCrashed), true);
- break;
- case 4:
- MirMessageBox.Show(GameLanguage.ClientTextMap.GetLocalization(ClientTextKeys.DisconnectedKickedByAdmin), true);
- break;
- case 5:
- MirMessageBox.Show(GameLanguage.ClientTextMap.GetLocalization(ClientTextKeys.DisconnectedMaxConnectionsReached), true);
- break;
- }
- GameScene.LogTime = 0;
- }
- public abstract void Process();
- #region Disposable
- protected override void Dispose(bool disposing)
- {
- base.Dispose(disposing);
- if (!disposing) return;
- if (ActiveScene == this) ActiveScene = null;
- _buttons = 0;
- _lastClickTime = 0;
- _clickedControl = null;
- }
- #endregion
- }
- }
|