class LookAction

Attributes

ui_callback[RW]

Public Class Methods

apply!(battle, item) click to toggle source
# File lib/natural_20/actions/look_action.rb, line 49
def self.apply!(battle, item)
  case (item[:type])
  when :look
    battle.entity_state_for(item[:source])[:active_perception] = item[:die_roll].result
    battle.entity_state_for(item[:source])[:active_perception_disadvantage] = item[:die_roll_disadvantage].result
    Natural20::EventManager.received_event({
                                             source: item[:source],
                                             perception_roll: item[:die_roll],
                                             event: :perception
                                           })
    item[:ui_callback]&.target_ui(item[:source], perception: item[:die_roll].result, look_mode: true)
  end
end
build(session, source) click to toggle source
# File lib/natural_20/actions/look_action.rb, line 28
def self.build(session, source)
  action = LookAction.new(session, source, :look)
  action.build_map
end
can?(entity, battle, options = {}) click to toggle source

@param entity [Natural20::Entity] @param battle [Natural20::Battle]

# File lib/natural_20/actions/look_action.rb, line 6
def self.can?(entity, battle, options = {})
  battle.nil? || !battle.ongoing? || battle.entity_state_for(entity)[:active_perception].zero?
end

Public Instance Methods

build_map() click to toggle source
# File lib/natural_20/actions/look_action.rb, line 10
def build_map
  OpenStruct.new({
                   param: [
                     {
                       type: :look,
                       num: 1
                     }
                   ],
                   next: lambda { |callback|
                     self.ui_callback = callback
                     OpenStruct.new({
                                      param: nil,
                                      next: -> { self }
                                    })
                   }
                 })
end
resolve(_session, _map, opts = {}) click to toggle source
# File lib/natural_20/actions/look_action.rb, line 33
def resolve(_session, _map, opts = {})
  perception_check = @source.perception_check!(opts[:battle])
  perception_check_2 = @source.perception_check!(opts[:battle])

  perception_check_disadvantage = [perception_check, perception_check_2].min
  @result = [{
    source: @source,
    type: :look,
    die_roll: perception_check,
    die_roll_disadvantage: perception_check_disadvantage,
    battle: opts[:battle],
    ui_callback: ui_callback
  }]
  self
end