chingu 0.6.5 → 0.6.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data.tar.gz.sig CHANGED
Binary file
data/chingu.gemspec CHANGED
@@ -2,11 +2,11 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = %q{chingu}
5
- s.version = "0.6.5"
5
+ s.version = "0.6.6"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["ippa"]
9
- s.date = %q{2009-12-08}
9
+ s.date = %q{2009-12-12}
10
10
  s.description = %q{OpenGL accelerated 2D game framework for Ruby.
11
11
  Builds on the awesome Gosu (Ruby/C++) which provides all the core functionality.
12
12
  It adds simple yet powerful game states, prettier input handling, deployment safe asset-handling, a basic re-usable game object and automation of common task.}
@@ -25,11 +25,11 @@ It adds simple yet powerful game states, prettier input handling, deployment saf
25
25
  s.specification_version = 3
26
26
 
27
27
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
28
- s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
28
+ s.add_development_dependency(%q<hoe>, [">= 2.4.0"])
29
29
  else
30
- s.add_dependency(%q<hoe>, [">= 2.3.3"])
30
+ s.add_dependency(%q<hoe>, [">= 2.4.0"])
31
31
  end
32
32
  else
33
- s.add_dependency(%q<hoe>, [">= 2.3.3"])
33
+ s.add_dependency(%q<hoe>, [">= 2.4.0"])
34
34
  end
35
35
  end
@@ -3,6 +3,9 @@ require File.join(File.dirname($0), "..", "lib", "chingu")
3
3
  include Gosu
4
4
  include Chingu
5
5
 
6
+ #
7
+ # Testing advanced options of timer-trait
8
+ #
6
9
  class Game < Chingu::Window
7
10
  def initialize
8
11
  super(640,400)
@@ -16,10 +19,23 @@ class Stuff < GameState
16
19
 
17
20
  def initialize(options = {})
18
21
  super
19
-
22
+ self.input = {:t => :toggle, :"1" => :fast, :"2" => :slow}
20
23
  @thing = Thing.create(:x => $window.width/2, :y => $window.height / 2 )
21
- #every(1000) { Thing.create(:x => 200)}
22
- every(500){ @thing.visible? ? @thing.hide! : @thing.show!}
24
+
25
+ every(500, :name => :blink) { @thing.visible? ? @thing.hide! : @thing.show! }
26
+ p timer_exists?(:blink)
27
+ end
28
+
29
+ def toggle
30
+ stop_timer(:name => :blink)
31
+ end
32
+
33
+ def fast
34
+ every(200, :name => :blink) { @thing.visible? ? @thing.hide! : @thing.show! }
35
+ end
36
+
37
+ def slow
38
+ every(1000, :name => :blink) { @thing.visible? ? @thing.hide! : @thing.show! }
23
39
  end
24
40
 
25
41
  def update
@@ -33,10 +49,6 @@ class Thing < GameObject
33
49
  super
34
50
  @image = Image["circle.png"]
35
51
  end
36
-
37
- def update
38
- #@y += 1
39
- end
40
52
  end
41
53
 
42
54
  Game.new.show
data/lib/chingu.rb CHANGED
@@ -33,7 +33,7 @@ require_all "#{CHINGU_ROOT}/chingu/traits"
33
33
  require_all "#{CHINGU_ROOT}/chingu"
34
34
 
35
35
  module Chingu
36
- VERSION = "0.6.5"
36
+ VERSION = "0.6.6"
37
37
 
38
38
  DEBUG_COLOR = Gosu::Color.new(0xFFFF0000)
39
39
  DEBUG_ZORDER = 9999
@@ -111,7 +111,7 @@ module Chingu
111
111
  # Explicit radius-collision
112
112
  # Works like each_collsion but with inline-code for speedups
113
113
  #
114
- def each_bounding_circle_collision(klasses = [])
114
+ def each_bounding_circle_collision(*klasses)
115
115
  Array(klasses).each do |klass|
116
116
  klass.all.each do |object|
117
117
  yield(self, object) if Gosu.distance(self.x, self.y, object.x, object.y) < self.radius + object.radius
@@ -123,7 +123,7 @@ module Chingu
123
123
  # Explicit bounding_box-collision
124
124
  # Works like each_collision but with inline-code for speedups
125
125
  #
126
- def each_bounding_box_collision(klasses = [])
126
+ def each_bounding_box_collision(*klasses)
127
127
  Array(klasses).each do |klass|
128
128
  klass.all.each do |object|
129
129
  yield(self, object) if self.bounding_box.collide_rect?(object.bounding_box)
@@ -136,7 +136,7 @@ module Chingu
136
136
  #
137
137
  # Works like each_collision but with inline-code for speedups
138
138
  #
139
- def each_bounding_circle_collision(klasses = [])
139
+ def each_bounding_circle_collision(*klasses)
140
140
  Array(klasses).each do |klass|
141
141
  object2_list = klass.all
142
142
  #total_radius = object1.radius + object2.radius # possible optimization?
@@ -153,7 +153,7 @@ module Chingu
153
153
  #
154
154
  # Works like each_collsion but with explicit bounding_box collisions (inline-code for speedups)
155
155
  #
156
- def each_bounding_box_collision(klasses = [])
156
+ def each_bounding_box_collision(*klasses)
157
157
  Array(klasses).each do |klass|
158
158
  object2_list = klass.all
159
159
  self.all.each do |object1|
@@ -36,64 +36,118 @@ module Chingu
36
36
  def setup_trait(options)
37
37
  #
38
38
  # Timers are saved as an array of arrays where each entry contains:
39
- # [start_time, end_time (or nil if one-shot), &block]
39
+ # [name, start_time, end_time (or nil if one-shot), &block]
40
40
  #
41
41
  @_timers = Array.new
42
42
  @_repeating_timers = Array.new
43
43
  super
44
44
  end
45
45
 
46
- def during(time, &block)
46
+ #
47
+ # Executes block each update during 'time' milliseconds
48
+ #
49
+ def during(time, options = {}, &block)
50
+ return if timer_exists?(options[:name]) && options[:replace] == false
51
+ stop_timer(options[:name])
52
+
47
53
  ms = Gosu::milliseconds()
48
- @_last_timer = [ms, ms + time, block]
54
+ @_last_timer = [options[:name], ms, ms + time, block]
49
55
  @_timers << @_last_timer
50
56
  self
51
57
  end
52
58
 
53
- def after(time, &block)
59
+ #
60
+ # Executes block after 'time' milliseconds
61
+ #
62
+ def after(time, options = {}, &block)
63
+ return if timer_exists?(options[:name]) && options[:replace] == false
64
+ stop_timer(options[:name])
65
+
54
66
  ms = Gosu::milliseconds()
55
- @_last_timer = [ms + time, nil, block]
67
+ @_last_timer = [options[:name], ms + time, nil, block]
56
68
  @_timers << @_last_timer
57
69
  self
58
70
  end
59
-
60
- def between(start_time, end_time, &block)
71
+
72
+ #
73
+ # Executes block each update during 'start_time' and 'end_time'
74
+ #
75
+ def between(start_time, end_time, options = {}, &block)
76
+ return if timer_exists?(options[:name]) && options[:replace] == false
77
+ stop_timer(options[:name])
78
+
61
79
  ms = Gosu::milliseconds()
62
- @_last_timer = [ms + start_time, ms + end_time, block]
80
+ @_last_timer = [options[:name], ms + start_time, ms + end_time, block]
63
81
  @_timers << @_last_timer
64
82
  self
65
83
  end
66
84
 
85
+ #
86
+ # Executes block every 'delay' milliseconds
87
+ #
88
+ def every(delay, options = {}, &block)
89
+ return if timer_exists?(options[:name]) && options[:replace] == false
90
+ stop_timer(options[:name])
91
+
92
+ ms = Gosu::milliseconds()
93
+ @_repeating_timers << [options[:name], ms + delay, delay, block]
94
+ end
95
+
96
+ #
97
+ # Executes block after the last timer ends
98
+ # ...use one-shots start_time for our trailing "then".
99
+ # ...use durable timers end_time for our trailing "then".
100
+ #
67
101
  def then(&block)
68
- # ...use one-shots start_time for our trailing "then".
69
- # ...use durable timers end_time for our trailing "then".
70
- start_time = @_last_timer[1].nil? ? @_last_timer[0] : @_last_timer[1]
71
- @_timers << [start_time, nil, block]
102
+ start_time = @_last_timer[2].nil? ? @_last_timer[1] : @_last_timer[2]
103
+ @_timers << [@_last_timer[0], start_time, nil, block]
104
+ end
105
+
106
+
107
+ #
108
+ # See if a timer with name 'name' exists
109
+ #
110
+ def timer_exists?(timer_name = nil)
111
+ return false if timer_name.nil?
112
+ @_timers.each { |name, | return true if timer_name == name }
113
+ @_repeating_timers.each { |name, | return true if timer_name == name }
114
+ return false
115
+ end
116
+
117
+ #
118
+ # Stop timer with name 'name'
119
+ #
120
+ def stop_timer(name)
121
+ @_timers.reject! { |name, start_time, end_time, block| name == name }
122
+ @_repeating_timers.reject! { |name, start_time, end_time, block| name == name }
72
123
  end
73
124
 
74
- def every(delay, &block)
75
- ms = Gosu::milliseconds()
76
- @_repeating_timers << [ms + delay, delay, block]
77
- end
125
+ #
126
+ # Stop all timers
127
+ #
128
+ def stop_timers
129
+ @_timers.clear
130
+ @_repeating_timers.clear
131
+ end
78
132
 
79
133
  def update_trait
80
134
  ms = Gosu::milliseconds()
81
135
 
82
- @_timers.each do |start_time, end_time, block|
136
+ @_timers.each do |name, start_time, end_time, block|
83
137
  block.call if ms > start_time && (end_time == nil || ms < end_time)
84
138
  end
85
139
 
86
140
  index = 0
87
- @_repeating_timers.each do |start_time, delay, block|
141
+ @_repeating_timers.each do |name, start_time, delay, block|
88
142
  if ms > start_time
89
143
  block.call
90
- @_repeating_timers[index] = [ms + delay, delay, block]
144
+ @_repeating_timers[index] = [name, ms + delay, delay, block]
91
145
  end
92
146
  index += 1
93
147
  end
94
148
 
95
149
  # Remove one-shot timers (only a start_time, no end_time) and all timers which have expired
96
- @_timers.reject! { |start_time, end_time, block| (ms > start_time && end_time == nil) || (end_time != nil && ms > end_time) }
150
+ @_timers.reject! { |name, start_time, end_time, block| (ms > start_time && end_time == nil) || (end_time != nil && ms > end_time) }
97
151
 
98
152
  super
99
153
  end
@@ -23,9 +23,13 @@ module Chingu
23
23
  module Traits
24
24
  #
25
25
  # A chingu trait providing velocity and acceleration logic.
26
+ # Adds parameters: velocity_x/y, acceleration_x/y and modifies self.x / self.y
27
+ # Also keeps previous_x and previous_y which is the x, y before modification.
28
+ # Can be useful for example collision detection
26
29
  #
27
30
  module Velocity
28
31
  attr_accessor :velocity_x, :velocity_y, :acceleration_x, :acceleration_y, :max_velocity
32
+ attr_reader :previous_x, :previous_y
29
33
 
30
34
  def setup_trait(options)
31
35
  @velocity_options = {:debug => false}.merge(options)
@@ -44,13 +48,19 @@ module Chingu
44
48
  def update_trait
45
49
  @velocity_y += @acceleration_y if (@velocity_y + @acceleration_y).abs < @max_velocity
46
50
  @velocity_x += @acceleration_x if (@velocity_x + @acceleration_x).abs < @max_velocity
51
+
52
+ @previous_y = @y
53
+ @previous_x = @x
54
+
47
55
  self.y += @velocity_y
48
56
  self.x += @velocity_x
49
57
  super
50
58
  end
51
59
 
52
60
  def stop
53
- @acceleration_y = @acceleration_x = @velocity_y = @acceleration_y = 0
61
+ # @acceleration_y = @acceleration_x = 0
62
+ @velocity_x = 0
63
+ @velocity_y = 0
54
64
  end
55
65
  end
56
66
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chingu
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.5
4
+ version: 0.6.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - ippa
@@ -30,7 +30,7 @@ cert_chain:
30
30
  hxtMlw==
31
31
  -----END CERTIFICATE-----
32
32
 
33
- date: 2009-12-08 00:00:00 +01:00
33
+ date: 2009-12-12 00:00:00 +01:00
34
34
  default_executable:
35
35
  dependencies:
36
36
  - !ruby/object:Gem::Dependency
@@ -41,7 +41,7 @@ dependencies:
41
41
  requirements:
42
42
  - - ">="
43
43
  - !ruby/object:Gem::Version
44
- version: 2.3.3
44
+ version: 2.4.0
45
45
  version:
46
46
  description: |-
47
47
  OpenGL accelerated 2D game framework for Ruby.
metadata.gz.sig CHANGED
Binary file