1.7.0: New features.

This commit is contained in:
2026-01-27 21:26:07 +08:00
parent 5693eb84ee
commit 6b4cc048b3
11 changed files with 737 additions and 40 deletions

View File

@@ -183,15 +183,22 @@
{% if dist %}
<div class="w-full h-1 bg-gray-100 dark:bg-slate-700 rounded-full overflow-hidden relative mt-1">
{% set range = dist.max - dist.min %}
{% set percent = ((dist.val - dist.min) / range * 100) if range > 0 else 100 %}
{% set raw_percent = ((dist.val - dist.min) / range * 100) if range > 0 else 100 %}
{% set percent = (100 - raw_percent) if dist.inverted else raw_percent %}
<div class="absolute h-full bg-yrtv-400/60 rounded-full" style="width: {{ percent }}%"></div>
<!-- Avg Marker -->
{% set avg_pct = ((dist.avg - dist.min) / range * 100) if range > 0 else 50 %}
{% set raw_avg = ((dist.avg - dist.min) / range * 100) if range > 0 else 50 %}
{% set avg_pct = (100 - raw_avg) if dist.inverted else raw_avg %}
<div class="absolute h-full w-0.5 bg-gray-400 dark:bg-slate-400 top-0" style="left: {{ avg_pct }}%"></div>
</div>
<div class="flex justify-between text-[9px] text-gray-300 dark:text-gray-600 font-mono mt-0.5">
<span>L:{{ format_str.format(dist.min) }}</span>
<span>H:{{ format_str.format(dist.max) }}</span>
{% if dist.inverted %}
<span>L:{{ format_str.format(dist.max) }}</span>
<span>H:{{ format_str.format(dist.min) }}</span>
{% else %}
<span>L:{{ format_str.format(dist.min) }}</span>
<span>H:{{ format_str.format(dist.max) }}</span>
{% endif %}
</div>
{% endif %}
</div>
@@ -296,6 +303,24 @@
</div>
</div>
<!-- Group 4: ECO & PACE (New) -->
<div>
<h4 class="text-xs font-black text-gray-400 uppercase tracking-widest mb-4 border-b border-gray-100 dark:border-slate-700 pb-2">
ECO (Economy) & PACE (Tempo)
</h4>
<div class="grid grid-cols-2 md:grid-cols-3 lg:grid-cols-5 gap-y-6 gap-x-4">
{{ detail_item('Dmg/$1k (性价比)', features['eco_avg_damage_per_1k'], 'eco_avg_damage_per_1k', '{:.1f}') }}
{{ detail_item('Eco KPR (经济局KPR)', features['eco_rating_eco_rounds'], 'eco_rating_eco_rounds') }}
{{ detail_item('Eco KD (经济局KD)', features['eco_kd_ratio'], 'eco_kd_ratio', '{:.2f}') }}
{{ detail_item('Eco Rounds (经济局数)', features['eco_avg_rounds'], 'eco_avg_rounds', '{:.1f}') }}
{{ detail_item('First Contact (首肯时间)', features['pace_avg_time_to_first_contact'], 'pace_avg_time_to_first_contact', '{:.1f}s') }}
{{ detail_item('Trade Kill% (补枪率)', features['pace_trade_kill_rate'], 'pace_trade_kill_rate', '{:.1%}') }}
{{ detail_item('Opening Time (首杀时间)', features['pace_opening_kill_time'], 'pace_opening_kill_time', '{:.1f}s') }}
{{ detail_item('Avg Life (存活时间)', features['pace_avg_life_time'], 'pace_avg_life_time', '{:.1f}s') }}
</div>
</div>
<!-- Group 5: SPECIAL (Clutch & Multi) -->
<div>
<h4 class="text-xs font-black text-gray-400 uppercase tracking-widest mb-4 border-b border-gray-100 dark:border-slate-700 pb-2">
@@ -720,9 +745,9 @@ document.addEventListener('DOMContentLoaded', function() {
const getDist = (key) => dist[key] || { rank: '?', avg: 0 };
// Map friendly names to keys
const keys = ['score_bat', 'score_hps', 'score_ptl', 'score_tct', 'score_util', 'score_sta'];
const keys = ['score_bat', 'score_hps', 'score_ptl', 'score_tct', 'score_util', 'score_sta', 'score_eco', 'score_pace'];
// Corresponding Labels
const rawLabels = ['Aim (BAT)', 'Clutch (HPS)', 'Pistol (PTL)', 'Defense (SIDE)', 'Util (UTIL)', 'Stability (STA)'];
const rawLabels = ['Aim (BAT)', 'Clutch (HPS)', 'Pistol (PTL)', 'Defense (SIDE)', 'Util (UTIL)', 'Stability (STA)', 'Economy (ECO)', 'Pace (PACE)'];
const labels = rawLabels.map((l, i) => {
const k = keys[i];
@@ -742,7 +767,7 @@ document.addEventListener('DOMContentLoaded', function() {
data: [
data.radar.BAT, data.radar.HPS,
data.radar.PTL, data.radar.SIDE, data.radar.UTIL,
data.radar.STA
data.radar.STA, data.radar.ECO, data.radar.PACE
],
backgroundColor: 'rgba(124, 58, 237, 0.2)',
borderColor: '#7c3aed',