A book for a Mage: the Awakened game set in a cyberpunk dystopia.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.6KB

  1. class Merit
  2. attr_accessor :name,
  3. :prerequisites,
  4. :adjectives,
  5. :dot_ratings,
  6. :rules_text,
  7. :ranks,
  8. :drawback,
  9. :pdf
  10. attr_accessor :authors
  11. def initialize(name:, prerequisites: nil, adjectives: [], dot_ratings: [], rules_text:, ranks: nil, pdf:, drawback: nil)
  12. @name = name
  13. @prerequisites = prerequisites
  14. @adjectives = adjectives
  15. @dot_ratings = dot_ratings
  16. @rules_text = rules_text
  17. @ranks = ranks
  18. @pdf = pdf
  19. @drawback = drawback
  20. @dot_ratings = @dot_ratings.arrayify
  21. @prerequisites = @prerequisites.arrayify
  22. @adjectives = @adjectives.arrayify
  23. end
  24. def render
  25. merit_ary = [{:text => "#{name} (", :font => "Lilith", :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION}]
  26. previous = false
  27. dot_ratings.each do |dr|
  28. merit_ary << {:text => ", ", :font => "Lilith", :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION} if previous
  29. previous = true
  30. if dr.class == Range
  31. merit_ary << {:text => dr.min.to_dots, :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION, :character_spacing => -5}
  32. if dr.max < Float::INFINITY
  33. merit_ary << {:text => " to ", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION}
  34. merit_ary << {:text => dr.max.to_dots, :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION, :character_spacing => -5}
  35. else
  36. merit_ary << {:text => "+", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION}
  37. end
  38. elsif dr.class == Integer
  39. merit_ary << {:text => dr.to_dots, :color => "000000", :size => Awakened2069::FONT_SIZE_SUBSECTION, :character_spacing => -5}
  40. end
  41. end
  42. adjectives.each do |adj|
  43. merit_ary << {:text => ", #{adj}", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION}
  44. end
  45. merit_ary << {:text => ")", :color => "000000", :font => "Lilith", :size => Awakened2069::FONT_SIZE_SUBSECTION}
  46. pdf.group do |g|
  47. g.font_size Awakened2069::FONT_SIZE_BODY
  48. g.formatted_text merit_ary, :indent_paragraphs => Awakened2069::INDENT_SIZE
  49. if prerequisites.size >= 1
  50. prerequisites_text = prerequisites.join(", ")
  51. g.text "<b>#{prerequisites.size == 1 ? "Prerequisite" : "Prerequisites"}:</b> #{prerequisites_text}", :inline_format => true, :indent_paragraphs => Awakened2069::INDENT_SIZE
  52. end
  53. g.text "<b>Effect:</b> #{rules_text}", :inline_format => true, :indent_paragraphs => Awakened2069::INDENT_SIZE
  54. g.text "<b>Drawback:</b> #{drawback}", :inline_format => true, :indent_paragraphs => Awakened2069::INDENT_SIZE unless drawback.nil?
  55. end
  56. self
  57. end
  58. end