From 43ee6ee5791205718e8df8b20a8dc9c33f8764d8 Mon Sep 17 00:00:00 2001
From: IM23a-bachmannj2
Date: Sun, 15 Sep 2024 11:46:38 +0200
Subject: [PATCH] added modifier list, added suggestion template (not started
yet)
---
app.py | 20 +-----
static/filterWeapons.js | 124 ++++++++++++++++++++++++++++++++++----
static/modifiers.json | 26 ++++++++
templates/calculator.html | 3 +
templates/suggestion.html | 53 ++++++++++++++++
5 files changed, 197 insertions(+), 29 deletions(-)
create mode 100644 static/modifiers.json
create mode 100644 templates/suggestion.html
diff --git a/app.py b/app.py
index 32b7028..ba63391 100644
--- a/app.py
+++ b/app.py
@@ -49,23 +49,9 @@ def about_us():
return render_template('about_us.html')
-def dps_calculation(damage, extra_dmg_percent, rpm, extra_fire_rate):
- dps = damage * (extra_dmg_percent / 100 + 1) * (rpm * (extra_fire_rate / 100 + 1) / 60)
- return round(dps, 2)
-
-
-def dpm_calculation(reload_time, extra_reload_speed, rpm, damage, extra_dmg_percent, mag_size, extra_fire_rate):
- adjusted_reload_time = reload_time * (extra_reload_speed / 100 + 1)
- adjusted_fire_rate = rpm * (extra_fire_rate / 100 + 1)
- total_damage_per_mag = damage * (extra_dmg_percent / 100 + 1) * mag_size
- dpm = total_damage_per_mag / ((adjusted_reload_time / 60) + (mag_size / adjusted_fire_rate))
- return round(dpm, 2)
-
-
-def average_dpm_calculation():
- dpm = float(dpm_calculation())
- return round(dpm / 60, 2)
-
+@app.route('/suggestion')
+def suggestion():
+ return render_template('suggestion.html')
if __name__ == '__main__':
app.run(debug=True)
diff --git a/static/filterWeapons.js b/static/filterWeapons.js
index 100e7f2..0fe7b98 100644
--- a/static/filterWeapons.js
+++ b/static/filterWeapons.js
@@ -36,7 +36,6 @@ function populateWeapons() {
// Function to display the selected weapon's stats in the UI
function updateWeaponStats(weapon) {
- // Example: Display the stats in variables or in the HTML
const statsElement = document.getElementById('weapon-stats');
statsElement.innerHTML = `
Name: ${weapon.name}
@@ -46,22 +45,121 @@ function updateWeaponStats(weapon) {
Reload Time: ${weapon.reload_time}
`;
- // You can store the values for further calculations:
- let damage = weapon.damage;
- let rpm = weapon.rpm;
- let magSize = weapon.mag_size;
- let reloadTime = weapon.reload_time;
+ // Store values for further calculations
+ const damage = weapon.damage;
+ const rpm = weapon.rpm;
+ const magSize = weapon.mag_size;
+ const reloadTime = weapon.reload_time;
- // Calculate DPS and DPM here or trigger a calculation function
+ // Calculate DPS and DPM initially without modifiers
calculateDPSAndDPM(damage, rpm, magSize, reloadTime);
}
-// Example DPS and DPM calculation function
-function calculateDPSAndDPM(damage, rpm, magSize, reloadTime) {
+// Function to fetch and populate modifiers from the JSON file
+function fetchModifiers() {
+ fetch('static/modifiers.json') // Adjust the path to your JSON file
+ .then(response => response.json())
+ .then(data => {
+ populateModifiers(data);
+ })
+ .catch(error => console.error('Error fetching modifiers:', error));
+}
+
+// Function to dynamically populate modifiers into the HTML
+function populateModifiers(modifiers) {
+ const modifiersContainer = document.getElementById('modifiers');
+
+ const createModifierSection = (title, modifierList) => {
+ const section = document.createElement('div');
+ const header = document.createElement('h3');
+ header.textContent = title;
+ section.appendChild(header);
+
+ modifierList.forEach(mod => {
+ const label = document.createElement('label');
+ const input = document.createElement('input');
+ input.type = 'checkbox';
+ input.id = mod.id;
+ input.value = mod.value;
+ input.dataset.type = mod.type; // Store if it's additive or multiplicative
+ label.appendChild(input);
+ label.appendChild(document.createTextNode(mod.label));
+ section.appendChild(label);
+ section.appendChild(document.createElement('br'));
+ });
+
+ return section;
+ };
+
+ // Clear any existing modifiers
+ modifiersContainer.innerHTML = '';
+
+ // Add Item Buffs
+ modifiersContainer.appendChild(createModifierSection('Item Buffs', modifiers.itemBuffs));
+
+ // Add Operative Perks
+ modifiersContainer.appendChild(createModifierSection('Operative Perks', modifiers.operativePerks));
+
+ // Add Ability Perks
+ modifiersContainer.appendChild(createModifierSection('Ability Perks', modifiers.abilityPerks));
+
+ // Add event listener to recalculate DPS/DPM when modifiers are toggled
+ modifiersContainer.addEventListener('change', applyModifiers);
+}
+
+// Function to apply the modifiers and recalculate DPS and DPM
+function applyModifiers() {
+ if (!selectedWeapon) return;
+
+ const damage = selectedWeapon.damage;
+ let rpm = selectedWeapon.rpm;
+ const magSize = selectedWeapon.mag_size;
+ const reloadTime = selectedWeapon.reload_time;
+
+ let dpsModifier = { additive: 0, multiplicative: 1 };
+ let dpmModifier = { additive: 0, multiplicative: 1 };
+ let rpmModifier = { additive: 0, multiplicative: 1 };
+
+ // Collect checked modifier values
+ document.querySelectorAll('#modifiers input:checked').forEach(mod => {
+ const modType = mod.dataset.type;
+ const modValue = parseFloat(mod.value);
+
+ if (mod.id.includes('dps')) {
+ if (modType === 'additive') dpsModifier.additive += modValue;
+ else dpsModifier.multiplicative *= modValue;
+ }
+ if (mod.id.includes('dpm')) {
+ if (modType === 'additive') dpmModifier.additive += modValue;
+ else dpmModifier.multiplicative *= modValue;
+ }
+ if (mod.id.includes('rpm')) {
+ if (modType === 'additive') rpmModifier.additive += modValue;
+ else rpmModifier.multiplicative *= modValue;
+ }
+ });
+
+ // Apply RPM modifiers
+ rpm = rpm + (rpm * rpmModifier.additive);
+ rpm = rpm * rpmModifier.multiplicative;
+
+ // Recalculate DPS and DPM with modifiers
+ calculateDPSAndDPM(damage, rpm, magSize, reloadTime, dpsModifier, dpmModifier);
+}
+
+// Function to calculate DPS, DPM, and RPS with optional modifiers
+// Function to calculate DPS and DPM with optional modifiers
+function calculateDPSAndDPM(damage, rpm, magSize, reloadTime, dpsModifier = { additive: 0, multiplicative: 1 }, dpmModifier = { additive: 0, multiplicative: 1 }) {
const rps = rpm / 60; // Rounds per second
- const dps = damage * rps;
+ let dps = damage * rps;
const reloadTimeMin = reloadTime / 60;
- const dpm = (magSize * damage) / (reloadTimeMin + (magSize / rpm));
+ let dpm = (magSize * damage) / (reloadTimeMin + (magSize / rpm));
+
+ // Apply modifiers
+ dps = dps + (dps * dpsModifier.additive);
+ dps = dps * dpsModifier.multiplicative;
+ dpm = dpm + (dpm * dpmModifier.additive);
+ dpm = dpm * dpmModifier.multiplicative;
// Display the calculated stats
const resultElement = document.getElementById('calculated-stats');
@@ -71,5 +169,7 @@ function calculateDPSAndDPM(damage, rpm, magSize, reloadTime) {
`;
}
+
// Call the fetch function to load the data and populate the dropdown on page load
-fetchWeaponsData();
\ No newline at end of file
+fetchWeaponsData();
+fetchModifiers();
diff --git a/static/modifiers.json b/static/modifiers.json
new file mode 100644
index 0000000..bea8d1d
--- /dev/null
+++ b/static/modifiers.json
@@ -0,0 +1,26 @@
+{
+ "itemBuffs": [
+ { "id": "dps-item-additive", "label": "DPS Additive (10%)", "value": 0.1, "type": "additive" },
+ { "id": "dps-item-multiplicative", "label": "DPS Multiplicative (20%)", "value": 1.2, "type": "multiplicative" },
+ { "id": "dpm-item-additive", "label": "DPM Additive (10%)", "value": 0.1, "type": "additive" },
+ { "id": "dpm-item-multiplicative", "label": "DPM Multiplicative (20%)", "value": 1.2, "type": "multiplicative" },
+ { "id": "rpm-item-additive", "label": "RPM Additive (5%)", "value": 0.05, "type": "additive" },
+ { "id": "rpm-item-multiplicative", "label": "RPM Multiplicative (10%)", "value": 1.1, "type": "multiplicative" }
+ ],
+ "operativePerks": [
+ { "id": "dps-perk-additive", "label": "DPS Additive (15%)", "value": 0.15, "type": "additive" },
+ { "id": "dps-perk-multiplicative", "label": "DPS Multiplicative (30%)", "value": 1.3, "type": "multiplicative" },
+ { "id": "dpm-perk-additive", "label": "DPM Additive (15%)", "value": 0.15, "type": "additive" },
+ { "id": "dpm-perk-multiplicative", "label": "DPM Multiplicative (30%)", "value": 1.3, "type": "multiplicative" },
+ { "id": "rpm-perk-additive", "label": "RPM Additive (10%)", "value": 0.1, "type": "additive" },
+ { "id": "rpm-perk-multiplicative", "label": "RPM Multiplicative (20%)", "value": 1.2, "type": "multiplicative" }
+ ],
+ "abilityPerks": [
+ { "id": "dps-ability-additive", "label": "DPS Additive (20%)", "value": 0.2, "type": "additive" },
+ { "id": "dps-ability-multiplicative", "label": "DPS Multiplicative (40%)", "value": 1.4, "type": "multiplicative" },
+ { "id": "dpm-ability-additive", "label": "DPM Additive (20%)", "value": 0.2, "type": "additive" },
+ { "id": "dpm-ability-multiplicative", "label": "DPM Multiplicative (40%)", "value": 1.4, "type": "multiplicative" },
+ { "id": "rpm-ability-additive", "label": "RPM Additive (10%)", "value": 0.1, "type": "additive" },
+ { "id": "rpm-ability-multiplicative", "label": "RPM Multiplicative (30%)", "value": 1.3, "type": "multiplicative" }
+ ]
+}
diff --git a/templates/calculator.html b/templates/calculator.html
index 98e14b8..7083994 100644
--- a/templates/calculator.html
+++ b/templates/calculator.html
@@ -64,6 +64,9 @@
+
+
+
+
+
diff --git a/templates/suggestion.html b/templates/suggestion.html
new file mode 100644
index 0000000..bb8d065
--- /dev/null
+++ b/templates/suggestion.html
@@ -0,0 +1,53 @@
+
+
+