Class: Zyps::Friction

Inherits:
EnvironmentalFactor show all
Defined in:
lib/zyps/environmental_factors.rb

Overview

A force that slows all objects.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(force) ⇒ Friction

Returns a new instance of Friction.



140
141
142
143
144
# File 'lib/zyps/environmental_factors.rb', line 140

def initialize(force)
  self.force = force
  #Track time since last action.
  @clock = Clock.new
end

Instance Attribute Details

#forceObject

Rate of slowing.



138
139
140
# File 'lib/zyps/environmental_factors.rb', line 138

def force
  @force
end

Instance Method Details

#act(environment) ⇒ Object

Reduce the target’s speed at the given rate.



147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
# File 'lib/zyps/environmental_factors.rb', line 147

def act(environment)
  elapsed_time = @clock.elapsed_time
  environment.objects.each do |object|
    #Slow object.
    acceleration = @force * elapsed_time
    speed = object.vector.speed
    if speed > 0
      speed -= acceleration 
      speed = 0 if speed < 0
    elsif speed < 0
      speed += acceleration
      speed = 0 if speed > 0
    end
    object.vector.speed = speed
  end
end