@extends('layouts.app') @section('title', __('ui.progression_hub_title').' — Coaster World') @section('content')
{{ __('ui.progression_hub_kicker') }}

{{ __('ui.progression_hub_title') }}

{{ __('ui.progression_hub_intro') }}

{{ __('ui.progression_explorer_rank_'.$explorerRankKey) }} {{ $explorerLevel }} {{ __('ui.progression_explorer_level') }}
{{ $totalXp }} XP · {{ __('ui.progression_global_remaining', ['xp' => $explorerXpRemaining]) }}
{{ __('ui.progression_hub_coasters') }}{{ $metrics['coaster_count'] }}
{{ __('ui.progression_hub_parks') }}{{ $metrics['park_count'] }}
{{ __('ui.progression_hub_countries') }}{{ $metrics['country_count'] }}
{{ __('ui.progression_hub_manufacturers') }}{{ $metrics['manufacturer_count'] }}
{{ __('ui.progression_hub_challenges') }}{{ $metrics['challenge_completed_count'] }}
{{ __('ui.progression_hub_badges') }}{{ $unlocks->pluck('achievement_id')->unique()->count() }} / {{ $achievements->count() }}{{ $achievementCompletionPercent }}% {{ __('ui.progression_completed_short') }}
@if($skills->isNotEmpty())
{{ __('ui.progression_skills_kicker') }}

{{ __('ui.progression_skills_title') }}

{{ __('ui.progression_skills_intro') }}

@foreach($skills as $userSkill) @php $skill = $userSkill->skill; $tr = $skill?->translations?->firstWhere('locale', app()->getLocale()) ?? $skill?->translations?->firstWhere('locale', 'en'); @endphp
{{ data_get($skill?->metadata, 'icon', '✦') }}
{{ __('ui.progression_level', ['level' => $userSkill->level]) }} {{ $tr?->name ?: $skill?->key }}
{{ $userSkill->xp_total }} XP
@if($tr?->description)

{{ $tr->description }}

@endif
{{ __('ui.progression_next_level', ['xp' => max(0, $userSkill->next_level_xp - $userSkill->xp_total)]) }}
@endforeach
@endif @if($recentXpEvents->isNotEmpty())
{{ __('ui.progression_xp_kicker') }}

{{ __('ui.progression_xp_title') }}

{{ __('ui.progression_xp_intro') }}

{{ $totalXp }}XP
@foreach($recentXpEvents as $event) @php $skill = $event->skill; $skillTr = $skill?->translations?->firstWhere('locale', app()->getLocale()) ?? $skill?->translations?->firstWhere('locale', 'en'); $eventKey = 'progression_xp_event_'.str_replace(['.', '-'], '_', $event->event_key); $eventLabel = __('ui.'.$eventKey); if ($eventLabel === 'ui.'.$eventKey) $eventLabel = $event->event_key; @endphp
{{ data_get($skill?->metadata, 'icon', '✦') }}
{{ $eventLabel }} {{ $skillTr?->name ?: $skill?->key }} · {{ $event->occurred_at?->diffForHumans() }}
+{{ $event->xp_delta }} XP
@endforeach
@endif @if($nextAchievements->isNotEmpty())
{{ __('ui.progression_next_kicker') }}

{{ __('ui.progression_next_title') }}

{{ __('ui.progression_next_intro') }}

@foreach($nextAchievements as $achievement) @php $tr = $achievement->translations->firstWhere('locale', app()->getLocale()) ?? $achievement->translations->firstWhere('locale', 'en'); @endphp
{{ __('ui.progression_category_'.$achievement->category) }}{{ $achievement->user_percent }}%
{{ $tr?->name ?: $achievement->key }}

{{ $tr?->description }}

{{ $achievement->user_metric }} / {{ $achievement->threshold }}
@endforeach
@endif
{{ __('ui.progression_cards_kicker') }}

{{ __('ui.progression_hub_card_collection') }}

{{ __('ui.progression_hub_card_intro') }}

@if($ownedCards->isNotEmpty())
@foreach(['ride','thrill','extreme','legend'] as $tier) {{ __('ui.progression_tier_'.$tier) }} {{ $cardTiers->get($tier, 0) }} @endforeach
@endif
@if($ownedCards->isNotEmpty())
@foreach($ownedCards as $ownedCard) @php $card=$ownedCard->card; $coaster=$card?->coaster; $attraction=$coaster?->attraction; $tr=$attraction?->translations?->firstWhere('locale',app()->getLocale()) ?? $attraction?->translations?->firstWhere('locale','en'); $ptr=$attraction?->park?->translations?->firstWhere('locale',app()->getLocale()) ?? $attraction?->park?->translations?->firstWhere('locale','en'); @endphp @if($coaster && $attraction)
{{ __('ui.progression_tier_'.$card->visual_tier) }}
🎢
{{ $ptr?->name ?: $attraction->park?->official_name }} {{ $tr?->name ?: $attraction->official_name }} {{ $coaster->manufacturer?->name ?: __('ui.coaster_unknown') }}
{{ $coaster->speed_kmh ? rtrim(rtrim((string)$coaster->speed_kmh,'0'),'.').' km/h' : '—' }} {{ $coaster->height_m ? rtrim(rtrim((string)$coaster->height_m,'0'),'.').' m' : '—' }} {{ $coaster->inversions ?? '—' }} {{ __('ui.park_inversions_short') }}
@endif @endforeach
@else
🎢

{{ __('ui.progression_cards_empty_title') }}

{{ __('ui.progression_cards_empty_text') }}

@endif
{{ __('ui.progression_badges_kicker') }}

{{ __('ui.progression_hub_all_badges') }}

{{ __('ui.progression_hub_badges_intro') }}

@foreach($achievements as $achievement) @php $tr=$achievement->translations->firstWhere('locale',app()->getLocale()) ?? $achievement->translations->firstWhere('locale','en'); $unlock=$unlocks->firstWhere('achievement_id',$achievement->id); @endphp
{{ data_get($achievement->metadata, 'icon', $achievement->is_unlocked_for_user ? '✦' : '◇') }}
{{ __('ui.progression_category_'.$achievement->category) }} {{ $tr?->name ?: $achievement->key }}

{{ $tr?->description }}

@if($unlock) {{ __('ui.progression_unlocked_on', ['date' => $unlock->unlocked_at?->format('d/m/Y') ?: '—']) }} @else
{{ $achievement->user_metric }} / {{ $achievement->threshold }} @endif
@endforeach
@endsection