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 ) {