]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - particles/particlefont.pl
Transifex autosync
[xonotic/xonotic-data.pk3dir.git] / particles / particlefont.pl
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5 use POSIX qw/ceil floor/;
6
7 # particlefont.txt generator for DarkPlaces
8
9 # this is eval'ed to not fail if Image::Magick is not installed
10 my $magick =
11 eval q{
12         use Image::Magick;
13         Image::Magick->new();
14 }
15         or warn "Image::Magick not installed, not generating a TGA\n";
16
17 sub checkmagick($)
18 {
19         my ($e) = @_;
20         die $e if $e;
21         return $e;
22 }
23
24 my ($pixw, $pixh, $cols, $rows, $beamoffset, $beams) = @ARGV;
25 defined $beams
26         or die "Usage: $0 pixw pixh columns rows beamoffset beams\n";
27
28 if($magick)
29 {
30         checkmagick $magick->Set(size => "${pixw}x${pixh}");
31         checkmagick $magick->ReadImage("xc:white");
32 }
33
34 my $square_x = 1.0 / $cols;
35 my $square_y = 1.0 / $rows;
36 $rows -= $beams;
37
38 my $dx = 1.0 / $pixw;
39 my $dy = 1.0 / $pixh;
40
41 my $i = 0;
42 for my $row(0..$rows-1)
43 {
44         for my $col(0..$cols-1)
45         {
46                 my $s0 = $col * $square_x + $dx;
47                 my $s1 = ($col+1) * $square_x - $dx;
48                 my $t0 = $row * $square_y + $dy;
49                 my $t1 = ($row+1) * $square_y - $dy;
50                 print "$i $s0 $t0 $s1 $t1\n";
51                 if($magick)
52                 {
53                         checkmagick $magick->Draw(
54                                 fill => (($row + $col)%2 ? 'green' : 'cyan'),
55                                 primitive => 'rectangle',
56                                 points => sprintf "%d,%d %d,%d", ceil($s0 * $pixw), ceil($t0 * $pixh), floor($s1 * $pixw)-1, floor($t1 * $pixh)-1
57                         );
58                         checkmagick $magick->Annotate(
59                                 x => $s0 * $pixw + 2,
60                                 y => $t1 * $pixh - 2,
61                                 text => $i,
62                                 font => '/usr/share/fonts/TTF/DejaVuSansMono.ttf'
63                         );
64                 }
65                 ++$i;
66         }
67 }
68
69 $i = $beamoffset if $i < $beamoffset;
70 for my $beam(0..$beams-1)
71 {
72         my $s0 = 0;
73         my $s1 = 1;
74         my $row = $beam + $rows;
75         my $t0 = $row * $square_y + $dy;
76         my $t1 = ($row+1) * $square_y - $dy;
77         print "$i $s0 $t0 $s1 $t1\n";
78         if($magick)
79         {
80                 checkmagick $magick->Draw(
81                         fill => (($beam)%2 ? 'yellow' : 'red'),
82                         primitive => 'rectangle',
83                         points => sprintf "%d,%d %d,%d", ceil($s0 * $pixw), ceil($t0 * $pixh), floor($s1 * $pixw)-1, floor($t1 * $pixh)-1
84                 );
85                 checkmagick $magick->Annotate(
86                         x => $s0 * $pixw + 2,
87                         y => $t1 * $pixh - 2,
88                         text => $i,
89                         font => '/usr/share/fonts/TTF/DejaVuSansMono.ttf'
90                 );
91         }
92         ++$i;
93 }
94
95 if($magick)
96 {
97         $magick->Write("particlefont-template.png");
98 }