bulldog_physics 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -21,8 +21,8 @@ Jeweler::Tasks.new do |gem|
21
21
  gem.description = %Q{3D Physics Engine written in pure ruby that can be used for creating 3d simulations or games}
22
22
  gem.email = "conner.wingard@gmail.com"
23
23
  gem.authors = ["Conner Wingard"]
24
-
25
24
  gem.add_dependency 'require_all'
25
+
26
26
  # dependencies defined in Gemfile
27
27
  end
28
28
  Jeweler::RubygemsDotOrgTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.1.0
1
+ 0.1.1
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "bulldog_physics"
8
- s.version = "0.1.0"
8
+ s.version = "0.1.1"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Conner Wingard"]
12
- s.date = "2012-04-24"
12
+ s.date = "2012-04-26"
13
13
  s.description = "3D Physics Engine written in pure ruby that can be used for creating 3d simulations or games"
14
14
  s.email = "conner.wingard@gmail.com"
15
15
  s.extra_rdoc_files = [
@@ -15,11 +15,8 @@ module BulldogPhysics
15
15
  #override
16
16
  def update_force(particle, duration)
17
17
  unless particle.has_infinite_mass
18
- #puts "update_force"
19
- #puts particle.mass
20
18
  force_to_add = @gravity * particle.mass
21
- particle.addForce(@gravity * particle.mass)
22
- #puts particle.object_id
19
+ particle.addForce(force_to_add)
23
20
  end
24
21
  particle
25
22
  end
@@ -1,5 +1,4 @@
1
1
  # make life easier by including all Physics files here
2
- require 'rubygems'
3
2
  require 'require_all'
4
3
 
5
4
 
@@ -21,10 +20,10 @@ class Module
21
20
  end
22
21
  end
23
22
 
24
- require './vector3.rb'
25
- require './matrix3.rb'
26
- require './matrix4.rb'
27
- require './quaternion.rb'
23
+ #require 'vector3.rb'
24
+ #require 'matrix3.rb'
25
+ #require 'matrix4.rb'
26
+ #require 'quaternion.rb'
28
27
 
29
28
  module BulldogPhysics
30
29
 
@@ -40,4 +39,9 @@ module BulldogPhysics
40
39
 
41
40
  end
42
41
 
43
- require_all 'Particles'
42
+ #require_all 'Particles'
43
+ require 'vector3'
44
+ require 'matrix3'
45
+ require 'quaternion'
46
+ require 'matrix4'
47
+ require_all File.dirname(__FILE__) + '/Particles'
@@ -44,7 +44,7 @@ class Game
44
44
  @clock = Clock.new
45
45
  @lighting = Lighting.new
46
46
  @x_trans = 0; @y_trans = -5; @z_trans = -25
47
- @font = TTF.new "/Library/Fonts/Times New Roman.ttf",point_size
47
+
48
48
 
49
49
  @world = ParticleWorld.new(20, 1)
50
50
 
@@ -67,8 +67,8 @@ class Game
67
67
  @ball.damping = 1
68
68
  @ball.material.specular = BALL_SPECULAR
69
69
  @ball.material.diffuse = PARTICLE_DIFFUSE
70
- @ball.frozen = true
71
-
70
+ @ball.frozen = true
71
+
72
72
 
73
73
  @current_ball = Particle.new
74
74
  @current_ball.position = @ball.position
@@ -79,7 +79,7 @@ class Game
79
79
  @world.registry.add( @current_ball, ParticleGravity.new())
80
80
  @world.particles << @current_ball
81
81
 
82
-
82
+
83
83
  particle1 = Particle.new
84
84
  particle1.mass = 1
85
85
  particle1.position = Vector3.new(5,2,0)
@@ -98,25 +98,25 @@ class Game
98
98
 
99
99
  prod = ParticleRod.new(particle1, particle2, 2.0)
100
100
 
101
- #@world.particles << particle1
102
- #@world.particles << particle2
103
- #@world.contact_generators << prod
101
+ @world.particles << particle1
102
+ @world.particles << particle2
103
+ @world.contact_generators << prod
104
104
 
105
- @world.contact_generators << ParticleGroundContacts.new(@world.particles)
106
- @world.contact_generators << ParticleParticleContacts.new(@world.particles)
105
+ @world.contact_generators << ParticleGroundContacts.new(@world.particles)
106
+ @world.contact_generators << ParticleParticleContacts.new(@world.particles)
107
107
 
108
108
  for i in 1..5
109
- for j in 1..5
110
- part = Particle.new
111
- part.mass = 0
112
- offset = j % 2 == 0 ? 1 : 0
113
- part.position = Vector3.new( -5 + i * 2 + offset, j * 2, 0)
114
- part.material.specular = SPRING_SPECULAR
115
- part.material.diffuse = PARTICLE_DIFFUSE
116
- @world.particles << part
117
- end
118
- end
119
-
109
+ for j in 1..5
110
+ part = Particle.new
111
+ part.mass = 0
112
+ offset = j % 2 == 0 ? 1 : 0
113
+ part.position = Vector3.new( -5 + i * 2 + offset, j * 2, 0)
114
+ part.material.specular = SPRING_SPECULAR
115
+ part.material.diffuse = PARTICLE_DIFFUSE
116
+ @world.particles << part
117
+ end
118
+ end
119
+
120
120
 
121
121
  puts "PARTICLE COUNT [ #{@world.particles.size} ] "
122
122
  puts "Contact Generators count: #{@world.contact_generators.size}"
@@ -134,8 +134,8 @@ class Game
134
134
  Rubygame::GL.set_attrib(Rubygame::GL::BLUE_SIZE, 5)
135
135
  Rubygame::GL.set_attrib(Rubygame::GL::DEPTH_SIZE, 16)
136
136
  Rubygame::GL.set_attrib(Rubygame::GL::DOUBLEBUFFER, 1)
137
-
138
- @maximum_resolution = Screen.get_resolution
137
+
138
+ @maximum_resolution = Screen.get_resolution
139
139
  @screen = Screen.new([@width,@height], 16, [OPENGL])
140
140
  @clock.target_framerate = 30
141
141
  @clock.calibrate
@@ -167,41 +167,41 @@ class Game
167
167
 
168
168
  def run()
169
169
  catch(:rubygame_quit) do
170
- loop do
171
- @queue.each do |event|
172
- case event
173
- when Rubygame::Events::KeyPressed
170
+ loop do
171
+ @queue.each do |event|
172
+ case event
173
+ when Rubygame::Events::KeyPressed
174
174
  # puts event.key
175
- case event.key
176
- when :escape
177
- throw :rubygame_quit
178
- when :q
179
- throw :rubygame_quit
180
- when :w
181
- @w_down = true
182
- when :s
183
- @s_down = true
184
- when :a
185
- @a_down = true
186
- when :d
187
- @d_down = true
188
- when :l
189
- @world.particles.each do |part|
190
- puts part.position
191
- puts "NUM CONTACTS: #{@world.contacts.size}"
192
- end
193
- when :space
194
- @current_ball.frozen = !@current_ball.frozen
175
+ case event.key
176
+ when :escape
177
+ throw :rubygame_quit
178
+ when :q
179
+ throw :rubygame_quit
180
+ when :w
181
+ @w_down = true
182
+ when :s
183
+ @s_down = true
184
+ when :a
185
+ @a_down = true
186
+ when :d
187
+ @d_down = true
188
+ when :l
189
+ @world.particles.each do |part|
190
+ puts part.position
191
+ puts "NUM CONTACTS: #{@world.contacts.size}"
192
+ end
193
+ when :space
194
+ @current_ball.frozen = !@current_ball.frozen
195
195
  when :r
196
- puts "RESET"
197
- @current_ball = Particle.new
198
- @current_ball.position = START_POSITION.dup
199
- @current_ball.velocity = @ball.velocity.dup
200
- @current_ball.mass = @ball.mass
201
- @current_ball.damping = @ball.damping
202
- @current_ball.frozen = true
203
- @world.registry.add( @current_ball, ParticleGravity.new())
204
- @world.particles << @current_ball
196
+ puts "RESET"
197
+ @current_ball = Particle.new
198
+ @current_ball.position = START_POSITION.dup
199
+ @current_ball.velocity = @ball.velocity.dup
200
+ @current_ball.mass = @ball.mass
201
+ @current_ball.damping = @ball.damping
202
+ @current_ball.frozen = true
203
+ @world.registry.add( @current_ball, ParticleGravity.new())
204
+ @world.particles << @current_ball
205
205
  end
206
206
  when Rubygame::Events::KeyReleased
207
207
  case event.key
@@ -237,7 +237,7 @@ class Game
237
237
  @world.start_frame
238
238
 
239
239
  glClearColor(0.0, 0.0, 0.0, -1.0)
240
- glClear(GL::COLOR_BUFFER_BIT|GL::DEPTH_BUFFER_BIT)
240
+ glClear(GL::COLOR_BUFFER_BIT|GL::DEPTH_BUFFER_BIT)
241
241
  glLoadIdentity()
242
242
 
243
243
  glTranslatef(@x_trans,@y_trans,@z_trans)
@@ -252,7 +252,7 @@ class Game
252
252
  glPopMatrix()
253
253
 
254
254
 
255
- draw_skybox()
255
+ #draw_skybox()
256
256
 
257
257
  #glClear(GL::COLOR_BUFFER_BIT|GL::DEPTH_BUFFER_BIT)
258
258
  @world.particles.each do |particle|
@@ -266,12 +266,12 @@ class Game
266
266
 
267
267
  @world.run_physics(seconds_elapsed)
268
268
 
269
- Rubygame::GL.swap_buffers()
270
- @screen.update
269
+ Rubygame::GL.swap_buffers()
270
+ @screen.update
271
271
  @screen.flip
272
- ObjectSpace.garbage_collect
272
+ ObjectSpace.garbage_collect
273
273
 
274
- end
274
+ end
275
275
  end
276
276
 
277
277
  end
@@ -21,10 +21,11 @@ module BulldogPhysics
21
21
 
22
22
  ## Gets the magnitude of this vector.
23
23
  def magnitude
24
- num = (@x*@x) + (@y * @y) + (@z * @z)
25
- return 0 if num.nan?
24
+ num = (@x*@x) + (@y * @y) + (@z * @z)
25
+ #return 0 if num.nan?
26
26
  Math.sqrt((@x*@x)+(@y*@y)+(@z*@z))
27
- end
27
+ end
28
+
28
29
 
29
30
  def squareMagnitude
30
31
  return (@x*@x)+(@y*@y)+(@z*@z)
@@ -34,11 +35,12 @@ module BulldogPhysics
34
35
  def normalize
35
36
  length = self.magnitude
36
37
  if length > 0
37
- @x /= length
38
- @y /= length
39
- @z /= length
38
+ @x *= 1.0/length
39
+ @y *= 1.0/length
40
+ @z *= 1.0/length
40
41
  end
41
42
  end
43
+
42
44
 
43
45
  def unit
44
46
  length = self.magnitude
@@ -90,7 +92,7 @@ module BulldogPhysics
90
92
  end
91
93
 
92
94
  def *(scalar)
93
- if scalar.kind_of? Float
95
+ if scalar.kind_of? Numeric
94
96
  Vector3.new(@x*scalar, @y*scalar, @z*scalar)
95
97
  elsif scalar.kind_of? Vector3
96
98
  return @x * scalar.x + @y * scalar.y + @z * scalar.z
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bulldog_physics
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 1
9
- - 0
10
- version: 0.1.0
9
+ - 1
10
+ version: 0.1.1
11
11
  platform: ruby
12
12
  authors:
13
13
  - Conner Wingard
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2012-04-24 00:00:00 Z
18
+ date: 2012-04-26 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  type: :runtime