okami 0.0.985 → 0.0.990
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/lib/okami.rb +7 -7
- data/lib/okami/hit_mask.rb +3 -3
- data/lib/okami/image.rb +20 -3
- data/lib/okami/keyboard.rb +32 -11
- data/lib/okami/mouse.rb +12 -16
- data/lib/okami/sprite.rb +37 -48
- data/lib/okami/window.rb +11 -8
- metadata +1 -1
data/lib/okami.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
require 'gosu'
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
require_relative 'okami/window'
|
3
|
+
require_relative 'okami/keyboard'
|
4
|
+
require_relative 'okami/mouse'
|
5
|
+
require_relative 'okami/mouse_trap'
|
6
|
+
require_relative 'okami/hit_mask'
|
7
|
+
require_relative 'okami/image'
|
8
|
+
require_relative 'okami/sprite'
|
data/lib/okami/hit_mask.rb
CHANGED
data/lib/okami/image.rb
CHANGED
@@ -10,17 +10,24 @@ class Okami::Image < Gosu::Image
|
|
10
10
|
attr_accessor :tileable
|
11
11
|
# The directory to load the images from
|
12
12
|
attr_accessor :load_path
|
13
|
-
|
13
|
+
|
14
|
+
def load_path=val
|
15
|
+
val << "/" unless val[-1] == "/"
|
16
|
+
@load_path = val
|
17
|
+
end
|
18
|
+
|
19
|
+
## Doesn't have anything to do with the caching, is the same as Gosu::Image.new
|
14
20
|
def new path, tileable=@tileable, *src_rect
|
15
21
|
super $window, @load_path + path, tileable, *src_rect
|
16
22
|
end
|
17
23
|
alias load new
|
18
|
-
|
24
|
+
|
25
|
+
## Doesn't have anything to do with the caching, is the same as Gosu::Image.load_tiles
|
19
26
|
def load_tiles path, tile_width, tile_height, tileable=@tileable
|
20
27
|
super $window, @load_path + path, tile_width, tile_height, tileable
|
21
28
|
end
|
22
29
|
|
23
|
-
|
30
|
+
## Will cache the images so they're only loaded once.
|
24
31
|
def require path, tileable=@tileable, *src_rect
|
25
32
|
Images[ @load_path + path + src_rect.to_s ] ||= load path, tileable, *src_rect
|
26
33
|
end
|
@@ -30,6 +37,16 @@ class Okami::Image < Gosu::Image
|
|
30
37
|
ImageTiles[ "size:#{tile_width},#{tile_height}&" + @load_path + path ] ||= load_tiles path, tile_width, tile_height, tileable
|
31
38
|
end
|
32
39
|
|
40
|
+
## Will update the cache
|
41
|
+
def reload path, tileable=@tileable, *src_rect
|
42
|
+
Images[ @load_path + path + src_rect.to_s ] = load path, tileable, *src_rect
|
43
|
+
end
|
44
|
+
alias [] require
|
45
|
+
|
46
|
+
def reload_tiles path, tile_width, tile_height, tileable=@tileable
|
47
|
+
ImageTiles[ "size:#{tile_width},#{tile_height}&" + @load_path + path ] = load_tiles path, tile_width, tile_height, tileable
|
48
|
+
end
|
49
|
+
|
33
50
|
def retrofy
|
34
51
|
Gosu::enable_undocumented_retrofication \
|
35
52
|
rescue puts "Unable to use Gosu::enable_undocumented_retrofication"
|
data/lib/okami/keyboard.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
|
1
|
+
require_relative 'os'
|
2
2
|
|
3
3
|
module Okami::Keyboard
|
4
4
|
DefaultKeySymbols = {
|
@@ -95,18 +95,16 @@ module Okami::Keyboard
|
|
95
95
|
end
|
96
96
|
|
97
97
|
def remove_key_up_listener listener
|
98
|
-
|
99
|
-
|
100
|
-
else
|
101
|
-
@@key_up_listeners.delete listener
|
98
|
+
case listener
|
99
|
+
when Method; @@key_up_listeners.delete @@key_up_listeners.key(listener)
|
100
|
+
else; @@key_up_listeners.delete listener
|
102
101
|
end
|
103
102
|
end
|
104
103
|
|
105
104
|
def remove_key_down_listener listener
|
106
|
-
|
107
|
-
|
108
|
-
else
|
109
|
-
@@key_down_listeners.delete listener
|
105
|
+
case listener
|
106
|
+
when Method; @@key_down_listeners.delete @@key_down_listeners.key(listener)
|
107
|
+
else; @@key_down_listeners.delete listener
|
110
108
|
end
|
111
109
|
end
|
112
110
|
|
@@ -120,7 +118,6 @@ module Okami::Keyboard
|
|
120
118
|
else
|
121
119
|
$window.button_down? @@key_symbols.key( key_symbol )
|
122
120
|
end
|
123
|
-
|
124
121
|
end
|
125
122
|
|
126
123
|
## Returns true if all key_symbol arguments is down
|
@@ -143,11 +140,35 @@ module Okami::Keyboard
|
|
143
140
|
|
144
141
|
def button_down id
|
145
142
|
key = @@key_symbols[id]
|
146
|
-
|
143
|
+
case key
|
144
|
+
when :left_alt, :right_alt then call_key_down_listeners :alt
|
145
|
+
when :left_shift, :right_shift then call_key_down_listeners :shift
|
146
|
+
when :left_ctrl, :right_ctrl then call_key_down_listeners :ctrl
|
147
|
+
when :left_cmd, :right_cmd then call_key_down_listeners :cmd
|
148
|
+
end
|
149
|
+
call_key_down_listeners key
|
147
150
|
end
|
148
151
|
|
149
152
|
def button_up id
|
150
153
|
key = @@key_symbols[id]
|
154
|
+
case key
|
155
|
+
when :left_alt, :right_alt; call_key_up_listeners :alt
|
156
|
+
when :left_shift, :right_shift; call_key_up_listeners :shift
|
157
|
+
when :left_ctrl, :right_ctrl; call_key_up_listeners :ctrl
|
158
|
+
when :left_cmd, :right_cmd; call_key_up_listeners :cmd
|
159
|
+
end
|
160
|
+
call_key_up_listeners key
|
161
|
+
end
|
162
|
+
|
163
|
+
|
164
|
+
protected
|
165
|
+
|
166
|
+
|
167
|
+
def call_key_down_listeners key
|
168
|
+
@@key_down_listeners.each { |listener, method| method.call key } if key
|
169
|
+
end
|
170
|
+
|
171
|
+
def call_key_up_listeners key
|
151
172
|
@@key_up_listeners.each { |listener, method| method.call key } if key
|
152
173
|
end
|
153
174
|
end
|
data/lib/okami/mouse.rb
CHANGED
@@ -21,10 +21,10 @@ module Okami::Mouse
|
|
21
21
|
def y=value; $window.mouse_y = value end
|
22
22
|
|
23
23
|
def onscreen?
|
24
|
-
if x
|
25
|
-
if y
|
26
|
-
if x
|
27
|
-
if y
|
24
|
+
if x < 0
|
25
|
+
if y < 0
|
26
|
+
if x > $window.width
|
27
|
+
if y > $window.height
|
28
28
|
return true
|
29
29
|
end
|
30
30
|
end
|
@@ -50,18 +50,16 @@ module Okami::Mouse
|
|
50
50
|
end
|
51
51
|
|
52
52
|
def remove_key_up_listener listener
|
53
|
-
|
54
|
-
|
55
|
-
else
|
56
|
-
@@key_up_listeners.delete listener
|
53
|
+
case listener
|
54
|
+
when Method; @@key_up_listeners.delete @@key_up_listeners.key(listener)
|
55
|
+
else; @@key_up_listeners.delete listener
|
57
56
|
end
|
58
57
|
end
|
59
58
|
|
60
59
|
def remove_key_down_listener listener
|
61
|
-
|
62
|
-
|
63
|
-
else
|
64
|
-
@@key_down_listeners.delete listener
|
60
|
+
case listener
|
61
|
+
when Method; @@key_down_listeners.delete @@key_down_listeners.key(listener)
|
62
|
+
else; @@key_down_listeners.delete listener
|
65
63
|
end
|
66
64
|
end
|
67
65
|
|
@@ -94,14 +92,12 @@ module Okami::Mouse
|
|
94
92
|
|
95
93
|
def button_down id
|
96
94
|
key = @@key_symbols[id]
|
97
|
-
|
98
|
-
@@key_down_listeners.each { |listener, method| method.call key }
|
95
|
+
@@key_down_listeners.each { |listener, method| method.call key } if key
|
99
96
|
end
|
100
97
|
|
101
98
|
def button_up id
|
102
99
|
key = @@key_symbols[id]
|
103
|
-
|
104
|
-
@@key_up_listeners.each { |listener, method| method.call key }
|
100
|
+
@@key_up_listeners.each { |listener, method| method.call key } if key
|
105
101
|
end
|
106
102
|
end
|
107
103
|
|
data/lib/okami/sprite.rb
CHANGED
@@ -3,16 +3,19 @@ class Okami::Sprite
|
|
3
3
|
|
4
4
|
attr_reader :current_image, :images, :last_frame_index
|
5
5
|
|
6
|
-
def initialize options
|
6
|
+
def initialize options
|
7
|
+
raise_possible_errors options
|
8
|
+
|
7
9
|
@images = options[:images]
|
8
10
|
|
9
11
|
@last_frame_index = @images.length - 1
|
10
|
-
@add
|
11
|
-
|
12
|
+
@add = ( options[:fps] || 0 ) / 60.0
|
13
|
+
@direction = options[:direction]
|
14
|
+
self.mode = options[:mode] || :loop
|
12
15
|
|
13
16
|
case @direction
|
14
17
|
when :forward then @frame_index = 0
|
15
|
-
when :backward then @frame_index = @last_frame_index+0.
|
18
|
+
when :backward then @frame_index = @last_frame_index+0.999
|
16
19
|
end
|
17
20
|
|
18
21
|
update_current_image
|
@@ -21,19 +24,6 @@ class Okami::Sprite
|
|
21
24
|
def fps; @add * 60.0 end
|
22
25
|
def fps= fps; @add = fps / 60.0 end
|
23
26
|
|
24
|
-
attr_reader :frame_index
|
25
|
-
def frame_index= i
|
26
|
-
@frame_index = i
|
27
|
-
@frame_index = @last_frame_index if @frame_index.abs > @last_frame_index
|
28
|
-
@frame_index = 0 if @frame_index < 0
|
29
|
-
update_current_image
|
30
|
-
end
|
31
|
-
|
32
|
-
def random_frame_index
|
33
|
-
(rand()*@images.length) % @images.length
|
34
|
-
end
|
35
|
-
|
36
|
-
|
37
27
|
## Draw it just like a Gosu::Image !
|
38
28
|
def draw *args; @current_image.draw *args end
|
39
29
|
def draw_as_quad *args; @current_image.draw_as_quad *args end
|
@@ -91,33 +81,39 @@ class Okami::Sprite
|
|
91
81
|
@mode = symbol
|
92
82
|
end
|
93
83
|
|
84
|
+
attr_reader :frame_index
|
85
|
+
def frame_index= i
|
86
|
+
@frame_index = i
|
87
|
+
@frame_index = @last_frame_index if @frame_index.abs > @last_frame_index
|
88
|
+
@frame_index = 0 if @frame_index < 0
|
89
|
+
update_current_image
|
90
|
+
end
|
91
|
+
|
92
|
+
def random_frame_index
|
93
|
+
(rand()*@images.length)
|
94
|
+
end
|
95
|
+
|
94
96
|
|
95
97
|
|
96
|
-
|
98
|
+
private
|
97
99
|
|
98
100
|
|
99
101
|
|
100
102
|
def use_update method; @update_method = method end
|
103
|
+
def update_current_image; @current_image = @images[@frame_index] end
|
104
|
+
|
105
|
+
def update_loop; @frame_index %= @images.length end
|
106
|
+
def update_backward_loop; @frame_index %= @images.length end
|
101
107
|
|
102
|
-
def
|
103
|
-
@
|
108
|
+
def update_backward
|
109
|
+
@frame_index = 0 if @frame_index < 0
|
104
110
|
end
|
105
111
|
|
106
112
|
def update_forward
|
107
113
|
@frame_index = @last_frame_index if @frame_index > @last_frame_index
|
108
114
|
end
|
109
115
|
|
110
|
-
def update_loop
|
111
|
-
@frame_index %= @images.length# if @frame_index.abs > @last_frame_index
|
112
|
-
end
|
113
|
-
|
114
|
-
def update_backward
|
115
|
-
@frame_index = 0 if @frame_index < 0
|
116
|
-
end
|
117
116
|
|
118
|
-
def update_backward_loop
|
119
|
-
@frame_index = @last_frame_index+0.99 if @frame_index < 0
|
120
|
-
end
|
121
117
|
|
122
118
|
def update_ping_pong
|
123
119
|
case @direction
|
@@ -129,26 +125,19 @@ class Okami::Sprite
|
|
129
125
|
|
130
126
|
when :backward
|
131
127
|
if @frame_index < 0
|
132
|
-
@frame_index =
|
128
|
+
@frame_index = 0
|
133
129
|
@direction = :forward
|
134
130
|
end
|
135
131
|
|
136
132
|
end
|
137
133
|
end
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
#end
|
149
|
-
p a.current_image
|
150
|
-
p a.finished?
|
151
|
-
a.update
|
152
|
-
sleep 0.3
|
153
|
-
end
|
154
|
-
=end
|
134
|
+
|
135
|
+
def raise_possible_errors options
|
136
|
+
raise ArgumentError, "Sprite.new options must contain option :images" unless options[:images]
|
137
|
+
raise TypeError, "Sprite.new option :images must be of type Array" unless options[:images].kind_of? Array
|
138
|
+
raise "Sprite.new option :images is empty" if options[:images].empty?
|
139
|
+
|
140
|
+
raise ArgumentError, "Sprite.new options must contain option :fps" unless options[:fps]
|
141
|
+
raise TypeError, "Sprite.new option :fps must be of type Numeric" unless options[:fps].kind_of? Numeric
|
142
|
+
end
|
143
|
+
end # Okami::Sprite
|
data/lib/okami/window.rb
CHANGED
@@ -1,12 +1,9 @@
|
|
1
1
|
module Okami
|
2
2
|
class Window < Gosu::Window
|
3
|
-
include Gosu
|
4
|
-
include Okami
|
5
3
|
attr_reader :dt, :current_time
|
6
4
|
attr_accessor :cursor_visible
|
7
5
|
|
8
6
|
def initialize *args
|
9
|
-
@previous_time = Gosu::milliseconds
|
10
7
|
$window = super *args
|
11
8
|
end
|
12
9
|
|
@@ -24,10 +21,14 @@ module Okami
|
|
24
21
|
Okami::Mouse.button_up id
|
25
22
|
end
|
26
23
|
|
27
|
-
def
|
24
|
+
def color_fill color, z=0
|
28
25
|
color = case color
|
29
26
|
when :white then 0xFFFFFFFF
|
30
27
|
when :black then 0xFF000000
|
28
|
+
when Symbol
|
29
|
+
raise ArgumentError, "Unknown color #{color.inspect}"
|
30
|
+
else
|
31
|
+
color
|
31
32
|
end
|
32
33
|
|
33
34
|
draw_quad 0, 0, color,
|
@@ -38,15 +39,18 @@ module Okami
|
|
38
39
|
end
|
39
40
|
|
40
41
|
def calculate_dt
|
41
|
-
@current_time
|
42
|
-
@
|
43
|
-
@
|
42
|
+
@current_time = Gosu::milliseconds/1000.0
|
43
|
+
@previous_time ||= @current_time - update_interval/1000.0
|
44
|
+
@dt = @current_time - @previous_time
|
45
|
+
@previous_time = @current_time
|
44
46
|
end
|
45
47
|
|
46
48
|
def self.inherited(subclass)
|
47
49
|
def subclass.method_added(name)
|
48
50
|
if name == :update
|
51
|
+
## Prevent infinite loop
|
49
52
|
return if caller.first.match(/^(.+?):(\d+)(?::in `(.*)')?/)[1].match /eval/i
|
53
|
+
## Calculate_dt before update
|
50
54
|
class_eval "def update_hook\n calculate_dt\n update_without_hook\nend"
|
51
55
|
class_eval "alias update_without_hook update"
|
52
56
|
class_eval "alias update update_hook"
|
@@ -56,4 +60,3 @@ module Okami
|
|
56
60
|
|
57
61
|
end # Window
|
58
62
|
end # Okami
|
59
|
-
|