chingu 0.5.7.1 → 0.5.8
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 +0 -0
- data/Manifest.txt +1 -0
- data/chingu.gemspec +3 -3
- data/examples/example10.rb +2 -2
- data/examples/example11.rb +75 -34
- data/examples/example2.rb +0 -1
- data/examples/example7.rb +6 -6
- data/examples/example8.rb +9 -4
- data/examples/example9.rb +1 -2
- data/examples/media/droid.bmp +0 -0
- data/lib/chingu.rb +2 -1
- data/lib/chingu/animation.rb +8 -4
- data/lib/chingu/assets.rb +4 -4
- data/lib/chingu/basic_game_object.rb +21 -4
- data/lib/chingu/core_extensions.rb +1 -2
- data/lib/chingu/game_object.rb +14 -0
- data/lib/chingu/game_object_list.rb +28 -0
- data/lib/chingu/traits/effect.rb +38 -41
- data/lib/chingu/traits/retrofy.rb +12 -0
- data/lib/chingu/window.rb +1 -0
- metadata +3 -2
- metadata.gz.sig +0 -0
data.tar.gz.sig
CHANGED
|
Binary file
|
data/Manifest.txt
CHANGED
data/chingu.gemspec
CHANGED
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
|
|
3
3
|
Gem::Specification.new do |s|
|
|
4
4
|
s.name = %q{chingu}
|
|
5
|
-
s.version = "0.5.
|
|
5
|
+
s.version = "0.5.8"
|
|
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-10-
|
|
9
|
+
s.date = %q{2009-10-18}
|
|
10
10
|
s.description = %q{Game framework built on top of the OpenGL accelerated game lib Gosu.
|
|
11
11
|
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.}
|
|
12
12
|
s.email = ["ippa@rubylicio.us"]
|
|
13
13
|
s.extra_rdoc_files = ["History.txt", "Manifest.txt", "benchmarks/README.txt"]
|
|
14
|
-
s.files = ["History.txt", "LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "benchmarks/README.txt", "benchmarks/benchmark.rb", "benchmarks/benchmark3.rb", "benchmarks/benchmark4.rb", "benchmarks/benchmark5.rb", "benchmarks/benchmark6.rb", "benchmarks/meta_benchmark.rb", "benchmarks/meta_benchmark2.rb", "chingu.gemspec", "examples/example1.rb", "examples/example10.rb", "examples/example11.rb", "examples/example12.rb", "examples/example2.rb", "examples/example3.rb", "examples/example4.rb", "examples/example5.rb", "examples/example6.rb", "examples/example7.rb", "examples/example8.rb", "examples/example9.rb", "examples/game1.rb", "examples/media/Parallax-scroll-example-layer-0.png", "examples/media/Parallax-scroll-example-layer-1.png", "examples/media/Parallax-scroll-example-layer-2.png", "examples/media/Parallax-scroll-example-layer-3.png", "examples/media/background1.png", "examples/media/bullet.png", "examples/media/bullet_hit.wav", "examples/media/city1.csv", "examples/media/city1.png", "examples/media/city2.png", "examples/media/enemy_bullet.png", "examples/media/explosion.wav", "examples/media/fire_bullet.png", "examples/media/fireball.png", "examples/media/laser.wav", "examples/media/particle.png", "examples/media/plane.csv", "examples/media/plane.png", "examples/media/ruby.png", "examples/media/saucer.csv", "examples/media/saucer.gal", "examples/media/saucer.png", "examples/media/spaceship.png", "examples/media/stickfigure.bmp", "examples/media/stickfigure.png", "examples/media/video_games.png", "lib/chingu.rb", "lib/chingu/animation.rb", "lib/chingu/assets.rb", "lib/chingu/basic_game_object.rb", "lib/chingu/core_extensions.rb", "lib/chingu/fpscounter.rb", "lib/chingu/game_object.rb", "lib/chingu/game_object_list.rb", "lib/chingu/game_state.rb", "lib/chingu/game_state_manager.rb", "lib/chingu/game_states/debug.rb", "lib/chingu/game_states/fade_to.rb", "lib/chingu/game_states/pause.rb", "lib/chingu/helpers/game_object.rb", "lib/chingu/helpers/game_state.rb", "lib/chingu/helpers/gfx.rb", "lib/chingu/helpers/input_client.rb", "lib/chingu/helpers/input_dispatcher.rb", "lib/chingu/helpers/rotation_center.rb", "lib/chingu/inflector.rb", "lib/chingu/input.rb", "lib/chingu/named_resource.rb", "lib/chingu/parallax.rb", "lib/chingu/particle.rb", "lib/chingu/rect.rb", "lib/chingu/require_all.rb", "lib/chingu/text.rb", "lib/chingu/traits/collision_detection.rb", "lib/chingu/traits/effect.rb", "lib/chingu/traits/retrofy.rb", "lib/chingu/traits/timer.rb", "lib/chingu/traits/velocity.rb", "lib/chingu/window.rb"]
|
|
14
|
+
s.files = ["History.txt", "LICENSE", "Manifest.txt", "README.rdoc", "Rakefile", "benchmarks/README.txt", "benchmarks/benchmark.rb", "benchmarks/benchmark3.rb", "benchmarks/benchmark4.rb", "benchmarks/benchmark5.rb", "benchmarks/benchmark6.rb", "benchmarks/meta_benchmark.rb", "benchmarks/meta_benchmark2.rb", "chingu.gemspec", "examples/example1.rb", "examples/example10.rb", "examples/example11.rb", "examples/example12.rb", "examples/example2.rb", "examples/example3.rb", "examples/example4.rb", "examples/example5.rb", "examples/example6.rb", "examples/example7.rb", "examples/example8.rb", "examples/example9.rb", "examples/game1.rb", "examples/media/Parallax-scroll-example-layer-0.png", "examples/media/Parallax-scroll-example-layer-1.png", "examples/media/Parallax-scroll-example-layer-2.png", "examples/media/Parallax-scroll-example-layer-3.png", "examples/media/background1.png", "examples/media/bullet.png", "examples/media/bullet_hit.wav", "examples/media/city1.csv", "examples/media/city1.png", "examples/media/city2.png", "examples/media/droid.bmp", "examples/media/enemy_bullet.png", "examples/media/explosion.wav", "examples/media/fire_bullet.png", "examples/media/fireball.png", "examples/media/laser.wav", "examples/media/particle.png", "examples/media/plane.csv", "examples/media/plane.png", "examples/media/ruby.png", "examples/media/saucer.csv", "examples/media/saucer.gal", "examples/media/saucer.png", "examples/media/spaceship.png", "examples/media/stickfigure.bmp", "examples/media/stickfigure.png", "examples/media/video_games.png", "lib/chingu.rb", "lib/chingu/animation.rb", "lib/chingu/assets.rb", "lib/chingu/basic_game_object.rb", "lib/chingu/core_extensions.rb", "lib/chingu/fpscounter.rb", "lib/chingu/game_object.rb", "lib/chingu/game_object_list.rb", "lib/chingu/game_state.rb", "lib/chingu/game_state_manager.rb", "lib/chingu/game_states/debug.rb", "lib/chingu/game_states/fade_to.rb", "lib/chingu/game_states/pause.rb", "lib/chingu/helpers/game_object.rb", "lib/chingu/helpers/game_state.rb", "lib/chingu/helpers/gfx.rb", "lib/chingu/helpers/input_client.rb", "lib/chingu/helpers/input_dispatcher.rb", "lib/chingu/helpers/rotation_center.rb", "lib/chingu/inflector.rb", "lib/chingu/input.rb", "lib/chingu/named_resource.rb", "lib/chingu/parallax.rb", "lib/chingu/particle.rb", "lib/chingu/rect.rb", "lib/chingu/require_all.rb", "lib/chingu/text.rb", "lib/chingu/traits/collision_detection.rb", "lib/chingu/traits/effect.rb", "lib/chingu/traits/retrofy.rb", "lib/chingu/traits/timer.rb", "lib/chingu/traits/velocity.rb", "lib/chingu/window.rb"]
|
|
15
15
|
s.homepage = %q{http://github.com/ippa/chingu/tree/master}
|
|
16
16
|
s.rdoc_options = ["--main", "README.rdoc"]
|
|
17
17
|
s.require_paths = ["lib"]
|
data/examples/example10.rb
CHANGED
|
@@ -52,7 +52,7 @@ class Thing < Chingu::GameObject
|
|
|
52
52
|
|
|
53
53
|
|
|
54
54
|
self.factor = 8
|
|
55
|
-
self.
|
|
55
|
+
self.rotation_rate = 2
|
|
56
56
|
self.velocity_x = 2
|
|
57
57
|
end
|
|
58
58
|
|
|
@@ -60,7 +60,7 @@ class Thing < Chingu::GameObject
|
|
|
60
60
|
puts "Thing#update"
|
|
61
61
|
if outside_window?
|
|
62
62
|
@velocity_x = -@velocity_x
|
|
63
|
-
|
|
63
|
+
self.rotation_rate = -self.rotation_rate
|
|
64
64
|
end
|
|
65
65
|
end
|
|
66
66
|
|
data/examples/example11.rb
CHANGED
|
@@ -1,51 +1,92 @@
|
|
|
1
1
|
require 'rubygems'
|
|
2
|
+
require 'opengl'
|
|
2
3
|
require File.join(File.dirname($0), "..", "lib", "chingu")
|
|
3
4
|
include Gosu
|
|
5
|
+
include Chingu
|
|
4
6
|
|
|
5
7
|
#
|
|
6
|
-
#
|
|
7
|
-
# Images from http://en.wikipedia.org/wiki/Parallax_scrolling
|
|
8
|
+
# Animation / retrofy example
|
|
8
9
|
#
|
|
9
10
|
class Game < Chingu::Window
|
|
11
|
+
attr_reader :factor
|
|
12
|
+
|
|
10
13
|
def initialize
|
|
11
14
|
super
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
@factor = 6
|
|
16
|
+
self.input = { :escape => :exit }
|
|
17
|
+
self.caption = "Chingu::Animation / retrofy example. Move with arrows!"
|
|
18
|
+
Droid.create(:x => $window.width/@factor/2, :y => $window.height/@factor/2)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
class Droid < Chingu::GameObject
|
|
23
|
+
has_trait :retrofy # modifies draw(),
|
|
24
|
+
|
|
25
|
+
def initialize(options = {})
|
|
26
|
+
super
|
|
19
27
|
|
|
20
|
-
|
|
28
|
+
self.input = { :holding_left => :left,
|
|
29
|
+
:holding_right => :right,
|
|
30
|
+
:holding_up => :up,
|
|
31
|
+
:holding_down => :down }
|
|
21
32
|
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
@
|
|
29
|
-
@
|
|
30
|
-
@
|
|
33
|
+
# Load the full animation from tile-file media/droid.bmp
|
|
34
|
+
@full_animation = Chingu::Animation.new(:file => "droid.bmp", :size => [11,16]).retrofy
|
|
35
|
+
|
|
36
|
+
# Create new animations from specific frames and stuff them into easy to access hash
|
|
37
|
+
@animations = {}
|
|
38
|
+
@animations[:scan] = @full_animation[0..5]
|
|
39
|
+
@animations[:up] = @full_animation[6..7]
|
|
40
|
+
@animations[:down] = @full_animation[8..9]
|
|
41
|
+
@animations[:left] = @full_animation[10..11]
|
|
42
|
+
@animations[:right] = @full_animation[12..13]
|
|
43
|
+
|
|
44
|
+
# Start out by animation frames 0-5 (contained by @animations[:scan])
|
|
45
|
+
@animation = @animations[:scan]
|
|
46
|
+
|
|
47
|
+
self.factor = $window.factor
|
|
48
|
+
@last_x, @last_y = @x, @y
|
|
49
|
+
update
|
|
31
50
|
end
|
|
32
|
-
|
|
33
|
-
def
|
|
34
|
-
@
|
|
51
|
+
|
|
52
|
+
def left
|
|
53
|
+
@x -= 1
|
|
54
|
+
@animation = @animations[:left]
|
|
35
55
|
end
|
|
36
|
-
|
|
37
|
-
def
|
|
38
|
-
@
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
56
|
+
|
|
57
|
+
def right
|
|
58
|
+
@x += 1
|
|
59
|
+
@animation = @animations[:right]
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def up
|
|
63
|
+
@y -= 1
|
|
64
|
+
@animation = @animations[:up]
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
def down
|
|
68
|
+
@y += 1
|
|
69
|
+
@animation = @animations[:down]
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
# We don't need to call super() in update().
|
|
73
|
+
# By default GameObject#update is empty since it doesn't contain any gamelogic to speak of.
|
|
74
|
+
def update
|
|
75
|
+
|
|
76
|
+
# Move the animation forward by fetching the next frame and putting it into @image
|
|
77
|
+
# @image is drawn by default by GameObject#draw
|
|
78
|
+
@image = @animation.next
|
|
79
|
+
|
|
80
|
+
#
|
|
81
|
+
# If droid stands still, use the scanning animation
|
|
82
|
+
#
|
|
83
|
+
if @x == @last_x && @y == @last_y
|
|
84
|
+
@animation = @animations[:scan]
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
@x, @y = @last_x, @last_y if outside_window? # return to previous coordinates if outside window
|
|
88
|
+
@last_x, @last_y = @x, @y # save current coordinates for possible use next time
|
|
43
89
|
end
|
|
44
|
-
|
|
45
|
-
def scroll_down
|
|
46
|
-
@parallax.y += 2
|
|
47
|
-
end
|
|
48
|
-
|
|
49
90
|
end
|
|
50
91
|
|
|
51
92
|
Game.new.show
|
data/examples/example2.rb
CHANGED
data/examples/example7.rb
CHANGED
|
@@ -90,9 +90,9 @@ class Particles < Chingu::GameState
|
|
|
90
90
|
Chingu::Particle.create( :x => 100,
|
|
91
91
|
:y => @ground_y,
|
|
92
92
|
:animation => @fireball_animation,
|
|
93
|
-
:
|
|
94
|
-
:
|
|
95
|
-
:
|
|
93
|
+
:scale_rate => +0.05,
|
|
94
|
+
:fade_rate => -10,
|
|
95
|
+
:rotation_rate => +1,
|
|
96
96
|
:mode => :default
|
|
97
97
|
)
|
|
98
98
|
|
|
@@ -102,9 +102,9 @@ class Particles < Chingu::GameState
|
|
|
102
102
|
Chingu::Particle.create( :x => 300,
|
|
103
103
|
:y => @ground_y,
|
|
104
104
|
:animation => @fireball_animation,
|
|
105
|
-
:
|
|
106
|
-
:
|
|
107
|
-
:
|
|
105
|
+
:scale_rate => +0.2,
|
|
106
|
+
:fade_rate => -4,
|
|
107
|
+
:rotation_rate => +3,
|
|
108
108
|
:mode => :default
|
|
109
109
|
)
|
|
110
110
|
#
|
data/examples/example8.rb
CHANGED
|
@@ -4,7 +4,7 @@ include Gosu
|
|
|
4
4
|
include Chingu
|
|
5
5
|
|
|
6
6
|
#
|
|
7
|
-
# Demonstrating
|
|
7
|
+
# Demonstrating traits "velocity" and "effect"
|
|
8
8
|
#
|
|
9
9
|
class Game < Chingu::Window
|
|
10
10
|
def initialize
|
|
@@ -19,7 +19,8 @@ class Game < Chingu::Window
|
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
class Plasma < Chingu::GameObject
|
|
22
|
-
has_traits :velocity
|
|
22
|
+
has_traits :velocity
|
|
23
|
+
attr_accessor :fade_rate
|
|
23
24
|
|
|
24
25
|
def initialize(options)
|
|
25
26
|
super
|
|
@@ -32,7 +33,11 @@ class Plasma < Chingu::GameObject
|
|
|
32
33
|
|
|
33
34
|
# Simulate gravity
|
|
34
35
|
@acceleration_y = 0.4
|
|
35
|
-
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def update
|
|
39
|
+
self.alpha -= @fade_rate if defined?(@fade_rate)
|
|
40
|
+
end
|
|
36
41
|
end
|
|
37
42
|
|
|
38
43
|
class Particles < Chingu::GameState
|
|
@@ -85,7 +90,7 @@ class Particles < Chingu::GameState
|
|
|
85
90
|
end
|
|
86
91
|
|
|
87
92
|
# 3) Start fading the alphachannel
|
|
88
|
-
particle.
|
|
93
|
+
particle.fade_rate = 3
|
|
89
94
|
end
|
|
90
95
|
end
|
|
91
96
|
|
data/examples/example9.rb
CHANGED
|
@@ -4,7 +4,7 @@ include Gosu
|
|
|
4
4
|
include Chingu
|
|
5
5
|
|
|
6
6
|
#
|
|
7
|
-
# Demonstrating
|
|
7
|
+
# Demonstrating traits "velocity" and "collision_detection"
|
|
8
8
|
#
|
|
9
9
|
class Game < Chingu::Window
|
|
10
10
|
def initialize
|
|
@@ -19,7 +19,6 @@ end
|
|
|
19
19
|
|
|
20
20
|
class FireCube < Chingu::GameObject
|
|
21
21
|
has_trait :velocity
|
|
22
|
-
has_trait :effect
|
|
23
22
|
has_trait :collision_detection
|
|
24
23
|
#
|
|
25
24
|
# TODO:
|
|
Binary file
|
data/lib/chingu.rb
CHANGED
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
#++
|
|
21
21
|
|
|
22
22
|
CHINGU_ROOT = File.dirname(File.expand_path(__FILE__))
|
|
23
|
+
ROOT = File.dirname(File.expand_path($0))
|
|
23
24
|
|
|
24
25
|
require 'rubygems' unless RUBY_VERSION =~ /1\.9/
|
|
25
26
|
require 'gosu'
|
|
@@ -27,5 +28,5 @@ require File.join(CHINGU_ROOT,"chingu","require_all") # Thanks to http://github.
|
|
|
27
28
|
require_all "#{CHINGU_ROOT}/chingu"
|
|
28
29
|
|
|
29
30
|
module Chingu
|
|
30
|
-
VERSION = "0.5.
|
|
31
|
+
VERSION = "0.5.8"
|
|
31
32
|
end
|
data/lib/chingu/animation.rb
CHANGED
|
@@ -16,7 +16,8 @@ module Chingu
|
|
|
16
16
|
# - file: Tile-file to cut up animation frames from.
|
|
17
17
|
# - width: width of each frame in the tileanimation
|
|
18
18
|
# - height: width of each frame in the tileanimation
|
|
19
|
-
#
|
|
19
|
+
# - size: [x,y] specify width/height with 1 argument (an array)
|
|
20
|
+
# - delay: milliseconds between each frame
|
|
20
21
|
#
|
|
21
22
|
def initialize(options)
|
|
22
23
|
options = {:loop => true, :bounce => false, :width => 32, :height => 32, :index => 0, :delay => 100}.merge(options)
|
|
@@ -35,6 +36,8 @@ module Chingu
|
|
|
35
36
|
@height = options[:size][1]
|
|
36
37
|
end
|
|
37
38
|
|
|
39
|
+
@file = media_path(@file) unless File.exist?(@file)
|
|
40
|
+
|
|
38
41
|
@frame_actions = []
|
|
39
42
|
@frames = Gosu::Image.load_tiles($window, @file, @width, @height, true)
|
|
40
43
|
@step = 1
|
|
@@ -96,9 +99,9 @@ module Chingu
|
|
|
96
99
|
|
|
97
100
|
#
|
|
98
101
|
# Propelles the animation forward. Usually called in #update within the class which holds the animation.
|
|
99
|
-
# #next
|
|
102
|
+
# Animation#next() will look at bounce and loop flags to always return a correct frame (a Gosu#Image)
|
|
100
103
|
#
|
|
101
|
-
def next
|
|
104
|
+
def next
|
|
102
105
|
if (@dt += $window.milliseconds_since_last_tick) > @delay
|
|
103
106
|
@dt = 0
|
|
104
107
|
@previous_index = @index
|
|
@@ -119,7 +122,8 @@ module Chingu
|
|
|
119
122
|
end
|
|
120
123
|
@frames[@index]
|
|
121
124
|
end
|
|
122
|
-
|
|
125
|
+
alias :next! :next
|
|
126
|
+
|
|
123
127
|
#
|
|
124
128
|
# Initialize non-blurry zoom on frames in animation
|
|
125
129
|
#
|
data/lib/chingu/assets.rb
CHANGED
|
@@ -5,18 +5,18 @@
|
|
|
5
5
|
#
|
|
6
6
|
module Chingu
|
|
7
7
|
def media_path(file)
|
|
8
|
-
File.join(
|
|
8
|
+
File.join(ROOT, "media", file)
|
|
9
9
|
end
|
|
10
10
|
|
|
11
11
|
def image_path(file)
|
|
12
|
-
File.join(
|
|
12
|
+
File.join(ROOT, "gfx", file)
|
|
13
13
|
end
|
|
14
14
|
|
|
15
|
-
class
|
|
15
|
+
class Asset
|
|
16
16
|
include Chingu::NamedResource
|
|
17
17
|
|
|
18
18
|
def self.autoload(name)
|
|
19
|
-
|
|
19
|
+
find_file(name)
|
|
20
20
|
end
|
|
21
21
|
end
|
|
22
22
|
end
|
|
@@ -75,30 +75,47 @@ module Chingu
|
|
|
75
75
|
end
|
|
76
76
|
|
|
77
77
|
#
|
|
78
|
-
# Disable
|
|
78
|
+
# Disable automatic calling of update() and update_trait() each game loop
|
|
79
79
|
#
|
|
80
80
|
def pause!
|
|
81
81
|
@paused = true
|
|
82
82
|
end
|
|
83
|
+
|
|
83
84
|
#
|
|
84
|
-
# Enable
|
|
85
|
+
# Enable automatic calling of update() and update_trait() each game loop
|
|
85
86
|
#
|
|
86
87
|
def unpause!
|
|
87
88
|
@paused = false
|
|
88
89
|
end
|
|
90
|
+
|
|
89
91
|
#
|
|
90
|
-
# Disable
|
|
92
|
+
# Disable automatic calling of draw and draw_trait each game loop
|
|
91
93
|
#
|
|
92
94
|
def hide!
|
|
93
95
|
@visible = false
|
|
94
96
|
end
|
|
97
|
+
|
|
95
98
|
#
|
|
96
|
-
# Enable
|
|
99
|
+
# Enable automatic calling of draw and draw_trait each game loop
|
|
97
100
|
#
|
|
98
101
|
def show!
|
|
99
102
|
@visible = true
|
|
100
103
|
end
|
|
101
104
|
|
|
105
|
+
#
|
|
106
|
+
# Returns true if paused
|
|
107
|
+
#
|
|
108
|
+
def paused?
|
|
109
|
+
@paused == true
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
#
|
|
113
|
+
# Returns true if visible (not hidden)
|
|
114
|
+
#
|
|
115
|
+
def visible?
|
|
116
|
+
@visible == true
|
|
117
|
+
end
|
|
118
|
+
|
|
102
119
|
def setup_trait(options)
|
|
103
120
|
end
|
|
104
121
|
|
data/lib/chingu/game_object.rb
CHANGED
|
@@ -77,6 +77,20 @@ module Chingu
|
|
|
77
77
|
@center = center
|
|
78
78
|
@center_x = @center_y = center
|
|
79
79
|
end
|
|
80
|
+
|
|
81
|
+
# Get objects alpha-value (internally stored in @color.alpha)
|
|
82
|
+
def alpha
|
|
83
|
+
@color.alpha
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
# Set objects alpha-value (internally stored in @color.alpha)
|
|
87
|
+
# If out of range, set to closest working value. this makes fading simpler.
|
|
88
|
+
def alpha=(value)
|
|
89
|
+
value = 0 if value < 0
|
|
90
|
+
value = 255 if value > 255
|
|
91
|
+
@color.alpha = value
|
|
92
|
+
end
|
|
93
|
+
|
|
80
94
|
|
|
81
95
|
# Returns true if object is inside the game window, false if outside
|
|
82
96
|
def inside_window?(x = @x, y = @y)
|
|
@@ -88,5 +88,33 @@ module Chingu
|
|
|
88
88
|
def select
|
|
89
89
|
@game_objects.select { |object| yield object }
|
|
90
90
|
end
|
|
91
|
+
|
|
92
|
+
#
|
|
93
|
+
# Disable automatic calling of update() and update_trait() each game loop for all game objects
|
|
94
|
+
#
|
|
95
|
+
def pause!
|
|
96
|
+
@game_objects.each { |object| object.pause! }
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
#
|
|
100
|
+
# Enable automatic calling of update() and update_trait() each game loop for all game objects
|
|
101
|
+
#
|
|
102
|
+
def unpause!
|
|
103
|
+
@game_objects.each { |object| object.unpause! }
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
#
|
|
107
|
+
# Disable automatic calling of draw and draw_trait each game loop for all game objects
|
|
108
|
+
#
|
|
109
|
+
def hide!
|
|
110
|
+
@game_objects.each { |object| object.hide! }
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
#
|
|
114
|
+
# Enable automatic calling of draw and draw_trait each game loop for all game objects
|
|
115
|
+
#
|
|
116
|
+
def show!
|
|
117
|
+
@game_objects.each { |object| object.show! }
|
|
118
|
+
end
|
|
91
119
|
end
|
|
92
120
|
end
|
data/lib/chingu/traits/effect.rb
CHANGED
|
@@ -22,26 +22,28 @@
|
|
|
22
22
|
|
|
23
23
|
module Chingu
|
|
24
24
|
module Traits
|
|
25
|
+
|
|
26
|
+
#
|
|
27
|
+
# Adds methods:
|
|
28
|
+
# rotate(amount) # modifies @angle
|
|
29
|
+
# scale(amount) # modifies @factor_x and @factor_y
|
|
30
|
+
# fade(amount) # modifies @color.alpha
|
|
31
|
+
#
|
|
32
|
+
# Also adds attributes
|
|
33
|
+
# rotation_rate=amount # adds amount to @angle each game loop
|
|
34
|
+
# scale_rate=amount # adds amount to @factor_x and @factor_y each game loop
|
|
35
|
+
# fade_rate=amount # adds amount to @color.alpha each game loop
|
|
36
|
+
#
|
|
37
|
+
#
|
|
38
|
+
# WARNING, I'm very close to deprecating this trait, it doesn't do much and still introduces new names to learn.
|
|
39
|
+
# After a long discussion in #gosu I feel it's just better to use the accessors angle=, alpha= and factor=
|
|
40
|
+
#
|
|
41
|
+
# BasicGameObject#alpha= contains the most important logic this trait had now anyhow.
|
|
42
|
+
#
|
|
43
|
+
|
|
25
44
|
module Effect
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
#
|
|
29
|
-
# TODO: better naming? suggestions:
|
|
30
|
-
#
|
|
31
|
-
# basic gosu unit <-> automation name
|
|
32
|
-
# ==============================================
|
|
33
|
-
# angle <-> rotation? rotating? automatic_angle?
|
|
34
|
-
# factor <-> growth? scale? automatic_zoom?
|
|
35
|
-
# alpha <-> fade
|
|
36
|
-
#
|
|
37
|
-
attr_accessor :rotating, :fading, :zooming
|
|
38
|
-
|
|
39
|
-
#def self.initialize_trait(options)
|
|
40
|
-
# @effect_options = {:debug => false}.merge(options)
|
|
41
|
-
# puts "Effect#initialize" if @effect_options[:debug]
|
|
42
|
-
# super
|
|
43
|
-
#end
|
|
44
|
-
|
|
45
|
+
attr_accessor :rotation_rate, :fade_rate, :scale_rate
|
|
46
|
+
|
|
45
47
|
#
|
|
46
48
|
# Setup
|
|
47
49
|
#
|
|
@@ -49,63 +51,58 @@ module Chingu
|
|
|
49
51
|
@effect_options = {:debug => false}.merge(options)
|
|
50
52
|
puts "Effect#setup" if @effect_options[:debug]
|
|
51
53
|
|
|
52
|
-
@
|
|
53
|
-
@
|
|
54
|
-
@
|
|
54
|
+
@rotation_rate = options[:rotation_rate] || nil
|
|
55
|
+
@scale_rate = options[:scale_rate] || nil
|
|
56
|
+
@fade_rate = options[:fade_rate] || nil
|
|
55
57
|
super
|
|
56
58
|
end
|
|
57
59
|
|
|
58
60
|
def draw_trait
|
|
59
|
-
puts "Effect#draw" if @effect_options[:debug]
|
|
60
61
|
super
|
|
61
62
|
end
|
|
62
63
|
|
|
63
64
|
def update_trait
|
|
64
65
|
puts "Effect#update" if @effect_options[:debug]
|
|
65
66
|
|
|
66
|
-
rotate(@
|
|
67
|
-
fade(@
|
|
68
|
-
|
|
67
|
+
rotate(@rotation_rate) if @rotation_rate
|
|
68
|
+
fade(@fade_rate) if @fade_rate
|
|
69
|
+
scale(@scale_rate) if @scale_rate
|
|
69
70
|
super
|
|
70
71
|
end
|
|
71
72
|
|
|
72
|
-
#
|
|
73
|
-
def
|
|
73
|
+
# Increase @factor_x and @factor_y at the same time.
|
|
74
|
+
def scale(amount = 0.1)
|
|
74
75
|
@factor_x += amount
|
|
75
76
|
@factor_y += amount
|
|
76
77
|
end
|
|
78
|
+
alias :zoom :scale
|
|
77
79
|
|
|
78
|
-
#
|
|
79
|
-
def
|
|
80
|
+
# Ddecrease @factor_x and @factor_y at the same time.
|
|
81
|
+
def scale_out(amount = 0.1)
|
|
80
82
|
@factor_x -= amount
|
|
81
83
|
@factor_y -= amount
|
|
82
84
|
end
|
|
83
|
-
|
|
85
|
+
alias :zoom_out :scale_out
|
|
86
|
+
|
|
84
87
|
# Rotate object 'amount' degrees
|
|
85
88
|
def rotate(amount = 1)
|
|
86
|
-
|
|
89
|
+
self.angle += amount
|
|
87
90
|
end
|
|
88
91
|
|
|
89
92
|
# Fade object by decreasing/increasing color.alpha
|
|
90
93
|
def fade(amount = 1)
|
|
91
94
|
return if amount == 0
|
|
92
|
-
|
|
93
|
-
new_alpha = @color.alpha + amount
|
|
94
|
-
if amount < 0
|
|
95
|
-
@color.alpha = [0, new_alpha].max
|
|
96
|
-
else
|
|
97
|
-
@color.alpha = [0, new_alpha].min
|
|
98
|
-
end
|
|
95
|
+
self.alpha += amount
|
|
99
96
|
end
|
|
100
97
|
|
|
101
98
|
# Fade out objects color by decreasing color.alpha
|
|
102
99
|
def fade_out(amount = 1)
|
|
103
|
-
|
|
100
|
+
self.alpha -= amount
|
|
104
101
|
end
|
|
105
102
|
|
|
106
103
|
# Fade in objects color by increasing color.alpha
|
|
107
104
|
def fade_in(amount = 1)
|
|
108
|
-
|
|
105
|
+
self.alpha += amount
|
|
109
106
|
end
|
|
110
107
|
|
|
111
108
|
end
|
|
@@ -52,6 +52,18 @@ module Chingu
|
|
|
52
52
|
(@y * self.factor).to_i
|
|
53
53
|
end
|
|
54
54
|
|
|
55
|
+
# Returns true if object is inside the game window, false if outside
|
|
56
|
+
# this special version takes @factor into consideration
|
|
57
|
+
def inside_window?
|
|
58
|
+
@x >= 0 && @x <= $window.width/self.factor && @y >= 0 && @y <= $window.height/self.factor
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# Returns true object is outside the game window
|
|
62
|
+
# this special version takes @factor into consideration
|
|
63
|
+
def outside_window?
|
|
64
|
+
not inside_window?
|
|
65
|
+
end
|
|
66
|
+
|
|
55
67
|
def draw
|
|
56
68
|
@image.draw_rot(self.screen_x, self.screen_y, @zorder, @angle, @center_x, @center_y, @factor_x, @factor_y, @color, @mode)
|
|
57
69
|
end
|
data/lib/chingu/window.rb
CHANGED
|
@@ -24,6 +24,7 @@ module Chingu
|
|
|
24
24
|
$window = super(width, height, fullscreen, update_interval)
|
|
25
25
|
|
|
26
26
|
@root = File.dirname(File.expand_path($0))
|
|
27
|
+
Chingu::Asset.autoload_dirs = [".", File.join(@root, "gfx"), File.join(@root, "media"), File.join(@root, "sfx")]
|
|
27
28
|
Gosu::Image.autoload_dirs = [".", File.join(@root, "gfx"), File.join(@root, "media")]
|
|
28
29
|
Gosu::Sample.autoload_dirs = [".", File.join(@root, "sound"), File.join(@root, "media")]
|
|
29
30
|
Gosu::Tile.autoload_dirs = [".", File.join(@root, "gfx"), File.join(@root, "media")]
|
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.5.
|
|
4
|
+
version: 0.5.8
|
|
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-10-
|
|
33
|
+
date: 2009-10-18 00:00:00 +02:00
|
|
34
34
|
default_executable:
|
|
35
35
|
dependencies:
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
@@ -94,6 +94,7 @@ files:
|
|
|
94
94
|
- examples/media/city1.csv
|
|
95
95
|
- examples/media/city1.png
|
|
96
96
|
- examples/media/city2.png
|
|
97
|
+
- examples/media/droid.bmp
|
|
97
98
|
- examples/media/enemy_bullet.png
|
|
98
99
|
- examples/media/explosion.wav
|
|
99
100
|
- examples/media/fire_bullet.png
|
metadata.gz.sig
CHANGED
|
Binary file
|