ippa-chingu 0.5 → 0.5.1

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 (72) hide show
  1. data/Manifest.txt +69 -0
  2. data/benchmarks/README.txt +1 -0
  3. data/benchmarks/benchmark.rb +6 -0
  4. data/benchmarks/benchmark3.rb +23 -0
  5. data/benchmarks/benchmark4.rb +71 -0
  6. data/benchmarks/meta_benchmark.rb +67 -0
  7. data/benchmarks/meta_benchmark2.rb +39 -0
  8. data/chingu.gemspec +3 -3
  9. data/games/triangle_wars/NOT_DONE_YET.txt +1 -0
  10. data/games/triangle_wars/media/1up.png +0 -0
  11. data/games/triangle_wars/media/33487__CosmicD__006.wav +0 -0
  12. data/games/triangle_wars/media/Thumbs.db +0 -0
  13. data/games/triangle_wars/media/autofire.png +0 -0
  14. data/games/triangle_wars/media/backgrounds/GPN-2000-000933.jpg +0 -0
  15. data/games/triangle_wars/media/backgrounds/Thumbs.db +0 -0
  16. data/games/triangle_wars/media/backgrounds/background10.png +0 -0
  17. data/games/triangle_wars/media/backgrounds/background10.svg +94 -0
  18. data/games/triangle_wars/media/backgrounds/background2.jpg +0 -0
  19. data/games/triangle_wars/media/backgrounds/background2.png +0 -0
  20. data/games/triangle_wars/media/backgrounds/hubble_deep_field.jpg +0 -0
  21. data/games/triangle_wars/media/backgrounds/hubble_deep_field.png +0 -0
  22. data/games/triangle_wars/media/backgrounds/intro_bg.png +0 -0
  23. data/games/triangle_wars/media/backgrounds/star_4.jpg +0 -0
  24. data/games/triangle_wars/media/backgrounds/star_5.jpg +0 -0
  25. data/games/triangle_wars/media/backgrounds/star_6.jpg +0 -0
  26. data/games/triangle_wars/media/backgrounds/supernova_1.jpg +0 -0
  27. data/games/triangle_wars/media/bigbomb.png +0 -0
  28. data/games/triangle_wars/media/bullets.svg +223 -0
  29. data/games/triangle_wars/media/enemy.png +0 -0
  30. data/games/triangle_wars/media/enemy.svg +194 -0
  31. data/games/triangle_wars/media/enemy_dying.png +0 -0
  32. data/games/triangle_wars/media/enemy_small.svg +195 -0
  33. data/games/triangle_wars/media/explosion.wav +0 -0
  34. data/games/triangle_wars/media/hit.wav +0 -0
  35. data/games/triangle_wars/media/hit2.wav +0 -0
  36. data/games/triangle_wars/media/hit3.wav +0 -0
  37. data/games/triangle_wars/media/laser.png +0 -0
  38. data/games/triangle_wars/media/laser.svg +166 -0
  39. data/games/triangle_wars/media/laser_up.png +0 -0
  40. data/games/triangle_wars/media/plasma.png +0 -0
  41. data/games/triangle_wars/media/plasma.wav +0 -0
  42. data/games/triangle_wars/media/plasma_up.png +0 -0
  43. data/games/triangle_wars/media/powerup_bg.png +0 -0
  44. data/games/triangle_wars/media/powerups.svg +885 -0
  45. data/games/triangle_wars/media/rocket_up.png +0 -0
  46. data/games/triangle_wars/media/spaceship.png +0 -0
  47. data/games/triangle_wars/media/spaceship.svg +318 -0
  48. data/games/triangle_wars/media/triangle_logo.svg +335 -0
  49. data/games/triangle_wars/media/triangle_wars.png +0 -0
  50. data/games/triangle_wars/media/triangle_wars_intro.mp3 +0 -0
  51. data/games/triangle_wars/media/triangle_wars_intro.ogg +0 -0
  52. data/games/triangle_wars/src/enemy.rb +117 -0
  53. data/games/triangle_wars/src/game_over_state.rb +18 -0
  54. data/games/triangle_wars/src/level_state.rb +114 -0
  55. data/games/triangle_wars/src/menu_state.rb +67 -0
  56. data/games/triangle_wars/src/my_game_object.rb +46 -0
  57. data/games/triangle_wars/src/pause_state.rb +16 -0
  58. data/games/triangle_wars/src/player.rb +136 -0
  59. data/games/triangle_wars/src/power_up.rb +67 -0
  60. data/games/triangle_wars/triangle_wars.rb +69 -0
  61. data/lib/chingu.rb +2 -2
  62. data/lib/chingu/actor.rb +8 -8
  63. data/lib/chingu/animation.rb +2 -2
  64. data/lib/chingu/basic_game_object.rb +36 -29
  65. data/lib/chingu/particle.rb +5 -8
  66. data/lib/chingu/traits/collision_detection.rb +1 -1
  67. data/lib/chingu/traits/deprecated_module_visual.rb +1 -1
  68. data/lib/chingu/traits/deprecated_visual.rb +1 -1
  69. data/lib/chingu/traits/effect.rb +1 -1
  70. data/lib/chingu/traits/input.rb +1 -1
  71. data/lib/chingu/traits/velocity.rb +1 -1
  72. metadata +62 -3
@@ -0,0 +1,67 @@
1
+ class PowerUp < Chingu::GameObject
2
+ attr_reader :type, :radius, :status
3
+
4
+ def initialize(options)
5
+ super
6
+ @speed_x = options[:speed_x]
7
+ @speed_y = options[:speed_y]
8
+ @type = options[:type]
9
+
10
+ @powerup_bg = Image["powerup_bg.png"]
11
+ @powerup = Image["#{@type}.png"]
12
+ #@image = Image["#{@type}.png"]
13
+
14
+ @radius = (@powerup_bg.width + @powerup_bg.height) / 2 * 0.70
15
+
16
+ @white = Gosu::Color.new(150,255,255,255)
17
+ @transparent = Gosu::Color.new(255,255,255,255)
18
+ @status = :default
19
+
20
+ @zoom_seed_x = 0
21
+ @zoom_seed_y = Math::PI
22
+ end
23
+
24
+ #
25
+ # Creates a powerup with objects x/y-coords and speed_x/speed_y
26
+ #
27
+ def self.new_from(object)
28
+ power_ups = ["plasma_up", "1up", "laser_up", "rocket_up", "bigbomb", "autofire"]
29
+ type = power_ups[rand(power_ups.size)]
30
+ PowerUp.new(:type => type, :x => object.x, :y => object.y,
31
+ :speed_x => object.speed_x, :speed_y => object.speed_y)
32
+ end
33
+
34
+ def die!
35
+ @status = :dead
36
+ destroy!
37
+ ##$window.remove_game_object(self)
38
+ end
39
+ def alive?
40
+ @status == :default
41
+ end
42
+ def dead?
43
+ @status == :dead
44
+ end
45
+
46
+ def update
47
+ self.factor_x = 1.1 + Math::sin(@zoom_seed_x += 0.3)/20
48
+ self.factor_y = 1.1 + Math::sin(@zoom_seed_y += 0.3)/20
49
+ end
50
+
51
+ def draw
52
+ @color = @transparent
53
+ @image = @powerup_bg
54
+ super
55
+ @image = @powerup
56
+ #@color = ($window.ticks % 2 == 0) ? @white : @transparent
57
+ super
58
+ end
59
+
60
+ private
61
+
62
+ def move
63
+ base = $windows.dt/100.0
64
+ @x += @speed_x * base
65
+ @y += @speed_y * base
66
+ end
67
+ end
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require File.join("..", "..", "lib", "chingu.rb")
4
+ require File.join("src", "menu_state")
5
+ require File.join("src", "level_state")
6
+ require File.join("src", "pause_state")
7
+ require File.join("src", "game_over_state")
8
+
9
+ require File.join("src", "my_game_object")
10
+ require File.join("src", "enemy")
11
+ require File.join("src", "player")
12
+ require File.join("src", "power_up")
13
+
14
+ require 'gosu'
15
+ include Gosu
16
+ include Chingu
17
+
18
+ #
19
+ # When a missing method is called on an array...
20
+ # .. Go through each item in the array and call that method on the items.
21
+ #
22
+ class Set
23
+ def collide_by_radius(items = [])
24
+ self.each do |item|
25
+ items.each do |item2|
26
+ if distance(item.x, item.y, item2.x, item2.y) < item.radius
27
+ yield item, item2
28
+ end
29
+ end
30
+ end
31
+ end
32
+
33
+ def method_missing(method, *arg)
34
+ self.each { |item| item.send(method, *arg) }
35
+ end
36
+ end
37
+
38
+ class Array
39
+ def collide_by_radius(items = [])
40
+ self.each do |item|
41
+ items.each do |item2|
42
+ if distance(item.x, item.y, item2.x, item2.y) < item.radius
43
+ yield item, item2
44
+ end
45
+ end
46
+ end
47
+ end
48
+
49
+ def method_missing(method, *arg)
50
+ self.each { |item| item.send(method, *arg) }
51
+ end
52
+ end
53
+
54
+ class Game < Chingu::Window
55
+ def initialize
56
+ super(1024, 768)
57
+ Gosu::Image.autoload_dirs << File.join(@root, "media", "backgrounds")
58
+ self.input = { :escape => :close }
59
+ push_game_state(Menu)
60
+ transitional_game_state(Chingu::GameStates::FadeTo)
61
+ end
62
+
63
+ def update
64
+ super
65
+ self.caption = "Triangle Wars [framerate: #{framerate}] [game objects: #{current_game_state.game_objects.size}]"
66
+ end
67
+ end
68
+
69
+ Game.new.show
data/lib/chingu.rb CHANGED
@@ -13,7 +13,7 @@ require 'set'
13
13
  input
14
14
  }.each do |lib|
15
15
  root ||= File.dirname(File.expand_path(__FILE__))
16
- require File.join(root,"chingu","components",lib)
16
+ require File.join(root,"chingu","traits",lib)
17
17
  end
18
18
 
19
19
  %w{ helpers
@@ -49,5 +49,5 @@ require 'set'
49
49
  end
50
50
 
51
51
  module Chingu
52
- VERSION = "0.4.9"
52
+ VERSION = "0.5.1"
53
53
  end
data/lib/chingu/actor.rb CHANGED
@@ -3,13 +3,13 @@ module Chingu
3
3
  # A game object class with most components included, nice for quick prototypes
4
4
  #
5
5
  class Actor < Chingu::GameObject
6
- #add_component :visual, :effect, :input
7
-
8
- #def initialize(options = {})
9
- # super
10
- # visual_setup(options)
11
- # effect_setup(options)
12
- # input_setup(options)
13
- #end
6
+ has_traits :effect, :velocity, :input
7
+
8
+ def update
9
+ # needed for traits to work
10
+ super
11
+
12
+ # your game logic Here
13
+ end
14
14
  end
15
15
  end
@@ -61,8 +61,8 @@ module Chingu
61
61
  # @animation[0..2] # returns a new Animation-instance with first, second and third frame
62
62
  #
63
63
  def [](index)
64
- return @frames[index] if index.is_a? (Fixnum)
65
- return self.new_from_frames(index) if index.is_a? (Range)
64
+ return @frames[index] if index.is_a?(Fixnum)
65
+ return self.new_from_frames(index) if index.is_a?(Range)
66
66
  end
67
67
 
68
68
  #
@@ -3,38 +3,45 @@ module Chingu
3
3
  # BasicGameObject. Resonating with 1.9.1, this is our most basic class that all game objects ultimate should build on.
4
4
  #
5
5
  # All objects that inherits from this class will by default be automaticly be updated and drawn.
6
- # It will also acts as a container for the component-system of chingu.
6
+ # It will also acts as a container for the trait-system of chingu.
7
7
  #
8
8
  class BasicGameObject
9
9
  attr_reader :options, :parent
10
10
 
11
11
  #
12
- # Create class variable @components in every new class derived from GameObject
12
+ # Create class variable @traits in every new class derived from GameObject
13
13
  #
14
14
  def self.inherited(subclass)
15
- subclass.instance_variable_set("@components", Set.new)
15
+ subclass.instance_variable_set("@traits", Set.new)
16
16
  end
17
17
 
18
18
  class << self
19
- attr_accessor :components
19
+ attr_accessor :traits
20
20
  end
21
21
 
22
22
  #
23
- # adds a component to a certain game class
23
+ # adds a trait or traits to a certain game class
24
24
  #
25
25
  # Executes a ruby "include" the specified module
26
26
  # and sets up update and draw hooks.
27
27
  #
28
- def self.add_component(*components)
29
- Array(components).each do |component|
28
+ def self.has_trait(*traits)
29
+ has_traits(*traits)
30
+ end
31
+
32
+ #
33
+ # See #has_trait
34
+ #
35
+ def self.has_traits(*traits)
36
+ Array(traits).each do |trait|
30
37
 
31
- if component.is_a?(::Symbol) || component.is_a?(::String)
32
- string = "Chingu::Components::#{component.to_s.downcase.capitalize}"
38
+ if trait.is_a?(::Symbol) || trait.is_a?(::String)
39
+ string = "Chingu::Traits::#{trait.to_s.downcase.capitalize}"
33
40
  klass_or_module = eval(string)
34
41
 
35
42
  if klass_or_module.is_a?(Class)
36
- component = klass_or_module.new(self, {})
37
- @components << component
43
+ trait = klass_or_module.new(self, {})
44
+ @traits << trait
38
45
  elsif klass_or_module.is_a?(Module)
39
46
  include klass_or_module
40
47
  end
@@ -46,17 +53,17 @@ module Chingu
46
53
  #
47
54
  # BasicGameUnit initialize
48
55
  #
49
- # - caches component methods for fast calls later on
50
- # - call .setup() on components that implements it
56
+ # - caches all trait methods for fast calls later on
57
+ # - call .setup() on all traits that implements it
51
58
  # - adds game object to correct game state or $window if no game state exists
52
59
  #
53
60
  def initialize(options = {})
54
61
  @options = options
55
- setupable_components
56
- updateable_components
57
- drawable_components
62
+ setupable_traits
63
+ updateable_traits
64
+ drawable_traits
58
65
 
59
- @setupable_components.each { |c| c.setup(self, options) }
66
+ @setupable_traits.each { |c| c.setup(self, options) }
60
67
 
61
68
  #
62
69
  # A GameObject can either belong to a GameState or our mainwindow ($window)
@@ -70,32 +77,32 @@ module Chingu
70
77
  end
71
78
 
72
79
  #
73
- # Get all components
80
+ # Get all traits
74
81
  #
75
- def components; self.class.components || []; end
82
+ def traits; self.class.traits || []; end
76
83
 
77
- def setupable_components
78
- @setupable_components ||= components.select { |c| c.respond_to?(:setup) }
84
+ def setupable_traits
85
+ @setupable_traits ||= traits.select { |c| c.respond_to?(:setup) }
79
86
  end
80
- def updateable_components
81
- @updateable_components ||= components.select { |c| c.respond_to?(:update) }
87
+ def updateable_traits
88
+ @updateable_traits ||= traits.select { |c| c.respond_to?(:update) }
82
89
  end
83
- def drawable_components
84
- @drawable_components ||= components.select { |c| c.respond_to?(:draw) }
90
+ def drawable_traits
91
+ @drawable_traits ||= traits.select { |c| c.respond_to?(:draw) }
85
92
  end
86
93
 
87
94
  #
88
- # Call .update on all components that implements it
95
+ # Call .update on all traits that implements it
89
96
  #
90
97
  def update
91
- @updateable_components.each { |c| c.update(self) }
98
+ @updateable_traits.each { |c| c.update(self) }
92
99
  end
93
100
 
94
101
  #
95
- # Call .draw on all components that implements it
102
+ # Call .draw on all traits that implements it
96
103
  #
97
104
  def draw
98
- @drawable_components.each { |c| c.draw(self) }
105
+ @drawable_traits.each { |c| c.draw(self) }
99
106
  end
100
107
 
101
108
 
@@ -1,23 +1,20 @@
1
1
  #
2
- # Our basic particle class
2
+ # Our basic particle class, basicly just a GameObject with trait "effect"
3
+ #
4
+ # TODO: expand on this further, as it is now it doesn't add much.
3
5
  #
4
6
  module Chingu
5
7
  class Particle < Chingu::GameObject
6
- add_component :effect
8
+ has_trait :effect
7
9
 
8
10
  def initialize(options)
9
11
  super({:mode => :additive}.merge(options))
10
- @rotation = options[:rotation] || 0
11
- @zoom = options[:zoom] || 0
12
- @fade = options[:fade] || 0
13
12
  @animation = options[:animation] || nil
14
13
  end
15
14
 
16
15
  def update
16
+ super
17
17
  self.image = @animation.next! if @animation
18
- self.rotate(@rotation)
19
- self.zoom(@zoom)
20
- self.fade(@fade)
21
18
  end
22
19
 
23
20
  end
@@ -1,5 +1,5 @@
1
1
  module Chingu
2
- module Components
2
+ module Traits
3
3
  #
4
4
  # TODO: everything. convert to class?
5
5
  #
@@ -1,5 +1,5 @@
1
1
  module Chingu
2
- module Components
2
+ module Traits
3
3
  module Visual
4
4
  attr_accessor :image, :x, :y, :angle, :center_x, :center_y, :factor_x, :factor_y, :color, :mode, :zorder
5
5
 
@@ -1,5 +1,5 @@
1
1
  module Chingu
2
- module Components
2
+ module Traits
3
3
  class Visual
4
4
 
5
5
  def initialize(parent_class, options)
@@ -1,5 +1,5 @@
1
1
  module Chingu
2
- module Components
2
+ module Traits
3
3
  class Effect
4
4
  #
5
5
  # Adds .rotating .fading and .zooming to any GameObject.
@@ -1,5 +1,5 @@
1
1
  module Chingu
2
- module Components
2
+ module Traits
3
3
  module Input
4
4
 
5
5
  def input=(input_map)
@@ -1,5 +1,5 @@
1
1
  module Chingu
2
- module Components
2
+ module Traits
3
3
  #
4
4
  # A chingu component providing velocity and acceleration logic.
5
5
  #
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ippa-chingu
3
3
  version: !ruby/object:Gem::Version
4
- version: "0.5"
4
+ version: 0.5.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - ippa
@@ -32,11 +32,19 @@ extensions: []
32
32
  extra_rdoc_files:
33
33
  - History.txt
34
34
  - Manifest.txt
35
+ - benchmarks/README.txt
36
+ - games/triangle_wars/NOT_DONE_YET.txt
35
37
  files:
36
38
  - History.txt
37
39
  - Manifest.txt
38
40
  - README.rdoc
39
41
  - Rakefile
42
+ - benchmarks/README.txt
43
+ - benchmarks/benchmark.rb
44
+ - benchmarks/benchmark3.rb
45
+ - benchmarks/benchmark4.rb
46
+ - benchmarks/meta_benchmark.rb
47
+ - benchmarks/meta_benchmark2.rb
40
48
  - chingu.gemspec
41
49
  - examples/example1.rb
42
50
  - examples/example2.rb
@@ -60,6 +68,58 @@ files:
60
68
  - examples/media/stickfigure.bmp
61
69
  - examples/media/stickfigure.png
62
70
  - examples/media/video_games.png
71
+ - games/triangle_wars/NOT_DONE_YET.txt
72
+ - games/triangle_wars/media/1up.png
73
+ - games/triangle_wars/media/33487__CosmicD__006.wav
74
+ - games/triangle_wars/media/Thumbs.db
75
+ - games/triangle_wars/media/autofire.png
76
+ - games/triangle_wars/media/backgrounds/GPN-2000-000933.jpg
77
+ - games/triangle_wars/media/backgrounds/Thumbs.db
78
+ - games/triangle_wars/media/backgrounds/background10.png
79
+ - games/triangle_wars/media/backgrounds/background10.svg
80
+ - games/triangle_wars/media/backgrounds/background2.jpg
81
+ - games/triangle_wars/media/backgrounds/background2.png
82
+ - games/triangle_wars/media/backgrounds/hubble_deep_field.jpg
83
+ - games/triangle_wars/media/backgrounds/hubble_deep_field.png
84
+ - games/triangle_wars/media/backgrounds/intro_bg.png
85
+ - games/triangle_wars/media/backgrounds/star_4.jpg
86
+ - games/triangle_wars/media/backgrounds/star_5.jpg
87
+ - games/triangle_wars/media/backgrounds/star_6.jpg
88
+ - games/triangle_wars/media/backgrounds/supernova_1.jpg
89
+ - games/triangle_wars/media/bigbomb.png
90
+ - games/triangle_wars/media/bullets.svg
91
+ - games/triangle_wars/media/enemy.png
92
+ - games/triangle_wars/media/enemy.svg
93
+ - games/triangle_wars/media/enemy_dying.png
94
+ - games/triangle_wars/media/enemy_small.svg
95
+ - games/triangle_wars/media/explosion.wav
96
+ - games/triangle_wars/media/hit.wav
97
+ - games/triangle_wars/media/hit2.wav
98
+ - games/triangle_wars/media/hit3.wav
99
+ - games/triangle_wars/media/laser.png
100
+ - games/triangle_wars/media/laser.svg
101
+ - games/triangle_wars/media/laser_up.png
102
+ - games/triangle_wars/media/plasma.png
103
+ - games/triangle_wars/media/plasma.wav
104
+ - games/triangle_wars/media/plasma_up.png
105
+ - games/triangle_wars/media/powerup_bg.png
106
+ - games/triangle_wars/media/powerups.svg
107
+ - games/triangle_wars/media/rocket_up.png
108
+ - games/triangle_wars/media/spaceship.png
109
+ - games/triangle_wars/media/spaceship.svg
110
+ - games/triangle_wars/media/triangle_logo.svg
111
+ - games/triangle_wars/media/triangle_wars.png
112
+ - games/triangle_wars/media/triangle_wars_intro.mp3
113
+ - games/triangle_wars/media/triangle_wars_intro.ogg
114
+ - games/triangle_wars/src/enemy.rb
115
+ - games/triangle_wars/src/game_over_state.rb
116
+ - games/triangle_wars/src/level_state.rb
117
+ - games/triangle_wars/src/menu_state.rb
118
+ - games/triangle_wars/src/my_game_object.rb
119
+ - games/triangle_wars/src/pause_state.rb
120
+ - games/triangle_wars/src/player.rb
121
+ - games/triangle_wars/src/power_up.rb
122
+ - games/triangle_wars/triangle_wars.rb
63
123
  - lib/chingu.rb
64
124
  - lib/chingu/actor.rb
65
125
  - lib/chingu/animation.rb
@@ -91,7 +151,6 @@ files:
91
151
  - lib/chingu/window.rb
92
152
  has_rdoc: false
93
153
  homepage: http://github.com/ippa/chingu/tree/master
94
- licenses:
95
154
  post_install_message:
96
155
  rdoc_options:
97
156
  - --main
@@ -113,7 +172,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
113
172
  requirements: []
114
173
 
115
174
  rubyforge_project: chingu
116
- rubygems_version: 1.3.5
175
+ rubygems_version: 1.2.0
117
176
  signing_key:
118
177
  specification_version: 3
119
178
  summary: Game framework built on top of the OpenGL accelerated game lib Gosu