diff --git a/lib/ambient/small_explosion.rb b/lib/ambient/small_explosion.rb index 714e605..7338b37 100644 --- a/lib/ambient/small_explosion.rb +++ b/lib/ambient/small_explosion.rb @@ -3,20 +3,20 @@ class SmallExplosion < ShortLived include Hurting def initialize window - self.lifetime = 15 + self.lifetime = 30 super window - @image = Gosu::Image::load_tiles window, "media/small_explosion.png", 20, 20, false + @start = Time.now + @image = Gosu::Image::load_tiles window, "media/small_explosion.png", 16, 16, false @shape = CP::Shape::Circle.new CP::Body.new(1_000, 1_000), 5.0, CP::Vec2.new(0, 0) - @shape.collision_type = :explosion end def draw - image = @image[Gosu::milliseconds / 300 % @image.size]; - image.draw_rot self.position.x, self.position.y, ZOrder::Player, drawing_rotation + image = @image[(Time.now - @start)*10 % @image.size]; + image.draw_rot self.position.x, self.position.y, ZOrder::Player, drawing_rotation, 0.8, 0.8, 0.8, 0.8 end end \ No newline at end of file diff --git a/lib/game_window.rb b/lib/game_window.rb index 6a6974b..0fc9af2 100644 --- a/lib/game_window.rb +++ b/lib/game_window.rb @@ -73,7 +73,7 @@ def setup_collisions @space.add_collision_func :bullet, :bullet, &nil @space.add_collision_func :bullet, :gun, &nil @space.add_collision_func :bullet, :enemy do |bullet_shape, enemy_shape| - small_explosion bullet_shape + @moveables.each { |bullet| bullet.shape == bullet_shape && bullet.destroy } end @space.add_collision_func :enemy, :explosion do |enemy_shape, explosion_shape| @moveables.each { |enemy| enemy.shape == enemy_shape && enemy.lives -= 100 } diff --git a/lib/generator.rb b/lib/generator.rb index aab23d1..4325027 100644 --- a/lib/generator.rb +++ b/lib/generator.rb @@ -17,7 +17,7 @@ def generates moveable_class, seconds module InstanceMethods def start_generating - threaded 30 do + threaded 5 do generate end end diff --git a/lib/thing.rb b/lib/thing.rb index 8fd0ab2..3d3f488 100644 --- a/lib/thing.rb +++ b/lib/thing.rb @@ -5,7 +5,6 @@ class Thing attr_reader :window, :shape def initialize window - @running_threads = [] @window = window end @@ -15,7 +14,6 @@ def threaded time, &code def destroy @window.unregister self - @running_threads.select { |thread| thread.status == false }.each(&:join) true end diff --git a/lib/units/bullet.rb b/lib/units/bullet.rb index 3e72b61..7305c40 100644 --- a/lib/units/bullet.rb +++ b/lib/units/bullet.rb @@ -2,9 +2,11 @@ class Bullet < ShortLived it_is_a Shot + it_is_a Generator + generates Puff, 0 def initialize window - self.lifetime = 1000 + self.lifetime = 400 + rand(700) super window @@ -17,6 +19,15 @@ def initialize window self.friction = 0.0001 self.velocity = 5 + rand(1) + + start_generating + end + + def destroy + explosion = SmallExplosion.new window + explosion.warp position + window.register explosion + super end def validate_position diff --git a/lib/units/enemy.rb b/lib/units/enemy.rb index ec96f0a..7d24997 100644 --- a/lib/units/enemy.rb +++ b/lib/units/enemy.rb @@ -6,7 +6,7 @@ class Enemy < Moveable include HorizonOriented include Targetable - lives 1000 + lives 200 def initialize window super window diff --git a/lib/units/gun.rb b/lib/units/gun.rb index d90176d..9ea474c 100644 --- a/lib/units/gun.rb +++ b/lib/units/gun.rb @@ -21,8 +21,8 @@ def initialize window self.muzzle_position_func { self.position } self.muzzle_velocity_func { |target| (target.position - self.muzzle_position[] + self.random_vector(1/skill)).normalize } self.muzzle_rotation_func { |target| (target.position - self.muzzle_position[]).to_angle } - self.range = 900 - self.frequency = 300 + self.range = 700 + self.frequency = 100 end def random_vector strength diff --git a/media/originals/Explosions.png b/media/originals/Explosions.png new file mode 100644 index 0000000..5327f58 Binary files /dev/null and b/media/originals/Explosions.png differ diff --git a/media/small_explosion.png b/media/small_explosion.png index e14217d..89ae31b 100644 Binary files a/media/small_explosion.png and b/media/small_explosion.png differ