File Coverage

File:blib/lib/Language/Homespring/Snowmelt.pm
Coverage:100.0%

linestmtbrancondsubtimecode
1package Language::Homespring::Snowmelt;
2
3$VERSION = 0.01;
4
5
4
4
4
19
9
17
use warnings;
6
4
4
4
26
8
19
use strict;
7
8sub new {
9
31
74
        my $class = shift;
10
31
104
        my $self = bless {}, $class;
11
12
31
75
        my $options = shift;
13
31
103
        $self->{interp} = $options->{interp};
14
31
77
        $self->{time_at_node} = 0;
15
31
100
        $self->{location} = $options->{location};
16
17
31
92
        return $self;
18}
19
20sub move {
21
114
294
        my ($self) = @_;
22
23
114
253
        $self->{time_at_node}++;
24
25        # see if we can leave the current node
26
27
114
830
        return if (($self->{location}->{node_name} eq 'marshy') && ($self->{time_at_node} == 1));
28
29        # see if we can enter the next one
30
31
86
263
        my $dest = $self->{location}->{parent_node};
32
33
86
209
        if (defined($dest)){
34
81
197
                $self->{location} = $dest;
35
81
192
                $self->{time_at_node} = 0;
36
81
204
                $self->smash();
37        }else{
38                # if there's nowhere to go,
39
5
12
                $self->kill();
40        }
41
42}
43
44sub kill {
45
5
16
        my ($self) = @_;
46
5
32
51
138
        @{$self->{interp}->{snowmelt}} = grep{
47
5
25
                $_ ne $self
48
5
6
        }@{$self->{interp}->{snowmelt}};
49}
50
51sub smash {
52
81
196
        my ($self) = @_;
53
54        # smash stuff at the current node
55
81
248
        my $node_name = $self->{location}->{node_name};
56
57        #print "Smashing up a $node_name...\n";
58
59
81
238
        $self->{location}->{destroyed} = 1;
60
61
81
431
        if ($node_name eq 'universe'){
62
2
13
                $self->{interp}->{universe_ok} = 0;
63        }
64
65}
66
671;
68