HASH a99045046397
DATE 2025-07-21
SUBJECT feat: add short and burst durations
FILES 4 CHANGED
HASH a99045046397
DATE 2025-07-21
SUBJECT feat: add short and burst durations
FILES 4 CHANGED
┌─ nix/apps/simulation/default.nix ──────────────────────────────────────────┐
│ diff --git a/nix/apps/simulation/default.nix b/nix/apps/simulation/default.nix │
│ index db651e1..2168ca1 100644 │
│ --- a/nix/apps/simulation/default.nix │
│ +++ b/nix/apps/simulation/default.nix │
│ @@ -55,6 +55,92 @@ │
│ duration = "long"; │
│ template = "multiTarget"; │
│ }; │
│ + dps-p1-raid-single-short = mkMassSim { │
│ + specs = "dps"; # shortcut to all DPS classes templates │
│ + encounter = encounter.raid.short.singleTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "single"; │
│ + duration = "short"; │
│ + template = "singleTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-three-short = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.short.threeTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "three"; │
│ + duration = "short"; │
│ + template = "multiTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-cleave-short = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.short.cleave; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "cleave"; │
│ + duration = "short"; │
│ + template = "cleave"; │
│ + }; │
│ + │
│ + dps-p1-raid-ten-short = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.short.tenTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "ten"; │
│ + duration = "short"; │
│ + template = "multiTarget"; │
│ + }; │
│ + dps-p1-raid-single-burst = mkMassSim { │
│ + specs = "dps"; # burstcut to all DPS classes templates │
│ + encounter = encounter.raid.burst.singleTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "single"; │
│ + duration = "burst"; │
│ + template = "singleTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-three-burst = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.burst.threeTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "three"; │
│ + duration = "burst"; │
│ + template = "multiTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-cleave-burst = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.burst.cleave; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "cleave"; │
│ + duration = "burst"; │
│ + template = "cleave"; │
│ + }; │
│ + │
│ + dps-p1-raid-ten-burst = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.burst.tenTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "ten"; │
│ + duration = "burst"; │
│ + template = "multiTarget"; │
│ + }; │
│ }; │
│ │
│ # Script that runs all simulations │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ nix/apps/simulation/default.nix ────┐
│ diff --git a/nix/apps/simulation/default.nix │
│ b/nix/apps/simulation/default.nix │
│ index db651e1..2168ca1 100644 │
│ --- a/nix/apps/simulation/default.nix │
│ +++ b/nix/apps/simulation/default.nix │
│ @@ -55,6 +55,92 @@ │
│ duration = "long"; │
│ template = "multiTarget"; │
│ }; │
│ + dps-p1-raid-single-short = mkMassSim { │
│ + specs = "dps"; # shortcut to all DPS │
│ classes templates │
│ + encounter = encounter.raid.short.sing │
│ leTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "single"; │
│ + duration = "short"; │
│ + template = "singleTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-three-short = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.short.thre │
│ eTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "three"; │
│ + duration = "short"; │
│ + template = "multiTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-cleave-short = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.short.clea │
│ ve; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "cleave"; │
│ + duration = "short"; │
│ + template = "cleave"; │
│ + }; │
│ + │
│ + dps-p1-raid-ten-short = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.short.tenT │
│ arget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "ten"; │
│ + duration = "short"; │
│ + template = "multiTarget"; │
│ + }; │
│ + dps-p1-raid-single-burst = mkMassSim { │
│ + specs = "dps"; # burstcut to all DPS │
│ classes templates │
│ + encounter = encounter.raid.burst.sing │
│ leTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "single"; │
│ + duration = "burst"; │
│ + template = "singleTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-three-burst = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.burst.thre │
│ eTarget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "three"; │
│ + duration = "burst"; │
│ + template = "multiTarget"; │
│ + }; │
│ + │
│ + dps-p1-raid-cleave-burst = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.burst.clea │
│ ve; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "cleave"; │
│ + duration = "burst"; │
│ + template = "cleave"; │
│ + }; │
│ + │
│ + dps-p1-raid-ten-burst = mkMassSim { │
│ + specs = "dps"; │
│ + encounter = encounter.raid.burst.tenT │
│ arget; │
│ + iterations = 10000; │
│ + phase = "p1"; │
│ + encounterType = "raid"; │
│ + targetCount = "ten"; │
│ + duration = "burst"; │
│ + template = "multiTarget"; │
│ + }; │
│ }; │
│ │
│ # Script that runs all simulations │
└──────────────────────────────────────────────┘
┌─ nix/encounter/default.nix ────────────────────────────────────────────────┐
│ diff --git a/nix/encounter/default.nix b/nix/encounter/default.nix │
│ index 0d5bad2..efe2bee 100644 │
│ --- a/nix/encounter/default.nix │
│ +++ b/nix/encounter/default.nix │
│ @@ -5,34 +5,32 @@ │
│ }: let │
│ inherit (lib.sim.encounter) mkEncounter; │
│ inherit (lib) genList; │
│ + │
│ + # Target count configurations │
│ + targetConfigs = { │
│ + singleTarget = [target.defaultRaidBoss]; │
│ + cleave = [target.defaultRaidBoss target.defaultRaidBoss]; │
│ + threeTarget = genList (_: target.defaultRaidBoss) 3; │
│ + fiveTarget = genList (_: target.defaultRaidBoss) 5; │
│ + tenTarget = genList (_: target.defaultRaidBoss) 10; │
│ + twentyTarget = genList (_: target.defaultRaidBoss) 20; │
│ + }; │
│ + │
│ + # Duration configurations │
│ + durations = { │
│ + long = {duration = 300; durationVariation = 60;}; │
│ + short = {duration = 120; durationVariation = 30;}; │
│ + burst = {duration = 30; durationVariation = 10;}; │
│ + }; │
│ + │
│ + # Generate encounters for a duration type │
│ + mkDurationEncounters = durationConfig: │
│ + lib.mapAttrs (name: targets: │
│ + mkEncounter (durationConfig // {inherit targets;}) │
│ + ) targetConfigs; │
│ + │
│ encounter = { │
│ - raid = { │
│ - long = { │
│ - singleTarget = mkEncounter { │
│ - targets = [ │
│ - target.defaultRaidBoss │
│ - ]; │
│ - }; │
│ - cleave = mkEncounter { │
│ - targets = [ │
│ - target.defaultRaidBoss │
│ - target.defaultRaidBoss │
│ - ]; │
│ - }; │
│ - threeTarget = mkEncounter { │
│ - targets = genList (_: target.defaultRaidBoss) 3; │
│ - }; │
│ - fiveTarget = mkEncounter { │
│ - targets = genList (_: target.defaultRaidBoss) 5; │
│ - }; │
│ - tenTarget = mkEncounter { │
│ - targets = genList (_: target.defaultRaidBoss) 10; │
│ - }; │
│ - twentyTarget = mkEncounter { │
│ - targets = genList (_: target.defaultRaidBoss) 20; │
│ - }; │
│ - }; │
│ - }; │
│ + raid = lib.mapAttrs (_: mkDurationEncounters) durations; │
│ }; │
│ in { │
│ flake.encounter = encounter; │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ nix/encounter/default.nix ──────────┐
│ diff --git a/nix/encounter/default.nix b/nix │
│ /encounter/default.nix │
│ index 0d5bad2..efe2bee 100644 │
│ --- a/nix/encounter/default.nix │
│ +++ b/nix/encounter/default.nix │
│ @@ -5,34 +5,32 @@ │
│ }: let │
│ inherit (lib.sim.encounter) mkEncounter; │
│ inherit (lib) genList; │
│ + │
│ + # Target count configurations │
│ + targetConfigs = { │
│ + singleTarget = [target.defaultRaidBoss] │
│ ; │
│ + cleave = [target.defaultRaidBoss target │
│ .defaultRaidBoss]; │
│ + threeTarget = genList (_: target.defaul │
│ tRaidBoss) 3; │
│ + fiveTarget = genList (_: target.default │
│ RaidBoss) 5; │
│ + tenTarget = genList (_: target.defaultR │
│ aidBoss) 10; │
│ + twentyTarget = genList (_: target.defau │
│ ltRaidBoss) 20; │
│ + }; │
│ + │
│ + # Duration configurations │
│ + durations = { │
│ + long = {duration = 300; durationVariati │
│ on = 60;}; │
│ + short = {duration = 120; durationVariat │
│ ion = 30;}; │
│ + burst = {duration = 30; durationVariati │
│ on = 10;}; │
│ + }; │
│ + │
│ + # Generate encounters for a duration type │
│ + mkDurationEncounters = durationConfig: │
│ + lib.mapAttrs (name: targets: │
│ + mkEncounter (durationConfig // {inher │
│ it targets;}) │
│ + ) targetConfigs; │
│ + │
│ encounter = { │
│ - raid = { │
│ - long = { │
│ - singleTarget = mkEncounter { │
│ - targets = [ │
│ - target.defaultRaidBoss │
│ - ]; │
│ - }; │
│ - cleave = mkEncounter { │
│ - targets = [ │
│ - target.defaultRaidBoss │
│ - target.defaultRaidBoss │
│ - ]; │
│ - }; │
│ - threeTarget = mkEncounter { │
│ - targets = genList (_: target.defa │
│ ultRaidBoss) 3; │
│ - }; │
│ - fiveTarget = mkEncounter { │
│ - targets = genList (_: target.defa │
│ ultRaidBoss) 5; │
│ - }; │
│ - tenTarget = mkEncounter { │
│ - targets = genList (_: target.defa │
│ ultRaidBoss) 10; │
│ - }; │
│ - twentyTarget = mkEncounter { │
│ - targets = genList (_: target.defa │
│ ultRaidBoss) 20; │
│ - }; │
│ - }; │
│ - }; │
│ + raid = lib.mapAttrs (_: mkDurationEncou │
│ nters) durations; │
│ }; │
│ in { │
│ flake.encounter = encounter; │
└──────────────────────────────────────────────┘
┌─ web/src/layouts/DynamicRankingsLayout.astro ──────────────────────────────┐
│ diff --git a/web/src/layouts/DynamicRankingsLayout.astro b/web/src/layouts/Dynamic │
│ RankingsLayout.astro │
│ index fb82fa6..8344692 100644 │
│ --- a/web/src/layouts/DynamicRankingsLayout.astro │
│ +++ b/web/src/layouts/DynamicRankingsLayout.astro │
│ @@ -298,7 +298,9 @@ const { title, description } = Astro.props; │
│ <div class="control-group"> │
│ <label for="duration">Duration:</label> │
│ <select id="duration"> │
│ - <option value="long">Long</option> │
│ + <option value="long">Long (5 min)</option> │
│ + <option value="short">Short (2 min)</option> │
│ + <option value="burst">Burst (30s)</option> │
│ </select> │
│ </div> │
│ │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ ...s/DynamicRankingsLayout.astro ───┐
│ diff --git a/web/src/layouts/DynamicRankings │
│ Layout.astro b/web/src/layouts/DynamicRankin │
│ gsLayout.astro │
│ index fb82fa6..8344692 100644 │
│ --- a/web/src/layouts/DynamicRankingsLayout. │
│ astro │
│ +++ b/web/src/layouts/DynamicRankingsLayout. │
│ astro │
│ @@ -298,7 +298,9 @@ const { title, descripti │
│ on } = Astro.props; │
│ <div class="control-group"> │
│ <label for="duration">Duration: │
│ </label> │
│ <select id="duration"> │
│ - <option value="long">Long</op │
│ tion> │
│ + <option value="long">Long (5 │
│ min)</option> │
│ + <option value="short">Short ( │
│ 2 min)</option> │
│ + <option value="burst">Burst ( │
│ 30s)</option> │
│ </select> │
│ </div> │
│ │
└──────────────────────────────────────────────┘
┌─ web/src/pages/index.astro ────────────────────────────────────────────────┐
│ diff --git a/web/src/pages/index.astro b/web/src/pages/index.astro │
│ index 8ec0fba..496898f 100644 │
│ --- a/web/src/pages/index.astro │
│ +++ b/web/src/pages/index.astro │
│ @@ -3,6 +3,6 @@ import DynamicRankingsLayout from '../layouts/DynamicRankingsLayou │
│ t.astro'; │
│ --- │
│ │
│ <DynamicRankingsLayout │
│ - title="WoW MoP DPS Rankings" │
│ - description="Interactive simulation results for all encounters and target count │
│ s" │
│ + title="MoP Simulation DPS Rankings" │
│ + description="Take this all with a grain of salt. Many classes simulation's are │
│ currently incomplete" │
│ /> │
└────────────────────────────────────────────────────────────────────────────────────┘
┌─ web/src/pages/index.astro ──────────┐
│ diff --git a/web/src/pages/index.astro b/web │
│ /src/pages/index.astro │
│ index 8ec0fba..496898f 100644 │
│ --- a/web/src/pages/index.astro │
│ +++ b/web/src/pages/index.astro │
│ @@ -3,6 +3,6 @@ import DynamicRankingsLayout │
│ from '../layouts/DynamicRankingsLayout.astr │
│ o'; │
│ --- │
│ │
│ <DynamicRankingsLayout │
│ - title="WoW MoP DPS Rankings" │
│ - description="Interactive simulation resul │
│ ts for all encounters and target counts" │
│ + title="MoP Simulation DPS Rankings" │
│ + description="Take this all with a grain o │
│ f salt. Many classes simulation's are curren │
│ tly incomplete" │
│ /> │
└──────────────────────────────────────────────┘
[ BACK TO LOG ]
──────────────────────────────────────────────────────────────────────────────────────
OOKNET
────────────────────────────────────────────────
OOKNET