Esempio n. 1
0
			public TableEnemyMemberControl( FormCompass parent ) {

				#region Initialize

				Parent = parent;
				ToolTipInfo = parent.ToolTipInfo;


				ShipName = new ImageLabel();
				ShipName.Anchor = AnchorStyles.Left;
				ShipName.ForeColor = parent.MainFontColor;
				ShipName.ImageAlign = ContentAlignment.MiddleCenter;
				ShipName.Padding = new Padding( 0, 1, 0, 1 );
				ShipName.Margin = new Padding( 2, 0, 2, 0 );
				ShipName.MaximumSize = new Size( 120, 20 );
				ShipName.AutoEllipsis = true;
				ShipName.AutoSize = true;
				ShipName.Cursor = Cursors.Help;
				ShipName.MouseClick += ShipName_MouseClick;

				Equipments = new ShipStatusEquipment();
				Equipments.SuspendLayout();
				Equipments.Anchor = AnchorStyles.Left;
				Equipments.Padding = new Padding( 0, 2, 0, 1 );
				Equipments.Margin = new Padding( 2, 0, 2, 0 );
				Equipments.Size = new Size( 40, 20 );	//checkme: 要る?
				Equipments.AutoSize = true;
				Equipments.ResumeLayout();

				ConfigurationChanged();

				#endregion

			}
			public TableFleetControl( FormFleetOverview parent, int fleetID ) {

				#region Initialize

				Number = new ImageLabel();
				Number.Anchor = AnchorStyles.Left;
				Number.ImageAlign = ContentAlignment.MiddleCenter;
				Number.Margin = new Padding( 3, 2, 3, 2 );
				Number.Text = string.Format( "#{0}:", fleetID );
				Number.Tag = null;

				State = new ImageLabel();
				State.Anchor = AnchorStyles.Left;
				State.Margin = new Padding( 3, 2, 3, 2 );
				State.ImageList = ResourceManager.Instance.Icons;
				State.Text = "-";
				State.Tag = FleetData.FleetStates.NoShip;

				ConfigurationChanged( parent );

				this.fleetID = fleetID;
				ToolTipInfo = parent.ToolTipInfo;

				#endregion

			}
 public StateLabel()
 {
     Label             = GetDefaultLabel();
     Label.MouseEnter += Label_MouseEnter;
     Label.MouseLeave += Label_MouseLeave;
     Enabled           = false;
 }
Esempio n. 4
0
            public static ImageLabel GetDefaultLabel()
            {
                var label = new ImageLabel();

                label.Anchor    = AnchorStyles.Left;
                label.ImageList = ResourceManager.Instance.Icons;
                label.Padding   = new Padding(2, 2, 2, 2);
                label.Margin    = new Padding(2, 0, 2, 0);
                label.AutoSize  = true;
                return(label);
            }
Esempio n. 5
0
			public TableFleetControl( FormFleet parent ) {

				#region Initialize

				Name = new Label();
				Name.Text = "[" + parent.FleetID.ToString() + "]";
				Name.Anchor = AnchorStyles.Left;
				Name.ForeColor = parent.MainFontColor;
                Name.BackColor = parent.BackColor;
				Name.Padding = new Padding( 0, 1, 0, 1 );
				Name.Margin = new Padding( 2, 0, 2, 0 );
				Name.AutoSize = true;
				//Name.Visible = false;

				StateMain = new ImageLabel();
				StateMain.Anchor = AnchorStyles.Left;
				StateMain.ForeColor = parent.MainFontColor;
                StateMain.BackColor = parent.BackColor;
				StateMain.ImageList = ResourceManager.Instance.Icons;
				StateMain.Padding = new Padding( 2, 2, 2, 2 );
				StateMain.Margin = new Padding( 2, 0, 2, 0 );
				StateMain.AutoSize = true;

				AirSuperiority = new ImageLabel();
				AirSuperiority.Anchor = AnchorStyles.Left;
				AirSuperiority.ForeColor = parent.MainFontColor;
                AirSuperiority.BackColor = parent.BackColor;
				AirSuperiority.ImageList = ResourceManager.Instance.Equipments;
				AirSuperiority.ImageIndex = (int)ResourceManager.EquipmentContent.CarrierBasedFighter;
				AirSuperiority.Padding = new Padding( 2, 2, 2, 2 );
				AirSuperiority.Margin = new Padding( 2, 0, 2, 0 );
				AirSuperiority.AutoSize = true;

				SearchingAbility = new ImageLabel();
				SearchingAbility.Anchor = AnchorStyles.Left;
				SearchingAbility.ForeColor = parent.MainFontColor;
                SearchingAbility.BackColor = parent.BackColor;
				SearchingAbility.ImageList = ResourceManager.Instance.Equipments;
				SearchingAbility.ImageIndex = (int)ResourceManager.EquipmentContent.CarrierBasedRecon;
				SearchingAbility.Padding = new Padding( 2, 2, 2, 2 );
				SearchingAbility.Margin = new Padding( 2, 0, 2, 0 );
				SearchingAbility.AutoSize = true;

				ConfigurationChanged( parent );

				ToolTipInfo = parent.ToolTipInfo;
				State = FleetData.FleetStates.NoShip;
				Timer = DateTime.Now;

				#endregion

			}
            public static ImageLabel GetDefaultLabel()
            {
                var label = new ImageLabel
                {
                    Anchor    = AnchorStyles.Left,
                    ImageList = ResourceManager.Instance.Icons,
                    Padding   = new Padding(2, 2, 2, 2),
                    Margin    = new Padding(2, 0, 2, 0),
                    AutoSize  = true
                };

                return(label);
            }
        public FormFleetOverview( FormMain parent )
        {
            InitializeComponent();

            ConfigurationChanged();

            ControlHelper.SetDoubleBuffered( TableFleet );

            ControlFleet = new List<TableFleetControl>( 4 );
            for ( int i = 0; i < 4; i++ ) {
                ControlFleet.Add( new TableFleetControl( this, i + 1, TableFleet ) );
            }

            #region CombinedTag
            {
                CombinedTag = new ImageLabel();
                CombinedTag.Anchor = AnchorStyles.Left;
                CombinedTag.Font = Utility.Configuration.Config.UI.MainFont;
                CombinedTag.Margin = new Padding( 3, 2, 3, 2 );
                CombinedTag.ImageList = ResourceManager.Instance.Icons;
                CombinedTag.ImageIndex = (int)ResourceManager.IconContent.FleetCombined;
                CombinedTag.Text = "-";
                CombinedTag.Visible = false;

                TableFleet.Controls.Add( CombinedTag, 1, 4 );

                #region set RowStyle
                RowStyle rs = new RowStyle( SizeType.AutoSize, 0 );

                if ( TableFleet.RowStyles.Count > 4 )
                    TableFleet.RowStyles[4] = rs;
                else
                    while ( TableFleet.RowStyles.Count <= 4 )
                        TableFleet.RowStyles.Add( rs );
                #endregion

            }
            #endregion

            Icon = ResourceManager.ImageToIcon( ResourceManager.Instance.Icons.Images[(int)ResourceManager.IconContent.FormFleet] );

            Utility.SystemEvents.UpdateTimerTick += UpdateTimerTick;
        }
        /// <summary>
        /// 艦隊の状態の情報をラベルに適用します。
        /// </summary>
        /// <param name="fleet">艦隊データ。</param>
        /// <param name="label">適用するラベル。</param>
        /// <param name="tooltip">適用するツールチップ。</param>
        /// <param name="prevstate">前回の状態。</param>
        /// <param name="timer">日時。</param>
        /// <returns>艦隊の状態を表す定数。</returns>
        public static FleetStates UpdateFleetState( FleetData fleet, ImageLabel label, ToolTip tooltip, FleetStates prevstate, ref DateTime timer )
        {
            KCDatabase db = KCDatabase.Instance;

            //初期化
            tooltip.SetToolTip( label, null );
            label.BackColor = Color.Transparent;

            //所属艦なし
            if ( fleet == null || fleet.Members.Count( id => id != -1 ) == 0 ) {
                label.Text = "所属艦なし";
                label.ImageIndex = (int)ResourceManager.IconContent.FleetNoShip;

                return FleetStates.NoShip;
            }

            {	//入渠中
                long ntime = db.Docks.Values.Max(
                        dock => {
                            if ( dock.State == 1 && fleet.Members.Count( ( id => id == dock.ShipID ) ) > 0 )
                                return dock.CompletionTime.Ticks;
                            else return 0;
                        }
                        );

                if ( ntime > 0 ) {	//入渠中

                    timer = new DateTime( ntime );
                    label.Text = "入渠中 " + DateTimeHelper.ToTimeRemainString( timer );
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetDocking;

                    tooltip.SetToolTip( label, "完了日時 : " + DateTimeHelper.TimeToCSVString( timer ) );

                    return FleetStates.Docking;
                }

            }

            if ( fleet.IsInSortie ) {

                //大破出撃中
                if ( fleet.MembersInstance.Count( s =>
                        ( s != null && !fleet.EscapedShipList.Contains( s.MasterID ) && (double)s.HPCurrent / s.HPMax <= 0.25 )
                     ) > 0 ) {

                    label.Text = "!!大破進撃中!!";
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetSortieDamaged;

                    return FleetStates.SortieDamaged;

                } else {	//出撃中

                    label.Text = "出撃中";
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetSortie;

                    return FleetStates.Sortie;
                }

            }

            //遠征中
            if ( fleet.ExpeditionState != 0 ) {

                timer = fleet.ExpeditionTime;
                label.Text = "遠征中 " + DateTimeHelper.ToTimeRemainString( timer );
                label.ImageIndex = (int)ResourceManager.IconContent.FleetExpedition;

                tooltip.SetToolTip( label, string.Format( "{0} : {1}\r\n完了日時 : {2}",
                    KCDatabase.Instance.Mission[fleet.ExpeditionDestination].ID,
                    KCDatabase.Instance.Mission[fleet.ExpeditionDestination].Name,
                    DateTimeHelper.TimeToCSVString( timer ) ) );

                return FleetStates.Expedition;
            }

            //大破艦あり
            if ( fleet.MembersInstance.Count( s =>
                ( s != null && !fleet.EscapedShipList.Contains( s.MasterID ) && (double)s.HPCurrent / s.HPMax <= 0.25 )
             ) > 0 ) {

                label.Text = "大破艦あり!";
                label.ImageIndex = (int)ResourceManager.IconContent.FleetDamaged;
                //label.BackColor = Color.LightCoral;

                return FleetStates.Damaged;
            }

            //泊地修理中
            {
                if ( fleet.CanAnchorageRepairing &&
                    fleet.MembersInstance.Take( 2 + KCDatabase.Instance.Ships[fleet[0]].SlotInstanceMaster.Count( eq => eq != null && eq.CategoryType == 31 ) )
                    .Any( s => s != null && s.HPRate < 1.0 && s.HPRate > 0.5 && s.RepairingDockID == -1 ) ) {

                    label.Text = "泊地修理中 " + DateTimeHelper.ToTimeElapsedString( KCDatabase.Instance.Fleet.AnchorageRepairingTimer );
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetAnchorageRepairing;

                    tooltip.SetToolTip( label, string.Format( "開始日時 : {0}",
                        DateTimeHelper.TimeToCSVString( KCDatabase.Instance.Fleet.AnchorageRepairingTimer ) ) );

                    return FleetStates.AnchorageRepairing;
                }
            }

            //未補給
            {
                int fuel = fleet.MembersInstance.Sum( ship => ship == null ? 0 : (int)( ( ship.FuelMax - ship.Fuel ) * ( ship.IsMarried ? 0.85 : 1.00 ) ) );
                int ammo = fleet.MembersInstance.Sum( ship => ship == null ? 0 : (int)( ( ship.AmmoMax - ship.Ammo ) * ( ship.IsMarried ? 0.85 : 1.00 ) ) );
                int aircraft = fleet.MembersInstance.Sum(
                    ship => {
                        if ( ship == null ) return 0;
                        else {
                            int c = 0;
                            for ( int i = 0; i < ship.Slot.Count; i++ ) {
                                c += ship.MasterShip.Aircraft[i] - ship.Aircraft[i];
                            }
                            return c;
                        }
                    } );
                int bauxite = aircraft * 5;

                if ( fuel > 0 || ammo > 0 || bauxite > 0 ) {

                    label.Text = "未補給";
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetNotReplenished;

                    tooltip.SetToolTip( label, string.Format( "燃 : {0}\r\n弾 : {1}\r\nボ : {2} ({3}機)", fuel, ammo, bauxite, aircraft ) );

                    return FleetStates.NotReplenished;
                }
            }

            //疲労
            {
                int cond = fleet.MembersInstance.Min( s => s == null ? 100 : s.Condition );

                if ( cond < Configuration.Config.Control.ConditionBorder && fleet.ConditionTime != null ) {

                    timer = (DateTime)fleet.ConditionTime;

                    label.Text = "疲労 " + DateTimeHelper.ToTimeRemainString( timer );

                    if ( cond < 20 )
                        label.ImageIndex = (int)ResourceManager.IconContent.ConditionVeryTired;
                    else if ( cond < 30 )
                        label.ImageIndex = (int)ResourceManager.IconContent.ConditionTired;
                    else
                        label.ImageIndex = (int)ResourceManager.IconContent.ConditionLittleTired;

                    tooltip.SetToolTip( label, string.Format( "回復目安日時: {0}", DateTimeHelper.TimeToCSVString( timer ) ) );

                    return FleetStates.Tired;

                } else if ( cond >= 50 ) {		//戦意高揚

                    label.Text = "戦意高揚!";
                    label.ImageIndex = (int)ResourceManager.IconContent.ConditionSparkle;
                    tooltip.SetToolTip( label, string.Format( "最低cond: {0}\r\nあと {1} 回遠征可能", cond, Math.Ceiling( ( cond - 49 ) / 3.0 ) ) );
                    return FleetStates.Sparkled;

                }

            }

            //出撃可能!
            {
                label.Text = "出撃可能!";
                label.ImageIndex = (int)ResourceManager.IconContent.FleetReady;

                return FleetStates.Ready;
            }
        }
        /// <summary>
        /// ShipViewを指定したタブに切り替えます。
        /// </summary>
        private void ChangeShipView( ImageLabel target )
        {
            if ( target == null ) return;

            int groupID = (int)target.Tag;
            var group = KCDatabase.Instance.ShipGroup[groupID];

            if ( group == null ) {
                Utility.Logger.Add( 3, "エラー:存在しないグループを参照しようとしました。開発者に連絡してください" );
                return;
            }

            if ( SelectedTab != null )
                SelectedTab.BackColor = TabInactiveColor;

            SelectedTab = target;

            BuildShipView( SelectedTab );
            SelectedTab.BackColor = TabActiveColor;
        }
Esempio n. 10
0
			private ImageLabel InitializeImageLabel() {
				var label = new ImageLabel();
				label.Anchor = AnchorStyles.Left;
				label.ForeColor = Parent.MainFontColor;
				label.ImageAlign = ContentAlignment.MiddleCenter;
				label.Padding = new Padding( 0, 1, 0, 1 );
				label.Margin = new Padding( 4, 0, 4, 0 );
				label.MaximumSize = new Size( 60, 20 );
				label.AutoEllipsis = true;
				label.AutoSize = true;

				return label;
			}
Esempio n. 11
0
			public TableEnemyCandidateControl( FormCompass parent ) {

				#region Initialize

				Parent = parent;
				ToolTipInfo = parent.ToolTipInfo;


				ShipNames = new ImageLabel[6];
				for ( int i = 0; i < ShipNames.Length; i++ ) {
					ShipNames[i] = InitializeImageLabel();
					ShipNames[i].Cursor = Cursors.Help;
					ShipNames[i].MouseClick += TableEnemyCandidateControl_MouseClick;
				}

				Formation = InitializeImageLabel();
				Formation.Anchor = AnchorStyles.None;
				/*
				Formation.ImageAlign = ContentAlignment.MiddleLeft;
				Formation.ImageList = ResourceManager.Instance.Icons;
				Formation.ImageIndex = -1;
				*/

				AirSuperiority = InitializeImageLabel();
				AirSuperiority.Anchor = AnchorStyles.Right;
				AirSuperiority.ImageAlign = ContentAlignment.MiddleLeft;
				AirSuperiority.ImageList = ResourceManager.Instance.Equipments;
				AirSuperiority.ImageIndex = (int)ResourceManager.EquipmentContent.CarrierBasedFighter;


				ConfigurationChanged();

				#endregion

			}
Esempio n. 12
0
        /// <summary>
        /// グループデータにGUIからの操作を適用します。
        /// </summary>
        private void ApplyGroupData( ImageLabel target )
        {
            if ( target != null ) {

                //ソート順の保持
                if ( KCDatabase.Instance.Ships.Count == 0 )
                    return;

                ShipGroupData g = KCDatabase.Instance.ShipGroup[(int)target.Tag];
                if ( g == null )
                    return;

                g.Members.Clear();
                g.Members.Capacity = ShipView.Rows.GetRowCount( DataGridViewElementStates.None );

                foreach ( DataGridViewRow row in ShipView.Rows ) {
                    g.Members.Add( (int)row.Cells[ShipView_ID.Index].Value );
                }

                g.ColumnFilter = ShipView.Columns.OfType<DataGridViewColumn>().Select( c => c.Visible ).ToList();
                g.ColumnWidth = ShipView.Columns.OfType<DataGridViewColumn>().Select( c => c.Width ).ToList();
                g.ColumnAutoSize = MenuMember_ColumnAutoSize.Checked;
                g.LockShipNameScroll = MenuMember_LockShipNameScroll.Checked;
            }
        }
Esempio n. 13
0
		/// <summary>
		/// 艦隊の状態の情報をラベルに適用します。
		/// </summary>
		/// <param name="fleet">艦隊データ。</param>
		/// <param name="label">適用するラベル。</param>
		/// <param name="tooltip">適用するツールチップ。</param>
		/// <param name="prevstate">前回の状態。</param>
		/// <param name="timer">日時。</param>
		/// <returns>艦隊の状態を表す定数。</returns>
		public static FleetStates UpdateFleetState( FleetData fleet, ImageLabel label, ToolTip tooltip, FleetStates prevstate, ref DateTime timer ) {

			KCDatabase db = KCDatabase.Instance;


			//初期化
			tooltip.SetToolTip( label, null );
			label.BackColor = Color.Transparent;



			//所属艦なし
			if ( fleet == null || fleet.Members.Count( id => id != -1 ) == 0 ) {
				label.Text = FleetRes.NoShips;
				label.ImageIndex = (int)ResourceManager.IconContent.FleetNoShip;

				return FleetStates.NoShip;
			}

			{	//入渠中
				long ntime = db.Docks.Values.Max(
						dock => {
							if ( dock.State == 1 && fleet.Members.Count( ( id => id == dock.ShipID ) ) > 0 )
								return dock.CompletionTime.Ticks;
							else return 0;
						}
						);

				if ( ntime > 0 ) {	//入渠中

					timer = new DateTime( ntime );
					label.Text = FleetRes.Docking + DateTimeHelper.ToTimeRemainString( timer );
					label.ImageIndex = (int)ResourceManager.IconContent.FleetDocking;

					tooltip.SetToolTip( label, FleetRes.CompletionTime + DateTimeHelper.TimeToCSVString( timer ) );

					return FleetStates.Docking;
				}

			}


			if ( fleet.IsInSortie ) {

				//大破出撃中
				if ( fleet.MembersInstance.Count( s =>
						( s != null && !fleet.EscapedShipList.Contains( s.MasterID ) && (double)s.HPCurrent / s.HPMax <= 0.25 )
					 ) > 0 ) {

					label.Text = FleetRes.CriticalDamageAdvance;
					label.ImageIndex = (int)ResourceManager.IconContent.FleetSortieDamaged;

					return FleetStates.SortieDamaged;

				} else {	//出撃中

					label.Text = FleetRes.OnSortie;
					label.ImageIndex = (int)ResourceManager.IconContent.FleetSortie;

					return FleetStates.Sortie;
				}

			}


			//遠征中
			if ( fleet.ExpeditionState != 0 ) {

				timer = fleet.ExpeditionTime;
				label.Text = FleetRes.OnExped + DateTimeHelper.ToTimeRemainString( timer );
				label.ImageIndex = (int)ResourceManager.IconContent.FleetExpedition;

				tooltip.SetToolTip( label, string.Format( "{0} : {1}\r\n" + FleetRes.CompletionTime + " {2}",
					KCDatabase.Instance.Mission[fleet.ExpeditionDestination].ID,
					KCDatabase.Instance.Mission[fleet.ExpeditionDestination].Name,
					DateTimeHelper.TimeToCSVString( timer ) ) );

				return FleetStates.Expedition;
			}

			//大破艦あり
			if ( fleet.MembersInstance.Count( s =>
				( s != null && !fleet.EscapedShipList.Contains( s.MasterID ) && (double)s.HPCurrent / s.HPMax <= 0.25 )
			 ) > 0 ) {

				label.Text = FleetRes.CriticallyDamagedShip;
				label.ImageIndex = (int)ResourceManager.IconContent.FleetDamaged;
				//label.BackColor = Color.LightCoral;

				return FleetStates.Damaged;
			}

			//泊地修理中
			{
				if ( fleet.CanAnchorageRepairing &&
					fleet.MembersInstance.Take( 2 + KCDatabase.Instance.Ships[fleet[0]].SlotInstanceMaster.Count( eq => eq != null && eq.CategoryType == 31 ) )
					.Any( s => s != null && s.HPRate < 1.0 && s.HPRate > 0.5 && s.RepairingDockID == -1 ) ) {

					label.Text = FleetRes.AnchorageRepairing + DateTimeHelper.ToTimeElapsedString( KCDatabase.Instance.Fleet.AnchorageRepairingTimer );
					label.ImageIndex = (int)ResourceManager.IconContent.FleetAnchorageRepairing;

					StringBuilder sb = new StringBuilder();
					sb.AppendFormat( FleetRes.StartTime,
						DateTimeHelper.TimeToCSVString( KCDatabase.Instance.Fleet.AnchorageRepairingTimer ) );

					for ( int i = 0; i < fleet.Members.Count; i++ ) {
						var ship = fleet.MembersInstance[i];
						if ( ship != null && ship.HPRate < 1.0 ) {
							var totaltime = DateTimeHelper.FromAPITimeSpan( ship.RepairTime );
							var unittime = Calculator.CalculateDockingUnitTime( ship );
							sb.AppendFormat( "#{0} : {1:00}:{2:00}:{3:00} @ {4:00}:{5:00}:{6:00} x -{7} HP\r\n",
								i + 1,
								(int)totaltime.TotalHours,
								totaltime.Minutes,
								totaltime.Seconds,
								(int)unittime.TotalHours,
								unittime.Minutes,
								unittime.Seconds,
								ship.HPMax - ship.HPCurrent
								);
						} else {
							sb.Append( "#" ).Append( i + 1 ).Append( " : ----\r\n" );
						}
					}

					tooltip.SetToolTip( label, sb.ToString() );

					return FleetStates.AnchorageRepairing;
				}
			}

			//未補給
			{
				int fuel = fleet.MembersInstance.Sum( ship => ship == null ? 0 : (int)( ( ship.FuelMax - ship.Fuel ) * ( ship.IsMarried ? 0.85 : 1.00 ) ) );
				int ammo = fleet.MembersInstance.Sum( ship => ship == null ? 0 : (int)( ( ship.AmmoMax - ship.Ammo ) * ( ship.IsMarried ? 0.85 : 1.00 ) ) );
				int aircraft = fleet.MembersInstance.Sum(
					ship => {
						if ( ship == null ) return 0;
						else {
							int c = 0;
							for ( int i = 0; i < ship.Slot.Count; i++ ) {
								c += ship.MasterShip.Aircraft[i] - ship.Aircraft[i];
							}
							return c;
						}
					} );
				int bauxite = aircraft * 5;

				if ( fuel > 0 || ammo > 0 || bauxite > 0 ) {

					label.Text = FleetRes.SupplyNeeded;
					label.ImageIndex = (int)ResourceManager.IconContent.FleetNotReplenished;

					tooltip.SetToolTip( label, string.Format( FleetRes.ResupplyTooltip, fuel, ammo, bauxite, aircraft ) );

					return FleetStates.NotReplenished;
				}
			}

			//疲労
			{
				int cond = fleet.MembersInstance.Min( s => s == null ? 100 : s.Condition );

				if ( cond < Configuration.Config.Control.ConditionBorder && fleet.ConditionTime != null ) {

					timer = (DateTime)fleet.ConditionTime;


					label.Text = FleetRes.Fatigued + DateTimeHelper.ToTimeRemainString( timer );

					if ( cond < 20 )
						label.ImageIndex = (int)ResourceManager.IconContent.ConditionVeryTired;
					else if ( cond < 30 )
						label.ImageIndex = (int)ResourceManager.IconContent.ConditionTired;
					else
						label.ImageIndex = (int)ResourceManager.IconContent.ConditionLittleTired;


					tooltip.SetToolTip( label, string.Format( FleetRes.EstimatedRecoveryTime + ": {0}", DateTimeHelper.TimeToCSVString( timer ) ) );

					return FleetStates.Tired;


				} else if ( cond >= 50 ) {		//戦意高揚

					label.Text = FleetRes.FightingSpiritHigh;
					label.ImageIndex = (int)ResourceManager.IconContent.ConditionSparkle;
					tooltip.SetToolTip( label, string.Format( FleetRes.SparkledTooltip, cond, Math.Ceiling( ( cond - 49 ) / 3.0 ) ) );
					return FleetStates.Sparkled;

				}

			}

			//出撃可能!
			{
				label.Text = FleetRes.ReadyToSortie;
				label.ImageIndex = (int)ResourceManager.IconContent.FleetReady;

				return FleetStates.Ready;
			}

		}
Esempio n. 14
0
        /// <summary>
        /// 指定したグループIDに基づいてタブ ラベルを生成します。
        /// </summary>
        private ImageLabel CreateTabLabel( int id )
        {
            ImageLabel label = new ImageLabel();
            label.Text = KCDatabase.Instance.ShipGroup[id].Name;
            label.Anchor = AnchorStyles.Left;
            label.Font = ShipView.Font;
            label.BackColor = TabInactiveColor;
            label.BorderStyle = BorderStyle.FixedSingle;
            label.Padding = new Padding( 4, 4, 7, 7 );
            label.Margin = new Padding( 0, 0, 0, 0 );
            label.ImageAlign = ContentAlignment.MiddleCenter;
            label.AutoSize = true;
            label.Cursor = Cursors.Hand;

            //イベントと固有IDの追加(内部データとの紐付)
            label.Click += TabLabel_Click;
            label.MouseDown += TabLabel_MouseDown;
            label.MouseMove += TabLabel_MouseMove;
            label.MouseUp += TabLabel_MouseUp;
            label.ContextMenuStrip = MenuGroup;
            label.Tag = id;

            return label;
        }
Esempio n. 15
0
        /// <summary>
        /// 指定したタブのグループのShipViewを作成します。
        /// </summary>
        /// <param name="target">作成するビューのグループデータ</param>
        private void BuildShipView( ImageLabel target )
        {
            if ( target == null )
                return;

            ShipGroupData group = KCDatabase.Instance.ShipGroup[(int)target.Tag];

            IsRowsUpdating = true;
            ShipView.SuspendLayout();

            UpdateMembers( group );

            ShipView.Rows.Clear();

            var ships = group.MembersInstance;
            var rows = new List<DataGridViewRow>( ships.Count() );

            foreach ( ShipData ship in ships ) {

                if ( ship == null ) continue;

                DataGridViewRow row = CreateShipViewRow( ship );
                rows.Add( row );

            }

            for ( int i = 0; i < rows.Count; i++ )
                rows[i].Tag = i;

            ShipView.Rows.AddRange( rows.ToArray() );

            // 設定に抜けがあった場合補充
            if ( group.ViewColumns == null ) {
                group.ViewColumns = new Dictionary<string, ShipGroupData.ViewColumnData>();
            }
            if ( ShipView.Columns.Count != group.ViewColumns.Count ) {
                foreach ( DataGridViewColumn column in ShipView.Columns ) {

                    if ( !group.ViewColumns.ContainsKey( column.Name ) ) {
                        var newdata = new ShipGroupData.ViewColumnData( column );
                        newdata.Visible = true;		//初期状態でインビジだと不都合なので

                        group.ViewColumns.Add( newdata.Name, newdata );
                    }
                }
            }

            ApplyViewData( group );
            ApplyAutoSort( group );

            ShipView.ResumeLayout();
            IsRowsUpdating = false;

            //status bar
            if ( KCDatabase.Instance.Ships.Count > 0 ) {
                Status_ShipCount.Text = string.Format( "所属: {0}隻", group.Members.Count );
                Status_LevelTotal.Text = string.Format( "合計Lv: {0}", group.MembersInstance.Where( s => s != null ).Sum( s => s.Level ) );
                Status_LevelAverage.Text = string.Format( "平均Lv: {0:F2}", group.Members.Count > 0 ? group.MembersInstance.Where( s => s != null ).Average( s => s.Level ) : 0 );
            }
        }
Esempio n. 16
0
            public TableMemberControl( FormFleet parent )
            {
                #region Initialize

                Name = new ImageLabel();
                Name.SuspendLayout();
                Name.Text = "*nothing*";
                Name.Anchor = AnchorStyles.Left;
                Name.TextAlign = ContentAlignment.MiddleLeft;
                Name.ImageAlign = ContentAlignment.MiddleCenter;
                Name.ForeColor = parent.MainFontColor;
                Name.Padding = new Padding( 0, 1, 0, 1 );
                Name.Margin = new Padding( 2, 0, 2, 0 );
                Name.AutoSize = true;
                //Name.AutoEllipsis = true;
                Name.Visible = false;
                Name.Cursor = Cursors.Help;
                Name.MouseDown += Name_MouseDown;
                Name.ResumeLayout();

                Level = new ShipStatusLevel();
                Level.SuspendLayout();
                Level.Anchor = AnchorStyles.Left | AnchorStyles.Bottom;
                Level.Value = 0;
                Level.MaximumValue = ExpTable.ShipMaximumLevel;
                Level.ValueNext = 0;
                Level.MainFontColor = parent.MainFontColor;
                Level.SubFontColor = parent.SubFontColor;
                //Level.TextNext = "n.";
                Level.Padding = new Padding( 0, 0, 0, 0 );
                Level.Margin = new Padding( 2, 0, 2, 1 );
                Level.AutoSize = true;
                Level.Visible = false;
                Level.ResumeLayout();

                HP = new ShipStatusHP();
                HP.SuspendLayout();
                HP.Anchor = AnchorStyles.Left;
                HP.Value = 0;
                HP.MaximumValue = 0;
                HP.MaximumDigit = 999;
                HP.UsePrevValue = false;
                HP.MainFontColor = parent.MainFontColor;
                HP.SubFontColor = parent.SubFontColor;
                HP.Padding = new Padding( 0, 0, 0, 0 );
                HP.Margin = new Padding( 2, 1, 2, 2 );
                HP.AutoSize = true;
                HP.Visible = false;
                HP.ResumeLayout();

                Condition = new ImageLabel();
                Condition.SuspendLayout();
                Condition.Text = "*";
                Condition.Anchor = AnchorStyles.Left | AnchorStyles.Right;
                Condition.ForeColor = parent.MainFontColor;
                Condition.TextAlign = ContentAlignment.BottomRight;
                Condition.ImageAlign = ContentAlignment.MiddleLeft;
                Condition.ImageList = ResourceManager.Instance.Icons;
                Condition.Padding = new Padding( 2, 2, 2, 2 );
                Condition.Margin = new Padding( 2, 0, 2, 0 );
                Condition.Size = new Size( 40, 20 );
                Condition.AutoSize = true;
                Condition.Visible = false;
                Condition.ResumeLayout();

                ShipResource = new ShipStatusResource( parent.ToolTipInfo );
                ShipResource.SuspendLayout();
                ShipResource.FuelCurrent = 0;
                ShipResource.FuelMax = 0;
                ShipResource.AmmoCurrent = 0;
                ShipResource.AmmoMax = 0;
                ShipResource.Anchor = AnchorStyles.Left;
                ShipResource.Padding = new Padding( 0, 2, 0, 1 );
                ShipResource.Margin = new Padding( 2, 0, 2, 0 );
                ShipResource.Size = new Size( 30, 20 );
                ShipResource.AutoSize = false;
                ShipResource.Visible = false;
                ShipResource.ResumeLayout();

                Equipments = new ShipStatusEquipment();
                Equipments.SuspendLayout();
                Equipments.Anchor = AnchorStyles.Left;
                Equipments.Padding = new Padding( 0, 2, 0, 1 );
                Equipments.Margin = new Padding( 2, 0, 2, 0 );
                Equipments.Size = new Size( 40, 20 );
                Equipments.AutoSize = true;
                Equipments.Visible = false;
                Equipments.ResumeLayout();

                ConfigurationChanged( parent );

                ToolTipInfo = parent.ToolTipInfo;
                Parent = parent;
                #endregion
            }
Esempio n. 17
0
        private void MenuGroup_Delete_Click( object sender, EventArgs e )
        {
            ImageLabel senderLabel = MenuGroup.SourceControl as ImageLabel;
            if ( senderLabel == null )
                return;		//想定外

            ShipGroupData group = KCDatabase.Instance.ShipGroup[(int)senderLabel.Tag];

            if ( group != null && group.GroupID >= 0 ) {
                if ( MessageBox.Show( string.Format( GeneralRes.DeleteGroup, group.Name ), Properties.Resources.Confirm,
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2 )
                    == System.Windows.Forms.DialogResult.Yes ) {

                    if ( SelectedTab == senderLabel ) {
                        ShipView.Rows.Clear();
                        SelectedTab = null;
                    }
                    KCDatabase.Instance.ShipGroup.ShipGroups.Remove( group );
                    TabPanel.Controls.Remove( senderLabel );
                    senderLabel.Dispose();
                }

            } else {
                MessageBox.Show( GeneralRes.CannotDeleteGroup, Properties.Resources.Error, MessageBoxButtons.OK, MessageBoxIcon.Exclamation );
            }
        }
Esempio n. 18
0
        /// <summary>
        /// ShipViewを指定したタブに切り替えます。
        /// </summary>
        private void ChangeShipView( ImageLabel target )
        {
            if ( target == null ) return;

            int groupID = (int)target.Tag;
            var group = KCDatabase.Instance.ShipGroup[groupID];

            ApplyGroupData( SelectedTab );

            if ( group == null ) {
                Utility.Logger.Add( 3, GeneralRes.NonexistentGroup );
                return;
            }
            if ( group.GroupID < 0 ) {
                group.Members = group.Members.Intersect( KCDatabase.Instance.Ships.Keys ).Union( KCDatabase.Instance.Ships.Keys ).Distinct().ToList();
            }

            if ( SelectedTab != null )
                SelectedTab.BackColor = TabInactiveColor;

            SelectedTab = target;
            // 艦これ起動前にタブを選択した場合はフラグを立てておく(APIUpdatedで使う)
            if ( KCDatabase.Instance.Ships.Count == 0 )
                IsTabSelectedBeforeBoot = true;

            BuildShipView( SelectedTab );
            SelectedTab.BackColor = TabActiveColor;
        }
Esempio n. 19
0
        /// <summary>
        /// 指定したタブのグループのShipViewを作成します。
        /// </summary>
        /// <param name="target">作成するビューのグループデータ</param>
        private void BuildShipView( ImageLabel target )
        {
            if ( target == null )
                return;

            int groupID = (int)target.Tag;
            ShipGroupData group = KCDatabase.Instance.ShipGroup[groupID];

            ShipView.SuspendLayout();

            ShipView.Rows.Clear();

            var ships = group.MembersInstance;
            var rows = new List<DataGridViewRow>( ships.Count() );

            foreach ( ShipData ship in ships ) {

                if ( ship == null ) continue;

                DataGridViewRow row = CreateShipViewRow( ship );
                rows.Add( row );

            }

            for ( int i = 0; i < rows.Count; i++ )
                rows[i].Tag = i;

            ShipView.Rows.AddRange( rows.ToArray() );

            {
                int columnCount = ShipView.Columns.Count;
                if ( group.ColumnFilter != null ) columnCount = Math.Min( columnCount, group.ColumnFilter.Count );
                if ( group.ColumnWidth != null ) columnCount = Math.Min( columnCount, group.ColumnWidth.Count );

                for ( int i = 0; i < columnCount; i++ ) {
                    ShipView.Columns[i].Visible = group.ColumnFilter[i];
                    ShipView.Columns[i].Width = group.ColumnWidth[i];
                }
            }

            SetColumnAutoSize( group.ColumnAutoSize );
            SetLockShipNameScroll( group.LockShipNameScroll );

            ShipView.ResumeLayout();

            //status bar
            if ( KCDatabase.Instance.Ships.Count > 0 ) {
                Status_ShipCount.Text = string.Format( GeneralRes.AssignedCount, group.Members.Count );
                Status_LevelTotal.Text = string.Format( GeneralRes.TotalLevel, group.MembersInstance.Where( s => s != null ).Sum( s => s.Level ) );
                Status_LevelAverage.Text = string.Format( GeneralRes.AverageLevel, group.Members.Count > 0 ? group.MembersInstance.Where( s => s != null ).Average( s => s.Level ) : 0 );
            }
        }
		private void SetParameterText( ImageLabel label, int value ) {

			if ( value > 0 ) {
				label.ForeColor = SystemColors.ControlText;
				label.Text = "+" + value.ToString();
			} else if ( value == 0 ) {
				label.ForeColor = Color.Silver;
				label.Text = "0";
			} else {
				label.ForeColor = Color.Red;
				label.Text = value.ToString();
			}

		}
Esempio n. 21
0
		/// <summary>
		/// 艦隊の状態の情報をラベルに適用します。
		/// </summary>
		/// <param name="fleet">艦隊データ。</param>
		/// <param name="label">適用するラベル。</param>
		/// <param name="tooltip">適用するツールチップ。</param>
		/// <param name="prevstate">前回の状態。</param>
		/// <param name="timer">日時。</param>
		/// <returns>艦隊の状態を表す定数。</returns>
		public static FleetStates UpdateFleetState( FleetData fleet, ImageLabel label, ToolTip tooltip, FleetStates prevstate, ref DateTime timer ) {

			KCDatabase db = KCDatabase.Instance;


			//初期化
			tooltip.SetToolTip( label, null );
			label.BackColor = Color.Transparent;



			//所属艦なし
			if ( fleet == null || fleet.Members.Count( id => id != -1 ) == 0 ) {
				label.Text = "所属艦なし";
				label.ImageIndex = (int)ResourceManager.IconContent.FleetNoShip;

				return FleetStates.NoShip;
			}

			// その他の状態は設定した順番に判定
			foreach ( var key in Configuration.Config.FormFleetPlus.FleetIconOrder.List ) {
				var result = fleetStateFuncs[(int)key]( fleet, label, tooltip, prevstate );
				if (result != null ) {
					if ( result.Item2 != null ) {
						timer = result.Item2.Value;
					}
					return result.Item1;
				}
			}

			//出撃可能!
			{
				label.Text = "出撃可能!";
				label.ImageIndex = (int)ResourceManager.IconContent.FleetReady;

				return FleetStates.Ready;
			}

		}
        /// <summary>
        /// ShipViewを指定したタブに切り替えます。
        /// </summary>
        private void ChangeShipView( ImageLabel target )
        {
            if ( target == null ) return;

            var group = KCDatabase.Instance.ShipGroup[(int)target.Tag];
            var currentGroup = CurrentGroup;

            int headIndex = 0;
            List<int> selectedIDList = new List<int>();

            if ( group == null ) {
                Utility.Logger.Add( 3, "エラー:存在しないグループを参照しようとしました。開発者に連絡してください" );
                return;
            }

            if ( currentGroup != null ) {

                UpdateMembers( currentGroup );

                if ( CurrentGroup.GroupID != group.GroupID ) {
                    ShipView.Rows.Clear();		//別グループの行の並び順を引き継がせないようにする

                } else {
                    headIndex = ShipView.FirstDisplayedScrollingRowIndex;
                    selectedIDList = ShipView.SelectedRows.Cast<DataGridViewRow>().Select( r => (int)r.Cells[ShipView_ID.Index].Value ).ToList();
                }
            }

            if ( SelectedTab != null )
                SelectedTab.BackColor = TabInactiveColor;

            SelectedTab = target;

            BuildShipView( SelectedTab );
            SelectedTab.BackColor = TabActiveColor;

            if ( 0 <= headIndex && headIndex < ShipView.Rows.Count )
                ShipView.FirstDisplayedScrollingRowIndex = headIndex;

            if ( selectedIDList.Count > 0 ) {
                ShipView.ClearSelection();
                for ( int i = 0; i < ShipView.Rows.Count; i++ ) {
                    var row = ShipView.Rows[i];
                    if ( selectedIDList.Contains( (int)row.Cells[ShipView_ID.Index].Value ) ) {
                        row.Selected = true;
                    }
                }
            }
        }
Esempio n. 23
0
		/// <summary>
		/// 艦隊の状態の情報をもとにラベルを更新します。
		/// </summary>
		/// <param name="label">更新するラベル。</param>
		/// <param name="state">艦隊の状態。</param>
		/// <param name="timer">日時。</param>
		public static void RefreshFleetState( ImageLabel label, FleetStates state, DateTime timer ) {

			switch ( state ) {
				case FleetStates.Damaged:
				case FleetStates.SortieDamaged:
					label.BackColor = DateTime.Now.Second % 2 == 0 ? Color.LightCoral : Color.Transparent;
					break;
				case FleetStates.Docking:
					label.Text = "入渠中 " + DateTimeHelper.ToTimeRemainString( timer );
					if ( Utility.Configuration.Config.FormFleet.BlinkAtCompletion && ( timer - DateTime.Now ).TotalMilliseconds <= Utility.Configuration.Config.NotifierRepair.AccelInterval )
						label.BackColor = DateTime.Now.Second % 2 == 0 ? Color.LightGreen : Color.Transparent;
					break;
				case FleetStates.Expedition:
					label.Text = "遠征中 " + DateTimeHelper.ToTimeRemainString( timer );
					if ( Utility.Configuration.Config.FormFleet.BlinkAtCompletion && ( timer - DateTime.Now ).TotalMilliseconds <= Utility.Configuration.Config.NotifierExpedition.AccelInterval )
						label.BackColor = DateTime.Now.Second % 2 == 0 ? Color.LightGreen : Color.Transparent;
					break;
				case FleetStates.Tired:
					label.Text = "疲労 " + DateTimeHelper.ToTimeRemainString( timer );
					if ( Utility.Configuration.Config.FormFleet.BlinkAtCompletion && ( timer - DateTime.Now ).TotalMilliseconds <= 0 )
						label.BackColor = DateTime.Now.Second % 2 == 0 ? Color.LightGreen : Color.Transparent;
					break;
				case FleetStates.AnchorageRepairing:
					label.Text = "泊地修理中 " + DateTimeHelper.ToTimeElapsedString( KCDatabase.Instance.Fleet.AnchorageRepairingTimer );
					break;
			}

		}
Esempio n. 24
0
        /// <summary>
        /// ShipViewを指定したタブに切り替えます。
        /// </summary>
        private void ChangeShipView( ImageLabel target )
        {
            if ( target == null ) return;

            var group = KCDatabase.Instance.ShipGroup[(int)target.Tag];
            var currentGroup = CurrentGroup;

            if ( group == null ) {
                Utility.Logger.Add( 3, "エラー:存在しないグループを参照しようとしました。開発者に連絡してください" );
                return;
            }

            if ( currentGroup != null ) {

                UpdateMembers( currentGroup );

                if ( CurrentGroup.GroupID != group.GroupID )
                    ShipView.Rows.Clear();		//別グループの行の並び順を引き継がせないようにする
            }

            if ( SelectedTab != null )
                SelectedTab.BackColor = TabInactiveColor;

            SelectedTab = target;

            BuildShipView( SelectedTab );
            SelectedTab.BackColor = TabActiveColor;
        }
Esempio n. 25
0
 /// <summary>
 /// 艦隊の状態の情報をもとにラベルを更新します。
 /// </summary>
 /// <param name="label">更新するラベル。</param>
 /// <param name="state">艦隊の状態。</param>
 /// <param name="timer">日時。</param>
 public static void RefreshFleetState( ImageLabel label, FleetStates state, DateTime timer )
 {
     switch ( state ) {
         case FleetStates.Damaged:
         case FleetStates.SortieDamaged:
             label.BackColor = DateTime.Now.Second % 2 == 0 ? Color.LightCoral : Color.Transparent;
             break;
         case FleetStates.Docking:
             label.Text = FleetRes.Docking + DateTimeHelper.ToTimeRemainString( timer );
             break;
         case FleetStates.Expedition:
             label.Text = FleetRes.OnExped + DateTimeHelper.ToTimeRemainString( timer );
             break;
         case FleetStates.Tired:
             label.Text = FleetRes.Fatigued + DateTimeHelper.ToTimeRemainString( timer );
             break;
         case FleetStates.AnchorageRepairing:
             label.Text = FleetRes.AnchorageRepairing + DateTimeHelper.ToTimeElapsedString( KCDatabase.Instance.Fleet.AnchorageRepairingTimer );
             break;
     }
 }
Esempio n. 26
0
        private void MenuGroup_Delete_Click( object sender, EventArgs e )
        {
            ImageLabel senderLabel = MenuGroup.SourceControl as ImageLabel;
            if ( senderLabel == null )
                return;		//想定外

            ShipGroupData group = KCDatabase.Instance.ShipGroup[(int)senderLabel.Tag];

            if ( group != null ) {
                if ( MessageBox.Show( string.Format( "グループ [{0}] を削除しますか?\r\nこの操作は元に戻せません。", group.Name ), "確認",
                    MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button2 )
                    == System.Windows.Forms.DialogResult.Yes ) {

                    if ( SelectedTab == senderLabel ) {
                        ShipView.Rows.Clear();
                        SelectedTab = null;
                    }
                    KCDatabase.Instance.ShipGroup.ShipGroups.Remove( group );
                    TabPanel.Controls.Remove( senderLabel );
                    senderLabel.Dispose();
                }

            } else {
                MessageBox.Show( "このグループは削除できません。", "エラー", MessageBoxButtons.OK, MessageBoxIcon.Exclamation );
            }
        }
Esempio n. 27
0
        /// <summary>
        /// 艦隊の状態の情報をラベルに適用します。
        /// </summary>
        /// <param name="fleet">艦隊データ。</param>
        /// <param name="label">適用するラベル。</param>
        /// <param name="tooltip">適用するツールチップ。</param>
        /// <param name="prevstate">前回の状態。</param>
        /// <param name="timer">日時。</param>
        /// <returns>艦隊の状態を表す定数。</returns>
        public static FleetStates UpdateFleetState( FleetData fleet, ImageLabel label, ToolTip tooltip, FleetStates prevstate, ref DateTime timer )
        {
            KCDatabase db = KCDatabase.Instance;

            //初期化
            tooltip.SetToolTip( label, null );
            label.BackColor = Color.Transparent;

            //所属艦なし
            if ( fleet == null || fleet.Members.Count( id => id != -1 ) == 0 ) {
                label.Text = FleetRes.NoShips;
                label.ImageIndex = (int)ResourceManager.IconContent.FleetNoShip;

                return FleetStates.NoShip;
            }

            {	//入渠中
                long ntime = db.Docks.Values.Max(
                        dock => {
                            if ( dock.State == 1 && fleet.Members.Count( ( id => id == dock.ShipID ) ) > 0 )
                                return dock.CompletionTime.Ticks;
                            else return 0;
                        }
                        );

                if ( ntime > 0 ) {	//入渠中

                    timer = new DateTime( ntime );
                    label.Text = FleetRes.Docking + DateTimeHelper.ToTimeRemainString( timer );
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetDocking;

                    tooltip.SetToolTip( label, FleetRes.CompletionTime + ": " + timer );

                    return FleetStates.Docking;
                }

            }

            if ( fleet.IsInSortie ) {

                //大破出撃中
                if ( fleet.MembersInstance.Count( s =>
                        ( s != null && !fleet.EscapedShipList.Contains( s.MasterID ) && (double)s.HPCurrent / s.HPMax <= 0.25 )
                     ) > 0 ) {

                    label.Text = FleetRes.CriticalDamageAdvance;
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetSortieDamaged;

                    return FleetStates.SortieDamaged;

                } else {	//出撃中

                    label.Text = FleetRes.OnSortie;
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetSortie;

                    return FleetStates.Sortie;
                }

            }

            //遠征中
            if ( fleet.ExpeditionState != 0 ) {

                timer = fleet.ExpeditionTime;
                label.Text = FleetRes.OnExped + DateTimeHelper.ToTimeRemainString( timer );
                label.ImageIndex = (int)ResourceManager.IconContent.FleetExpedition;

                tooltip.SetToolTip( label, string.Format( "{0} : {1}\r\n" + FleetRes.CompletionTime + " : {2}", KCDatabase.Instance.Mission[fleet.ExpeditionDestination].ID, KCDatabase.Instance.Mission[fleet.ExpeditionDestination].Name, timer ) );

                return FleetStates.Expedition;
            }

            //大破艦あり
            if ( fleet.MembersInstance.Count( s =>
                ( s != null && !fleet.EscapedShipList.Contains( s.MasterID ) && (double)s.HPCurrent / s.HPMax <= 0.25 )
             ) > 0 ) {

                label.Text = FleetRes.CriticallyDamagedShip;
                label.ImageIndex = (int)ResourceManager.IconContent.FleetDamaged;
                //label.BackColor = Color.LightCoral;

                return FleetStates.Damaged;
            }

            //泊地修理中
            {
                if ( fleet.IsAnchorageRepairing ) {

                    label.Text = FleetRes.AnchorageRepairing + DateTimeHelper.ToTimeElapsedString( KCDatabase.Instance.Fleet.AnchorageRepairingTimer );
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetAnchorageRepairing;

                    tooltip.SetToolTip( label, string.Format( FleetRes.StartTime + ": {0}", KCDatabase.Instance.Fleet.AnchorageRepairingTimer ) );

                    return FleetStates.AnchorageRepairing;
                }
            }

            //未補給
            {
                int fuel = fleet.MembersInstance.Sum( ship => ship == null ? 0 : (int)( ( ship.MasterShip.Fuel - ship.Fuel ) * ( ship.IsMarried ? 0.85 : 1.00 ) ) );
                int ammo = fleet.MembersInstance.Sum( ship => ship == null ? 0 : (int)( ( ship.MasterShip.Ammo - ship.Ammo ) * ( ship.IsMarried ? 0.85 : 1.00 ) ) );
                int aircraft = fleet.MembersInstance.Sum(
                    ship => {
                        if ( ship == null ) return 0;
                        else {
                            int c = 0;
                            for ( int i = 0; i < ship.Slot.Count; i++ ) {
                                c += ship.MasterShip.Aircraft[i] - ship.Aircraft[i];
                            }
                            return c;
                        }
                    } );
                int bauxite = aircraft * 5;

                if ( fuel > 0 || ammo > 0 || bauxite > 0 ) {

                    label.Text = FleetRes.SupplyNeeded;
                    label.ImageIndex = (int)ResourceManager.IconContent.FleetNotReplenished;

                    tooltip.SetToolTip( label, string.Format( FleetRes.ResupplyTooltip, fuel, ammo, bauxite, aircraft ) );

                    return FleetStates.NotReplenished;
                }
            }

            //疲労
            {
                int cond = fleet.MembersInstance.Min( s => s == null ? 100 : s.Condition );

                if ( cond < Configuration.Config.Control.ConditionBorder && fleet.ConditionTime != null ) {

                    timer = (DateTime)fleet.ConditionTime;

                    label.Text = FleetRes.Fatigued + DateTimeHelper.ToTimeRemainString( timer );

                    if ( cond < 20 )
                        label.ImageIndex = (int)ResourceManager.IconContent.ConditionVeryTired;
                    else if ( cond < 30 )
                        label.ImageIndex = (int)ResourceManager.IconContent.ConditionTired;
                    else
                        label.ImageIndex = (int)ResourceManager.IconContent.ConditionLittleTired;

                    tooltip.SetToolTip( label, string.Format( FleetRes.EstimatedRecoveryTime + ": {0}", timer ) );

                    return FleetStates.Tired;

                } else if ( cond >= 50 ) {		//戦意高揚

                    label.Text = FleetRes.FightingSpiritHigh;
                    label.ImageIndex = (int)ResourceManager.IconContent.ConditionSparkle;
                    tooltip.SetToolTip( label, string.Format( FleetRes.SparkledTooltip, cond, Math.Ceiling( ( cond - 49 ) / 3.0 ) ) );
                    return FleetStates.Sparkled;

                }

            }

            //出撃可能!
            {
                label.Text = FleetRes.ReadyToSortie;
                label.ImageIndex = (int)ResourceManager.IconContent.FleetReady;

                return FleetStates.Ready;
            }
        }