chingu 0.5.5.3 → 0.5.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 +0 -0
- data/Manifest.txt +6 -6
- data/README.rdoc +42 -9
- data/chingu.gemspec +3 -3
- data/examples/example1.rb +4 -3
- data/examples/example2.rb +5 -20
- data/lib/chingu.rb +1 -2
- data/lib/chingu/animation.rb +1 -0
- data/lib/chingu/core_extensions.rb +1 -0
- data/lib/chingu/game_object.rb +3 -1
- data/lib/chingu/game_state.rb +7 -8
- data/lib/chingu/game_state_manager.rb +1 -1
- data/lib/chingu/{effects.rb → helpers/game_object.rb} +52 -35
- data/lib/chingu/helpers/game_state.rb +62 -0
- data/lib/chingu/{gfx_helpers.rb → helpers/gfx.rb} +5 -1
- data/lib/chingu/{traits/input.rb → helpers/input_client.rb} +20 -5
- data/lib/chingu/{helpers.rb → helpers/input_dispatcher.rb} +103 -165
- data/lib/chingu/{traits → helpers}/rotation_center.rb +1 -1
- data/lib/chingu/parallax.rb +1 -1
- data/lib/chingu/window.rb +14 -34
- metadata +8 -8
- metadata.gz.sig +4 -1
- data/lib/chingu/actor.rb +0 -17
data.tar.gz.sig
CHANGED
Binary file
|
data/Manifest.txt
CHANGED
@@ -38,12 +38,10 @@ examples/media/stickfigure.bmp
|
|
38
38
|
examples/media/stickfigure.png
|
39
39
|
examples/media/video_games.png
|
40
40
|
lib/chingu.rb
|
41
|
-
lib/chingu/actor.rb
|
42
41
|
lib/chingu/animation.rb
|
43
42
|
lib/chingu/assets.rb
|
44
43
|
lib/chingu/basic_game_object.rb
|
45
44
|
lib/chingu/core_extensions.rb
|
46
|
-
lib/chingu/effects.rb
|
47
45
|
lib/chingu/fpscounter.rb
|
48
46
|
lib/chingu/game_object.rb
|
49
47
|
lib/chingu/game_object_list.rb
|
@@ -52,8 +50,12 @@ lib/chingu/game_state_manager.rb
|
|
52
50
|
lib/chingu/game_states/debug.rb
|
53
51
|
lib/chingu/game_states/fade_to.rb
|
54
52
|
lib/chingu/game_states/pause.rb
|
55
|
-
lib/chingu/
|
56
|
-
lib/chingu/helpers.rb
|
53
|
+
lib/chingu/helpers/game_object.rb
|
54
|
+
lib/chingu/helpers/game_state.rb
|
55
|
+
lib/chingu/helpers/gfx.rb
|
56
|
+
lib/chingu/helpers/input_client.rb
|
57
|
+
lib/chingu/helpers/input_dispatcher.rb
|
58
|
+
lib/chingu/helpers/rotation_center.rb
|
57
59
|
lib/chingu/inflector.rb
|
58
60
|
lib/chingu/input.rb
|
59
61
|
lib/chingu/named_resource.rb
|
@@ -64,9 +66,7 @@ lib/chingu/require_all.rb
|
|
64
66
|
lib/chingu/text.rb
|
65
67
|
lib/chingu/traits/collision_detection.rb
|
66
68
|
lib/chingu/traits/effect.rb
|
67
|
-
lib/chingu/traits/input.rb
|
68
69
|
lib/chingu/traits/retrofy.rb
|
69
|
-
lib/chingu/traits/rotation_center.rb
|
70
70
|
lib/chingu/traits/timer.rb
|
71
71
|
lib/chingu/traits/velocity.rb
|
72
72
|
lib/chingu/window.rb
|
data/README.rdoc
CHANGED
@@ -3,13 +3,12 @@ http://github.com/ippa/chingu/tree/master
|
|
3
3
|
|
4
4
|
DOCUMENTATION: http://rdoc.info/projects/ippa/chingu
|
5
5
|
|
6
|
-
Ruby 1.9.1 is recommended.
|
6
|
+
Ruby 1.9.1 is recommended. Should also work with 1.8.7+.
|
7
7
|
|
8
|
-
|
8
|
+
Chingu has started to settle down, thouch core classes and naming can still change for good reasons.
|
9
9
|
|
10
10
|
== INSTALL
|
11
|
-
gem
|
12
|
-
sudo gem install ippa-chingu
|
11
|
+
gem install chingu
|
13
12
|
|
14
13
|
|
15
14
|
== DESCRIPTION
|
@@ -426,6 +425,34 @@ Chingus trait-implementation is just ordinary ruby modules with 3 special method
|
|
426
425
|
- draw_trait
|
427
426
|
Each of those 3 methods must call "super" to continue the trait-chain.
|
428
427
|
|
428
|
+
Example:
|
429
|
+
|
430
|
+
class Ogre < Chingu::GameObject
|
431
|
+
has_trait :velocity, :timer
|
432
|
+
|
433
|
+
def initialize(options)
|
434
|
+
super
|
435
|
+
@red = Gosu::Color.new(0xFFFF0000)
|
436
|
+
@white = Gosu::Color.new(0xFFFFFFFF)
|
437
|
+
|
438
|
+
#
|
439
|
+
# some basic physics provided by the velocity-trait
|
440
|
+
# These 2 parameters will affect @x and @y every game-iteration
|
441
|
+
# So if your ogre is standing on the ground, make sure you cancel out the effect of @acceleration_y
|
442
|
+
#
|
443
|
+
@velocity_x = 1 # move constantly to the right
|
444
|
+
@acceleration_y = 0.4 # gravity is basicly a downwards acceleration
|
445
|
+
end
|
446
|
+
|
447
|
+
def hit_by(object)
|
448
|
+
#
|
449
|
+
# during() and then() is provided by the timer-trait
|
450
|
+
# flash red for 300 millisec when hit, then go back to normal
|
451
|
+
#
|
452
|
+
during(100) { @color = @red; @mode = :additive }.then { @color = @white; @mode = :default }
|
453
|
+
end
|
454
|
+
end
|
455
|
+
|
429
456
|
The flow for a game object then becomes:
|
430
457
|
|
431
458
|
-- creating the object
|
@@ -441,8 +468,8 @@ There's a couple of traits included as default in Chingu:
|
|
441
468
|
|
442
469
|
==== Trait "timer"
|
443
470
|
Adds timer functionallity to your game object
|
444
|
-
during(300) { @color = Color.new(0xFFFFFFFF) } # forces @color to white
|
445
|
-
after(400) { self.destroy }
|
471
|
+
during(300) { @color = Color.new(0xFFFFFFFF) } # forces @color to white every update for 300 ms
|
472
|
+
after(400) { self.destroy } # destroy object after 400 ms
|
446
473
|
between(1000,2000) { self.rotate(10) } # starting after 1 second, call rotate(10) every update during 1 second
|
447
474
|
|
448
475
|
==== Trait "velocity"
|
@@ -476,6 +503,8 @@ Provides screen_x and screen_y which takes the zoom into account
|
|
476
503
|
Also provides new code for draw() which uses screen_x / screen_y instead of x / y
|
477
504
|
|
478
505
|
|
506
|
+
|
507
|
+
|
479
508
|
=== Assets / Paths
|
480
509
|
|
481
510
|
You might wonder why this is necessary in the straight Gosu example:
|
@@ -529,8 +558,8 @@ See http://www.libgosu.org/rdoc/classes/Gosu/Window.html for a full set of metho
|
|
529
558
|
|
530
559
|
=== How did you decide on naming of methods / classes?
|
531
560
|
There's 1 zillion ways of naming stuff. As a general guideline I've tried to follow Gosus naming.
|
532
|
-
If Gosu didn't have a good name for a certain thing/method I've checked Ruby itself and then Rails since alot
|
533
|
-
|
561
|
+
If Gosu didn't have a good name for a certain thing/method I've checked Ruby itself and then Rails since alot of Ruby-devs are familiar with Rails.
|
562
|
+
GameObject.all is naming straight from rails for example. Most stuff in GameObject follow the naming from Gosus Image#draw_rot.
|
534
563
|
|
535
564
|
== TODO:
|
536
565
|
* add :padding and :align => :topleft etc to class Text
|
@@ -580,9 +609,13 @@ If Gosu didn't have a good name for a certain thing/method I've checked Ruby its
|
|
580
609
|
* Jacius of Rubygame (For doing cool stuff that's well documented as re-usable). So far rect.rb and named_resource.rb is taken from Rubygame.
|
581
610
|
* Jduff for input / commits.
|
582
611
|
* Jlnr,Philymore,Shawn24,JamesKilton for constructive feedback/discussions.
|
612
|
+
* Apillet for codesuggestions and cleanups
|
583
613
|
* Thanks to http://github.com/tarcieri for require_all code, good stuff
|
584
614
|
|
585
615
|
== REQUIREMENTS:
|
586
616
|
* Gosu latest version
|
587
|
-
* Ruby 1.
|
617
|
+
* Ruby 1.9.1+ or 1.8.7+
|
618
|
+
* gem 'opengl' if you want to use Image#retrofy, not needed otherwise
|
619
|
+
* gem 'texplay' for some bonus Image-pixel operations, not needed otherwise
|
620
|
+
|
588
621
|
|
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.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-10-
|
9
|
+
s.date = %q{2009-10-10}
|
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/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/fire_bullet.png", "examples/media/fireball.png", "examples/media/particle.png", "examples/media/ruby.png", "examples/media/spaceship.png", "examples/media/stickfigure.bmp", "examples/media/stickfigure.png", "examples/media/video_games.png", "lib/chingu.rb", "lib/chingu/
|
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/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/fire_bullet.png", "examples/media/fireball.png", "examples/media/particle.png", "examples/media/ruby.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/example1.rb
CHANGED
@@ -13,11 +13,12 @@ include Gosu
|
|
13
13
|
#
|
14
14
|
class Game < Chingu::Window
|
15
15
|
def initialize
|
16
|
-
super(640,480,false)
|
16
|
+
super(640,480,false) # leave it blank and it will be 800,600,non fullscreen
|
17
|
+
self.input = { :escape => :exit } # exits example on Escape
|
18
|
+
|
17
19
|
@player = Player.create(:x => 200, :y => 200, :image => Image["spaceship.png"])
|
18
20
|
@player.input = { :holding_left => :move_left, :holding_right => :move_right,
|
19
|
-
:holding_up => :move_up, :holding_down => :move_down
|
20
|
-
p RUBY_VERSION
|
21
|
+
:holding_up => :move_up, :holding_down => :move_down }
|
21
22
|
end
|
22
23
|
|
23
24
|
def update
|
data/examples/example2.rb
CHANGED
@@ -65,19 +65,12 @@ class Play < Chingu::GameState
|
|
65
65
|
:holding_up => :move_up,
|
66
66
|
:holding_down => :move_down,
|
67
67
|
:space => :fire,
|
68
|
-
:escape => :exit,
|
69
68
|
}
|
70
|
-
self.input = { :f1 => :debug }
|
69
|
+
self.input = { :f1 => :debug, :escape => :exit }
|
71
70
|
end
|
72
71
|
|
73
|
-
def debug
|
74
|
-
|
75
|
-
#GameObject.all.each do |game_object|
|
76
|
-
# puts game_object.class
|
77
|
-
#end
|
78
|
-
#return
|
79
|
-
|
80
|
-
push_game_state(Chingu::GameStates::Debug)
|
72
|
+
def debug
|
73
|
+
push_game_state(Chingu::GameStates::Debug.new)
|
81
74
|
end
|
82
75
|
|
83
76
|
#
|
@@ -97,17 +90,9 @@ class Play < Chingu::GameState
|
|
97
90
|
# A #super call here would call #update on all Chingu::Actors and check their inputs, and call the specified method.
|
98
91
|
#
|
99
92
|
def update
|
100
|
-
Bullet.destroy_if { |bullet| bullet.outside_window? }
|
101
|
-
#Bullet.destroy_if(&:outside_window?)
|
102
|
-
|
103
|
-
#
|
104
|
-
# Bullet.each_collision(Enemy) do |bullet, enemy|
|
105
|
-
# enemy.collision_with(bullet)
|
106
|
-
# bullet.destroy!
|
107
|
-
# end
|
108
|
-
#
|
109
|
-
|
110
93
|
super
|
94
|
+
|
95
|
+
Bullet.destroy_if { |bullet| bullet.outside_window? }
|
111
96
|
$window.caption = "FPS: #{$window.fps} - milliseconds_since_last_tick: #{$window.milliseconds_since_last_tick} - game objects# #{current_game_state.game_objects.size} Bullets# #{Bullet.size}"
|
112
97
|
end
|
113
98
|
end
|
data/lib/chingu.rb
CHANGED
@@ -23,10 +23,9 @@ CHINGU_ROOT = File.dirname(File.expand_path(__FILE__))
|
|
23
23
|
|
24
24
|
require 'rubygems' unless RUBY_VERSION =~ /1\.9/
|
25
25
|
require 'gosu'
|
26
|
-
require 'set'
|
27
26
|
require File.join(CHINGU_ROOT,"chingu","require_all") # Thanks to http://github.com/tarcieri/require_all !
|
28
27
|
require_all "#{CHINGU_ROOT}/chingu"
|
29
28
|
|
30
29
|
module Chingu
|
31
|
-
VERSION = "0.5.
|
30
|
+
VERSION = "0.5.6"
|
32
31
|
end
|
data/lib/chingu/animation.rb
CHANGED
data/lib/chingu/game_object.rb
CHANGED
@@ -29,7 +29,9 @@ module Chingu
|
|
29
29
|
class GameObject < Chingu::BasicGameObject
|
30
30
|
attr_accessor :image, :x, :y, :angle, :center_x, :center_y, :factor_x, :factor_y, :color, :mode, :zorder
|
31
31
|
attr_reader :paused, :visible, :factor, :center
|
32
|
-
|
32
|
+
|
33
|
+
include Chingu::Helpers::InputClient # Adds input and input=
|
34
|
+
include Chingu::Helpers::RotationCenter # Adds easy and verbose modification of @center_x and @center_y
|
33
35
|
|
34
36
|
def initialize(options = {})
|
35
37
|
super
|
data/lib/chingu/game_state.rb
CHANGED
@@ -49,20 +49,19 @@ module Chingu
|
|
49
49
|
#
|
50
50
|
|
51
51
|
class GameState
|
52
|
-
include Chingu::
|
53
|
-
include Chingu::
|
54
|
-
include Chingu::
|
55
|
-
include Chingu::InputDispatcher
|
56
|
-
include Chingu::InputClient
|
52
|
+
include Chingu::Helpers::GFX # Adds fill(), fade() etc to each game state
|
53
|
+
include Chingu::Helpers::GameState # Easy access to the global game state-queue
|
54
|
+
include Chingu::Helpers::GameObject # Adds game_objects_of_class etc ...
|
55
|
+
include Chingu::Helpers::InputDispatcher # Input dispatch-helpers
|
56
|
+
include Chingu::Helpers::InputClient # GameState can have it's own inputmap
|
57
57
|
|
58
|
-
attr_reader :options
|
58
|
+
attr_reader :options
|
59
59
|
attr_accessor :game_state_manager, :game_objects
|
60
60
|
|
61
61
|
def initialize(options = {})
|
62
62
|
@options = options
|
63
|
-
## @game_state_manager = options[:game_state_manager] || $window.game_state_manager
|
64
63
|
@game_objects = GameObjectList.new
|
65
|
-
@input_clients =
|
64
|
+
@input_clients = Array.new
|
66
65
|
|
67
66
|
# Game state mamanger can be run alone
|
68
67
|
if defined?($window) && $window.respond_to?(:game_state_manager)
|
@@ -39,7 +39,7 @@ module Chingu
|
|
39
39
|
# Return to the previous game state, don't call setup() on it when it becomes active.
|
40
40
|
# pop_game_state(:setup => false)
|
41
41
|
#
|
42
|
-
# If you want to use Chingus GameStateManager _without_ Chingu::
|
42
|
+
# If you want to use Chingus GameStateManager _without_ Chingu::Window, see example5.rb
|
43
43
|
#
|
44
44
|
class GameStateManager
|
45
45
|
attr_accessor :inside_state
|
@@ -1,36 +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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
|
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 Helpers
|
25
|
+
|
26
|
+
#
|
27
|
+
# Convenience-methods for classes that hold game objects
|
28
|
+
# Mixed into Chingu::Window and Chingu::GameState
|
29
|
+
#
|
30
|
+
module GameObject
|
31
|
+
|
32
|
+
def add_game_object(object)
|
33
|
+
@game_objects.add_game_object(object)
|
34
|
+
end
|
35
|
+
|
36
|
+
def remove_game_object(object)
|
37
|
+
@game_objects.remove_game_object(object)
|
38
|
+
end
|
39
|
+
|
40
|
+
def game_objects
|
41
|
+
@game_objects
|
42
|
+
end
|
43
|
+
|
44
|
+
#
|
45
|
+
# Fetch game objects of a certain type/class
|
46
|
+
#
|
47
|
+
def game_objects_of_class(klass)
|
48
|
+
@game_objects.select { |game_object| game_object.is_a? klass }
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|
36
53
|
end
|
@@ -0,0 +1,62 @@
|
|
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 Helpers
|
25
|
+
|
26
|
+
#
|
27
|
+
# push_game_state accepts either a class inherited from GameState or an object-instance from such a class.
|
28
|
+
#
|
29
|
+
# It will make call new() on a class, and just push an object.
|
30
|
+
#
|
31
|
+
module GameState
|
32
|
+
def push_game_state(state, options = {})
|
33
|
+
$window.game_state_manager.push_game_state(state, options)
|
34
|
+
end
|
35
|
+
|
36
|
+
def pop_game_state(options = {})
|
37
|
+
$window.game_state_manager.pop_game_state(options)
|
38
|
+
end
|
39
|
+
|
40
|
+
def switch_game_state(state, options = {})
|
41
|
+
$window.game_state_manager.switch_game_state(state, options)
|
42
|
+
end
|
43
|
+
|
44
|
+
def transitional_game_state(state, options = {})
|
45
|
+
$window.game_state_manager.transitional_game_state(state, options)
|
46
|
+
end
|
47
|
+
|
48
|
+
def current_game_state
|
49
|
+
$window.game_state_manager.current_game_state
|
50
|
+
end
|
51
|
+
|
52
|
+
def previous_game_state
|
53
|
+
$window.game_state_manager.previous_game_state
|
54
|
+
end
|
55
|
+
|
56
|
+
def clear_game_states
|
57
|
+
$window.game_state_manager.clear_game_states
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -21,11 +21,13 @@
|
|
21
21
|
|
22
22
|
|
23
23
|
module Chingu
|
24
|
+
module Helpers
|
25
|
+
|
24
26
|
#
|
25
27
|
# Various helper-methods to manipulate the screen.
|
26
28
|
# All drawings depend on the global variable $window which should be an instance of Gosu::Window or Chingu::Window
|
27
29
|
#
|
28
|
-
module
|
30
|
+
module GFX
|
29
31
|
|
30
32
|
#
|
31
33
|
# Fills whole window with color 'color'.
|
@@ -86,4 +88,6 @@ module Chingu
|
|
86
88
|
end
|
87
89
|
end
|
88
90
|
end
|
91
|
+
|
92
|
+
end
|
89
93
|
end
|
@@ -21,18 +21,33 @@
|
|
21
21
|
|
22
22
|
|
23
23
|
module Chingu
|
24
|
-
module
|
25
|
-
|
26
|
-
|
24
|
+
module Helpers
|
25
|
+
|
26
|
+
#
|
27
|
+
# Input-handler mixin that adds #input= and #input
|
28
|
+
#
|
29
|
+
# #input= does 2 things:
|
30
|
+
# 1) Initialized an inputmap
|
31
|
+
# 2) notifies the parent (could be main Window or a GameState) that the object wants input
|
32
|
+
#
|
33
|
+
# In Chingu this is mixed into Window, GameState and GameObject
|
34
|
+
#
|
35
|
+
module InputClient
|
27
36
|
def input=(input_map)
|
28
37
|
@input = input_map
|
29
|
-
|
38
|
+
|
39
|
+
if @parent
|
40
|
+
if (@input == nil || @input == {})
|
41
|
+
@parent.remove_input_client(self)
|
42
|
+
else
|
43
|
+
@parent.add_input_client(self)
|
44
|
+
end
|
45
|
+
end
|
30
46
|
end
|
31
47
|
|
32
48
|
def input
|
33
49
|
@input
|
34
50
|
end
|
35
|
-
|
36
51
|
end
|
37
52
|
end
|
38
53
|
end
|
@@ -1,166 +1,104 @@
|
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
#
|
87
|
-
#
|
88
|
-
#
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
push_game_state(action)
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
#
|
110
|
-
# push_game_state accepts either a class inherited from GameState or an object-instance from such a class.
|
111
|
-
#
|
112
|
-
# It will make call new() on a class, and just push an object.
|
113
|
-
#
|
114
|
-
module GameStateHelpers
|
115
|
-
def push_game_state(state, options = {})
|
116
|
-
$window.game_state_manager.push_game_state(state, options)
|
117
|
-
end
|
118
|
-
|
119
|
-
def pop_game_state(options = {})
|
120
|
-
$window.game_state_manager.pop_game_state(options)
|
121
|
-
end
|
122
|
-
|
123
|
-
def switch_game_state(state, options = {})
|
124
|
-
$window.game_state_manager.switch_game_state(state, options)
|
125
|
-
end
|
126
|
-
|
127
|
-
def transitional_game_state(state, options = {})
|
128
|
-
$window.game_state_manager.transitional_game_state(state, options)
|
129
|
-
end
|
130
|
-
|
131
|
-
def current_game_state
|
132
|
-
$window.game_state_manager.current_game_state
|
133
|
-
end
|
134
|
-
|
135
|
-
def previous_game_state
|
136
|
-
$window.game_state_manager.previous_game_state
|
137
|
-
end
|
138
|
-
|
139
|
-
def clear_game_states
|
140
|
-
$window.game_state_manager.clear_game_states
|
141
|
-
end
|
142
|
-
end
|
143
|
-
|
144
|
-
module GameObjectHelpers
|
145
|
-
|
146
|
-
def add_game_object(object)
|
147
|
-
@game_objects.add_game_object(object)
|
148
|
-
end
|
149
|
-
|
150
|
-
def remove_game_object(object)
|
151
|
-
@game_objects.remove_game_object(object)
|
152
|
-
end
|
153
|
-
|
154
|
-
def game_objects
|
155
|
-
@game_objects
|
156
|
-
end
|
157
|
-
|
158
|
-
#
|
159
|
-
# Fetch game objects of a certain type/class
|
160
|
-
#
|
161
|
-
def game_objects_of_class(klass)
|
162
|
-
@game_objects.select { |game_object| game_object.is_a? klass }
|
163
|
-
end
|
164
|
-
end
|
165
|
-
|
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 Helpers
|
25
|
+
|
26
|
+
#
|
27
|
+
# Methods for parsing and dispatching Chingus input-maps
|
28
|
+
# Mixed into Chingu::Window and Chingu::GameState
|
29
|
+
#
|
30
|
+
module InputDispatcher
|
31
|
+
attr_reader :input_clients
|
32
|
+
|
33
|
+
def add_input_client(object)
|
34
|
+
@input_clients << object unless @input_clients.include?(object)
|
35
|
+
end
|
36
|
+
|
37
|
+
def remove_input_client(object)
|
38
|
+
@input_clients.delete(object)
|
39
|
+
end
|
40
|
+
|
41
|
+
def dispatch_button_down(id, object)
|
42
|
+
return if(object.nil? || object.input.nil?)
|
43
|
+
|
44
|
+
object.input.each do |symbol, action|
|
45
|
+
if Input::SYMBOL_TO_CONSTANT[symbol] == id
|
46
|
+
dispatch_action(action, object)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
def dispatch_button_up(id, object)
|
52
|
+
return if object.nil? || object.input.nil?
|
53
|
+
|
54
|
+
object.input.each do |symbol, action|
|
55
|
+
if symbol.to_s.include? "released_"
|
56
|
+
symbol = symbol.to_s.sub("released_", "").to_sym
|
57
|
+
if Input::SYMBOL_TO_CONSTANT[symbol] == id
|
58
|
+
dispatch_action(action, object)
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
#
|
65
|
+
# Dispatches input-mapper for any given object
|
66
|
+
#
|
67
|
+
def dispatch_input_for(object, prefix = "holding_")
|
68
|
+
return if object.nil? || object.input.nil?
|
69
|
+
|
70
|
+
object.input.each do |symbol, action|
|
71
|
+
if symbol.to_s.include? prefix
|
72
|
+
symbol = symbol.to_s.sub(prefix, "").to_sym
|
73
|
+
if $window.button_down?(Input::SYMBOL_TO_CONSTANT[symbol])
|
74
|
+
dispatch_action(action, object)
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
#
|
81
|
+
# For a given object, dispatch "action".
|
82
|
+
# An action can be:
|
83
|
+
#
|
84
|
+
# * Symbol (:p, :space), translates into a method-call
|
85
|
+
# * Proc/Lambda, call() it
|
86
|
+
# * GameState-instance, push it on top of stack
|
87
|
+
# * GameState-inherited class, create a new instance, cache it and push it on top of stack
|
88
|
+
#
|
89
|
+
def dispatch_action(action, object)
|
90
|
+
# puts "Dispatch Action: #{action} - Objects class: #{object.class.to_s}"
|
91
|
+
if action.is_a? Symbol
|
92
|
+
object.send(action)
|
93
|
+
elsif action.is_a? Proc
|
94
|
+
action.call
|
95
|
+
elsif action.is_a? Chingu::GameState
|
96
|
+
push_game_state(action)
|
97
|
+
elsif action.superclass == Chingu::GameState
|
98
|
+
push_game_state(action)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
end
|
166
104
|
end
|
data/lib/chingu/parallax.rb
CHANGED
data/lib/chingu/window.rb
CHANGED
@@ -1,20 +1,11 @@
|
|
1
1
|
module Chingu
|
2
2
|
|
3
3
|
class Window < Gosu::Window
|
4
|
-
#
|
5
|
-
include Chingu::
|
6
|
-
|
7
|
-
#
|
8
|
-
include Chingu::
|
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
|
4
|
+
include Chingu::Helpers::GFX # Adds fill(), fade() etc to each game state
|
5
|
+
include Chingu::Helpers::GameState # Easy access to the global game state-queue
|
6
|
+
include Chingu::Helpers::GameObject # Adds game_objects_of_class etc ...
|
7
|
+
include Chingu::Helpers::InputDispatcher # Input dispatch-helpers
|
8
|
+
include Chingu::Helpers::InputClient # WIndow has its own inputmap
|
18
9
|
|
19
10
|
attr_reader :root, :game_state_manager, :game_objects, :milliseconds_since_last_tick
|
20
11
|
|
@@ -27,7 +18,6 @@ module Chingu
|
|
27
18
|
# - Standard #update which updates all Chingu::GameObject's
|
28
19
|
# - Standard #draw which goes through
|
29
20
|
# - Assethandling with Image["picture.png"] and Sample["shot.wav"]
|
30
|
-
# - Default input mapping escape to close
|
31
21
|
#
|
32
22
|
def initialize(width = 800, height = 600, fullscreen = false, update_interval = 16.666666)
|
33
23
|
fullscreen ||= ARGV.include?("--fullscreen")
|
@@ -40,7 +30,7 @@ module Chingu
|
|
40
30
|
Gosu::Song.autoload_dirs = [".", File.join(@root, "sfx"), File.join(@root, "media")]
|
41
31
|
|
42
32
|
@game_objects = GameObjectList.new
|
43
|
-
@input_clients =
|
33
|
+
@input_clients = Array.new
|
44
34
|
|
45
35
|
@fps_counter = FPSCounter.new
|
46
36
|
@game_state_manager = GameStateManager.new
|
@@ -106,12 +96,18 @@ module Chingu
|
|
106
96
|
#
|
107
97
|
# Call update() on all game objects belonging to the main window.
|
108
98
|
#
|
109
|
-
|
99
|
+
@game_objects.update
|
110
100
|
|
111
101
|
#
|
112
102
|
# Call update() on all game objects belonging to the current game state.
|
113
103
|
#
|
114
|
-
|
104
|
+
|
105
|
+
#
|
106
|
+
# Call update() on our game_state_manger
|
107
|
+
# -> call update on active states
|
108
|
+
# -> call update on all game objects in that state
|
109
|
+
#
|
110
|
+
@game_state_manager.update
|
115
111
|
end
|
116
112
|
|
117
113
|
#
|
@@ -131,22 +127,6 @@ module Chingu
|
|
131
127
|
@game_state_manager.draw
|
132
128
|
end
|
133
129
|
|
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
130
|
#
|
151
131
|
# By default button_up sends the keyevent to the GameStateManager
|
152
132
|
# .. Which then is responsible to send it to the right GameState(s)
|
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.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-10-
|
33
|
+
date: 2009-10-10 00:00:00 +02:00
|
34
34
|
default_executable:
|
35
35
|
dependencies:
|
36
36
|
- !ruby/object:Gem::Dependency
|
@@ -97,12 +97,10 @@ files:
|
|
97
97
|
- examples/media/stickfigure.png
|
98
98
|
- examples/media/video_games.png
|
99
99
|
- lib/chingu.rb
|
100
|
-
- lib/chingu/actor.rb
|
101
100
|
- lib/chingu/animation.rb
|
102
101
|
- lib/chingu/assets.rb
|
103
102
|
- lib/chingu/basic_game_object.rb
|
104
103
|
- lib/chingu/core_extensions.rb
|
105
|
-
- lib/chingu/effects.rb
|
106
104
|
- lib/chingu/fpscounter.rb
|
107
105
|
- lib/chingu/game_object.rb
|
108
106
|
- lib/chingu/game_object_list.rb
|
@@ -111,8 +109,12 @@ files:
|
|
111
109
|
- lib/chingu/game_states/debug.rb
|
112
110
|
- lib/chingu/game_states/fade_to.rb
|
113
111
|
- lib/chingu/game_states/pause.rb
|
114
|
-
- lib/chingu/
|
115
|
-
- lib/chingu/helpers.rb
|
112
|
+
- lib/chingu/helpers/game_object.rb
|
113
|
+
- lib/chingu/helpers/game_state.rb
|
114
|
+
- lib/chingu/helpers/gfx.rb
|
115
|
+
- lib/chingu/helpers/input_client.rb
|
116
|
+
- lib/chingu/helpers/input_dispatcher.rb
|
117
|
+
- lib/chingu/helpers/rotation_center.rb
|
116
118
|
- lib/chingu/inflector.rb
|
117
119
|
- lib/chingu/input.rb
|
118
120
|
- lib/chingu/named_resource.rb
|
@@ -123,9 +125,7 @@ files:
|
|
123
125
|
- lib/chingu/text.rb
|
124
126
|
- lib/chingu/traits/collision_detection.rb
|
125
127
|
- lib/chingu/traits/effect.rb
|
126
|
-
- lib/chingu/traits/input.rb
|
127
128
|
- lib/chingu/traits/retrofy.rb
|
128
|
-
- lib/chingu/traits/rotation_center.rb
|
129
129
|
- lib/chingu/traits/timer.rb
|
130
130
|
- lib/chingu/traits/velocity.rb
|
131
131
|
- lib/chingu/window.rb
|
metadata.gz.sig
CHANGED
@@ -1 +1,4 @@
|
|
1
|
-
|
1
|
+
Y�ֿi����J_$���q����/x[~��Q�}�h<5���ڛ�w_�����{
|
2
|
+
ҼB�s�F��4��Þ9��Rۖ侎�F�
|
3
|
+
�}�� 2ɭ�"�mM���� �|�شN7��$����ǫq"�Z���Bf��&| y᪸T�V����.̴P(5�
|
4
|
+
�W���p)J��68�zj�`�PQ�IO5�hes�ZY�O�
|
data/lib/chingu/actor.rb
DELETED
@@ -1,17 +0,0 @@
|
|
1
|
-
module Chingu
|
2
|
-
#
|
3
|
-
# A game object class with most components included, nice for quick prototypes
|
4
|
-
#
|
5
|
-
# TODO: we probably wanna expand this concept or remove Actor as a whole.
|
6
|
-
#
|
7
|
-
class Actor < Chingu::GameObject
|
8
|
-
has_traits :effect, :velocity, :input
|
9
|
-
|
10
|
-
def update
|
11
|
-
# needed for traits to work
|
12
|
-
super
|
13
|
-
|
14
|
-
# your game logic Here
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|