Class: BulldogPhysics::World
- Inherits:
-
Object
- Object
- BulldogPhysics::World
- Defined in:
- lib/RigidBodies/world.rb
Instance Attribute Summary collapse
-
#bodies ⇒ Object
Returns the value of attribute bodies.
-
#calculate_iterations ⇒ Object
Returns the value of attribute calculate_iterations.
-
#contact_generators ⇒ Object
Returns the value of attribute contact_generators.
-
#contacts ⇒ Object
Returns the value of attribute contacts.
-
#first_body ⇒ Object
Returns the value of attribute first_body.
-
#max_contacts ⇒ Object
Returns the value of attribute max_contacts.
-
#registry ⇒ Object
Returns the value of attribute registry.
-
#resolver ⇒ Object
Returns the value of attribute resolver.
Instance Method Summary collapse
- #add_gravity ⇒ Object
- #generate_contacts ⇒ Object
-
#initialize(max_contacts = 20, iterations = 5) ⇒ World
constructor
A new instance of World.
- #integrate(duration) ⇒ Object
- #run_physics(duration, clear_contacts = true) ⇒ Object
- #start_frame ⇒ Object
Constructor Details
#initialize(max_contacts = 20, iterations = 5) ⇒ World
Returns a new instance of World.
31 32 33 34 35 36 37 38 39 |
# File 'lib/RigidBodies/world.rb', line 31 def initialize(max_contacts = 20, iterations = 5) @max_contacts = max_contacts @contacts = Array.new @calculate_iterations = iterations == 0 @resolver = ContactResolver.new(iterations) @bodies = Array.new @registry = ForceRegistry.new @contact_generators = Array.new end |
Instance Attribute Details
#bodies ⇒ Object
Returns the value of attribute bodies.
22 23 24 |
# File 'lib/RigidBodies/world.rb', line 22 def bodies @bodies end |
#calculate_iterations ⇒ Object
Returns the value of attribute calculate_iterations.
28 29 30 |
# File 'lib/RigidBodies/world.rb', line 28 def calculate_iterations @calculate_iterations end |
#contact_generators ⇒ Object
Returns the value of attribute contact_generators.
24 25 26 |
# File 'lib/RigidBodies/world.rb', line 24 def contact_generators @contact_generators end |
#contacts ⇒ Object
Returns the value of attribute contacts.
26 27 28 |
# File 'lib/RigidBodies/world.rb', line 26 def contacts @contacts end |
#first_body ⇒ Object
Returns the value of attribute first_body.
25 26 27 |
# File 'lib/RigidBodies/world.rb', line 25 def first_body @first_body end |
#max_contacts ⇒ Object
Returns the value of attribute max_contacts.
27 28 29 |
# File 'lib/RigidBodies/world.rb', line 27 def max_contacts @max_contacts end |
#registry ⇒ Object
Returns the value of attribute registry.
22 23 24 |
# File 'lib/RigidBodies/world.rb', line 22 def registry @registry end |
#resolver ⇒ Object
Returns the value of attribute resolver.
23 24 25 |
# File 'lib/RigidBodies/world.rb', line 23 def resolver @resolver end |
Instance Method Details
#add_gravity ⇒ Object
90 91 92 93 |
# File 'lib/RigidBodies/world.rb', line 90 def add_gravity #gravity = Gravity.new(Vector3.new(0, -0.5, 0)) #@bodies.each{|body| @registry.add(body, gravity)} end |
#generate_contacts ⇒ Object
48 49 50 51 52 53 54 55 56 57 58 |
# File 'lib/RigidBodies/world.rb', line 48 def generate_contacts() limit = @max_contacts for g in @contact_generators used = g.add_contact(@contacts, limit) end #eturn @max_contacts - limit return @contacts.size end |
#integrate(duration) ⇒ Object
61 62 63 64 65 66 67 |
# File 'lib/RigidBodies/world.rb', line 61 def integrate(duration) for b in @bodies b.integrate(duration) b.calculate_derived_data #b.calculate_internals end end |
#run_physics(duration, clear_contacts = true) ⇒ Object
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/RigidBodies/world.rb', line 69 def run_physics(duration, clear_contacts = true) #@contacts.clear() if clear_contacts @registry.update_forces(duration) integrate(duration) used_contacts = generate_contacts() if(used_contacts > 0) #if(@calculate_iterations) @resolver.iterations = used_contacts * 2 @resolver.resolve_contacts(@contacts, used_contacts, duration) # end end #integrate(duration) end |
#start_frame ⇒ Object
41 42 43 44 45 46 |
# File 'lib/RigidBodies/world.rb', line 41 def start_frame() @bodies.each do |body| body.clear_accumulators body.calculate_derived_data end end |