class TFClient::Models::Status

Attributes

antigravity[R]
antigravity_engine_status[R]
colonists[R]
colonists_status[R]
cooling_status[R]
energy[R]
energy_rate[R]
engine_status[R]
heat[R]
heat_rate[R]
mass[R]
max_energy[R]
max_heat[R]
mining_interval[R]
mining_power[R]
mining_status[R]
power_status[R]
shield[R]
shield_charge_rate[R]
shield_max[R]
shield_status[R]
states[R]
status_report[R]
total_outfit_space[R]
used_outfit_space[R]
warp_charge[R]

Public Class Methods

new(lines:) click to toggle source
Calls superclass method TFClient::Models::Response::new
# File lib/textflight-client/models/status.rb, line 64
def initialize(lines:)
  super(lines: lines)

  @states = {}

  @status_report = Models::StatusReport.new(lines: lines)
  @mass = @status_report.hash[:mass].to_i
  @total_outfit_space = @status_report.hash[:total_outfit_space].to_i

  outfit_space_line = lines.detect do |line|
    line.strip.start_with?("Outfit space")
  end

  hash = ResponseParser.hash_from_line_values(line: outfit_space_line)
  @used_outfit_space = @total_outfit_space - hash[:space].to_i

  # Cooling
  @states[:cooling], @cooling_status = Status.status_from_lines(
    lines: lines,
    start_with: "Cooling status")
  @heat = @status_report.hash[:heat].to_i
  @max_heat = @status_report.hash[:max_heat].to_i
  @heat_rate = @status_report.hash[:heat_rate].to_f

  # Energy / Power
  @states[:power], @power_status = Status.status_from_lines(
    lines: lines,
    start_with: "Power status"
  )

  @energy = @status_report.hash[:energy].to_i
  @max_energy = @status_report.hash[:max_energy].to_i
  @energy_rate = @status_report.hash[:energy_rate].to_f

  # Antigravity
  antigravity_line = lines.detect do |line|
    line.strip.start_with?("Antigravity engines")
  end

  if antigravity_line
    @states[:antigravity], @antigravity_engine_status =
      Status.status_from_lines(lines: lines, start_with: "Antigravity engines")
    @antigravity = @status_report.hash[:antigravity].to_i
  else
    # Needs translation
    @states[:antigravity] = "Offline"
    @antigravity = "Antigravity engines: Offline"
  end



  # Mining
  mining_progress_line = lines.detect do |line|
    line.strip.start_with?("Mining progress")
  end

  if mining_progress_line
    @states[:mining], @mining_status =
      Status.status_from_lines(lines: lines,
                               start_with: "Mining progress")
    hash = ResponseParser.hash_from_line_values(line: mining_progress_line)
    @mining_interval = hash[:interval].to_f
    @mining_power = @status_report.hash[:mining_power].to_f
  else
    @mining_interval = nil
    @mining_power = nil
    # TODO needs a translation
    @states[:mining] = "Offline"
    @mining_status = "Offline"
  end

  # Warp
  warp_line = lines.detect do |line|
    line.strip.start_with?("Warp engines")
  end
  if warp_line
    @states[:warp], @engine_status =
      Status.status_from_lines(lines: lines,
                               start_with: "Warp engines")
    @warp_charge = @status_report.hash[:warp_charge].to_f
  else
    @states[:warp] = "Offline"
    @warp_charge = 0.0
  end

  # Shield
  shield_status_line = lines.detect do |line|
    line.strip.start_with?("Shields")
  end

  if shield_status_line
    @states[:shields], @shield_status =
      Status.status_from_lines(lines: lines,
                               start_with: "Shields")
    @shield_charge_rate = @status_report.hash[:shield_rate].to_f
    @shield_max = @status_report.hash[:max_shield].to_f
    @shield = @status_report.hash[:shield].to_f
  else
    # TODO Need translation
    @shield_status = "Offline"
    @states[:shields] = "Offline"
    @shield_charge_rate = nil
    @shield_max = @status_report.hash[:max_shield].to_f
    @shield = 0
  end

  # Colonists
  colonists_line = lines.detect do |line|
    line.strip.start_with?("Colonists")
  end

  if colonists_line
    # TODO Need translation
    @states[:colonists] = "Crewed"
    @colonists_status =
      ResponseParser.substitute_line_values(line: colonists_line)
    hash = ResponseParser.hash_from_line_values(line: colonists_line)
    @colonists = hash[:crew].to_i
  else
    # TODO Need translation
    @states[:colonists] = "Unmanned"
    @colonists_status = "Unmanned"
    @colonists = 0
  end
end
status_from_lines(lines:, start_with:) click to toggle source

returns 2 values

# File lib/textflight-client/models/status.rb, line 8
def self.status_from_lines(lines:, start_with:)
  stripped = lines.map { |line| line.strip }
  prefix = start_with.strip
  line, _ = ResponseParser.line_and_index_for_beginning_with(lines: stripped,
                                                             string: prefix)
  if !lines || !line.start_with?(prefix)
    raise "expected line to be a status line for #{prefix} in #{lines}"
  end

  tokens = ResponseParser.tokenize_line(line: line)

  status = tokens[0].split(": ").last

  case status
  when "Overheat in {remaining} seconds!"
    status = "Overheating"
  when "OVERHEATED"
    status = "Overheated"
  when "Ready to engage"
    status = "Ready"
  when "Charging ({charge}%)"
    status = "Charging"
  when "FAILED"
    status = "Failed"
  when "BROWNOUT"
    status = "Brownout"
  when "OVERLOADED"
    status = "Overloaded"
  when "Brownout in {remaining} seconds!"
    status = "Overloaded"
  when "Regenerating at {rate}/s ({shield}/{max})"
    status = "Regenerating"
  when "{progress}% ({interval} second interval)"
    status = "Online"
  end

  translation = tokens[1]

  return status, translation if tokens.size == 2

  translation = ResponseParser.substitute_line_values(line: line)

  return status, translation.strip
end