class RTanque::NormalizedAttr::AttrContainer

Public Class Methods

new(range, max_delta = MAX_DELTA) click to toggle source
# File lib/rtanque/normalized_attr.rb, line 20
def initialize(range, max_delta = MAX_DELTA)
  @range = range
  @max_delta = max_delta
end

Public Instance Methods

delta(current_value, new_value) click to toggle source
# File lib/rtanque/normalized_attr.rb, line 51
def delta(current_value, new_value)
  if current_value
    # Heading responds to delta
    current_value.respond_to?(:delta) ? current_value.delta(new_value) : (new_value - current_value)
  else
    0
  end
end
enforce_delta(attached_instance, current_value, new_value) click to toggle source
# File lib/rtanque/normalized_attr.rb, line 41
def enforce_delta(attached_instance, current_value, new_value)
  current_delta = self.delta(current_value, new_value)
  current_max_delta = self.max_delta(attached_instance)
  if current_delta.abs > current_max_delta
    current_delta > 0 ? current_value + current_max_delta : current_value - current_max_delta
  else
    new_value
  end
end
enforce_range(value) click to toggle source
# File lib/rtanque/normalized_attr.rb, line 60
def enforce_range(value)
  if @range.include?(value)
    value
  else
    value > self.max ? self.max : self.min
  end
end
max() click to toggle source
# File lib/rtanque/normalized_attr.rb, line 29
def max
  @range.last
end
max_delta(attached_instance) click to toggle source
# File lib/rtanque/normalized_attr.rb, line 37
def max_delta(attached_instance)
  @max_delta.respond_to?(:call) ? @max_delta.call(attached_instance) : @max_delta
end
min() click to toggle source
# File lib/rtanque/normalized_attr.rb, line 25
def min
  @range.first
end
normalize(attached_instance, current_value, new_value) click to toggle source
# File lib/rtanque/normalized_attr.rb, line 33
def normalize(attached_instance, current_value, new_value)
  self.enforce_range(self.enforce_delta(attached_instance, current_value, new_value))
end