Esempio n. 1
0
        public override void ExceHandleNotification(INotification notification)
        {
            //判断是否是转发内容
            if (notification.Name.Contains("=>"))
            {
                SendNotification(StringUtil.GeNotificationNameForNN(notification.Name), notification.Body, notification.Type);
                return;
            }

            // 处理公共请求
            HandleNotificationCommon(notification);


            ViewChooseStage     viewChooseStage   = null;
            List <CardDeckList> cardDeckListLoad  = new List <CardDeckList>();
            CardMoveAnimation   cardMoveAnimation = null;
            //回调函数
            UnityAction callBack = () =>
            {
                exceINotification = false;
                SendNotification(UIViewSystemEvent.UI_ANIMATION_SYS, null, UIViewSystemEvent.UI_ANIMATION_SYS_START);
            };
            bool callBackDelay = false;

            switch (notification.Name)
            {
            case UIViewSystemEvent.UI_ANIMATION_SYS:
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_ANIMATION_SYS_START:
                    DoExceHandleNotification();
                    break;
                }
                break;

            case UIViewSystemEvent.UI_CARD_ENTRY_SYS:
                switch (notification.Type)
                {
                //卡牌的归属地发生了变化
                case UIViewSystemEvent.UI_CARD_ENTRY_SYS_CHANGE_GAME_CONTAINER_TYPE:
                    CardEntry cardEntryMove = notification.Body as CardEntry;
                    if (cardEntryMove.gameContainerType == "CardHand")
                    {
                        SendNotification(HandSystemEvent.HAND_CHANGE, notification.Body, StringUtil.GetNTByNotificationTypeAndPlayerCode(HandSystemEvent.HAND_CHANGE_DRAW_ONE_CARD, cardEntryMove.controllerPlayerItem.playerCode));
                        return;
                    }
                    if (cardEntryMove.lastGameContainerType == "CardHand")
                    {
                        SendNotification(HandSystemEvent.HAND_CHANGE, cardEntryMove, StringUtil.GetNTByNotificationTypeAndPlayerCode(HandSystemEvent.HAND_CHANGE_REMOVE_ONE_CARD, cardEntryMove.controllerPlayerItem.playerCode));
                    }
                    break;

                //卡牌在显示页面需要被隐藏
                case UIViewSystemEvent.UI_CARD_ENTRY_SYS_CARD_NEED_HIDE_IN_VIEW:
                    CardEntry cardEntryNeedHide = notification.Body as CardEntry;
                    if (cardEntryNeedHide.gameContainerType == "CardHand")
                    {
                        SendNotification(HandSystemEvent.HAND_CHANGE, notification.Body, StringUtil.GetNTByNotificationTypeAndPlayerCode(UIViewSystemEvent.UI_CARD_ENTRY_SYS_CARD_NEED_HIDE_IN_VIEW, cardEntryNeedHide.controllerPlayerItem.playerCode));
                    }
                    break;
                }
                break;

            case UIViewSystemEvent.UI_VIEW_CURRENT:
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_VIEW_CURRENT_OPEN_ONE_VIEW:
                    //是否需要打开遮罩层
                    if (parameterMap.ContainsKey("OpenMaskLayer"))
                    {
                        string OpenMaskLayer = parameterMap["OpenMaskLayer"];
                        if ("Y" == OpenMaskLayer)
                        {
                            UIViewName uiMaskLayeView = UIViewConfig.getUIViewNameByNameStr("UIMaskLayeView");
                            UIControllerLIst.ShowView(uiMaskLayeView);
                        }
                    }
                    UIViewName viewNameOpen = UIViewConfig.getUIViewNameByNameStr(parameterMap["UIViewName"]);
                    UIControllerLIst.ShowView(viewNameOpen);
                    //初始化页面
                    UIControllerLIst.GetViewByName <ViewBaseView>(viewNameOpen).InitViewForParameter(this, notification.Body, parameterMap);
                    //一些界面打开时需要初始化
                    switch (viewNameOpen)
                    {
                    case UIViewName.CardDeckList:
                        PlayerItem          playerItem    = notification.Body as PlayerItem;
                        List <CardDeckList> cardDeckLists = UIControllerLIst.GetViewListByName <CardDeckList>(UIViewName.CardDeckList);
                        for (int num = 0; num < cardDeckLists.Count; num++)
                        {
                            if (cardDeckLists[num].playerItem == null)
                            {
                                cardDeckLists[num].playerItem = playerItem;
                                //设置位置
                                //0在左,1在右
                                //己方始终显示在左边
                                Vector3 position = new Vector3();
                                if (playerItem.playerCode == playerCode)
                                {
                                    position.x = -600;
                                }
                                else
                                {
                                    position.x = 430;
                                }
                                cardDeckLists[num].transform.localPosition = position;
                            }
                        }
                        break;
                    }
                    break;

                case UIViewSystemEvent.UI_VIEW_CURRENT_CLOSE_ONE_VIEW:
                    UIViewName viewNameClose = UIViewConfig.getUIViewNameByNameStr(notification.Body as string);
                    UIControllerLIst.HideView(viewNameClose);
                    //是否需要关闭遮罩层
                    if (parameterMap.ContainsKey("OpenMaskLayer"))
                    {
                        string OpenMaskLayer = parameterMap["OpenMaskLayer"];
                        if ("N" == OpenMaskLayer)
                        {
                            UIViewName uiMaskLayeView = UIViewConfig.getUIViewNameByNameStr("UIMaskLayeView");
                            UIControllerLIst.HideView(uiMaskLayeView);
                        }
                    }
                    break;
                }
                break;

            case UIViewSystemEvent.UI_CHOOSE_STAGE:
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_CHOOSE_STAGE_LOAD_CARD_ENTRY:
                    viewChooseStage = UIControllerLIst.GetViewByName <ViewChooseStage>(UIViewName.ChooseStage);
                    List <CardEntry> shipCardEntryList = (List <CardEntry>)notification.Body;
                    //载入卡牌列表
                    viewChooseStage.LoadCardEntryList(shipCardEntryList);
                    //载入完成后绑定事件
                    foreach (CardIntactView cardIntactView in viewChooseStage.cardIntactViews)
                    {
                        //如果是自己的命令则绑定上点击事件
                        if (playerCode == playerCodeNotification)
                        {
                            cardIntactView.OnClick = () =>
                            {
                                SendNotification(UIViewSystemEvent.UI_CHOOSE_STAGE, cardIntactView.card, UIViewSystemEvent.UI_CHOOSE_STAGE_ONE_CARD);
                            };
                        }
                        else
                        {
                            //设置为空
                            cardIntactView.OnClick = () =>
                            {
                            };
                        }
                    }
                    break;

                case UIViewSystemEvent.UI_CHOOSE_STAGE_ONE_SHIP_CARD_ANIMATION:
                    viewChooseStage = UIControllerLIst.GetViewByName <ViewChooseStage>(UIViewName.ChooseStage);
                    CardEntry      choosedShipCard      = notification.Body as CardEntry;
                    CardIntactView targetCardIntactView = null;
                    //找到这张组件
                    foreach (CardIntactView cardIntactView in viewChooseStage.cardIntactViews)
                    {
                        if (cardIntactView.card.uuid == choosedShipCard.uuid)
                        {
                            cardDeckListLoad  = UIControllerLIst.GetViewListByName <CardDeckList>(UIViewName.CardDeckList);
                            cardMoveAnimation = UIControllerLIst.GetViewByName <CardMoveAnimation>(UIViewName.CardMoveAnimation);
                            //执行动画,获得卡牌的位置,list的位置
                            for (int num = 0; num < cardDeckListLoad.Count; num++)
                            {
                                //移动目标
                                if (cardDeckListLoad[num].playerItem.playerCode == playerCodeNotification)
                                {
                                    callBackDelay = true;
                                    cardMoveAnimation.MoveShipCardAnimation(cardIntactView, cardDeckListLoad[num], callBack);
                                }
                            }
                        }
                    }


                    break;
                }
                break;

            case UIViewSystemEvent.UI_CHOOSE_MAKE_STAGE:
                ViewChooseMakeStage viewChooseMakeStage = UIControllerLIst.GetViewByName <ViewChooseMakeStage>(UIViewName.ViewChooseMakeStage);
                switch (notification.Type)
                {
                //获取下一组数据
                case UIViewSystemEvent.UI_CHOOSE_MAKE_STAGE_LOAD_NEXT_LIST:
                    List <CardEntry> cardList = notification.Body as List <CardEntry>;
                    viewChooseMakeStage = UIControllerLIst.GetViewByName <ViewChooseMakeStage>(UIViewName.ViewChooseMakeStage);
                    viewChooseMakeStage.LoadNewCardList(cardList);
                    break;

                case UIViewSystemEvent.UI_CHOOSE_MAKE_STAGE_ONE_CARD_SUCCESS:

                    CardEntry card = notification.Body as CardEntry;
                    viewChooseMakeStage.ChangeOneCradForBuyed(card);
                    break;
                }
                break;

            case UIViewSystemEvent.UI_CARD_DECK_LIST:
                switch (notification.Type)
                {
                //读取牌组
                case UIViewSystemEvent.UI_CARD_DECK_LIST_LOAD:
                    PlayerItem playerItemLoad = notification.Body as PlayerItem;
                    cardDeckListLoad = UIControllerLIst.GetViewListByName <CardDeckList>(UIViewName.CardDeckList);
                    for (int num = 0; num < cardDeckListLoad.Count; num++)
                    {
                        if (cardDeckListLoad[num].playerItem.playerCode == playerItemLoad.playerCode)
                        {
                            cardDeckListLoad[num].LoadPlayerInfo();
                            foreach (CardHeadView cardHeadView in cardDeckListLoad[num].cardHeadViews)
                            {
                                cardHeadView.OnPointerEnter = () =>
                                {
                                    SendNotification(
                                        UIViewSystemEvent.UI_VIEW_CURRENT,
                                        cardHeadView,
                                        StringUtil.GetNTByNotificationTypeAndUIViewNameAndOtherType(
                                            UIViewSystemEvent.UI_VIEW_CURRENT_OPEN_ONE_VIEW,
                                            UIViewConfig.getNameStrByUIViewName(UIViewName.OneCardAllInfo),
                                            "CardHeadView"
                                            )
                                        );
                                };
                                cardHeadView.OnPointerExit = () =>
                                {
                                    SendNotification(
                                        UIViewSystemEvent.UI_VIEW_CURRENT,
                                        UIViewConfig.getNameStrByUIViewName(UIViewName.OneCardAllInfo),
                                        UIViewSystemEvent.UI_VIEW_CURRENT_CLOSE_ONE_VIEW);
                                };
                            }
                        }
                    }
                    break;
                }
                break;

            //费用控制组件
            case UIViewSystemEvent.UI_MANA_INFA_SYS:
                int          changeNum    = 0;
                ManaInfoView manaInfoView = null;
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_MANA_INFA_SYS_INIT:
                    VariableAttribute manaInitVariableAttribute = notification.Body as VariableAttribute;
                    manaInfoView = UIControllerLIst.GetViewByName <ManaInfoView>(UIViewName.ManaInfoView);
                    manaInfoView.UIManaInfoSysInit(manaInitVariableAttribute, myself, playerCodeNotification);
                    break;

                case UIViewSystemEvent.UI_MANA_INFA_SYS_NUM_CHANGE:
                    VariableAttribute manaChangeVariableAttribute = notification.Body as VariableAttribute;
                    manaInfoView = UIControllerLIst.GetViewByName <ManaInfoView>(UIViewName.ManaInfoView);
                    manaInfoView.ChangeManaUsable(manaChangeVariableAttribute, myself);
                    break;
                }
                break;

            //科技组件显示
            case UIViewSystemEvent.UI_TRAIT_COMBINATION_SYS:
                TraitCombinationView traitCombinationView = null;
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_TRAIT_COMBINATION_SYS_INIT:
                    List <TraitType> traitTypes = notification.Body as List <TraitType>;
                    traitCombinationView = UIControllerLIst.GetViewByName <TraitCombinationView>(UIViewName.TraitCombinationView);
                    traitCombinationView.UITraitCombinationSysInit(traitTypes, myself, playerCodeNotification);
                    break;

                case UIViewSystemEvent.UI_TRAIT_COMBINATION_SYS_ADD:
                    string traitType = notification.Body.ToString();
                    traitCombinationView = UIControllerLIst.GetViewByName <TraitCombinationView>(UIViewName.TraitCombinationView);
                    traitCombinationView.UITraitCombinationSysAdd(traitType, myself);
                    break;
                }
                break;

            //效果展示列控制
            case UIViewSystemEvent.UI_EFFECT_DISPLAY_SYS:
                EffectDisplayView effectDisplayView = null;
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_EFFECT_DISPLAY_SYS_PUT_ONE_EFFECT:
                    effectDisplayView = UIControllerLIst.GetViewByName <EffectDisplayView>(UIViewName.EffectDisplayView);
                    CardEntry effectCardNeedShow = notification.Body as CardEntry;
                    callBackDelay = true;
                    //回调函数
                    callBack = () =>
                    {
                        exceINotification = false;
                        SendNotification(EffectExecutionEvent.EFFECT_EXECUTION_SYS, null, EffectExecutionEvent.EFFECT_EXECUTION_SYS_EFFECT_SHOW_OVER);
                        SendNotification(UIViewSystemEvent.UI_ANIMATION_SYS, null, UIViewSystemEvent.UI_ANIMATION_SYS_START);
                    };
                    effectDisplayView.ShowCradEffectByCardEntryAuto(effectCardNeedShow, callBack);
                    break;

                case UIViewSystemEvent.UI_EFFECT_DISPLAY_SYS_ONE_EFFECT_NEED_CHOOSE_EXE:
                    effectDisplayView = UIControllerLIst.GetViewByName <EffectDisplayView>(UIViewName.EffectDisplayView);
                    CardEntry effectCardNeedChooseExe = notification.Body as CardEntry;
                    SendNotificationAddCardEntry sendNotificationAddCard = (OneUserSelectionItem oneUserSelectionItem) =>
                    {
                        SendNotification(OperateSystemEvent.OPERATE_SYS, oneUserSelectionItem, OperateSystemEvent.OPERATE_SYS_CHOOSE_ONE_USER_SELECTION_ITEM);
                    };
                    effectDisplayView.ShowCradEffectAndUserSelectionListByCardEntry(effectCardNeedChooseExe, sendNotificationAddCard);
                    break;

                case UIViewSystemEvent.UI_EFFECT_DISPLAY_SYS_ONE_EFFECT_NEED_CHOOSE_TARGET:
                    effectDisplayView = UIControllerLIst.GetViewByName <EffectDisplayView>(UIViewName.EffectDisplayView);
                    CardEntry effectCardNeedChooseTarget = notification.Body as CardEntry;
                    effectDisplayView.ShowCradEffectByCardEntry(effectCardNeedChooseTarget);
                    break;

                case UIViewSystemEvent.UI_EFFECT_DISPLAY_SYS_TO_HIDE:
                    effectDisplayView = UIControllerLIst.GetViewByName <EffectDisplayView>(UIViewName.EffectDisplayView);
                    effectDisplayView.cardIntactView.gameObject.SetActive(false);
                    break;
                }
                break;

            //科技组件显示
            case UIViewSystemEvent.UI_PLAYER_SCORE_SHOW_SYS:
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_PLAYER_SCORE_SHOW_SYS_CHANGE:
                    ShipComponentView shipScoreComponentView = UIControllerLIst.GetViewByName <ShipComponentView>(UIViewName.ShipComponentView);
                    shipScoreComponentView.ChangeScoreShow(myself, Convert.ToInt32(notification.Body));
                    break;
                }
                break;

            //结束按钮的显示控制
            case UIViewSystemEvent.UI_NEXT_TURN_SHOW_SYS:
                NextTurnButton nextTurnButton = null;
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_NEXT_TURN_SHOW_SYS_SHOW:
                    if (myself)
                    {
                        nextTurnButton = UIControllerLIst.GetViewByName <NextTurnButton>(UIViewName.NextTurnButton);
                        nextTurnButton.ShowButton();
                    }
                    break;
                }
                break;

            //展示卡牌完整信息的控制
            case UIViewSystemEvent.UI_ONE_CARD_ALL_INFO:
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_ONE_CARD_ALL_INFO_BUFF_CHANGE:
                    CardEntry      minionCellItem = notification.Body as CardEntry;
                    OneCardAllInfo oneCardAllInfo = UIControllerLIst.GetViewByName <OneCardAllInfo>(UIViewName.OneCardAllInfo);
                    if (oneCardAllInfo != null)
                    {
                        if (oneCardAllInfo.cardEntryShow.uuid == minionCellItem.uuid)
                        {
                            oneCardAllInfo.LoadingAllInfoByMinionCellItem(minionCellItem);
                        }
                    }
                    break;
                }
                break;

            case UIViewSystemEvent.UI_TURN_STAGE_SYS:
                switch (notification.Type)
                {
                case UIViewSystemEvent.UI_TURN_STAGE_SYS_STAGE_CHANGE:
                    //回调函数
                    UnityAction turnStageCallBack = () =>
                    {
                        SendNotification(EffectExecutionEvent.EFFECT_EXECUTION_SYS, null, EffectExecutionEvent.EFFECT_EXECUTION_SYS_EFFECT_SHOW_OVER);
                        SendNotification(UIViewSystemEvent.UI_ANIMATION_SYS, null, UIViewSystemEvent.UI_ANIMATION_SYS_START);
                    };
                    TurnSysProgressBarView turnSysProgressBarView = UIControllerLIst.GetViewByName <TurnSysProgressBarView>(UIViewName.TurnSysProgressBarView);
                    QuestStageCircuitItem  questStageCircuitItem  = notification.Body as QuestStageCircuitItem;
                    turnSysProgressBarView.LoadingAllStageInfoToChange(questStageCircuitItem, playerCode, turnStageCallBack);
                    break;
                }
                break;
            }
            if (callBackDelay == false)
            {
                callBack();
            }
        }
Esempio n. 2
0
        public void GameChanged()
        {
            if (MapDisplay.Game.CurrentPlayer == null)
            {
                BeginTurnButton.Show();
                NextTurnButton.Hide();
                BeginTurnButton.Text = "Begin " + MapDisplay.Game.NextPlayer.Faction.ToString() + "'s turn";
            }
            else
            {
                BeginTurnButton.Hide();
                NextTurnButton.Show();
            }

            MovePictureBox.BorderStyle           = BorderStyle.None;
            BuildPictureBox.BorderStyle          = BorderStyle.None;
            LoadPictureBox.BorderStyle           = BorderStyle.None;
            UnloadPictureBox.BorderStyle         = BorderStyle.None;
            RepairPictureBox.BorderStyle         = BorderStyle.None;
            LightArtilleryPictureBox.BorderStyle = BorderStyle.None;
            HeavyArtilleryPictureBox.BorderStyle = BorderStyle.None;
            TorpedoPictureBox.BorderStyle        = BorderStyle.None;
            DivePictureBox.BorderStyle           = BorderStyle.None;
            LoadTorpedoesPictureBox.BorderStyle  = BorderStyle.None;
            DepthChargePictureBox.BorderStyle    = BorderStyle.None;
            InstallBatteryPictureBox.BorderStyle = BorderStyle.None;
            CapturePictureBox.BorderStyle        = BorderStyle.None;
            MinePictureBox.BorderStyle           = BorderStyle.None;
            LoadMinesPictureBox.BorderStyle      = BorderStyle.None;
            SweepPictureBox.BorderStyle          = BorderStyle.None;
            SearchMinesPictureBox.BorderStyle    = BorderStyle.None;

            if (MapDisplay.Game.SelectedUnit != null)
            {
                DivePictureBox.Image = MapDisplay.Game.SelectedUnit.IsSubmerged ? Bitmaps.Get("Data\\Surface.png") : Bitmaps.Get("Data\\Dive.png");
            }

            switch (MapDisplay.CurrentOrder)
            {
            case null:
                break;

            case Order.Move:
                MovePictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Build:
                BuildPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.LightArtillery:
                LightArtilleryPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.HeavyArtillery:
                HeavyArtilleryPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Repair:
                RepairPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Load:
                LoadPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Unload:
                UnloadPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Torpedo:
                TorpedoPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.DiveOrSurface:
                DivePictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.LoadTorpedoes:
                LoadTorpedoesPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.DepthCharge:
                DepthChargePictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.InstallBattery:
                InstallBatteryPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Capture:
                CapturePictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Mine:
                MinePictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.LoadMines:
                LoadMinesPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.Sweep:
                SweepPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;

            case Order.SearchMines:
                SearchMinesPictureBox.BorderStyle = BorderStyle.Fixed3D;
                break;
            }

            if (MapDisplay.Game.CurrentPlayer != null)
            {
                FlagBox.Image          = Game.GetFactionFlag(MapDisplay.Game.CurrentPlayer.Faction);
                GreetingText.Text      = Game.GetFactionGreetings(MapDisplay.Game.CurrentPlayer.Faction);
                GreetingText.BackColor = Game.GetFactionColor(MapDisplay.Game.CurrentPlayer.Faction);
                NextTurnButton.Show();
                BeginTurnButton.Hide();
            }
            else
            {
                FlagBox.Image          = null;
                GreetingText.Text      = "Press the Begin Turn button.";
                GreetingText.BackColor = SystemColors.Control;
                NextTurnButton.Hide();
                BeginTurnButton.Show();
            }

            var selectedUnit = MapDisplay.Game.SelectedUnit;

            if (selectedUnit != null)
            {
                if (MapDisplay.Game.CurrentPlayer != null && MapDisplay.Game.CurrentPlayer.Faction != Faction.Neutral)
                {
                    if (MapDisplay.Game.CurrentPlayer == selectedUnit.Player)
                    {
                        OrdersPanel.Show();
                    }
                    UnitPanel.Show();
                    InfoPanel.Show();
                }

                UnitPictureBox.SizeMode = PictureBoxSizeMode.Zoom;
                UnitPictureBox.Image    = MapDisplay.Game.SelectedUnit.Type.LargeBitmap;
                UnitTextBox.Text        = selectedUnit.Name;
                UnitTextBox.Text       += " : " + selectedUnit.Type.Name;
                UnitTextBox.Text       += Environment.NewLine + "Integrity: " + Math.Round(selectedUnit.Health * 100).ToString() + "%";
                if (selectedUnit.Type.Capacity >= 1)
                {
                    UnitTextBox.Text += Environment.NewLine + "Cargo: " + selectedUnit.Cargo + "/" + selectedUnit.Type.Capacity;
                }
                if (selectedUnit.TurnsUntilCompletion > 0)
                {
                    UnitTextBox.Text += Environment.NewLine + "Turns until completion: " + selectedUnit.TurnsUntilCompletion;
                }
                if (selectedUnit.Type == UnitType.Submarine && selectedUnit.IsSubmerged)
                {
                    UnitTextBox.Text += Environment.NewLine + "Oxygen left: " + ((Submarine)selectedUnit).OxygenLeft.ToString();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Torpedo))
                {
                    UnitTextBox.Text += Environment.NewLine + "Torpedo salvoes left: " + selectedUnit.Torpedoes;
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Mine))
                {
                    UnitTextBox.Text += Environment.NewLine + "Mine placements left: " + selectedUnit.Mines;
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Move))
                {
                    UnitTextBox.Text += Environment.NewLine + "Moves Left: " + selectedUnit.MovesLeft.ToString("0.0");
                }
                if (selectedUnit.Type.Abilities.Contains(Order.LightArtillery))
                {
                    UnitTextBox.Text += Environment.NewLine + "Light Artillery " + "Power: " + selectedUnit.Type.LightPower + ", Range: " + selectedUnit.Type.LightRange;
                }
                if (selectedUnit.Type.Abilities.Contains(Order.HeavyArtillery))
                {
                    UnitTextBox.Text += Environment.NewLine + "Heavy Artillery " + "Power: " + selectedUnit.Type.HeavyPower + ", Range: " + selectedUnit.Type.HeavyRange;
                }
                if (!float.IsPositiveInfinity(selectedUnit.Type.Armour))
                {
                    UnitTextBox.Text += Environment.NewLine + "Armour: " + selectedUnit.Type.Armour;
                }

                if (selectedUnit.Type.Abilities.Contains(Order.Move))
                {
                    MoveBox.Show();
                }
                else
                {
                    MoveBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.LightArtillery))
                {
                    LightArtilleryBox.Show();
                }
                else
                {
                    LightArtilleryBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.HeavyArtillery))
                {
                    HeavyArtilleryBox.Show();
                }
                else
                {
                    HeavyArtilleryBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Repair))
                {
                    RepairBox.Show();
                }
                else
                {
                    RepairBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Build))
                {
                    BuildBox.Show();
                }
                else
                {
                    BuildBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Load))
                {
                    LoadBox.Show();
                }
                else
                {
                    LoadBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Unload))
                {
                    UnloadBox.Show();
                }
                else
                {
                    UnloadBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Torpedo))
                {
                    TorpedoBox.Show();
                }
                else
                {
                    TorpedoBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.DiveOrSurface))
                {
                    DiveBox.Show();
                    DiveButton.Text = selectedUnit.IsSubmerged ? "Surface" : "Dive";
                }
                else
                {
                    DiveBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.LoadTorpedoes))
                {
                    LoadTorpedoesBox.Show();
                }
                else
                {
                    LoadTorpedoesBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.DepthCharge))
                {
                    DepthChargeBox.Show();
                }
                else
                {
                    DepthChargeBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.InstallBattery))
                {
                    InstallBatteryBox.Show();
                }
                else
                {
                    InstallBatteryBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Capture))
                {
                    CaptureBox.Show();
                }
                else
                {
                    CaptureBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Mine))
                {
                    MineBox.Show();
                }
                else
                {
                    MineBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.LoadMines))
                {
                    LoadMinesBox.Show();
                }
                else
                {
                    LoadMinesBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.Sweep))
                {
                    SweepBox.Show();
                }
                else
                {
                    SweepBox.Hide();
                }
                if (selectedUnit.Type.Abilities.Contains(Order.SearchMines))
                {
                    SearchMinesBox.Show();
                }
                else
                {
                    SearchMinesBox.Hide();
                }

                MoveBox.Enabled           = selectedUnit.MovesLeft >= 1;
                LightArtilleryBox.Enabled = selectedUnit.LightShotsLeft >= 1 && !selectedUnit.IsSubmerged;
                HeavyArtilleryBox.Enabled = selectedUnit.HeavyShotsLeft >= 1 && !selectedUnit.IsSubmerged;
                BuildBox.Enabled          = !selectedUnit.IsSubmerged;
                RepairBox.Enabled         = selectedUnit.RepairsLeft >= 1 && !selectedUnit.IsSubmerged;
                LoadBox.Enabled           = selectedUnit.LoadsLeft >= 1 && !selectedUnit.IsSubmerged;
                UnloadBox.Enabled         = selectedUnit.LoadsLeft >= 1 && !selectedUnit.IsSubmerged;
                TorpedoBox.Enabled        = selectedUnit.TorpedoesLeft >= 1 && selectedUnit.Torpedoes >= 1;
                DiveBox.Enabled           = selectedUnit.DivesLeft >= 1;
                LoadTorpedoesBox.Enabled  = selectedUnit.Torpedoes < selectedUnit.Type.MaxTorpedoes;
                DepthChargeBox.Enabled    = selectedUnit.DepthChargesLeft >= 1;
                InstallBatteryBox.Enabled = selectedUnit.InstallsLeft >= 1;
                CaptureBox.Enabled        = selectedUnit.CapturesLeft >= 1;
                MineBox.Enabled           = selectedUnit.MinesLeft >= 1 && selectedUnit.Mines >= 1;
                LoadMinesBox.Enabled      = selectedUnit.Mines < selectedUnit.Type.MaxMines;
                SweepBox.Enabled          = selectedUnit.SweepsLeft >= 1;
                SearchMinesBox.Enabled    = selectedUnit.MineSearchesLeft >= 1;

                if (MapDisplay.CurrentOrder == Order.Move && selectedUnit.MovesLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.LightArtillery && selectedUnit.LightShotsLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.HeavyArtillery && selectedUnit.HeavyShotsLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.Repair && selectedUnit.RepairsLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.Load && selectedUnit.LoadsLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.Unload && selectedUnit.LoadsLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.Torpedo && selectedUnit.TorpedoesLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.LoadTorpedoes && selectedUnit.Torpedoes >= selectedUnit.Type.MaxTorpedoes)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.DepthCharge && selectedUnit.DepthChargesLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.InstallBattery && selectedUnit.InstallsLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.Capture && selectedUnit.CapturesLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.Mine && selectedUnit.MinesLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.LoadMines && selectedUnit.Mines >= selectedUnit.Type.MaxMines)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.Sweep && selectedUnit.SweepsLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }
                if (MapDisplay.CurrentOrder == Order.SearchMines && selectedUnit.MineSearchesLeft < 1)
                {
                    MapDisplay.CurrentOrder = null;
                }

                HealthBar.Value = (int)(selectedUnit.Health * 100);
            }
            else
            {
                UnitPanel.Hide();
                OrdersPanel.Hide();
                InfoPanel.Hide();
            }
            Invalidate();
        }