diff --git a/saw/src/main/java/saw/gui/dlgPrefs.form b/saw/src/main/java/saw/gui/dlgPrefs.form index 0fcef11f..2fa8c143 100644 --- a/saw/src/main/java/saw/gui/dlgPrefs.form +++ b/saw/src/main/java/saw/gui/dlgPrefs.form @@ -525,6 +525,16 @@ + + + + + + + + + + diff --git a/saw/src/main/java/saw/gui/dlgPrefs.java b/saw/src/main/java/saw/gui/dlgPrefs.java index 459412b5..af34b811 100644 --- a/saw/src/main/java/saw/gui/dlgPrefs.java +++ b/saw/src/main/java/saw/gui/dlgPrefs.java @@ -81,6 +81,7 @@ private void SetState() { chkHeatAllMP.setEnabled( true ); } chkHeatUAC.setSelected( Prefs.getBoolean( "HeatACFullRate", false ) ); + chkHeatStreaks.setSelected( Prefs.getBoolean( "HeatStreaksHalfRate", false ) ); chkCostAmmoMult.setSelected( Prefs.getBoolean( "CostAmmoMult", false ) ); chkAutoAddECM.setSelected( Prefs.getBoolean( "AutoAddECM", true ) ); @@ -156,6 +157,7 @@ private void SaveState() { Prefs.putBoolean( "HeatExcludeJumpMP", chkHeatJumpMP.isSelected() ); Prefs.putBoolean( "HeatExcludeAllMP", chkHeatAllMP.isSelected() ); Prefs.putBoolean( "HeatACFullRate", chkHeatUAC.isSelected() ); + Prefs.putBoolean( "HeatStreaksHalfRate", chkHeatStreaks.isSelected() ); Prefs.putBoolean( "CostAmmoMult", chkCostAmmoMult.isSelected() ); Prefs.putBoolean( "UseMaxArmorInstead", chkMaxNotInt.isSelected() ); Prefs.putBoolean( "ArmorUseCustomPercent", chkCustomPercents.isSelected() ); @@ -221,6 +223,7 @@ private void SetDefaults() { Prefs.putBoolean( "HeatExcludeJumpMP", false ); Prefs.putBoolean( "HeatExcludeAllMP", false ); Prefs.putBoolean( "HeatACFullRate", false ); + Prefs.putBoolean( "HeatStreaksHalfRate", false ); Prefs.putBoolean( "CostAmmoMult", false ); Prefs.putBoolean( "UseMaxArmorInstead", false ); Prefs.putBoolean( "ArmorUseCustomPercent", false ); @@ -300,6 +303,7 @@ private void initComponents() { chkHeatJumpMP = new javax.swing.JCheckBox(); chkHeatAllMP = new javax.swing.JCheckBox(); chkHeatUAC = new javax.swing.JCheckBox(); + chkHeatStreaks = new javax.swing.JCheckBox(); jLabel19 = new javax.swing.JLabel(); jPanel15 = new javax.swing.JPanel(); chkCostAmmoMult = new javax.swing.JCheckBox(); @@ -671,6 +675,14 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); jPanel8.add(chkHeatUAC, gridBagConstraints); + chkHeatStreaks.setText("Streaks have 50% fire rate (ala MML)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 8; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); + jPanel8.add(chkHeatStreaks, gridBagConstraints); + jLabel19.setText("Non-BV Heat Calculations:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; @@ -1695,6 +1707,7 @@ private void btnDefaultImagePathActionPerformed(java.awt.event.ActionEvent evt) private javax.swing.JCheckBox chkHeatJumpMP; private javax.swing.JCheckBox chkHeatOSWeapons; private javax.swing.JCheckBox chkHeatRearWeapons; + private javax.swing.JCheckBox chkHeatStreaks; private javax.swing.JCheckBox chkHeatSystems; private javax.swing.JCheckBox chkHeatUAC; private javax.swing.JCheckBox chkLoadLastMech; diff --git a/ssw/src/main/java/ssw/gui/dlgPrefs.form b/ssw/src/main/java/ssw/gui/dlgPrefs.form index 49e2f094..451594ce 100644 --- a/ssw/src/main/java/ssw/gui/dlgPrefs.form +++ b/ssw/src/main/java/ssw/gui/dlgPrefs.form @@ -525,6 +525,16 @@ + + + + + + + + + + diff --git a/ssw/src/main/java/ssw/gui/dlgPrefs.java b/ssw/src/main/java/ssw/gui/dlgPrefs.java index cb8f7e80..39d328a3 100644 --- a/ssw/src/main/java/ssw/gui/dlgPrefs.java +++ b/ssw/src/main/java/ssw/gui/dlgPrefs.java @@ -81,6 +81,7 @@ private void SetState() { chkHeatAllMP.setEnabled( true ); } chkHeatUAC.setSelected( Prefs.getBoolean( "HeatACFullRate", false ) ); + chkHeatStreaks.setSelected( Prefs.getBoolean( "HeatStreaksHalfRate", false ) ); chkCostAmmoMult.setSelected( Prefs.getBoolean( "CostAmmoMult", false ) ); chkAutoAddECM.setSelected( Prefs.getBoolean( "AutoAddECM", true ) ); @@ -153,6 +154,7 @@ private void SaveState() { Prefs.putBoolean( "HeatExcludeJumpMP", chkHeatJumpMP.isSelected() ); Prefs.putBoolean( "HeatExcludeAllMP", chkHeatAllMP.isSelected() ); Prefs.putBoolean( "HeatACFullRate", chkHeatUAC.isSelected() ); + Prefs.putBoolean( "HeatStreaksHalfRate", chkHeatStreaks.isSelected() ); Prefs.putBoolean( "CostAmmoMult", chkCostAmmoMult.isSelected() ); Prefs.putBoolean( "UseMaxArmorInstead", chkMaxNotInt.isSelected() ); Prefs.putBoolean( "ArmorUseCustomPercent", chkCustomPercents.isSelected() ); @@ -216,6 +218,7 @@ private void SetDefaults() { Prefs.putBoolean( "HeatExcludeJumpMP", false ); Prefs.putBoolean( "HeatExcludeAllMP", false ); Prefs.putBoolean( "HeatACFullRate", false ); + Prefs.putBoolean( "HeatStreaksHalfRate", false ); Prefs.putBoolean( "CostAmmoMult", false ); Prefs.putBoolean( "UseMaxArmorInstead", false ); Prefs.putBoolean( "ArmorUseCustomPercent", false ); @@ -295,6 +298,7 @@ private void initComponents() { chkHeatJumpMP = new javax.swing.JCheckBox(); chkHeatAllMP = new javax.swing.JCheckBox(); chkHeatUAC = new javax.swing.JCheckBox(); + chkHeatStreaks = new javax.swing.JCheckBox(); jLabel19 = new javax.swing.JLabel(); jPanel15 = new javax.swing.JPanel(); chkCostAmmoMult = new javax.swing.JCheckBox(); @@ -665,6 +669,14 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); jPanel8.add(chkHeatUAC, gridBagConstraints); + chkHeatStreaks.setText("Streaks have 50% fire rate (ala MML)"); + gridBagConstraints = new java.awt.GridBagConstraints(); + gridBagConstraints.gridx = 0; + gridBagConstraints.gridy = 8; + gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; + gridBagConstraints.insets = new java.awt.Insets(4, 0, 0, 0); + jPanel8.add(chkHeatStreaks, gridBagConstraints); + jLabel19.setText("Non-BV Heat Calculations:"); gridBagConstraints = new java.awt.GridBagConstraints(); gridBagConstraints.anchor = java.awt.GridBagConstraints.WEST; @@ -1681,6 +1693,7 @@ private void btnDefaultImagePathActionPerformed(java.awt.event.ActionEvent evt) private javax.swing.JCheckBox chkHeatJumpMP; private javax.swing.JCheckBox chkHeatOSWeapons; private javax.swing.JCheckBox chkHeatRearWeapons; + private javax.swing.JCheckBox chkHeatStreaks; private javax.swing.JCheckBox chkHeatSystems; private javax.swing.JCheckBox chkHeatUAC; private javax.swing.JCheckBox chkLoadLastMech; diff --git a/ssw/src/main/java/ssw/gui/frmMain.form b/ssw/src/main/java/ssw/gui/frmMain.form index cebc2613..804b7b8f 100644 --- a/ssw/src/main/java/ssw/gui/frmMain.form +++ b/ssw/src/main/java/ssw/gui/frmMain.form @@ -8156,15 +8156,15 @@ - + - + - + - + @@ -8253,13 +8253,13 @@ - + - + - + diff --git a/ssw/src/main/java/ssw/gui/frmMain.java b/ssw/src/main/java/ssw/gui/frmMain.java index 8c0f860d..5213101e 100644 --- a/ssw/src/main/java/ssw/gui/frmMain.java +++ b/ssw/src/main/java/ssw/gui/frmMain.java @@ -2163,7 +2163,7 @@ public void RefreshInfoPane() { txtInfoTonnage.setText( "Tons: " + CurMech.GetCurrentTons() ); txtInfoFreeTons.setText( "Free Tons: " + ( CurMech.GetTonnage() - CurMech.GetCurrentTons() ) ); } - txtInfoMaxHeat.setText( "Max Heat: " + CurMech.GetMaxHeat() ); + txtInfoMaxHeat.setText( "Max Heat: " + String.format( "%1$,.1f", CurMech.GetMaxHeat() ) ); txtInfoHeatDiss.setText( "Heat Dissipation: " + CurMech.GetHeatSinks().TotalDissipation() ); txtInfoFreeCrits.setText( "Free Crits: " + CurMech.GetLoadout().FreeCrits() ); txtInfoUnplaced.setText( "Unplaced Crits: " + CurMech.GetLoadout().UnplacedCrits() ); @@ -9895,10 +9895,10 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { txtInfoMaxHeat.setEditable(false); txtInfoMaxHeat.setFont(new java.awt.Font("Arial", 0, 11)); // NOI18N txtInfoMaxHeat.setHorizontalAlignment(javax.swing.JTextField.CENTER); - txtInfoMaxHeat.setText("Max Heat: 000"); - txtInfoMaxHeat.setMaximumSize(new java.awt.Dimension(77, 20)); - txtInfoMaxHeat.setMinimumSize(new java.awt.Dimension(77, 20)); - txtInfoMaxHeat.setPreferredSize(new java.awt.Dimension(77, 20)); + txtInfoMaxHeat.setText("Max Heat: 00.0"); + txtInfoMaxHeat.setMaximumSize(new java.awt.Dimension(87, 20)); + txtInfoMaxHeat.setMinimumSize(new java.awt.Dimension(87, 20)); + txtInfoMaxHeat.setPreferredSize(new java.awt.Dimension(87, 20)); pnlInfoPanel.add(txtInfoMaxHeat); txtInfoHeatDiss.setEditable(false); @@ -9941,9 +9941,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { txtInfoCost.setFont(new java.awt.Font("Arial", 0, 11)); // NOI18N txtInfoCost.setHorizontalAlignment(javax.swing.JTextField.CENTER); txtInfoCost.setText("Cost: 000,000,000"); - txtInfoCost.setMaximumSize(new java.awt.Dimension(125, 20)); - txtInfoCost.setMinimumSize(new java.awt.Dimension(125, 20)); - txtInfoCost.setPreferredSize(new java.awt.Dimension(125, 20)); + txtInfoCost.setMaximumSize(new java.awt.Dimension(115, 20)); + txtInfoCost.setMinimumSize(new java.awt.Dimension(115, 20)); + txtInfoCost.setPreferredSize(new java.awt.Dimension(115, 20)); pnlInfoPanel.add(txtInfoCost); gridBagConstraints = new java.awt.GridBagConstraints(); diff --git a/ssw/src/main/java/ssw/gui/frmMainWide.form b/ssw/src/main/java/ssw/gui/frmMainWide.form index 0bd4a11d..94aa6fea 100644 --- a/ssw/src/main/java/ssw/gui/frmMainWide.form +++ b/ssw/src/main/java/ssw/gui/frmMainWide.form @@ -7999,15 +7999,15 @@ - + - + - + - + @@ -8096,13 +8096,13 @@ - + - + - + diff --git a/ssw/src/main/java/ssw/gui/frmMainWide.java b/ssw/src/main/java/ssw/gui/frmMainWide.java index 1366108c..b916b727 100644 --- a/ssw/src/main/java/ssw/gui/frmMainWide.java +++ b/ssw/src/main/java/ssw/gui/frmMainWide.java @@ -2157,7 +2157,7 @@ public void RefreshInfoPane() { txtInfoTonnage.setText( "Tons: " + CurMech.GetCurrentTons() ); txtInfoFreeTons.setText( "Free Tons: " + ( CurMech.GetTonnage() - CurMech.GetCurrentTons() ) ); } - txtInfoMaxHeat.setText( "Max Heat: " + CurMech.GetMaxHeat() ); + txtInfoMaxHeat.setText( "Max Heat: " + String.format( "%1$,.1f", CurMech.GetMaxHeat() ) ); txtInfoHeatDiss.setText( "Heat Dissipation: " + CurMech.GetHeatSinks().TotalDissipation() ); txtInfoFreeCrits.setText( "Free Crits: " + CurMech.GetLoadout().FreeCrits() ); txtInfoUnplaced.setText( "Unplaced Crits: " + CurMech.GetLoadout().UnplacedCrits() ); @@ -9718,10 +9718,10 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { txtInfoMaxHeat.setEditable(false); txtInfoMaxHeat.setFont(new java.awt.Font("Arial", 0, 11)); // NOI18N txtInfoMaxHeat.setHorizontalAlignment(javax.swing.JTextField.CENTER); - txtInfoMaxHeat.setText("Max Heat: 000"); - txtInfoMaxHeat.setMaximumSize(new java.awt.Dimension(77, 20)); - txtInfoMaxHeat.setMinimumSize(new java.awt.Dimension(77, 20)); - txtInfoMaxHeat.setPreferredSize(new java.awt.Dimension(77, 20)); + txtInfoMaxHeat.setText("Max Heat: 00.0"); + txtInfoMaxHeat.setMaximumSize(new java.awt.Dimension(87, 20)); + txtInfoMaxHeat.setMinimumSize(new java.awt.Dimension(87, 20)); + txtInfoMaxHeat.setPreferredSize(new java.awt.Dimension(87, 20)); pnlInfoPanel.add(txtInfoMaxHeat); txtInfoHeatDiss.setEditable(false); @@ -9764,9 +9764,9 @@ public void actionPerformed(java.awt.event.ActionEvent evt) { txtInfoCost.setFont(new java.awt.Font("Arial", 0, 11)); // NOI18N txtInfoCost.setHorizontalAlignment(javax.swing.JTextField.CENTER); txtInfoCost.setText("Cost: 000,000,000"); - txtInfoCost.setMaximumSize(new java.awt.Dimension(125, 20)); - txtInfoCost.setMinimumSize(new java.awt.Dimension(125, 20)); - txtInfoCost.setPreferredSize(new java.awt.Dimension(125, 20)); + txtInfoCost.setMaximumSize(new java.awt.Dimension(115, 20)); + txtInfoCost.setMinimumSize(new java.awt.Dimension(115, 20)); + txtInfoCost.setPreferredSize(new java.awt.Dimension(115, 20)); pnlInfoPanel.add(txtInfoCost); txtChatInfo.setBackground(new java.awt.Color(238, 238, 238)); diff --git a/sswlib/src/main/java/Print/PrintMech.java b/sswlib/src/main/java/Print/PrintMech.java index 8eea5c96..c0700074 100644 --- a/sswlib/src/main/java/Print/PrintMech.java +++ b/sswlib/src/main/java/Print/PrintMech.java @@ -553,7 +553,7 @@ private void DrawMechData( Graphics2D graphics ) { graphics.drawString( String.format( "%1$,d", CurMech.GetCurrentBV() ), p[PrintConsts.BV2].x, p[PrintConsts.BV2].y ); else graphics.drawString( String.format( "%1$,.0f (Base: %2$,d)", BV, CurMech.GetCurrentBV() ), p[PrintConsts.BV2].x, p[PrintConsts.BV2].y ); - graphics.drawString( "Weapon Heat (" + CurMech.GetWeaponHeat(false, false, true, false) + ")", p[PrintConsts.MAX_HEAT].x-1, p[PrintConsts.MAX_HEAT].y-7 ); + graphics.drawString( String.format( "Weapon Heat (%1$,.1f)", CurMech.GetWeaponHeat() ), p[PrintConsts.MAX_HEAT].x-1, p[PrintConsts.MAX_HEAT].y-7 ); graphics.drawString( "Dissipation (" + CurMech.GetHeatSinks().TotalDissipation() + ")", p[PrintConsts.MAX_HEAT].x-1, p[PrintConsts.MAX_HEAT].y+1 ); //graphics.drawString( "Weapon Heat (" + CurMech.GetWeaponHeat(false, false, true, false) + ")", p[PrintConsts.MAX_HEAT].x-1, p[PrintConsts.MAX_HEAT].y ); graphics.setFont( PrintConsts.SmallFont ); diff --git a/sswlib/src/main/java/components/Mech.java b/sswlib/src/main/java/components/Mech.java index 5e67849a..fb72cddf 100644 --- a/sswlib/src/main/java/components/Mech.java +++ b/sswlib/src/main/java/components/Mech.java @@ -2165,9 +2165,9 @@ public double GetCurrentDryTons() { return result; } - public int GetMaxHeat() { + public double GetMaxHeat() { // returns the maximum heat of the mech - int result = 0; + double result = 0; result += GetMovementHeat(); result += GetWeaponHeat(); if( ! Prefs.getBoolean( "HeatExcludeSystems", false ) ) { @@ -2287,11 +2287,12 @@ public int GetBVMovementHeat() { } } - public int GetWeaponHeat() + public double GetWeaponHeat() { return GetWeaponHeat(Prefs.getBoolean("HeatExcludeOS", false), Prefs.getBoolean( "HeatExcludeRear", false), - Prefs.getBoolean( "HeatACFullRate", true), + Prefs.getBoolean( "HeatACFullRate", false), + Prefs.getBoolean( "HeatStreaksHalfRate", false), Prefs.getBoolean( "HeatExcludeEquips", false)); } @@ -2299,17 +2300,19 @@ public int GetWeaponHeat() * * @param ExcludeOS * @param ExcludeRear - * @param FullRate + * @param ACFullRate + * @param StreaksHalfRate * @param ExcludeEquip * @return int representing the total weapon heat limited by the exclusions provided */ - public int GetWeaponHeat(boolean ExcludeOS, + public double GetWeaponHeat(boolean ExcludeOS, boolean ExcludeRear, - boolean FullRate, + boolean ACFullRate, + boolean StreaksHalfRate, boolean ExcludeEquip) { // returns the heat generated by weaponry and equipment that are not // core components - int result = 0; + double result = 0; ArrayList v = CurLoadout.GetNonCore(); if( v.size() <= 0 ) { return result; @@ -2321,14 +2324,17 @@ public int GetWeaponHeat(boolean ExcludeOS, if( a instanceof ifWeapon ) { boolean OS = ((ifWeapon) a).IsOneShot(); boolean Rear = a.IsMountedRear(); - int rate = 1; - if( ( a instanceof RangedWeapon ) && FullRate ) { + double rate = 1; + if( ( a instanceof RangedWeapon ) && ACFullRate ) { if( ((RangedWeapon) a).IsUltra() ) { rate = 2; } else if( ((RangedWeapon) a).IsRotary() ) { rate = 6; } } + if( ((ifWeapon) a).IsStreak() && StreaksHalfRate ) { + rate = 0.5; + } if( ExcludeOS || ExcludeRear ) { if( ExcludeOS ) { if( ExcludeRear ) {