chingu 0.7.0 → 0.7.5
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/History.txt +1 -1
- data/README.rdoc +110 -49
- data/benchmarks/game_objects_benchmark.rb +50 -0
- data/chingu.gemspec +24 -12
- data/examples/example10_traits_retrofy.rb +6 -4
- data/examples/example11_animation.rb +14 -23
- data/examples/example12_trait_timer.rb +1 -1
- data/examples/example13_high_scores.rb +1 -1
- data/examples/example14_bounding_box_circle.rb +6 -10
- data/examples/example15_trait_timer2.rb +1 -1
- data/examples/example16_online_high_scores.rb +1 -1
- data/examples/example17_gosu_tutorial.rb +4 -4
- data/examples/example18_animation_trait.rb +98 -0
- data/examples/example19_edit_viewport.rb +223 -0
- data/examples/example19_game_objects.yml +1591 -0
- data/examples/example20_trait_inheritence_test.rb +58 -0
- data/examples/example3_parallax.rb +1 -1
- data/examples/example4_gamestates.rb +1 -1
- data/examples/example7_gfx_helpers.rb +14 -9
- data/examples/example8_traits.rb +4 -4
- data/examples/example9_collision_detection.rb +1 -1
- data/examples/game1.rb +33 -38
- data/examples/game_of_life.rb +291 -0
- data/examples/media/droid_11x15.bmp +0 -0
- data/examples/media/droid_11x15.gal +0 -0
- data/examples/media/heli.bmp +0 -0
- data/examples/media/heli.gal +0 -0
- data/examples/media/star_25x25_default.png +0 -0
- data/examples/media/star_25x25_explode.gal +0 -0
- data/examples/media/star_25x25_explode.png +0 -0
- data/examples/media/stone_wall.bmp +0 -0
- data/lib/chingu.rb +1 -1
- data/lib/chingu/animation.rb +78 -9
- data/lib/chingu/basic_game_object.rb +16 -8
- data/lib/chingu/game_object.rb +36 -7
- data/lib/chingu/game_object_list.rb +20 -3
- data/lib/chingu/game_state.rb +8 -7
- data/lib/chingu/game_states/edit.rb +177 -90
- data/lib/chingu/helpers/class_inheritable_accessor.rb +12 -5
- data/lib/chingu/helpers/game_object.rb +45 -4
- data/lib/chingu/helpers/gfx.rb +150 -172
- data/lib/chingu/helpers/input_client.rb +7 -0
- data/lib/chingu/inflector.rb +16 -2
- data/lib/chingu/traits/animation.rb +84 -0
- data/lib/chingu/traits/bounding_box.rb +16 -3
- data/lib/chingu/traits/bounding_circle.rb +18 -4
- data/lib/chingu/traits/collision_detection.rb +10 -1
- data/lib/chingu/traits/velocity.rb +26 -3
- data/lib/chingu/traits/viewport.rb +10 -9
- data/lib/chingu/viewport.rb +103 -22
- data/lib/chingu/window.rb +8 -2
- metadata +46 -16
- data/examples/example18_viewport.rb +0 -173
- data/examples/media/city1.csv +0 -2
- data/examples/media/plane.csv +0 -2
- data/examples/media/saucer.csv +0 -4
- data/examples/media/stickfigure.bmp +0 -0
- data/examples/media/stickfigure.png +0 -0
data/History.txt
CHANGED
data/README.rdoc
CHANGED
@@ -14,7 +14,7 @@ Chingu has started to settle down, thouch core classes and naming can still chan
|
|
14
14
|
== DESCRIPTION
|
15
15
|
OpenGL accelerated 2D game framework for Ruby.
|
16
16
|
Builds on the awesome Gosu (Ruby/C++) which provides all the core functionality.
|
17
|
-
It adds simple yet powerful game states,
|
17
|
+
It adds simple yet powerful game states, pretty input handling, deployment safe asset-handling, a basic re-usable game object and automation of common task.
|
18
18
|
|
19
19
|
|
20
20
|
== THE STORY
|
@@ -33,9 +33,10 @@ Borrowing ideas from Rubygame this has now become @player.keyboard(:left => :mov
|
|
33
33
|
Chingu consists of the following core classes / concepts:
|
34
34
|
|
35
35
|
=== Chingu::Window
|
36
|
-
The main window, use it at you use Gosu::Window now.
|
37
|
-
handles chingu-formated input, updates and draws BasicGameObject / GameObjects
|
38
|
-
Available
|
36
|
+
The main window, use it at you use Gosu::Window now. Calculates the framerate, takes care of states,
|
37
|
+
handles chingu-formated input, updates and draws BasicGameObject / GameObjects automatically.
|
38
|
+
Available throughout your source as $window (Yes, that's the only global Chingu has).
|
39
|
+
You can also set various global settings. For example, self.factor=3, will make all fortcomming GameObjects scale 3 times.
|
39
40
|
|
40
41
|
=== Chingu::GameObject
|
41
42
|
Use this for all your in game objects. The player, the enemies, the bullets, the powerups, the loot laying around.
|
@@ -47,8 +48,8 @@ Has either Chingu::Window or a Chingu::GameState as "parent".
|
|
47
48
|
=== Chingu::BasicGameObject
|
48
49
|
For those who think GameObject is a too little fat, there's BasicGameObject (GameObject inherits from BasicGameObject).
|
49
50
|
BasicGameObject is just an empty frame (no x,y,image accessors or draw-logic) for you to build on.
|
50
|
-
It _can_ be extended with Chingus trait-system though. The new() vs create()
|
51
|
-
BasicGameObject#parent points to either $window or a game state and is
|
51
|
+
It _can_ be extended with Chingus trait-system though. The new() vs create() behavior of GameObject comes from BasicGameObject.
|
52
|
+
BasicGameObject#parent points to either $window or a game state and is automatically set on creation time.
|
52
53
|
|
53
54
|
=== Chingu::GameStateManager
|
54
55
|
Keeps track of the game states. Implements a stack-based system with push_game_state and pop_game_state.
|
@@ -63,8 +64,8 @@ Chingu::Window --> Chingu::GameStateManager --> Chingu::GameState.
|
|
63
64
|
For example, inside game state Menu you call push_game_state(Level). When Level exists, it will go back to Menu.
|
64
65
|
|
65
66
|
=== Traits
|
66
|
-
Traits are extensions (or plugins if you so will) to BasicGameObjects.
|
67
|
-
The aim is so encapsulate common
|
67
|
+
Traits are extensions (or plugins if you so will) to BasicGameObjects included on the class-level.
|
68
|
+
The aim is so encapsulate common behavior into modules for easy inclusion in your game classes.
|
68
69
|
Making a trait is easy, just an ordinary module with the methods setup_trait(), update_trait() and/or draw_trait().
|
69
70
|
It currently has to be namespaced to Chingu::Traits for "has_traits" to work inside GameObject-classes.
|
70
71
|
|
@@ -159,9 +160,9 @@ Chingu doesn't change the fundamental concept/flow of Gosu, but it will make the
|
|
159
160
|
#
|
160
161
|
class Game < Chingu::Window
|
161
162
|
def initialize
|
162
|
-
super # This is always needed if you
|
163
|
+
super # This is always needed if you override Window#initialize
|
163
164
|
#
|
164
|
-
# Player will
|
165
|
+
# Player will automatically be updated and drawn since it's a Chingu::GameObject
|
165
166
|
# You'll need your own Chingu::Window#update and Chingu::Window#draw after a while, but just put #super there and Chingu can do its thing.
|
166
167
|
#
|
167
168
|
@player = Player.create
|
@@ -234,7 +235,7 @@ An example using almost all arguments would be:
|
|
234
235
|
#
|
235
236
|
# A shortcut for the above line would be
|
236
237
|
#
|
237
|
-
@player = Player.new(:image =>
|
238
|
+
@player = Player.new(:image => "player.png", :x=>100, :y=>100, :zorder=>100, :angle=>45, :factor=>10, :center=>0)
|
238
239
|
|
239
240
|
#
|
240
241
|
# I've tried doing sensible defaults:
|
@@ -445,8 +446,31 @@ Or Chingus shortcut:
|
|
445
446
|
|
446
447
|
Chingus inputhandler will detect that Menu is a GameState-class, create a new instance and activate it with push_game_state().
|
447
448
|
|
449
|
+
=== WorkFlow
|
450
|
+
(This text is under development)
|
451
|
+
|
452
|
+
== The setup-method
|
453
|
+
If a setup() is available in a instance of Chingu::GameObject, Chingu::Window and Chingu::GameState it will automatically be called.
|
454
|
+
This is the perfect spot to include various setup/init-tasks like setting colors or loading animations (if you're not using the animation-trait).
|
455
|
+
You could also override initialize() for this purpose but it's been proven prone to errors again and again.
|
456
|
+
Compare the 2 snippets below:
|
457
|
+
|
458
|
+
# Easy to mess up, forgetting options or super
|
459
|
+
def initialize(options = {})
|
460
|
+
super
|
461
|
+
@color = Color::WHITE
|
462
|
+
end
|
463
|
+
|
464
|
+
# Less code, easier to get right and works in GameObject, Window and GameState
|
465
|
+
# Feel free to call setup() anytime, there's no magic about ut except it's autocalled once on object creation time.
|
466
|
+
def setup
|
467
|
+
@color = Color::WHITE
|
468
|
+
end
|
469
|
+
|
470
|
+
|
471
|
+
|
448
472
|
=== Traits
|
449
|
-
Traits (
|
473
|
+
Traits (sometimes called behaviors in other frameworks) is a way of adding logic to any class inheriting from BasicGameObject / GameObject.
|
450
474
|
Chingus trait-implementation is just ordinary ruby modules with 3 special methods:
|
451
475
|
- setup_trait
|
452
476
|
- update_trait
|
@@ -462,6 +486,10 @@ A simple trait could be:
|
|
462
486
|
module Chingu
|
463
487
|
module Trait
|
464
488
|
module Inspect
|
489
|
+
|
490
|
+
#
|
491
|
+
# methods namespaced to ClassMethods get's extended as ... class methods!
|
492
|
+
#
|
465
493
|
module ClassMethods
|
466
494
|
def initialize_trait(options)
|
467
495
|
# possible initialize stuff here
|
@@ -470,6 +498,15 @@ module Chingu
|
|
470
498
|
def inspect
|
471
499
|
"There's {self.size} active instances of class {self.to_s}"
|
472
500
|
end
|
501
|
+
end
|
502
|
+
|
503
|
+
#
|
504
|
+
# Namespaced outside ClassMethods get's included as normal instance-methods
|
505
|
+
#
|
506
|
+
def inspect
|
507
|
+
"Hello I'm an #{self.class.to_s}"
|
508
|
+
end
|
509
|
+
|
473
510
|
end
|
474
511
|
end
|
475
512
|
end
|
@@ -478,7 +515,8 @@ class Enemy < GameObject
|
|
478
515
|
has_trait :inspect # includes Chingu::Trait::Inspect and extends Chingu::Trait::Inspect::ClassMethods
|
479
516
|
end
|
480
517
|
10.times { Enemy.create }
|
481
|
-
Enemy.inspect # => There's 10 active instances of class Enemy
|
518
|
+
Enemy.inspect # => "There's 10 active instances of class Enemy"
|
519
|
+
Enemy.all.first.inspect # => "Hello I'm a Enemy"
|
482
520
|
|
483
521
|
|
484
522
|
Example of using traits :velocity and :timer:
|
@@ -527,10 +565,10 @@ There's a couple of traits included as default in Chingu:
|
|
527
565
|
|
528
566
|
==== Trait "timer"
|
529
567
|
Adds timer functionality to your game object
|
530
|
-
during(300) { self.color = Color.new(0xFFFFFFFF) }
|
531
|
-
after(400) { self.destroy }
|
532
|
-
between(1000,2000) { self.
|
533
|
-
every(2000) { Sound["bleep.wav"].play }
|
568
|
+
during(300) { self.color = Color.new(0xFFFFFFFF) } # forces @color to white every update for 300 ms
|
569
|
+
after(400) { self.destroy } # destroy object after 400 ms
|
570
|
+
between(1000,2000) { self.angle += 10 } # starting after 1 second, modify angleevery update during 1 second
|
571
|
+
every(2000) { Sound["bleep.wav"].play } # play bleep.wav every 2 seconds
|
534
572
|
|
535
573
|
==== Trait "velocity"
|
536
574
|
Adds accessors velocity_x, velocity_y, acceleration_x, acceleration_y, max_velocity to game object.
|
@@ -558,10 +596,34 @@ You can also scale the calculated radius with has_trait-options:
|
|
558
596
|
# :debug => true shows the actual circle in red on the screen
|
559
597
|
has_trait :bounding_circle, :debug => true
|
560
598
|
|
599
|
+
==== Trait "animation"
|
600
|
+
Automatically load animations depending on the class-name.
|
601
|
+
Useful when having a lot of simple classes thats mainpurpose is displaying an animation.
|
602
|
+
Assuming the below code is included in a class FireBall.
|
603
|
+
|
604
|
+
#
|
605
|
+
# If a fire_ball_10x10.png/bmp exists, it will be loaded as a tileanimation.
|
606
|
+
# 10x10 would indicate the width and height of each tile so Chingu knows hows to cut it up into single frames.
|
607
|
+
# The animation will then be available in animations[:default] as an Animation-instance.
|
608
|
+
#
|
609
|
+
# If more then 1 animation exist, they'll will be loaded at the same time, for example:
|
610
|
+
# fire_ball_10x10_fly.png # Will be available in animations[:fly] as an Animation-instance
|
611
|
+
# fire_ball_10x10_explode.png # Will be available in animations[:explode] as an Animation-instance
|
612
|
+
#
|
613
|
+
# The below example will set the 200ms delay between each frame on all animations loaded.
|
614
|
+
#
|
615
|
+
has_trait :automatic_assets, :delay => 200
|
616
|
+
|
561
617
|
==== Trait "effect"
|
562
618
|
Adds accessors rotation_rate, fade_rate and scale_rate to game object.
|
563
619
|
They modify angle, alpha and factor_x/factor_y each update. Since this is pretty easy to do yourself this trait might be up for deprecation.
|
564
|
-
|
620
|
+
|
621
|
+
==== (IN DEVELOPMENT) Trait "viewport"
|
622
|
+
A game state trait. Adds accessor *viewport*. Set viewport.x and viewport.y to.
|
623
|
+
Basically what viewport.x = 10 will do is draw all game objects 10 pixels to the left of their ordinary position.
|
624
|
+
Since the viewport has moved 10 pixels to the right, the game objects will be seen "moving" 10 pixels to the left.
|
625
|
+
This is great for scrolling games.
|
626
|
+
|
565
627
|
==== (IN DEVELOPMENT) Trait "collision_detection"
|
566
628
|
Adds class and instance methods for basic collision detection.
|
567
629
|
|
@@ -638,7 +700,7 @@ Text is a class to give the use of Gosu::Font more rubyish feel and fit it bette
|
|
638
700
|
@text = Chingu::Text.create("A Text", :x => 200, :y => 50, :zorder => 55, :factor_x => 2.0)
|
639
701
|
@text.draw
|
640
702
|
|
641
|
-
@text.draw is usually not needed as Text is a GameObject and therefore
|
703
|
+
@text.draw is usually not needed as Text is a GameObject and therefore automatically updated/drawn (it #create is used instead of #new)
|
642
704
|
It's not only that the second example is readable by ppl now even familiar with Gosu, @text comes with a number of changeable properties, x,y,zorder,angle,factor_x,color,mode etc.
|
643
705
|
Set a new x or angle or color and it will instantly update on screen.
|
644
706
|
|
@@ -656,7 +718,34 @@ GameObject.all is naming straight from rails for example. Most stuff in GameObje
|
|
656
718
|
|
657
719
|
As far as possible, use correct rubyfied english game_objects, not gameobjects. class HighScore, not Highscore.
|
658
720
|
|
659
|
-
|
721
|
+
|
722
|
+
== WHY?
|
723
|
+
* Plain Gosu is very minimalistic, perfect to build some higher level logic on!
|
724
|
+
* Deployment and asset handling should be simple
|
725
|
+
* Managing game states/scenes (intros, menus, levels etc) should be simple
|
726
|
+
* There are patterns in game development
|
727
|
+
|
728
|
+
== OPINIONS
|
729
|
+
* Less code is usually better
|
730
|
+
* Hash arguments FTW. And it becomes even better in 1.9.
|
731
|
+
* Don't separate too much from Gosus core-naming
|
732
|
+
|
733
|
+
== CREDITS:
|
734
|
+
* Jacius of Rubygame (For doing cool stuff that's well documented as re-usable). So far rect.rb and named_resource.rb is straight outta Rubygame.
|
735
|
+
* Banister (of texplay fame) for general feedeback and help with ruby-internals and building the trait-system
|
736
|
+
* Jduff for input / commits
|
737
|
+
* Jlnr,Philymore,Shawn24,JamesKilton for constructive feedback/discussions
|
738
|
+
* Ariel Pillet for codesuggestions and cleanups
|
739
|
+
* Deps for making the first real full game with Chingu (and making it better in the process)
|
740
|
+
* Thanks to http://github.com/tarcieri for require_all code, good stuff
|
741
|
+
|
742
|
+
== REQUIREMENTS:
|
743
|
+
* Gosu latest version
|
744
|
+
* Ruby 1.9.1+ or 1.8.7+
|
745
|
+
* gem 'opengl' if you want to use Image#retrofy, not needed otherwise
|
746
|
+
* gem 'texplay' for some bonus Image-pixel operations, not needed otherwise
|
747
|
+
|
748
|
+
== TODO - this list is Discontinued and no longer updated!
|
660
749
|
* add :padding and :align => :topleft etc to class Text
|
661
750
|
* (skip) rename Chingu::Window so 'include Chingu' and 'include Gosu' wont make Window collide
|
662
751
|
* (done) BasicObject vs GameObject vs ScreenObject => Became BasicGameObject and GameObject
|
@@ -689,37 +778,9 @@ As far as possible, use correct rubyfied english game_objects, not gameobjects.
|
|
689
778
|
* A more robust game state <-> game_object system to connect them together.
|
690
779
|
* FIX example4: :p => Pause.new would Change the "inside_game_state" to Pause and make @player belong to Pause.
|
691
780
|
|
692
|
-
== WHY?
|
693
|
-
* Plain Gosu is very minimalistic, perfect to build some higher level logic on!
|
694
|
-
* Deployment and asset handling should be simple
|
695
|
-
* Managing game states/scenes (intros, menus, levels etc) should be simple
|
696
|
-
* There are patterns in game development
|
697
|
-
|
698
|
-
== OPINIONS
|
699
|
-
* Less code is usually better
|
700
|
-
* Hash arguments FTW. And it becomes even better in 1.9.
|
701
|
-
* Don't separate too much from Gosus core-naming
|
702
|
-
|
703
|
-
== CREDITS:
|
704
|
-
* Jacius of Rubygame (For doing cool stuff that's well documented as re-usable). So far rect.rb and named_resource.rb is straight outta Rubygame.
|
705
|
-
* Banister (of texplay fame) for general feedeback and help with ruby-internals and building the trait-system
|
706
|
-
* Jduff for input / commits
|
707
|
-
* Jlnr,Philymore,Shawn24,JamesKilton for constructive feedback/discussions
|
708
|
-
* Ariel Pillet for codesuggestions and cleanups
|
709
|
-
* Deps for making the first real full game with Chingu (and making it better in the process)
|
710
|
-
* Thanks to http://github.com/tarcieri for require_all code, good stuff
|
711
|
-
|
712
|
-
== REQUIREMENTS:
|
713
|
-
* Gosu latest version
|
714
|
-
* Ruby 1.9.1+ or 1.8.7+
|
715
|
-
* gem 'opengl' if you want to use Image#retrofy, not needed otherwise
|
716
|
-
* gem 'texplay' for some bonus Image-pixel operations, not needed otherwise
|
717
|
-
|
718
|
-
|
719
|
-
|
720
781
|
|
721
782
|
|
722
783
|
"If you program and want any longevity to your work, make a game.
|
723
784
|
All else recycles, but people rewrite architectures to keep games alive.", _why
|
724
785
|
|
725
|
-
|
786
|
+
|
@@ -0,0 +1,50 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
require 'benchmark'
|
4
|
+
require File.join(File.dirname($0), "..", "lib", "chingu")
|
5
|
+
include Gosu
|
6
|
+
|
7
|
+
|
8
|
+
class Game < Chingu::Window
|
9
|
+
def initialize
|
10
|
+
super(600,200)
|
11
|
+
self.input = { :esc => :exit }
|
12
|
+
@iterations = 10
|
13
|
+
end
|
14
|
+
|
15
|
+
def update
|
16
|
+
if @iterations > 0
|
17
|
+
create_objects
|
18
|
+
@iterations -= 1
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def create_objects
|
23
|
+
Benchmark.bm(22) do |x|
|
24
|
+
x.report('create') do
|
25
|
+
100000.times do
|
26
|
+
MyGameObject.create
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
class MyGameObject < Chingu::GameObject
|
34
|
+
end
|
35
|
+
|
36
|
+
Game.new.show
|
37
|
+
|
38
|
+
|
39
|
+
# 100000 MyGameObject.create with add_game_objects / remove_game_objects -arrays
|
40
|
+
# user system total real
|
41
|
+
#create 0.951000 0.047000 0.998000 ( 0.998057)
|
42
|
+
#create 1.139000 0.031000 1.170000 ( 1.155066)
|
43
|
+
#create 1.186000 0.047000 1.233000 ( 1.239071)
|
44
|
+
#create 1.528000 0.000000 1.528000 ( 1.520087)
|
45
|
+
#create 1.451000 0.031000 1.482000 ( 1.488085)
|
46
|
+
#create 1.654000 0.016000 1.670000 ( 1.662095)
|
47
|
+
#create 1.794000 0.015000 1.809000 ( 1.819104)
|
48
|
+
#create 1.997000 0.000000 1.997000 ( 1.986114)
|
49
|
+
#create 1.934000 0.000000 1.934000 ( 1.930110)
|
50
|
+
#create 2.075000 0.000000 2.075000 ( 2.087119)
|
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.7.
|
8
|
+
s.version = "0.7.5"
|
9
9
|
|
10
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
|
+
s.date = %q{2010-06-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 = [
|
@@ -28,6 +28,7 @@ Gem::Specification.new do |s|
|
|
28
28
|
"benchmarks/benchmark4.rb",
|
29
29
|
"benchmarks/benchmark5.rb",
|
30
30
|
"benchmarks/benchmark6.rb",
|
31
|
+
"benchmarks/game_objects_benchmark.rb",
|
31
32
|
"benchmarks/meta_benchmark.rb",
|
32
33
|
"benchmarks/meta_benchmark2.rb",
|
33
34
|
"chingu.gemspec",
|
@@ -39,8 +40,11 @@ Gem::Specification.new do |s|
|
|
39
40
|
"examples/example15_trait_timer2.rb",
|
40
41
|
"examples/example16_online_high_scores.rb",
|
41
42
|
"examples/example17_gosu_tutorial.rb",
|
42
|
-
"examples/
|
43
|
+
"examples/example18_animation_trait.rb",
|
44
|
+
"examples/example19_edit_viewport.rb",
|
45
|
+
"examples/example19_game_objects.yml",
|
43
46
|
"examples/example1_basics.rb",
|
47
|
+
"examples/example20_trait_inheritence_test.rb",
|
44
48
|
"examples/example2_gamestate_basics.rb",
|
45
49
|
"examples/example3_parallax.rb",
|
46
50
|
"examples/example4_gamestates.rb",
|
@@ -50,6 +54,7 @@ Gem::Specification.new do |s|
|
|
50
54
|
"examples/example8_traits.rb",
|
51
55
|
"examples/example9_collision_detection.rb",
|
52
56
|
"examples/game1.rb",
|
57
|
+
"examples/game_of_life.rb",
|
53
58
|
"examples/high_score_list.yml",
|
54
59
|
"examples/media/Parallax-scroll-example-layer-0.png",
|
55
60
|
"examples/media/Parallax-scroll-example-layer-1.png",
|
@@ -61,26 +66,29 @@ Gem::Specification.new do |s|
|
|
61
66
|
"examples/media/bullet.png",
|
62
67
|
"examples/media/bullet_hit.wav",
|
63
68
|
"examples/media/circle.png",
|
64
|
-
"examples/media/city1.csv",
|
65
69
|
"examples/media/city1.png",
|
66
70
|
"examples/media/city2.png",
|
67
71
|
"examples/media/droid.bmp",
|
72
|
+
"examples/media/droid_11x15.bmp",
|
73
|
+
"examples/media/droid_11x15.gal",
|
68
74
|
"examples/media/enemy_bullet.png",
|
69
75
|
"examples/media/explosion.wav",
|
70
76
|
"examples/media/fire_bullet.png",
|
71
77
|
"examples/media/fireball.png",
|
78
|
+
"examples/media/heli.bmp",
|
79
|
+
"examples/media/heli.gal",
|
72
80
|
"examples/media/laser.wav",
|
73
81
|
"examples/media/particle.png",
|
74
|
-
"examples/media/plane.csv",
|
75
82
|
"examples/media/plane.png",
|
76
83
|
"examples/media/rect.png",
|
77
84
|
"examples/media/ruby.png",
|
78
|
-
"examples/media/saucer.csv",
|
79
85
|
"examples/media/saucer.gal",
|
80
86
|
"examples/media/saucer.png",
|
81
87
|
"examples/media/spaceship.png",
|
82
|
-
"examples/media/
|
83
|
-
"examples/media/
|
88
|
+
"examples/media/star_25x25_default.png",
|
89
|
+
"examples/media/star_25x25_explode.gal",
|
90
|
+
"examples/media/star_25x25_explode.png",
|
91
|
+
"examples/media/stone_wall.bmp",
|
84
92
|
"examples/media/video_games.png",
|
85
93
|
"examples/media/wood.png",
|
86
94
|
"lib/chingu.rb",
|
@@ -115,6 +123,7 @@ Gem::Specification.new do |s|
|
|
115
123
|
"lib/chingu/rect.rb",
|
116
124
|
"lib/chingu/require_all.rb",
|
117
125
|
"lib/chingu/text.rb",
|
126
|
+
"lib/chingu/traits/animation.rb",
|
118
127
|
"lib/chingu/traits/bounding_box.rb",
|
119
128
|
"lib/chingu/traits/bounding_circle.rb",
|
120
129
|
"lib/chingu/traits/collision_detection.rb",
|
@@ -130,7 +139,7 @@ Gem::Specification.new do |s|
|
|
130
139
|
s.rdoc_options = ["--charset=UTF-8"]
|
131
140
|
s.require_paths = ["lib"]
|
132
141
|
s.rubyforge_project = %q{chingu}
|
133
|
-
s.rubygems_version = %q{1.3.
|
142
|
+
s.rubygems_version = %q{1.3.7}
|
134
143
|
s.summary = %q{OpenGL accelerated 2D game framework for Ruby}
|
135
144
|
s.test_files = [
|
136
145
|
"examples/example10_traits_retrofy.rb",
|
@@ -141,8 +150,10 @@ Gem::Specification.new do |s|
|
|
141
150
|
"examples/example15_trait_timer2.rb",
|
142
151
|
"examples/example16_online_high_scores.rb",
|
143
152
|
"examples/example17_gosu_tutorial.rb",
|
144
|
-
"examples/
|
153
|
+
"examples/example18_animation_trait.rb",
|
154
|
+
"examples/example19_edit_viewport.rb",
|
145
155
|
"examples/example1_basics.rb",
|
156
|
+
"examples/example20_trait_inheritence_test.rb",
|
146
157
|
"examples/example2_gamestate_basics.rb",
|
147
158
|
"examples/example3_parallax.rb",
|
148
159
|
"examples/example4_gamestates.rb",
|
@@ -151,14 +162,15 @@ Gem::Specification.new do |s|
|
|
151
162
|
"examples/example7_gfx_helpers.rb",
|
152
163
|
"examples/example8_traits.rb",
|
153
164
|
"examples/example9_collision_detection.rb",
|
154
|
-
"examples/game1.rb"
|
165
|
+
"examples/game1.rb",
|
166
|
+
"examples/game_of_life.rb"
|
155
167
|
]
|
156
168
|
|
157
169
|
if s.respond_to? :specification_version then
|
158
170
|
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
159
171
|
s.specification_version = 3
|
160
172
|
|
161
|
-
if Gem::Version.new(Gem::
|
173
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
162
174
|
s.add_runtime_dependency(%q<gosu>, [">= 0.7.18"])
|
163
175
|
else
|
164
176
|
s.add_dependency(%q<gosu>, [">= 0.7.18"])
|
@@ -1,6 +1,5 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
require 'rubygems'
|
3
|
-
require 'opengl'
|
4
3
|
require File.join(File.dirname($0), "..", "lib", "chingu")
|
5
4
|
include Gosu
|
6
5
|
include Chingu
|
@@ -14,6 +13,7 @@ class Game < Chingu::Window
|
|
14
13
|
super(600,400)
|
15
14
|
self.caption = "Testing out new module-based traits (SPACE for more spaceships)"
|
16
15
|
self.input = { :space => :create_thing, :esc => :exit }
|
16
|
+
Gosu::enable_undocumented_retrofication
|
17
17
|
create_thing(200,200)
|
18
18
|
end
|
19
19
|
|
@@ -33,8 +33,8 @@ class Game < Chingu::Window
|
|
33
33
|
end
|
34
34
|
|
35
35
|
class Thing < Chingu::GameObject
|
36
|
-
|
37
|
-
|
36
|
+
trait :effect
|
37
|
+
trait :velocity
|
38
38
|
|
39
39
|
def initialize(options)
|
40
40
|
super
|
@@ -49,7 +49,9 @@ class Thing < Chingu::GameObject
|
|
49
49
|
#
|
50
50
|
# The above code has been merged into chingu as @image.retrofy
|
51
51
|
#
|
52
|
-
@image.retrofy
|
52
|
+
# @image.retrofy
|
53
|
+
#
|
54
|
+
# Use Gosu::enable_undocumented_retrofication instead!
|
53
55
|
|
54
56
|
|
55
57
|
self.scale = 8
|