Class | Fight |
In: |
app/models/fight.rb
|
Parent: | Object |
This class lets a fleet attack a moon
Creates a new instance of the fight club… uh… class
# 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
Returns true if the defender wins
# File app/models/fight.rb, line 101 101: def defender_wins? 102: @strength['defender'] >= @strength['attacker'] 103: end
Let the fight take place
# 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
# File app/models/fight.rb, line 60 60: def shrink_all 61: shrink_attacker 62: shrink_defender 63: end
Shrink attacking fleet
# 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
# 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