chingu 0.8rc3 → 0.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/README.rdoc +15 -1
- data/chingu.gemspec +3 -3
- data/examples/example16_online_high_scores.rb +21 -6
- data/lib/chingu.rb +1 -1
- data/lib/chingu/game_states/enter_name.rb +43 -28
- data/lib/chingu/text.rb +4 -3
- metadata +7 -9
data/README.rdoc
CHANGED
@@ -479,7 +479,21 @@ Chingus inputhandler will detect that Menu is a GameState-class, create a new in
|
|
479
479
|
=== Premade game states
|
480
480
|
Chingu comes with some pre-made game states.
|
481
481
|
A simple but usefull one is GameStates::Pause. Once pushed it will draw the previous game state but not update it --
|
482
|
-
effectively pausing it.
|
482
|
+
effectively pausing it. Some others are:
|
483
|
+
|
484
|
+
== GameStates::EnterName
|
485
|
+
A gamestate where a gamer can select letters from a A-Z list, contructing his alias. When he's done he selects "GO!" and a
|
486
|
+
developer-specified callback will be called with the name/alias as argument.
|
487
|
+
|
488
|
+
push_game_state GameStates::EnterName.new(:callback => method(:add))
|
489
|
+
|
490
|
+
def add(name)
|
491
|
+
puts "User entered name #{name}"
|
492
|
+
end
|
493
|
+
|
494
|
+
Combine GameStates::EnterName with class OnlineHighScoreList, a free acount @ www.gamercv.com and you have a premade stack to
|
495
|
+
provide your 48h gamecompo entry with online high scores that adds an extra dimension to your game. See example16 for a full working example of this.
|
496
|
+
|
483
497
|
|
484
498
|
== GameStates::Edit
|
485
499
|
The biggest and most usable is GameStates::Edit which enables fast 'n easy level-building with game objects.
|
data/chingu.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{chingu}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.8"
|
9
9
|
|
10
|
-
s.required_rubygems_version = Gem::Requirement.new("
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["ippa"]
|
12
|
-
s.date = %q{2010-12-
|
12
|
+
s.date = %q{2010-12-13}
|
13
13
|
s.description = %q{OpenGL accelerated 2D game framework for Ruby. Builds on Gosu (Ruby/C++) which provides all the core functionality. Chingu adds simple yet powerful game states, prettier input handling, deployment safe asset-handling, a basic re-usable game object and stackable game logic.}
|
14
14
|
s.email = %q{ippa@rubylicio.us}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -13,10 +13,19 @@ include Chingu
|
|
13
13
|
class Game < Chingu::Window
|
14
14
|
def initialize
|
15
15
|
super(640,400)
|
16
|
-
self.input = {:esc => :exit, :a => :add, :r => :add_random}
|
17
16
|
self.caption = "OnlineHighScoreList example. Press 'A' to add a top-score, 'R' to add a random."
|
17
|
+
push_game_state(HighScore)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class HighScore < GameState
|
22
|
+
|
23
|
+
def setup
|
24
|
+
self.input = {:esc => :exit, :a => :enter_name, :r => :add_random}
|
25
|
+
|
26
|
+
PulsatingText.create("class OnlineHighScoreList & www.gamvercv.com", :x => $window.width/2, :y => 50, :size => 30)
|
27
|
+
Text.create("Syncs from/to http://www.gamercv.com/games/1-test", :x => $window.width/2, :y => 80, :size => 24, :rotation_center => :center)
|
18
28
|
|
19
|
-
@title = PulsatingText.create("class OnlineHighScoreList & www.gamvercv.com", :x => $window.width/2, :y => 50, :size => 30)
|
20
29
|
|
21
30
|
#
|
22
31
|
# Load a remote high score list
|
@@ -24,10 +33,16 @@ class Game < Chingu::Window
|
|
24
33
|
@high_score_list = OnlineHighScoreList.load(:game_id => 1, :login => "chingu", :password => "chingu", :limit => 10)
|
25
34
|
|
26
35
|
create_text
|
27
|
-
end
|
36
|
+
end
|
28
37
|
|
29
|
-
def
|
30
|
-
|
38
|
+
def enter_name
|
39
|
+
push_game_state GameStates::EnterName.new(:callback => method(:add) )
|
40
|
+
end
|
41
|
+
|
42
|
+
def add(name = nil)
|
43
|
+
return unless name
|
44
|
+
return unless name.size > 0
|
45
|
+
data = {:name => name, :score => (@high_score_list[0][:score].to_i + 10), :text => "Hello from Chingus example16.rb"}
|
31
46
|
position = @high_score_list.add(data)
|
32
47
|
puts "Got position: #{position.to_s}"
|
33
48
|
create_text
|
@@ -51,7 +66,7 @@ class Game < Chingu::Window
|
|
51
66
|
Text.create(high_score[:name], :x => 200, :y => y, :size => 20)
|
52
67
|
Text.create(high_score[:score], :x => 400, :y => y, :size => 20)
|
53
68
|
end
|
54
|
-
end
|
69
|
+
end
|
55
70
|
end
|
56
71
|
|
57
72
|
#
|
data/lib/chingu.rb
CHANGED
@@ -31,30 +31,39 @@ module Chingu
|
|
31
31
|
def initialize(options = {})
|
32
32
|
super
|
33
33
|
|
34
|
-
Text.create("Please enter your name
|
35
|
-
|
34
|
+
Text.create("<u>Please enter your name</u>", :rotation_center => :top_center, :x => $window.width/2, :y => 10, :size => 40)
|
35
|
+
|
36
|
+
on_input([:holding_up, :holding_w, :holding_gamepad_up], :up)
|
37
|
+
on_input([:holding_down, :holding_s, :holding_gamepad_down], :down)
|
36
38
|
on_input([:holding_left, :holding_a, :holding_gamepad_left], :left)
|
37
39
|
on_input([:holding_right, :holding_d, :holding_gamepad_right], :right)
|
38
40
|
on_input([:space, :x, :enter, :gamepad_button_1, :return], :action)
|
41
|
+
on_input(:esc, :pop_game_state)
|
39
42
|
|
40
43
|
@callback = options[:callback]
|
44
|
+
@columns = options[:columns] || 10
|
41
45
|
|
42
46
|
@string = []
|
43
47
|
@texts = []
|
44
|
-
@
|
45
|
-
@
|
46
|
-
@
|
47
|
-
|
48
|
-
@
|
49
|
-
x =
|
48
|
+
@index = 1
|
49
|
+
@letter_size = 30
|
50
|
+
@letters = %w[ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z ! " # % & ( ) [ ] / \\ - = * SPACE DEL ENTER ]
|
51
|
+
|
52
|
+
@y = 140
|
53
|
+
@x = ($window.width - 350)/2
|
50
54
|
|
51
|
-
@letters.
|
52
|
-
@texts << Text.create(letter, :x => x, :y => @
|
53
|
-
x +=
|
55
|
+
@letters.each_with_index do |letter, index|
|
56
|
+
@texts << Text.create(letter, :x => @x, :y => @y, :size => @letter_size)
|
57
|
+
@x += @texts.last.width + 20
|
58
|
+
|
59
|
+
if (index+1) % @columns == 0
|
60
|
+
@y += @letter_size
|
61
|
+
@x = @texts.first.x
|
62
|
+
end
|
54
63
|
end
|
55
64
|
|
56
65
|
@selected_color = Color::RED
|
57
|
-
@
|
66
|
+
@name = Text.create("", :rotaion_center => :top_center, :x => $window.width/2, :y => 60, :size => 80)
|
58
67
|
end
|
59
68
|
|
60
69
|
# Move cursor 1 step to the left
|
@@ -62,34 +71,40 @@ module Chingu
|
|
62
71
|
|
63
72
|
# Move cursor 1 step to the right
|
64
73
|
def right; move_cursor(1); end
|
74
|
+
|
75
|
+
# Move cursor 1 step to the left
|
76
|
+
def up; move_cursor(-@columns); end
|
65
77
|
|
78
|
+
# Move cursor 1 step to the right
|
79
|
+
def down; move_cursor(@columns); end
|
80
|
+
|
66
81
|
# Move cursor any given value (positive or negative). Used by left() and right()
|
67
82
|
def move_cursor(amount = 1)
|
68
83
|
@index += amount
|
69
|
-
@index = 0
|
84
|
+
@index = 0 if @index >= @letters.size
|
85
|
+
@index = @letters.size-1 if @index < 0
|
86
|
+
|
87
|
+
@texts.each { |text| text.color = Color::WHITE }
|
88
|
+
@texts[@index].color = Color::RED
|
89
|
+
|
70
90
|
sleep(0.1)
|
71
91
|
end
|
72
92
|
|
73
93
|
def action
|
74
94
|
case @letters[@index]
|
75
|
-
when "
|
76
|
-
when "
|
77
|
-
when "
|
78
|
-
else
|
95
|
+
when "DEL" then @string.pop
|
96
|
+
when "SPACE" then @string << " "
|
97
|
+
when "ENTER" then go
|
98
|
+
else @string << @letters[@index]
|
79
99
|
end
|
80
|
-
|
81
|
-
@
|
82
|
-
@
|
83
|
-
end
|
84
|
-
|
85
|
-
def draw
|
86
|
-
@rect = Rect.new(@start_x + (25 * @index), @start_y+25, @texts[@index].width, 10)
|
87
|
-
fill_rect(@rect, @selected_color, 0)
|
88
|
-
super
|
100
|
+
|
101
|
+
@name.text = @string.join
|
102
|
+
@name.x = $window.width/2 - @name.width/2
|
89
103
|
end
|
90
|
-
|
104
|
+
|
91
105
|
def go
|
92
|
-
|
106
|
+
@callback.call(@name.text)
|
107
|
+
pop_game_state
|
93
108
|
end
|
94
109
|
|
95
110
|
end
|
data/lib/chingu/text.rb
CHANGED
@@ -67,16 +67,17 @@ module Chingu
|
|
67
67
|
|
68
68
|
# We remove the :size param so it doesn't get to GameObject where it means something else
|
69
69
|
@size = options.delete(:size) || options.delete(:height) || @@size || 15
|
70
|
-
|
70
|
+
|
71
|
+
options = {:rotation_center => :top_left}.merge(options)
|
72
|
+
|
71
73
|
super(options)
|
72
|
-
|
74
|
+
|
73
75
|
@text = text || options[:text] || "-No text specified-"
|
74
76
|
@font = options[:font] || @@font || Gosu::default_font_name()
|
75
77
|
@line_spacing = options[:line_spacing] || 1
|
76
78
|
@align = options[:align] || :left
|
77
79
|
@max_width = options[:max_width]
|
78
80
|
@padding = options[:padding] || @@padding
|
79
|
-
self.rotation_center = :top_left
|
80
81
|
|
81
82
|
@gosu_font = Gosu::Font[@font, @size]
|
82
83
|
create_image unless @image
|
metadata
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chingu
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
4
|
+
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
version: 0.
|
7
|
+
- 8
|
8
|
+
version: "0.8"
|
9
9
|
platform: ruby
|
10
10
|
authors:
|
11
11
|
- ippa
|
@@ -13,7 +13,7 @@ autorequire:
|
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
15
|
|
16
|
-
date: 2010-12-
|
16
|
+
date: 2010-12-13 00:00:00 +01:00
|
17
17
|
default_executable:
|
18
18
|
dependencies:
|
19
19
|
- !ruby/object:Gem::Dependency
|
@@ -289,13 +289,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
289
289
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
290
290
|
none: false
|
291
291
|
requirements:
|
292
|
-
- - "
|
292
|
+
- - ">="
|
293
293
|
- !ruby/object:Gem::Version
|
294
294
|
segments:
|
295
|
-
-
|
296
|
-
|
297
|
-
- 1
|
298
|
-
version: 1.3.1
|
295
|
+
- 0
|
296
|
+
version: "0"
|
299
297
|
requirements: []
|
300
298
|
|
301
299
|
rubyforge_project: chingu
|