File Coverage

lib/BalanceOfPower/Role/Mapmaker.pm
Criterion Covered Total %
statement 55 80 68.7
branch 9 12 75.0
condition 6 14 42.8
subroutine 10 15 66.6
pod 0 9 0.0
total 80 130 61.5


line stmt bran cond sub pod time code
1             package BalanceOfPower::Role::Mapmaker;
2             $BalanceOfPower::Role::Mapmaker::VERSION = '0.400115';
3 13     13   6217 use v5.10;
  13         40  
4 13     13   58 use strict;
  13         15  
  13         303  
5 13     13   49 use Moo::Role;
  13         22  
  13         88  
6              
7 13     13   8203 use BalanceOfPower::Relations::Border;
  13         28  
  13         431  
8 13     13   5179 use BalanceOfPower::Relations::RelPack;
  13         31  
  13         513  
9 13     13   78 use BalanceOfPower::Utils qw( as_main_title);
  13         21  
  13         9791  
10              
11              
12             has borders => (
13             is => 'ro',
14             default => sub { BalanceOfPower::Relations::RelPack->new() },
15             handles => { add_border => 'add_link',
16             border_exists => 'exists_link',
17             get_borders => 'links_for_node',
18             near_on_the_map => 'near',
19             distance_on_the_map => 'distance'
20             }
21             );
22              
23             sub print_borders
24             {
25 0     0 0 0 my $self = shift;
26 0         0 my $n = shift;
27 0         0 return $self->output_borders("BORDERS", $n, 'print');
28             }
29             sub html_borders
30             {
31 0     0 0 0 my $self = shift;
32 0         0 my $n = shift;
33 0         0 return $self->output_borders("BORDERS", $n, 'html');
34             }
35              
36              
37             sub output_borders
38             {
39 0     0 0 0 my $self = shift;
40 0         0 my $title = shift;
41 0         0 my $n = shift;
42 0         0 my $mode = shift;
43 0         0 my $out = "";
44 0         0 $out .= as_main_title($title, $mode);
45 0         0 $out .= $self->borders->output_links($n, $mode);
46 0         0 return $out;
47             }
48              
49              
50             sub load_borders
51             {
52 16     16 0 35 my $self = shift;
53 16         39 my $bordersfile = shift;
54 16   33     291 my $file = shift || $self->data_directory . "/" . $bordersfile;
55 16 50       883 open(my $borders, "<", $file) || die $!;;
56 16         448 for(<$borders>)
57             {
58 56         102 chomp;
59 56         76 my $border = $_;
60 56         179 my @nodes = split(/,/, $border);
61 56 50 33     217 if($self->check_nation_name($nodes[0]) && $self->check_nation_name($nodes[1]))
62             {
63 56 50 33     388 if($nodes[0] && $nodes[1] && ! $self->border_exists($nodes[0], $nodes[1]))
      33        
64             {
65 56         1062 my $b = BalanceOfPower::Relations::Border->new(node1 => $nodes[0], node2 => $nodes[1]);
66 56         11774 $self->add_border($b);
67             }
68             }
69             else
70             {
71 0         0 say "WRONG BORDER: $border";
72             }
73             }
74             }
75              
76             sub near_nations
77             {
78 17     17 0 27 my $self = shift;
79 17         28 my $nation = shift;
80 17   100     164 my $geographical = shift || 0;
81 17 100       62 if($geographical)
82             {
83 15         104 return $self->near_on_the_map($nation, $self->nation_names);
84             }
85             else
86             {
87 2 100       3 return grep { $self->in_military_range($nation, $_) && $nation ne $_ } @{$self->nation_names};
  10         24  
  2         6  
88             }
89             }
90             sub print_near_nations
91             {
92 0     0 0 0 my $self = shift;
93 0         0 my $nation = shift;
94 0         0 my $out = "";
95 0         0 for($self->near_nations($nation))
96             {
97 0         0 $out .= $_ . "\n";
98             }
99 0         0 return $out;
100             }
101             sub distance
102             {
103 170     170 0 2111 my $self = shift;
104 170         200 my $nation1 = shift;
105 170         169 my $nation2 = shift;
106 170         643 return $self->distance_on_the_map($nation1, $nation2, $self->nation_names);
107             }
108              
109              
110             sub get_group_borders
111             {
112 14     14 0 20 my $self = shift;
113 14         20 my $group1 = shift;
114 14         17 my $group2 = shift;
115 14         30 my @from = @{ $group1 };
  14         30  
116 14         20 my @to = @{ $group2 };
  14         26  
117 14         22 my @out = ();
118 14         24 foreach my $to_n (@to)
119             {
120 18         24 foreach my $from_n (@from)
121             {
122 21 100       72 if($self->in_military_range($from_n, $to_n))
123             {
124 8         12 push @out, $to_n;
125 8         26 last;
126             }
127             }
128             }
129 14         48 return @out;
130             }
131              
132             #cache management
133              
134              
135             sub print_distance
136             {
137 0     0 0   my $self = shift;
138 0           my $n1 = shift;
139 0           my $n2 = shift;
140 0           return "Distance between $n1 and $n2: " . $self->distance($n1, $n2);
141             }
142              
143              
144              
145             1;