Archive-SCS
view release on metacpan or search on metacpan
lib/Archive/SCS/GameDir.pm view on Meta::CPAN
use v5.32;
use warnings;
use Object::Pad 0.73;
class Archive::SCS::GameDir 1.09;
use builtin::compat 'trim';
use Archive::SCS;
use Carp 'croak';
use List::Util 1.33 qw(any first none);
use Path::Tiny 0.017 ();
our @LOAD_ORDER = qw(
version.scs
effect.scs
base.scs
base_map.scs
base_vehicle.scs
base_share.scs
def.scs
core.scs
locale.scs
base_cfg.scs
);
our @LIBRARY_PATHS = (
(split /:/, $ENV{STEAM_LIBRARY} // ''),
eval {
require Archive::SCS::GameDir::Steam;
@Archive::SCS::GameDir::Steam::library_paths
},
'~/.steam/steam',
'~/.local/share/Steam',
'~/.var/app/com.valvesoftware.Steam/.steam/steam',
'~/.var/app/com.valvesoftware.Steam/.local/share/Steam',
'~/Library/Application Support/Steam',
'~/Library/Application Support/SteamApps',
);
our %GAMES = (
ATS => 'American Truck Simulator',
ETS2 => 'Euro Truck Simulator 2',
);
field $game :param = undef;
field $path;
field @library_paths = @LIBRARY_PATHS;
ADJUST {
$self->find($game);
}
method game () {
$game
}
method game_short () {
no warnings 'uninitialized';
return first { $game eq $GAMES{$_} } keys %GAMES;
}
method path () {
$path
}
method find ($name = '') {
$name //= '';
if ( length $name ) {
my $dir = Path::Tiny::path $name;
if ($dir->child('base.scs')->exists) {
$game = ($path = $dir)->basename;
return $self;
}
}
my @games = map { $GAMES{$_} } sort keys %GAMES;
( run in 0.664 second using v1.01-cache-2.11-cpan-ceb78f64989 )