Class Fight
In: app/models/fight.rb
Parent: Object

This class lets a fleet attack a moon

Methods

Public Class methods

Creates a new instance of the fight club… uh… class

[Source]

    # File app/models/fight.rb, line 4
 4:   def initialize(defender_moon,attacker_fleet)
 5:     @strength = Hash.new
 6:     @strength['defender'] = defender_moon.fleet.total_strength + defender_moon.satellite_count*2
 7:     @strength['attacker'] = attacker_fleet.total_strength
 8:     @remaining_strength = (@strength['defender'] - @strength['attacker']).abs
 9:     @defender_moon = defender_moon
10:     @attacker_fleet = attacker_fleet
11:     @defender = defender_moon.player
12:     @attacker = attacker_fleet.player
13:     fight
14:   end

Public Instance methods

Returns true if the defender wins

[Source]

     # File app/models/fight.rb, line 101
101:   def defender_wins?
102:     @strength['defender'] >= @strength['attacker']
103:   end

Let the fight take place

[Source]

    # File app/models/fight.rb, line 17
17:   def fight
18:     unless @defender.nil? # Let the production take place if the moon is owned by a player
19:       @defender.run_production
20:       @defender.save
21:     end
22:     shrink_all # Let the two fleets fight each other
23:     if defender_wins? # Destroy the attacking fleet
24:       @attacker_fleet.destroy
25:       @defender_moon.fleet.save
26:       @attacker.add_to_log("Your fleet lost against #{@defender_moon.name}.") unless @attacker.nil?
27:       @defender.add_to_log("Your fleet on #{@defender_moon.name} won against an attacking fleet.") unless @defender.nil?
28:     else # Attacker wins
29:       if @defender_moon.is_home_moon? # Send the attacking fleet back home if defender moon is a home moon
30:         @attacker_fleet.departure_on, @attacker_fleet.arrival_on = @attacker_fleet.arrival_on, @attacker_fleet.arrival_on+Game.round_length*@defender_moon.time_to_reach_from(Moon.find(@attacker_fleet.starting_moon))
31:         @attacker_fleet.starting_moon, @attacker_fleet.destination_moon = @attacker_fleet.destination_moon, @attacker_fleet.starting_moon
32:         @attacker.add_to_log("Your fleet won against #{@defender_moon.name} and is now on it's way back home.")
33:         @attacker_fleet.save
34:         unless @defender.nil?
35:           @defender.add_to_log("Your fleet on #{@defender_moon.name} has been destroyed.") unless @defender.nil?
36:           @defender.save
37:         end
38:       else # It's not a home moon, take it!
39:         unless @defender.nil?
40:           @defender.add_to_log("You lost #{@defender_moon.name} in a fight.") unless @defender.nil?
41:           @defender.save
42:         end
43:         @defender_moon.cancel_production
44:         @attacker_fleet.stop
45:         @defender_moon.player_id = @attacker.id
46:         @defender_moon.fleet.destroy
47:         @attacker_fleet.moon_id = @defender_moon.id
48:         @attacker.add_to_log("Your fleet captured #{@defender_moon.name}.")
49:         @attacker_fleet.save
50:         # Workaround for some odd error...
51:         begin
52:           @defender_moon.save
53:         rescue
54:         end
55:       end
56:     end
57:   end

Shrink all the fleets involved

[Source]

    # File app/models/fight.rb, line 60
60:   def shrink_all
61:     shrink_attacker
62:     shrink_defender
63:   end

Shrink attacking fleet

[Source]

    # File app/models/fight.rb, line 91
91:   def shrink_attacker
92:     if defender_wins?
93:       @attacker_fleet.shrink_to_strength(0)
94:     else
95:       @attacker_fleet.shrink_to_strength(@remaining_strength)
96:     end
97:     @attacker_fleet.save
98:   end

Shrink the defender fleet including satellites on the defending moon

[Source]

    # File app/models/fight.rb, line 66
66:   def shrink_defender
67:     if defender_wins?
68:       until @defender_moon.total_strength <= @remaining_strength
69:         case rand(4)
70:         when 0:
71:           @defender_moon.fleet.weak_ships -= 1 if @defender_moon.fleet.weak_ships > 0
72:         when 1:
73:           @defender_moon.fleet.medium_ships -= 1 if @defender_moon.fleet.medium_ships > 0
74:         when 2:
75:           @defender_moon.fleet.strong_ships -= 1 if @defender_moon.fleet.strong_ships > 0
76:         when 3:
77:         @defender_moon.satellite_count -= 1 if @defender_moon.satellite_count > 0
78:         end
79:       end
80:     else
81:       @defender_moon.fleet.weak_ships = 0
82:       @defender_moon.fleet.medium_ships = 0
83:       @defender_moon.fleet.strong_ships = 0
84:       @defender_moon.satellite_count = 0
85:     end
86:     @defender_moon.fleet.save
87:     @defender_moon.save
88:   end

[Validate]