Class: Keisanjaku::RuleState
- Inherits:
-
Object
- Object
- Keisanjaku::RuleState
- Defined in:
- lib/keisanjaku/rule_state.rb
Constant Summary collapse
- FRONT_SLIDE_SCALES =
%w[B CI C].freeze
- BACK_SLIDE_SCALES =
%w[S T].freeze
- FIXED_SCALES =
%w[K A D L].freeze
- SLIDE_SCALES =
(FRONT_SLIDE_SCALES + BACK_SLIDE_SCALES).freeze
Instance Attribute Summary collapse
-
#cursor ⇒ Object
Returns the value of attribute cursor.
-
#face ⇒ Object
Returns the value of attribute face.
-
#slide ⇒ Object
Returns the value of attribute slide.
Instance Method Summary collapse
- #align_slide_index(side) ⇒ Object
- #align_slide_value(scale_name, value) ⇒ Object
- #board_position(scale_name, value) ⇒ Object
- #dup ⇒ Object
- #flip! ⇒ Object
-
#initialize(slide: 0.0, cursor: 0.0, face: :front) ⇒ RuleState
constructor
A new instance of RuleState.
- #local_position_for(scale_name) ⇒ Object
- #move_cursor_to(scale_name, value) ⇒ Object
- #read(scale_name) ⇒ Object
- #slide_scale?(scale_name) ⇒ Boolean
- #visible_scale_names ⇒ Object
Constructor Details
#initialize(slide: 0.0, cursor: 0.0, face: :front) ⇒ RuleState
Returns a new instance of RuleState.
12 13 14 15 16 |
# File 'lib/keisanjaku/rule_state.rb', line 12 def initialize(slide: 0.0, cursor: 0.0, face: :front) self. = self.cursor = cursor self.face = face end |
Instance Attribute Details
#cursor ⇒ Object
Returns the value of attribute cursor.
10 11 12 |
# File 'lib/keisanjaku/rule_state.rb', line 10 def cursor @cursor end |
#face ⇒ Object
Returns the value of attribute face.
10 11 12 |
# File 'lib/keisanjaku/rule_state.rb', line 10 def face @face end |
#slide ⇒ Object
Returns the value of attribute slide.
10 11 12 |
# File 'lib/keisanjaku/rule_state.rb', line 10 def @slide end |
Instance Method Details
#align_slide_index(side) ⇒ Object
61 62 63 |
# File 'lib/keisanjaku/rule_state.rb', line 61 def (side) self. = cursor - index_position(side) end |
#align_slide_value(scale_name, value) ⇒ Object
65 66 67 68 69 70 |
# File 'lib/keisanjaku/rule_state.rb', line 65 def (scale_name, value) scale = Scale.fetch(scale_name) raise ScaleError, "#{scale.name} is not on the slide" unless (scale.name) self. = cursor - scale.position(value) end |
#board_position(scale_name, value) ⇒ Object
51 52 53 54 55 |
# File 'lib/keisanjaku/rule_state.rb', line 51 def board_position(scale_name, value) scale = Scale.fetch(scale_name) local = scale.position(value) (scale.name) ? local + : local end |
#dup ⇒ Object
33 34 35 |
# File 'lib/keisanjaku/rule_state.rb', line 33 def dup self.class.new(slide: , cursor: cursor, face: face) end |
#flip! ⇒ Object
72 73 74 |
# File 'lib/keisanjaku/rule_state.rb', line 72 def flip! self.face = face == :front ? :back : :front end |
#local_position_for(scale_name) ⇒ Object
80 81 82 83 |
# File 'lib/keisanjaku/rule_state.rb', line 80 def local_position_for(scale_name) name = scale_name.to_s.upcase (name) ? cursor - : cursor end |
#move_cursor_to(scale_name, value) ⇒ Object
57 58 59 |
# File 'lib/keisanjaku/rule_state.rb', line 57 def move_cursor_to(scale_name, value) self.cursor = board_position(scale_name, value) end |
#read(scale_name) ⇒ Object
37 38 39 40 41 42 43 44 45 |
# File 'lib/keisanjaku/rule_state.rb', line 37 def read(scale_name) scale = Scale.fetch(scale_name) pos = local_position_for(scale.name) return nil unless pos && pos >= -1e-12 && pos <= 1.0 + 1e-12 scale.value_at(pos.clamp(0.0, 1.0)) rescue ScaleError nil end |
#slide_scale?(scale_name) ⇒ Boolean
76 77 78 |
# File 'lib/keisanjaku/rule_state.rb', line 76 def (scale_name) SLIDE_SCALES.include?(scale_name.to_s.upcase) end |
#visible_scale_names ⇒ Object
47 48 49 |
# File 'lib/keisanjaku/rule_state.rb', line 47 def visible_scale_names face == :front ? %w[K A B CI C D L] : %w[K A S T D L] end |