forked from plainblack/Lacuna-Server-Open
-
Notifications
You must be signed in to change notification settings - Fork 0
/
summarize_map.pl
122 lines (105 loc) · 3.05 KB
/
summarize_map.pl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
# Gathers up all colony seizure info
use 5.010;
use strict;
use lib '/data/Lacuna-Server/lib';
use Lacuna::DB;
use Lacuna;
use Lacuna::Util qw(format_date);
use Getopt::Long;
use JSON;
use utf8;
$|=1;
our $quiet;
our $map_file = "/tmp/map_population.json";
GetOptions(
'quiet' => \$quiet,
'map_file' => \$map_file,
);
out('Started');
my $start = DateTime->now;
out('Loading DB');
our $db = Lacuna->db;
my $map_data = summarize_map();
output_map($map_data, $map_file );
my $finish = time;
out('Finished');
out((($finish - $start->epoch)/60)." minutes have elapsed");
exit;
###############
## SUBROUTINES
###############
sub summarize_map {
my %map_data;
my $star_map_size = Lacuna->config->get('map_size');
$map_data{map} = {
bounds => $star_map_size,
};
# my $bodies = $db->resultset('Lacuna::DB::Result::Map::Body');
# out('Getting Occupied Bodies');
# my $occupied = $bodies->search({empire_id => { '!=' => 'Null' }});
# $map_data{colonies} = {};
# while (my $body = $occupied->next) {
# my $bdata = {
# id => $body->id,
# x => $body->x,
# y => $body->y,
# pop => $body->population,
# zone => $body->zone,
# orbit => $body->orbit,
# star_id => $body->star_id,
# empire_id => $body->empire_id,
# };
# $map_data{colonies}->{$body->id} = $bdata;
# }
out('Getting Seized Stars');
my $stars = $db->resultset('Lacuna::DB::Result::Map::Star');
my $seized_stars = $stars->search({station_id => { '!=' => 'Null' }});
$map_data{seized} = {};
while (my $star = $seized_stars->next) {
my $sdata = {
id => $star->id,
x => $star->x,
y => $star->y,
zone => $star->zone,
color => $star->color,
station_id => $star->station_id,
aid => $star->station->empire->alliance_id,
};
$map_data{seized}->{$star->id} = $sdata;
}
out('Getting Fissured planets');
$map_data{fissure} = {};
my %has_fissures = map { $_->body_id => 1 } $db->resultset('Building')->search({
class => 'Lacuna::DB::Result::Building::Permanent::Fissure',
})->all;
for my $body_id (sort keys %has_fissures) {
my $body = $db->resultset('Map::Body')->find($body_id);
next unless $body;
my $fdata = {
id => $body->id,
x => $body->x,
y => $body->y,
pop => $body->population,
zone => $body->zone,
orbit => $body->orbit,
star_id => $body->star_id,
empire_id => $body->empire_id,
};
$map_data{fissure}->{$body->id} = $fdata;
}
return \%map_data;
}
sub output_map {
my ($mapping, $map_file) = @_;
my $map_txt = JSON->new->utf8->encode($mapping);
open(OUT, ">:utf8:", "$map_file");
print OUT $map_txt;
close(OUT);
}
# UTILITIES
sub out {
my $message = shift;
unless ($quiet) {
say format_date(DateTime->now), " ", $message;
}
}