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.
Files changed (75) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +21 -0
  3. data/LICENSE +504 -0
  4. data/Manifest.txt +72 -0
  5. data/README.rdoc +588 -0
  6. data/Rakefile +19 -0
  7. data/benchmarks/README.txt +1 -0
  8. data/benchmarks/benchmark.rb +6 -0
  9. data/benchmarks/benchmark3.rb +23 -0
  10. data/benchmarks/benchmark4.rb +71 -0
  11. data/benchmarks/benchmark5.rb +91 -0
  12. data/benchmarks/benchmark6.rb +23 -0
  13. data/benchmarks/meta_benchmark.rb +67 -0
  14. data/benchmarks/meta_benchmark2.rb +39 -0
  15. data/chingu.gemspec +34 -0
  16. data/examples/example1.rb +37 -0
  17. data/examples/example10.rb +75 -0
  18. data/examples/example11.rb +51 -0
  19. data/examples/example12.rb +67 -0
  20. data/examples/example2.rb +115 -0
  21. data/examples/example3.rb +40 -0
  22. data/examples/example4.rb +175 -0
  23. data/examples/example5.rb +107 -0
  24. data/examples/example6.rb +57 -0
  25. data/examples/example7.rb +133 -0
  26. data/examples/example8.rb +109 -0
  27. data/examples/example9.rb +106 -0
  28. data/examples/media/Parallax-scroll-example-layer-0.png +0 -0
  29. data/examples/media/Parallax-scroll-example-layer-1.png +0 -0
  30. data/examples/media/Parallax-scroll-example-layer-2.png +0 -0
  31. data/examples/media/Parallax-scroll-example-layer-3.png +0 -0
  32. data/examples/media/background1.png +0 -0
  33. data/examples/media/fire_bullet.png +0 -0
  34. data/examples/media/fireball.png +0 -0
  35. data/examples/media/particle.png +0 -0
  36. data/examples/media/ruby.png +0 -0
  37. data/examples/media/spaceship.png +0 -0
  38. data/examples/media/stickfigure.bmp +0 -0
  39. data/examples/media/stickfigure.png +0 -0
  40. data/examples/media/video_games.png +0 -0
  41. data/lib/chingu.rb +32 -0
  42. data/lib/chingu/actor.rb +17 -0
  43. data/lib/chingu/animation.rb +142 -0
  44. data/lib/chingu/assets.rb +64 -0
  45. data/lib/chingu/basic_game_object.rb +132 -0
  46. data/lib/chingu/core_extensions.rb +53 -0
  47. data/lib/chingu/effects.rb +36 -0
  48. data/lib/chingu/fpscounter.rb +62 -0
  49. data/lib/chingu/game_object.rb +127 -0
  50. data/lib/chingu/game_object_list.rb +91 -0
  51. data/lib/chingu/game_state.rb +137 -0
  52. data/lib/chingu/game_state_manager.rb +284 -0
  53. data/lib/chingu/game_states/debug.rb +65 -0
  54. data/lib/chingu/game_states/fade_to.rb +91 -0
  55. data/lib/chingu/game_states/pause.rb +57 -0
  56. data/lib/chingu/gfx_helpers.rb +89 -0
  57. data/lib/chingu/helpers.rb +166 -0
  58. data/lib/chingu/inflector.rb +34 -0
  59. data/lib/chingu/input.rb +100 -0
  60. data/lib/chingu/named_resource.rb +254 -0
  61. data/lib/chingu/parallax.rb +83 -0
  62. data/lib/chingu/particle.rb +21 -0
  63. data/lib/chingu/rect.rb +612 -0
  64. data/lib/chingu/require_all.rb +133 -0
  65. data/lib/chingu/text.rb +56 -0
  66. data/lib/chingu/traits/collision_detection.rb +172 -0
  67. data/lib/chingu/traits/effect.rb +113 -0
  68. data/lib/chingu/traits/input.rb +38 -0
  69. data/lib/chingu/traits/retrofy.rb +53 -0
  70. data/lib/chingu/traits/rotation_center.rb +84 -0
  71. data/lib/chingu/traits/timer.rb +90 -0
  72. data/lib/chingu/traits/velocity.rb +67 -0
  73. data/lib/chingu/window.rb +170 -0
  74. metadata +162 -0
  75. metadata.gz.sig +1 -0
data/Rakefile ADDED
@@ -0,0 +1,19 @@
1
+ require 'rubygems'
2
+ require 'hoe'
3
+ require File.dirname(__FILE__) + '/lib/chingu'
4
+
5
+ include Chingu
6
+
7
+ Hoe.plugin :git
8
+ Hoe.spec "chingu" do
9
+ developer "ippa", "ippa@rubylicio.us"
10
+ self.readme_file = 'README.rdoc'
11
+ self.rubyforge_name = "chingu"
12
+ self.version = Chingu::VERSION
13
+ end
14
+
15
+ desc "Build a working gemspec"
16
+ task :gemspec do
17
+ system "rake git:manifest"
18
+ system "rake debug_gem | grep -v \"(in \" | grep -v \"erik\" > chingu.gemspec"
19
+ end
@@ -0,0 +1 @@
1
+ Various chingu / gamedev related benchmark tests.. pretty sloppy but answers some questions.
@@ -0,0 +1,6 @@
1
+ require 'benchmark'
2
+ Benchmark.bm do |b|
3
+ range = 1..10000
4
+ b.report("Object") {range.each {Object.new}}
5
+ b.report("BasicObject") {range.each {Array.new}}
6
+ end
@@ -0,0 +1,23 @@
1
+ require 'benchmark'
2
+
3
+ class A
4
+ attr_reader :variable
5
+ def initialize
6
+ @variable = "hello"
7
+ end
8
+ end
9
+
10
+ a = A.new
11
+ # number of iterations
12
+ n = 1000000
13
+
14
+ Benchmark.bm(22) do |x|
15
+ x.report('getter') do
16
+ for i in 1..n; a.variable; end
17
+ end
18
+
19
+ x.report('direct access') do
20
+ @variable = "hello"
21
+ for i in 1..n; @variable; end
22
+ end
23
+ end
@@ -0,0 +1,71 @@
1
+ require 'benchmark'
2
+ require 'rubygems'
3
+ require 'randomr'
4
+
5
+ a = Array.new
6
+ n = 1000000
7
+ Benchmark.bm(22) do |x|
8
+ x.report('is_a?') do
9
+ n.times do
10
+ a.is_a?(Array)
11
+ end
12
+ end
13
+
14
+ x.report('kind_of?') do
15
+ n.times do
16
+ a.kind_of?(Array)
17
+ end
18
+ end
19
+
20
+ x.report('respond_to?') do
21
+ n.times do
22
+ a.respond_to?(:size)
23
+ end
24
+ end
25
+ end
26
+
27
+
28
+
29
+ arr = [:a, :b, :c]
30
+ n = 1000000
31
+ Benchmark.bm(22) do |x|
32
+ x.report('arr.each') do
33
+ n.times do
34
+ arr.each { |item| item; }
35
+ end
36
+ end
37
+
38
+ x.report('for item in arr') do
39
+ n.times do
40
+ for item in arr; item; end;
41
+ end
42
+ end
43
+ end
44
+
45
+
46
+ n = 1000000
47
+ Benchmark.bm(22) do |x|
48
+ x.report('randomr(100)') do
49
+ for i in 1..n; Randomr.randomr; end
50
+ end
51
+
52
+ x.report('rand(100)') do
53
+ for i in 1..n; rand(100); end
54
+ end
55
+ end
56
+
57
+
58
+ n = 1000000
59
+ Benchmark.bm(12) do |test|
60
+ test.report("normal:") do
61
+ n.times do |x|
62
+ y = x + 1
63
+ end
64
+ end
65
+ test.report("predefine:") do
66
+ x = y = 0
67
+ n.times do |x|
68
+ y = x + 1
69
+ end
70
+ end
71
+ end
@@ -0,0 +1,91 @@
1
+ require 'benchmark'
2
+ require 'rubygems'
3
+ require 'set'
4
+
5
+ class Foo
6
+ @list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
7
+ @@list2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
8
+
9
+ def self.list
10
+ @list
11
+ end
12
+
13
+ def self.list2
14
+ @@list2
15
+ end
16
+
17
+ attr_accessor :list
18
+ def initialize
19
+ @list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
20
+ end
21
+
22
+ def bar
23
+ end
24
+ end
25
+
26
+ foo = Foo.new
27
+
28
+
29
+ s = Set.new
30
+ a = Array.new
31
+ h = Hash.new
32
+ h[:a] = Array.new
33
+
34
+ n = 1000000
35
+ Benchmark.bm(22) do |x|
36
+ x.report('Array << ') do
37
+ n.times do
38
+ a << n
39
+ end
40
+ end
41
+
42
+ x.report('Set << ') do
43
+ n.times do
44
+ s << n
45
+ end
46
+ end
47
+
48
+ x.report('Hash[:a] << ') do
49
+ n.times do
50
+ h[:a] << n
51
+ end
52
+ end
53
+ end
54
+
55
+
56
+
57
+ n = 1000000
58
+ Benchmark.bm(22) do |x|
59
+ x.report('respond_to?') do
60
+ n.times do
61
+ foo.respond_to?(:bar)
62
+ end
63
+ end
64
+
65
+ x.report('foo.bar method call') do
66
+ n.times do
67
+ foo.bar
68
+ end
69
+ end
70
+ end
71
+
72
+ n = 100000
73
+ Benchmark.bm(22) do |x|
74
+ x.report('ivar axx') do
75
+ n.times do
76
+ foo.list.each { |num| }
77
+ end
78
+ end
79
+
80
+ x.report('class attribute axx') do
81
+ n.times do
82
+ Foo.list.each { |num| }
83
+ end
84
+ end
85
+
86
+ x.report('class var axx') do
87
+ n.times do
88
+ Foo.list2.each { |num| }
89
+ end
90
+ end
91
+ end
@@ -0,0 +1,23 @@
1
+ require 'benchmark'
2
+ require 'rubygems'
3
+ require 'set'
4
+
5
+ a = [1,2,3,4,5]
6
+ h = {1=>"b",2=>"b",3=>"b",4=>"b",5=>"b"}
7
+
8
+ n = 1000000
9
+ Benchmark.bm(22) do |x|
10
+
11
+ x.report('Array.each ') do
12
+ n.times do
13
+ a.each {}
14
+ end
15
+ end
16
+
17
+ x.report('Hash.each') do
18
+ n.times do
19
+ h.each {}
20
+ end
21
+ end
22
+
23
+ end
@@ -0,0 +1,67 @@
1
+ require 'benchmark'
2
+
3
+ class A; def meth1; true; end; end
4
+
5
+ # defining using eval/class/instance
6
+ str = "def meth2; true; end"
7
+ a_binding = A.send(:binding)
8
+
9
+ # proc for class/instance
10
+ proc1 = Proc.new { def meth2; true; end }
11
+
12
+ # proc for define_method
13
+ $proc2 = Proc.new { true }
14
+
15
+ # unbound method for bind
16
+ um = A.instance_method(:meth1)
17
+
18
+ # number of iterations
19
+ n = 12000 * 600
20
+ n = 12000
21
+
22
+ Benchmark.bm(22) do |x|
23
+
24
+ x.report('instance_eval/str') do
25
+ for i in 1..n; A.instance_eval(str); end
26
+ end
27
+
28
+ x.report('class_eval/str') do
29
+ for i in 1..n; A.class_eval(str); end
30
+ end
31
+
32
+ x.report('eval/str') do
33
+ for i in 1..n; eval(str, a_binding); end
34
+ end
35
+
36
+ x.report('define_method/class') do
37
+ for i in 1..n; class A; define_method(:meth2, &$proc2); end; end
38
+ end
39
+
40
+ x.report('define_method/send') do
41
+ for i in 1..n; A.send(:define_method, :meth2, &$proc2); end
42
+ end
43
+
44
+ x.report('def/unbind/bind') do
45
+ for i in 1..n
46
+ class A; def meth2; true; end; end
47
+ A.instance_method(:meth2).bind(A.new)
48
+ end
49
+ end
50
+
51
+ x.report('instance_eval/proc') do
52
+ for i in 1..n; A.instance_eval(&proc1); end
53
+ end
54
+
55
+ x.report('class_eval/proc') do
56
+ for i in 1..n; A.class_eval(&proc1); end
57
+ end
58
+
59
+ x.report('def') do
60
+ for i in 1..n; class A; def meth2; true; end; end; end
61
+ end
62
+
63
+ x.report('method/bind') do
64
+ for i in 1..n; um.bind(A.new); end
65
+ end
66
+
67
+ end
@@ -0,0 +1,39 @@
1
+ require 'benchmark'
2
+
3
+ class A; def meth1; true; end; end
4
+
5
+ # defining using eval/class/instance
6
+ str = "@var = 1"
7
+ a_binding = A.send(:binding)
8
+
9
+ # proc for class/instance
10
+ proc1 = Proc.new { def meth2; true; end }
11
+
12
+ # proc for define_method
13
+ $proc2 = Proc.new { true }
14
+
15
+ # unbound method for bind
16
+ um = A.instance_method(:meth1)
17
+
18
+ # number of iterations
19
+ n = 5 * 60 * 10
20
+
21
+ Benchmark.bm(22) do |x|
22
+
23
+ x.report('straight set') do
24
+ for i in 1..n; @var = 1; end
25
+ end
26
+
27
+ x.report('instance_eval/str') do
28
+ for i in 1..n; A.instance_eval(str); end
29
+ end
30
+
31
+ x.report('class_eval/str') do
32
+ for i in 1..n; A.class_eval(str); end
33
+ end
34
+
35
+ x.report('eval/str') do
36
+ for i in 1..n; eval(str, a_binding); end
37
+ end
38
+
39
+ end
data/chingu.gemspec ADDED
@@ -0,0 +1,34 @@
1
+ # -*- encoding: utf-8 -*-
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = %q{chingu}
5
+ s.version = "0.5.5.3"
6
+
7
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
+ s.authors = ["ippa"]
9
+ s.date = %q{2009-10-06}
10
+ s.description = %q{Game framework built on top of the OpenGL accelerated game lib Gosu.
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
+ s.email = ["ippa@rubylicio.us"]
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/actor.rb", "lib/chingu/animation.rb", "lib/chingu/assets.rb", "lib/chingu/basic_game_object.rb", "lib/chingu/core_extensions.rb", "lib/chingu/effects.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/gfx_helpers.rb", "lib/chingu/helpers.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/input.rb", "lib/chingu/traits/retrofy.rb", "lib/chingu/traits/rotation_center.rb", "lib/chingu/traits/timer.rb", "lib/chingu/traits/velocity.rb", "lib/chingu/window.rb"]
15
+ s.homepage = %q{http://github.com/ippa/chingu/tree/master}
16
+ s.rdoc_options = ["--main", "README.rdoc"]
17
+ s.require_paths = ["lib"]
18
+ s.rubyforge_project = %q{chingu}
19
+ s.rubygems_version = %q{1.3.5}
20
+ s.summary = %q{Game framework built on top of the OpenGL accelerated game lib Gosu}
21
+
22
+ if s.respond_to? :specification_version then
23
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
24
+ s.specification_version = 3
25
+
26
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
27
+ s.add_development_dependency(%q<hoe>, [">= 2.3.3"])
28
+ else
29
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
30
+ end
31
+ else
32
+ s.add_dependency(%q<hoe>, [">= 2.3.3"])
33
+ end
34
+ end
@@ -0,0 +1,37 @@
1
+ require 'rubygems'
2
+ require File.join(File.dirname($0), "..", "lib", "chingu")
3
+ include Gosu
4
+
5
+ #
6
+ # A minimalistic Chingu example.
7
+ # Chingu::Window provides #update and #draw which calls corresponding methods for all objects based on Chingu::Actors
8
+ #
9
+ # Image["picture.png"] is a deployment safe shortcut to Gosu's Image.new and supports multiple locations for "picture.png"
10
+ # By default current dir, media\ and gfx\ is searched. To add own directories:
11
+ #
12
+ # Image.autoload_dirs << File.join(self.root, "data", "my_image_dir")
13
+ #
14
+ class Game < Chingu::Window
15
+ def initialize
16
+ super(640,480,false) # leave it blank and it will be 800,600,non fullscreen
17
+ @player = Player.create(:x => 200, :y => 200, :image => Image["spaceship.png"])
18
+ @player.input = { :holding_left => :move_left, :holding_right => :move_right,
19
+ :holding_up => :move_up, :holding_down => :move_down, :escape => :exit}
20
+ p RUBY_VERSION
21
+ end
22
+
23
+ def update
24
+ super
25
+ self.caption = "FPS: #{self.fps} milliseconds_since_last_tick: #{self.milliseconds_since_last_tick}"
26
+ end
27
+ end
28
+
29
+ class Player < Chingu::GameObject
30
+ def move_left; @x -= 1; end
31
+ def move_right; @x += 1; end
32
+ def move_up; @y -= 1; end
33
+ def move_down; @y += 1; end
34
+ end
35
+
36
+
37
+ Game.new.show
@@ -0,0 +1,75 @@
1
+ require 'rubygems'
2
+ require 'opengl'
3
+ require File.join(File.dirname($0), "..", "lib", "chingu")
4
+ include Gosu
5
+ include Chingu
6
+ $stderr.sync = $stdout.sync = true
7
+
8
+ #
9
+ # Testing out a new module-only-super-chain trait system
10
+ #
11
+ class Game < Chingu::Window
12
+ def initialize
13
+ super(600,400)
14
+ self.caption = "Testing out new module-based traits (SPACE for more spaceships)"
15
+ self.input = { :space => :create_thing, :esc => :exit }
16
+ create_thing(200,200)
17
+ end
18
+
19
+ def update
20
+ puts "--- UPDATE ---"
21
+ super
22
+ end
23
+
24
+ def draw
25
+ puts "--- DRAW ---"
26
+ super
27
+ end
28
+
29
+ def create_thing(x=nil, y=nil)
30
+ Thing.create(:x => x||rand($window.width), :y => y||rand($window.height), :debug => true)
31
+ end
32
+ end
33
+
34
+ class Thing < Chingu::GameObject
35
+ has_trait :effect
36
+ has_trait :velocity
37
+
38
+ def initialize(options)
39
+ super
40
+ @image = Image["spaceship.png"]
41
+
42
+ self.rotation_center(:center)
43
+
44
+ # Julians ninjahack to get that sweet pixely feeling when zooming :)
45
+ # glBindTexture(GL_TEXTURE_2D, @image.gl_tex_info.tex_name)
46
+ # glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST)
47
+ # glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST)
48
+ #
49
+ # The above code has been merged into chingu as @image.retrofy
50
+ #
51
+ @image.retrofy
52
+
53
+
54
+ self.factor = 8
55
+ self.rotating = 2
56
+ self.velocity_x = 2
57
+ end
58
+
59
+ def update
60
+ puts "Thing#update"
61
+ if outside_window?
62
+ @velocity_x = -@velocity_x
63
+ @rotating = -@rotating
64
+ end
65
+ end
66
+
67
+ def draw
68
+ puts "Thing#draw"
69
+ super
70
+ end
71
+
72
+ end
73
+
74
+
75
+ Game.new.show