chingu 0.5.5.3
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/History.txt +21 -0
- data/LICENSE +504 -0
- data/Manifest.txt +72 -0
- data/README.rdoc +588 -0
- data/Rakefile +19 -0
- data/benchmarks/README.txt +1 -0
- data/benchmarks/benchmark.rb +6 -0
- data/benchmarks/benchmark3.rb +23 -0
- data/benchmarks/benchmark4.rb +71 -0
- data/benchmarks/benchmark5.rb +91 -0
- data/benchmarks/benchmark6.rb +23 -0
- data/benchmarks/meta_benchmark.rb +67 -0
- data/benchmarks/meta_benchmark2.rb +39 -0
- data/chingu.gemspec +34 -0
- data/examples/example1.rb +37 -0
- data/examples/example10.rb +75 -0
- data/examples/example11.rb +51 -0
- data/examples/example12.rb +67 -0
- data/examples/example2.rb +115 -0
- data/examples/example3.rb +40 -0
- data/examples/example4.rb +175 -0
- data/examples/example5.rb +107 -0
- data/examples/example6.rb +57 -0
- data/examples/example7.rb +133 -0
- data/examples/example8.rb +109 -0
- data/examples/example9.rb +106 -0
- data/examples/media/Parallax-scroll-example-layer-0.png +0 -0
- data/examples/media/Parallax-scroll-example-layer-1.png +0 -0
- data/examples/media/Parallax-scroll-example-layer-2.png +0 -0
- data/examples/media/Parallax-scroll-example-layer-3.png +0 -0
- data/examples/media/background1.png +0 -0
- data/examples/media/fire_bullet.png +0 -0
- data/examples/media/fireball.png +0 -0
- data/examples/media/particle.png +0 -0
- data/examples/media/ruby.png +0 -0
- data/examples/media/spaceship.png +0 -0
- data/examples/media/stickfigure.bmp +0 -0
- data/examples/media/stickfigure.png +0 -0
- data/examples/media/video_games.png +0 -0
- data/lib/chingu.rb +32 -0
- data/lib/chingu/actor.rb +17 -0
- data/lib/chingu/animation.rb +142 -0
- data/lib/chingu/assets.rb +64 -0
- data/lib/chingu/basic_game_object.rb +132 -0
- data/lib/chingu/core_extensions.rb +53 -0
- data/lib/chingu/effects.rb +36 -0
- data/lib/chingu/fpscounter.rb +62 -0
- data/lib/chingu/game_object.rb +127 -0
- data/lib/chingu/game_object_list.rb +91 -0
- data/lib/chingu/game_state.rb +137 -0
- data/lib/chingu/game_state_manager.rb +284 -0
- data/lib/chingu/game_states/debug.rb +65 -0
- data/lib/chingu/game_states/fade_to.rb +91 -0
- data/lib/chingu/game_states/pause.rb +57 -0
- data/lib/chingu/gfx_helpers.rb +89 -0
- data/lib/chingu/helpers.rb +166 -0
- data/lib/chingu/inflector.rb +34 -0
- data/lib/chingu/input.rb +100 -0
- data/lib/chingu/named_resource.rb +254 -0
- data/lib/chingu/parallax.rb +83 -0
- data/lib/chingu/particle.rb +21 -0
- data/lib/chingu/rect.rb +612 -0
- data/lib/chingu/require_all.rb +133 -0
- data/lib/chingu/text.rb +56 -0
- data/lib/chingu/traits/collision_detection.rb +172 -0
- data/lib/chingu/traits/effect.rb +113 -0
- data/lib/chingu/traits/input.rb +38 -0
- data/lib/chingu/traits/retrofy.rb +53 -0
- data/lib/chingu/traits/rotation_center.rb +84 -0
- data/lib/chingu/traits/timer.rb +90 -0
- data/lib/chingu/traits/velocity.rb +67 -0
- data/lib/chingu/window.rb +170 -0
- metadata +162 -0
- metadata.gz.sig +1 -0
@@ -0,0 +1,38 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
4
|
+
# Copyright (C) 2009 ippa / ippa@rubylicio.us
|
5
|
+
#
|
6
|
+
# This library is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
8
|
+
# License as published by the Free Software Foundation; either
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Lesser General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
17
|
+
# License along with this library; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
#
|
20
|
+
#++
|
21
|
+
|
22
|
+
|
23
|
+
module Chingu
|
24
|
+
module Traits
|
25
|
+
module Input
|
26
|
+
|
27
|
+
def input=(input_map)
|
28
|
+
@input = input_map
|
29
|
+
@parent.add_input_client(self) if @parent
|
30
|
+
end
|
31
|
+
|
32
|
+
def input
|
33
|
+
@input
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
4
|
+
# Copyright (C) 2009 ippa / ippa@rubylicio.us
|
5
|
+
#
|
6
|
+
# This library is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
8
|
+
# License as published by the Free Software Foundation; either
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Lesser General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
17
|
+
# License along with this library; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
#
|
20
|
+
#++
|
21
|
+
|
22
|
+
|
23
|
+
module Chingu
|
24
|
+
module Traits
|
25
|
+
#
|
26
|
+
# A chingu trait providing easier handling of the "retrofy" effect (non-blurry zoom)
|
27
|
+
# Aims to help out when using zoom-factor to create a retrofeeling with big pixels.
|
28
|
+
# Provides screen_x and screen_y which takes the zoom into account
|
29
|
+
# Also provides new code for draw() which uses screen_x / screen_y instead of x / y
|
30
|
+
#
|
31
|
+
module Retrofy
|
32
|
+
|
33
|
+
def setup_trait(options)
|
34
|
+
@retrofy_options = {:debug => false}.merge(options)
|
35
|
+
|
36
|
+
super
|
37
|
+
end
|
38
|
+
|
39
|
+
def screen_x
|
40
|
+
(@x * self.factor).to_i
|
41
|
+
end
|
42
|
+
|
43
|
+
def screen_y
|
44
|
+
(@y * self.factor).to_i
|
45
|
+
end
|
46
|
+
|
47
|
+
def draw
|
48
|
+
@image.draw_rot(self.screen_x, self.screen_y, @zorder, @angle, @center_x, @center_y, @factor_x, @factor_y, @color, @mode)
|
49
|
+
end
|
50
|
+
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,84 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
4
|
+
# Copyright (C) 2009 ippa / ippa@rubylicio.us
|
5
|
+
#
|
6
|
+
# This library is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
8
|
+
# License as published by the Free Software Foundation; either
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Lesser General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
17
|
+
# License along with this library; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
#
|
20
|
+
#++
|
21
|
+
|
22
|
+
|
23
|
+
module Chingu
|
24
|
+
module Traits
|
25
|
+
module RotationCenter
|
26
|
+
#
|
27
|
+
# returns [center_x, center_y] (see Gosu::Image#draw_rot)
|
28
|
+
#
|
29
|
+
@@rotation_centers = {
|
30
|
+
:top_left => [0,0],
|
31
|
+
:left_top => [0,0],
|
32
|
+
|
33
|
+
:center_left => [0,0.5],
|
34
|
+
:middle_left => [0,0.5],
|
35
|
+
:left_center => [0,0.5],
|
36
|
+
:left_middle => [0,0.5],
|
37
|
+
|
38
|
+
:bottom_left => [0,1],
|
39
|
+
:left_bottom => [0,1],
|
40
|
+
|
41
|
+
:top_center => [0.5,0],
|
42
|
+
:top_middle => [0.5,0],
|
43
|
+
:center_top => [0.5,0],
|
44
|
+
:middle_top => [0.5,0],
|
45
|
+
|
46
|
+
:center_center => [0.5,0.5],
|
47
|
+
:middle_middle => [0.5,0.5],
|
48
|
+
:center => [0.5,0.5],
|
49
|
+
:middle => [0.5,0.5],
|
50
|
+
|
51
|
+
:bottom_center => [0.5,1],
|
52
|
+
:bottom_middle => [0.5,1],
|
53
|
+
:center_bottom => [0.5,1],
|
54
|
+
:middle_bottom => [0.5,1],
|
55
|
+
|
56
|
+
:top_right => [1,0],
|
57
|
+
:right_top => [1,0],
|
58
|
+
|
59
|
+
:center_right => [1,0.5],
|
60
|
+
:middle_right => [1,0.5],
|
61
|
+
:right_center => [1,0.5],
|
62
|
+
:right_middle => [1,0.5],
|
63
|
+
|
64
|
+
:bottom_right => [1,1],
|
65
|
+
:right_bottom => [1,1]
|
66
|
+
}
|
67
|
+
|
68
|
+
#
|
69
|
+
# Sets @center_x and @center_y according to given alignment. Available alignments are:
|
70
|
+
#
|
71
|
+
# :top_left, :center_left, :bottom_left, :top_center,
|
72
|
+
# :center_center, :bottom_center, :top_right, :center_right and :bottom_right
|
73
|
+
#
|
74
|
+
# They're also available in the opposite order with the same meaning.
|
75
|
+
# They're also available (hey, hashlookups are speedy) with "middle" instead of "center" since
|
76
|
+
# those 2 words basicly have the same meaning and are both understandable.
|
77
|
+
#
|
78
|
+
def rotation_center(alignment)
|
79
|
+
@center_x, @center_y = @@rotation_centers[alignment.to_sym]
|
80
|
+
end
|
81
|
+
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,90 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
4
|
+
# Copyright (C) 2009 ippa / ippa@rubylicio.us
|
5
|
+
#
|
6
|
+
# This library is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
8
|
+
# License as published by the Free Software Foundation; either
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Lesser General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
17
|
+
# License along with this library; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
#
|
20
|
+
#++
|
21
|
+
|
22
|
+
|
23
|
+
module Chingu
|
24
|
+
module Traits
|
25
|
+
#
|
26
|
+
# A chingu trait providing timer-methods to its includer, examples:
|
27
|
+
# during(300) { @color = Color.new(0xFFFFFFFF) } # forces @color to white ever update for 300 ms
|
28
|
+
# after(400) { self.destroy! } # destroy object after 400 ms
|
29
|
+
# between(1000,2000) { self.rotate(10) } # starting after 1 second, call rotate(10) each update during 1 second
|
30
|
+
#
|
31
|
+
# All the above can be combined with a 'then { do_something }'. For example, a classic shmup damage effect:
|
32
|
+
# during(100) { @color.alpha = 100 }.then { @color.alpha = 255 }
|
33
|
+
#
|
34
|
+
module Timer
|
35
|
+
def setup_trait(options)
|
36
|
+
@timer_options = {:debug => false}.merge(options)
|
37
|
+
|
38
|
+
#
|
39
|
+
# Timers are saved as an array of arrays where each entry contains:
|
40
|
+
# [start_time, end_time (or nil if one-shot), &block]
|
41
|
+
#
|
42
|
+
@_timers = Array.new
|
43
|
+
super
|
44
|
+
end
|
45
|
+
|
46
|
+
def during(time, &block)
|
47
|
+
ms = milliseconds()
|
48
|
+
@_last_timer = [ms, ms + time, block]
|
49
|
+
@_timers << @_last_timer
|
50
|
+
self
|
51
|
+
end
|
52
|
+
|
53
|
+
def after(time, &block)
|
54
|
+
ms = milliseconds()
|
55
|
+
@_last_timer = [ms + time, nil, block]
|
56
|
+
@_timers << @_last_timer
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def between(start_time, end_time, &block)
|
61
|
+
ms = milliseconds()
|
62
|
+
@_last_timer = [ms + start_time, ms + end_time, block]
|
63
|
+
@_timers << @_last_timer
|
64
|
+
self
|
65
|
+
end
|
66
|
+
|
67
|
+
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]
|
72
|
+
end
|
73
|
+
|
74
|
+
def update_trait
|
75
|
+
ms = milliseconds()
|
76
|
+
@_timers.each do |start_time, end_time, block|
|
77
|
+
if ms > start_time && (end_time == nil || ms < end_time)
|
78
|
+
block.call
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
# Remove one-shot timers (only a start_time, no end_time) and all timers which have expired
|
83
|
+
@_timers.reject! { |start_time, end_time, block| (ms > start_time && end_time == nil) || (end_time != nil && ms > end_time) }
|
84
|
+
|
85
|
+
super
|
86
|
+
end
|
87
|
+
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
#--
|
2
|
+
#
|
3
|
+
# Chingu -- Game framework built on top of the opengl accelerated gamelib Gosu
|
4
|
+
# Copyright (C) 2009 ippa / ippa@rubylicio.us
|
5
|
+
#
|
6
|
+
# This library is free software; you can redistribute it and/or
|
7
|
+
# modify it under the terms of the GNU Lesser General Public
|
8
|
+
# License as published by the Free Software Foundation; either
|
9
|
+
# version 2.1 of the License, or (at your option) any later version.
|
10
|
+
#
|
11
|
+
# This library is distributed in the hope that it will be useful,
|
12
|
+
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
13
|
+
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
14
|
+
# Lesser General Public License for more details.
|
15
|
+
#
|
16
|
+
# You should have received a copy of the GNU Lesser General Public
|
17
|
+
# License along with this library; if not, write to the Free Software
|
18
|
+
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
19
|
+
#
|
20
|
+
#++
|
21
|
+
|
22
|
+
|
23
|
+
module Chingu
|
24
|
+
module Traits
|
25
|
+
#
|
26
|
+
# A chingu trait providing velocity and acceleration logic.
|
27
|
+
#
|
28
|
+
module Velocity
|
29
|
+
attr_accessor :velocity_x, :velocity_y, :acceleration_x, :acceleration_y, :max_velocity
|
30
|
+
|
31
|
+
#def self.initialize_trait(options)
|
32
|
+
# @velocity_options = {:debug => false}.merge(options)
|
33
|
+
# puts "Velocity#initialize" if @velocity_options[:debug]
|
34
|
+
# super
|
35
|
+
#end
|
36
|
+
|
37
|
+
def setup_trait(options)
|
38
|
+
@velocity_options = {:debug => false}.merge(options)
|
39
|
+
puts "Velocity#setup" if @velocity_options[:debug]
|
40
|
+
|
41
|
+
@velocity_x = options[:velocity_x] || 0
|
42
|
+
@velocity_y = options[:velocity_y] || 0
|
43
|
+
@acceleration_x = options[:acceleration_x] || 0
|
44
|
+
@acceleration_y = options[:acceleration_y] || 0
|
45
|
+
@max_velocity = options[:max_velocity] || 1000
|
46
|
+
super
|
47
|
+
end
|
48
|
+
|
49
|
+
#
|
50
|
+
# Modifies X & Y of parent
|
51
|
+
#
|
52
|
+
def update_trait
|
53
|
+
puts "Velocity#update" if @velocity_options[:debug]
|
54
|
+
|
55
|
+
@velocity_y += @acceleration_y if (@velocity_y + @acceleration_y).abs < @max_velocity
|
56
|
+
@velocity_x += @acceleration_x if (@velocity_x + @acceleration_x).abs < @max_velocity
|
57
|
+
@y += @velocity_y
|
58
|
+
@x += @velocity_x
|
59
|
+
super
|
60
|
+
end
|
61
|
+
|
62
|
+
def stop
|
63
|
+
@acceleration_y = @acceleration_x = @velocity_y = @acceleration_y = 0
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,170 @@
|
|
1
|
+
module Chingu
|
2
|
+
|
3
|
+
class Window < Gosu::Window
|
4
|
+
# adds push_game_state, pop_game_state, current_game_state and previous_game_state
|
5
|
+
include Chingu::GameStateHelpers
|
6
|
+
|
7
|
+
# adds fill() etc...
|
8
|
+
include Chingu::GFXHelpers
|
9
|
+
|
10
|
+
# adds game_objects_of_class etc ...
|
11
|
+
include Chingu::GameObjectHelpers
|
12
|
+
|
13
|
+
# Input dispatch helpers
|
14
|
+
include Chingu::InputDispatcher
|
15
|
+
|
16
|
+
# input= and input
|
17
|
+
include Chingu::InputClient
|
18
|
+
|
19
|
+
attr_reader :root, :game_state_manager, :game_objects, :milliseconds_since_last_tick
|
20
|
+
|
21
|
+
#
|
22
|
+
# See http://www.libgosu.org/rdoc/classes/Gosu/Window.html
|
23
|
+
#
|
24
|
+
# On top of that we add:
|
25
|
+
# - Default widht / height, --fullscreen option from console
|
26
|
+
# - Global variable $window
|
27
|
+
# - Standard #update which updates all Chingu::GameObject's
|
28
|
+
# - Standard #draw which goes through
|
29
|
+
# - Assethandling with Image["picture.png"] and Sample["shot.wav"]
|
30
|
+
# - Default input mapping escape to close
|
31
|
+
#
|
32
|
+
def initialize(width = 800, height = 600, fullscreen = false, update_interval = 16.666666)
|
33
|
+
fullscreen ||= ARGV.include?("--fullscreen")
|
34
|
+
$window = super(width, height, fullscreen, update_interval)
|
35
|
+
|
36
|
+
@root = File.dirname(File.expand_path($0))
|
37
|
+
Gosu::Image.autoload_dirs = [".", File.join(@root, "gfx"), File.join(@root, "media")]
|
38
|
+
Gosu::Sample.autoload_dirs = [".", File.join(@root, "sound"), File.join(@root, "media")]
|
39
|
+
Gosu::Tile.autoload_dirs = [".", File.join(@root, "gfx"), File.join(@root, "media")]
|
40
|
+
Gosu::Song.autoload_dirs = [".", File.join(@root, "sfx"), File.join(@root, "media")]
|
41
|
+
|
42
|
+
@game_objects = GameObjectList.new
|
43
|
+
@input_clients = Set.new # Set is like a unique Array with Hash lookupspeed
|
44
|
+
|
45
|
+
@fps_counter = FPSCounter.new
|
46
|
+
@game_state_manager = GameStateManager.new
|
47
|
+
@milliseconds_since_last_tick = 0
|
48
|
+
end
|
49
|
+
|
50
|
+
def current_parent
|
51
|
+
game_state_manager.current_game_state || self
|
52
|
+
end
|
53
|
+
|
54
|
+
#
|
55
|
+
# Frames per second, access with $window.fps or $window.framerate
|
56
|
+
#
|
57
|
+
def fps
|
58
|
+
@fps_counter.fps
|
59
|
+
end
|
60
|
+
alias :framerate :fps
|
61
|
+
|
62
|
+
#
|
63
|
+
# Total amount of game iterations (ticks)
|
64
|
+
#
|
65
|
+
def ticks
|
66
|
+
@fps_counter.ticks
|
67
|
+
end
|
68
|
+
|
69
|
+
#
|
70
|
+
# Mathematical short name for "milliseconds since last tick"
|
71
|
+
#
|
72
|
+
def dt
|
73
|
+
@milliseconds_since_last_tick
|
74
|
+
end
|
75
|
+
|
76
|
+
#
|
77
|
+
# Chingus core-logic / loop. Gosu will call this each game-iteration.
|
78
|
+
#
|
79
|
+
def update
|
80
|
+
#
|
81
|
+
# Register a tick with our rather standard tick/framerate counter.
|
82
|
+
# Returns the amount of milliseconds since last tick. This number is used in all update()-calls.
|
83
|
+
# Without this self.fps would return an incorrect value.
|
84
|
+
# If you override this in your Chingu::Window class, make sure to call super.
|
85
|
+
#
|
86
|
+
@milliseconds_since_last_tick = @fps_counter.register_tick
|
87
|
+
|
88
|
+
intermediate_update
|
89
|
+
end
|
90
|
+
|
91
|
+
#
|
92
|
+
# "game logic" update that is safe to call even between Gosus update-calls
|
93
|
+
#
|
94
|
+
def intermediate_update
|
95
|
+
#
|
96
|
+
# Dispatch inputmap for main window
|
97
|
+
#
|
98
|
+
dispatch_input_for(self)
|
99
|
+
|
100
|
+
#
|
101
|
+
# Dispatch input for all input-clients handled by to main window (game objects with input created in main win)
|
102
|
+
#
|
103
|
+
@input_clients.each { |game_object| dispatch_input_for(game_object) }
|
104
|
+
|
105
|
+
|
106
|
+
#
|
107
|
+
# Call update() on all game objects belonging to the main window.
|
108
|
+
#
|
109
|
+
update_game_objects
|
110
|
+
|
111
|
+
#
|
112
|
+
# Call update() on all game objects belonging to the current game state.
|
113
|
+
#
|
114
|
+
update_game_state_manager
|
115
|
+
end
|
116
|
+
|
117
|
+
#
|
118
|
+
# Chingus main screen manupulation method.
|
119
|
+
# If you override this in your Chingu::Window class, make sure to call super.
|
120
|
+
# Gosu will call this each game-iteration just after #update
|
121
|
+
#
|
122
|
+
def draw
|
123
|
+
#
|
124
|
+
# Draw all game objects associated with the main window.
|
125
|
+
#
|
126
|
+
@game_objects.draw
|
127
|
+
|
128
|
+
#
|
129
|
+
# Let the game state manager call draw on the active game state (if any)
|
130
|
+
#
|
131
|
+
@game_state_manager.draw
|
132
|
+
end
|
133
|
+
|
134
|
+
#
|
135
|
+
# Call update() on all game objects in main game window.
|
136
|
+
#
|
137
|
+
def update_game_objects
|
138
|
+
@game_objects.update
|
139
|
+
end
|
140
|
+
|
141
|
+
#
|
142
|
+
# Call update() on our game_state_manger
|
143
|
+
# -> call update on active state
|
144
|
+
# -> call update on all game objects in that state
|
145
|
+
#
|
146
|
+
def update_game_state_manager
|
147
|
+
@game_state_manager.update
|
148
|
+
end
|
149
|
+
|
150
|
+
#
|
151
|
+
# By default button_up sends the keyevent to the GameStateManager
|
152
|
+
# .. Which then is responsible to send it to the right GameState(s)
|
153
|
+
#
|
154
|
+
def button_up(id)
|
155
|
+
dispatch_button_up(id, self)
|
156
|
+
@input_clients.each { |object| dispatch_button_up(id, object) }
|
157
|
+
@game_state_manager.button_up(id)
|
158
|
+
end
|
159
|
+
|
160
|
+
#
|
161
|
+
# By default button_down sends the keyevent to the GameStateManager
|
162
|
+
# .. Which then is responsible to send it to the right GameState(s)
|
163
|
+
#
|
164
|
+
def button_down(id)
|
165
|
+
dispatch_button_down(id, self)
|
166
|
+
@input_clients.each { |object| dispatch_button_down(id, object) }
|
167
|
+
@game_state_manager.button_down(id)
|
168
|
+
end
|
169
|
+
end
|
170
|
+
end
|