red_bird 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (63) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +13 -0
  3. data/Gemfile +4 -0
  4. data/Gemfile.lock +23 -0
  5. data/LICENSE.txt +21 -0
  6. data/README.md +47 -0
  7. data/Rakefile +10 -0
  8. data/bin/setup +8 -0
  9. data/ext/red_bird/bird.c +15 -0
  10. data/ext/red_bird/bird.h +10 -0
  11. data/ext/red_bird/color.c +95 -0
  12. data/ext/red_bird/color.h +27 -0
  13. data/ext/red_bird/dynamic_sprite.c +163 -0
  14. data/ext/red_bird/dynamic_sprite.h +30 -0
  15. data/ext/red_bird/engine.c +354 -0
  16. data/ext/red_bird/engine.h +40 -0
  17. data/ext/red_bird/extconf.rb +9 -0
  18. data/ext/red_bird/font.c +94 -0
  19. data/ext/red_bird/font.h +26 -0
  20. data/ext/red_bird/input_device.c +100 -0
  21. data/ext/red_bird/input_device.h +15 -0
  22. data/ext/red_bird/keycode.c +42 -0
  23. data/ext/red_bird/keycode.h +12 -0
  24. data/ext/red_bird/loader.c +154 -0
  25. data/ext/red_bird/loader.h +54 -0
  26. data/ext/red_bird/main.c +38 -0
  27. data/ext/red_bird/main.h +12 -0
  28. data/ext/red_bird/palette.c +132 -0
  29. data/ext/red_bird/palette.h +23 -0
  30. data/ext/red_bird/rect.c +257 -0
  31. data/ext/red_bird/rect.h +20 -0
  32. data/ext/red_bird/render.c +130 -0
  33. data/ext/red_bird/render.h +25 -0
  34. data/ext/red_bird/sprite.c +130 -0
  35. data/ext/red_bird/sprite.h +27 -0
  36. data/ext/red_bird/text.c +212 -0
  37. data/ext/red_bird/text.h +31 -0
  38. data/ext/red_bird/texture.c +157 -0
  39. data/ext/red_bird/texture.h +33 -0
  40. data/ext/red_bird/texture_imp.cpp +49 -0
  41. data/ext/red_bird/texture_imp.hpp +29 -0
  42. data/ext/red_bird/timer.c +134 -0
  43. data/ext/red_bird/timer.h +25 -0
  44. data/lib/red_bird.rb +15 -0
  45. data/lib/red_bird/animation.rb +133 -0
  46. data/lib/red_bird/camera.rb +61 -0
  47. data/lib/red_bird/controller.rb +44 -0
  48. data/lib/red_bird/dynamic_sprite.rb +38 -0
  49. data/lib/red_bird/engine.rb +81 -0
  50. data/lib/red_bird/entity.rb +74 -0
  51. data/lib/red_bird/entity_collision.rb +31 -0
  52. data/lib/red_bird/input_device.rb +86 -0
  53. data/lib/red_bird/palette.rb +23 -0
  54. data/lib/red_bird/relative_entity.rb +95 -0
  55. data/lib/red_bird/sprite.rb +40 -0
  56. data/lib/red_bird/stage.rb +60 -0
  57. data/lib/red_bird/tile_map.rb +118 -0
  58. data/lib/red_bird/tile_set.rb +56 -0
  59. data/lib/red_bird/uibox.rb +143 -0
  60. data/lib/red_bird/version.rb +3 -0
  61. data/lib/red_bird/vertical_menu.rb +110 -0
  62. data/red_bird.gemspec +37 -0
  63. metadata +149 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 815c82919387f7aaa0a34ec4e50faf885c3d43f1be1e2b5533c939e907af6aea
4
+ data.tar.gz: 397c6e509536b737bb87bfeafe9e6e7e30490449b4977f12e9dc469e98f96939
5
+ SHA512:
6
+ metadata.gz: 327d4193f540b20a82f9650f011c695ea8aacfb708e2488578cf30470177a3f22aa2bb3f829113f0940f51c73b7dffe2848df03b866e769bc7e159e8414a57eb
7
+ data.tar.gz: 35ed309150aab1a128c98e9a66f5506b633f2f6e8628798a4057c90d0b55e90387a2bfa37c108b6456f7a532fc963476d1542670a52548254991b15f63a2de09
@@ -0,0 +1,13 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /doc/
6
+ /pkg/
7
+ /spec/reports/
8
+ /tmp/
9
+ *.bundle
10
+ *.so
11
+ *.o
12
+ *.a
13
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in red_bird.gemspec
4
+ gemspec
@@ -0,0 +1,23 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ red_bird (0.1.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ rake (13.0.1)
10
+ rake-compiler (1.0.8)
11
+ rake
12
+
13
+ PLATFORMS
14
+ ruby
15
+
16
+ DEPENDENCIES
17
+ bundler (>= 2.0)
18
+ rake (>= 10.0)
19
+ rake-compiler
20
+ red_bird!
21
+
22
+ BUNDLED WITH
23
+ 2.1.4
@@ -0,0 +1,21 @@
1
+ The MIT License (MIT)
2
+
3
+ Copyright (c) 2019 Frederico Linhares
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in
13
+ all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
21
+ THE SOFTWARE.
@@ -0,0 +1,47 @@
1
+ # RedBird
2
+
3
+ RedBird is a 2D game engine for Ruby, it is designed to make game development quick and easy.
4
+
5
+ ## Installation
6
+
7
+ RedBird gem links against libSDL2 and libSDL2_ttf, so before installing RedBird into a machine, ensure that development libraries for SDL are installed.
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'red_bird'
13
+ ```
14
+
15
+ And then execute:
16
+
17
+ $ bundle
18
+
19
+ Or install it yourself as:
20
+
21
+ $ gem install red_bird
22
+
23
+ ## Usage
24
+
25
+ To crate a minimal code using RedBird you need to call {RedBird::Engine.run}
26
+ and pass to it a code block that returns a {RedBird::Stage}:
27
+
28
+ require 'red_bird'
29
+ require 'red_bird/stage'
30
+
31
+ class Stage < RedBird::Stage
32
+ def initialize(global_data)
33
+ super(global_data)
34
+ @controller = RedBird::Controller.new
35
+ @input_device = RedBird::InputDevice.new(@controller)
36
+ end
37
+ end
38
+
39
+ RedBird::Engine.run(nil) { |global_data| Stage.new(global_data) }
40
+
41
+ ## Contributing
42
+
43
+ Bug reports and pull requests are welcome on GitHub at [bitbucket.org/fredlinhares/red_bird](https://bitbucket.org/fredlinhares/red_bird)
44
+
45
+ ## License
46
+
47
+ The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
@@ -0,0 +1,10 @@
1
+ require "bundler/gem_tasks"
2
+ require "rake/extensiontask"
3
+
4
+ task :build => :compile
5
+
6
+ Rake::ExtensionTask.new("red_bird") do |ext|
7
+ ext.lib_dir = "lib/red_bird"
8
+ end
9
+
10
+ task :default => [:clobber, :compile]
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,15 @@
1
+ // SPDX-License-Identifier: MIT
2
+ #include "bird.h"
3
+
4
+ /*
5
+ Document-module: RedBird
6
+
7
+ This module exist to prevent name clashes.
8
+
9
+ @author Frederico Linhares
10
+ */
11
+ void
12
+ Init_red_bird_module(void)
13
+ {
14
+ bird_m = rb_define_module("RedBird");
15
+ }
@@ -0,0 +1,10 @@
1
+ // SPDX-License-Identifier: MIT
2
+ #ifndef RED_BIRD_BIRD_H
3
+ #define RED_BIRD_BIRD_H 1
4
+
5
+ #include "main.h"
6
+
7
+ void
8
+ Init_red_bird_module(void);
9
+
10
+ #endif /* RED_BIRD_MAIN_H */
@@ -0,0 +1,95 @@
1
+ // SPDX-License-Identifier: MIT
2
+ #include "color.h"
3
+
4
+ /*
5
+ Document-class: RedBird::Color
6
+ A color represented by red, green, blue, and alpha (transparency) values.
7
+ */
8
+ VALUE bird_cColor;
9
+
10
+ /*
11
+ Basic functions all Ruby classes need.
12
+ */
13
+
14
+ void
15
+ bird_free_color(void* obj)
16
+ {
17
+ struct bird_color_data *ptr = obj;
18
+
19
+ free(ptr);
20
+ }
21
+
22
+ size_t
23
+ bird_memsize_color(const void* obj)
24
+ {
25
+ // TODO
26
+ return 0;
27
+ }
28
+
29
+ static const rb_data_type_t
30
+ bird_color_type = {
31
+ "red_bird_color",
32
+ {0, bird_free_color, bird_memsize_color,},
33
+ 0, 0,
34
+ RUBY_TYPED_FREE_IMMEDIATELY,
35
+ };
36
+
37
+ VALUE
38
+ bird_alloc_color(VALUE klass)
39
+ {
40
+ VALUE obj;
41
+ struct bird_color_data *ptr;
42
+
43
+ obj = TypedData_Make_Struct(klass, struct bird_color_data, &bird_color_type,
44
+ ptr);
45
+
46
+ return obj;
47
+ }
48
+
49
+ /*
50
+ Create a new color based in the RGBA color model.
51
+
52
+ @param red [Integer] the amount of red (between 0 and 255).
53
+ @param green [Integer] the amount of green (between 0 and 255).
54
+ @param blue [Integer] the amount of blue (between 0 and 255).
55
+ @param alpha [Integer] the amount of transparency (between 0 and 255). 0 is
56
+ transparent, 255 is opaque.
57
+ */
58
+ VALUE
59
+ bird_cColor_initialize(VALUE self, VALUE red, VALUE green, VALUE blue,
60
+ VALUE alpha)
61
+ {
62
+ struct bird_color_data *ptr;
63
+
64
+ RB_INTEGER_TYPE_P(red);
65
+ RB_INTEGER_TYPE_P(green);
66
+ RB_INTEGER_TYPE_P(blue);
67
+ RB_INTEGER_TYPE_P(alpha);
68
+
69
+ TypedData_Get_Struct(self, struct bird_color_data, &bird_color_type, ptr);
70
+
71
+ ptr->data.r = NUM2UINT(red);
72
+ ptr->data.g = NUM2UINT(green);
73
+ ptr->data.b = NUM2UINT(blue);
74
+ ptr->data.a = NUM2UINT(alpha);
75
+
76
+ return self;
77
+ }
78
+
79
+ struct bird_color_data*
80
+ bird_cColor_get_data(VALUE self)
81
+ {
82
+ struct bird_color_data *ptr;
83
+
84
+ TypedData_Get_Struct(self, struct bird_color_data, &bird_color_type, ptr);
85
+
86
+ return ptr;
87
+ }
88
+
89
+ void
90
+ Init_red_bird_color(void)
91
+ {
92
+ bird_cColor = rb_define_class_under(bird_m, "Color", rb_cData);
93
+ rb_define_alloc_func(bird_cColor, bird_alloc_color);
94
+ rb_define_method(bird_cColor, "initialize", bird_cColor_initialize, 4);
95
+ }
@@ -0,0 +1,27 @@
1
+ // SPDX-License-Identifier: MIT
2
+ #ifndef RED_BIRD_COLOR_H
3
+ #define RED_BIRD_COLOR_H 1
4
+
5
+ #include "main.h"
6
+
7
+ extern VALUE bird_cColor;
8
+
9
+ struct bird_color_data
10
+ {
11
+ SDL_Color data;
12
+ };
13
+
14
+ VALUE
15
+ bird_alloc_color(VALUE klass);
16
+
17
+ VALUE
18
+ bird_cColor_initialize(VALUE self, VALUE red, VALUE green, VALUE blue,
19
+ VALUE aplha);
20
+
21
+ struct bird_color_data*
22
+ bird_cColor_get_data(VALUE self);
23
+
24
+ void
25
+ Init_red_bird_color(void);
26
+
27
+ #endif /* RED_BIRD_COLOR_H */
@@ -0,0 +1,163 @@
1
+ // SPDX-License-Identifier: MIT
2
+ #include "dynamic_sprite.h"
3
+
4
+ #include "engine.h"
5
+ #include "texture.h"
6
+
7
+ VALUE bird_cDynamicSprite;
8
+
9
+ static ID id_at_texture;
10
+ static VALUE id_flip;
11
+ static VALUE id_vertical;
12
+ static VALUE id_horizontal;
13
+ static VALUE id_both;
14
+
15
+ // TODO: make this class inherit from RedBird::Sprite.
16
+
17
+ /*
18
+ Basic functions that all Ruby classes need.
19
+ */
20
+
21
+ void
22
+ bird_free_dynamic_sprite(void* obj)
23
+ {
24
+ struct bird_dynamic_sprite_data *ptr = obj;
25
+
26
+ free(ptr);
27
+ }
28
+
29
+ size_t
30
+ bird_memsize_dynamic_sprite(const void* obj)
31
+ {
32
+ // TODO
33
+ return 0;
34
+ }
35
+
36
+ static const rb_data_type_t
37
+ bird_dynamic_sprite_type = {
38
+ "red_bird_dynamic_sprite",
39
+ {0, bird_free_dynamic_sprite, bird_memsize_dynamic_sprite,},
40
+ 0, 0,
41
+ RUBY_TYPED_FREE_IMMEDIATELY,
42
+ };
43
+
44
+ VALUE
45
+ bird_alloc_dynamic_sprite(VALUE klass)
46
+ {
47
+ VALUE obj;
48
+ struct bird_dynamic_sprite_data *ptr;
49
+
50
+ obj = TypedData_Make_Struct(klass, struct bird_dynamic_sprite_data,
51
+ &bird_dynamic_sprite_type, ptr);
52
+
53
+ return obj;
54
+ }
55
+
56
+ /*
57
+ @param texture [RedBird::Texture]
58
+ @param x [Integer]
59
+ @param y [Integer]
60
+ @param width [Integer]
61
+ @param height [Integer]
62
+ @param mods [Hash]
63
+ */
64
+ VALUE
65
+ bird_cDynamicSprite_initialize(VALUE self, VALUE texture, VALUE x, VALUE y,
66
+ VALUE width, VALUE height, VALUE mods)
67
+ {
68
+ struct bird_dynamic_sprite_data *ptr;
69
+
70
+ VALUE hash_val;
71
+
72
+ if(!rb_obj_is_kind_of(texture, bird_cTexture))
73
+ rb_raise(rb_eTypeError, "%s",
74
+ "texture must be an instance of RedBird::Texture");
75
+ RB_INTEGER_TYPE_P(x);
76
+ RB_INTEGER_TYPE_P(y);
77
+ RB_INTEGER_TYPE_P(width);
78
+ RB_INTEGER_TYPE_P(height);
79
+
80
+ TypedData_Get_Struct(self, struct bird_dynamic_sprite_data,
81
+ &bird_dynamic_sprite_type, ptr);
82
+
83
+ rb_ivar_set(self, id_at_texture, texture);
84
+ ptr->rect.x = NUM2INT(x);
85
+ ptr->rect.y = NUM2INT(y);
86
+ ptr->rect.w = NUM2INT(width);
87
+ ptr->rect.h = NUM2INT(height);
88
+
89
+ ptr->angle = 0;
90
+ ptr->center.x = 0;
91
+ ptr->center.y = 0;
92
+
93
+ // Get 'flip'.
94
+ ptr->flip = SDL_FLIP_NONE; // By default do not flip.
95
+ hash_val = rb_hash_aref(mods, id_flip);
96
+ if(SYMBOL_P(hash_val))
97
+ {
98
+ if(hash_val == id_vertical)
99
+ ptr->flip = SDL_FLIP_VERTICAL;
100
+ else if(hash_val == id_horizontal)
101
+ ptr->flip = SDL_FLIP_HORIZONTAL;
102
+ else if(hash_val == id_both)
103
+ ptr->flip = SDL_FLIP_VERTICAL | SDL_FLIP_HORIZONTAL;
104
+ }
105
+
106
+ return self;
107
+ }
108
+
109
+ /*
110
+ Render itself directly to the screen.
111
+
112
+ @param x [Integer] x coordinate of the screen.
113
+ @param y [Integer] y coordinate of the screen.
114
+ @return [RedBird::DynamicSprite] self
115
+ @author Frederico Linhares
116
+ */
117
+ VALUE
118
+ bird_cDynamicSprite_render_to_screen(VALUE self, VALUE x, VALUE y)
119
+ {
120
+ SDL_Rect dst_rect;
121
+
122
+ struct bird_dynamic_sprite_data *ptr;
123
+ struct bird_texture_data *texture_ptr;
124
+
125
+ VALUE texture;
126
+
127
+ RB_INTEGER_TYPE_P(x);
128
+ RB_INTEGER_TYPE_P(y);
129
+
130
+ texture = rb_ivar_get(self, id_at_texture);
131
+
132
+ TypedData_Get_Struct(self, struct bird_dynamic_sprite_data,
133
+ &bird_dynamic_sprite_type, ptr);
134
+ texture_ptr = bird_cTexture_get_data(texture);
135
+
136
+ dst_rect.x = NUM2INT(x);
137
+ dst_rect.y = NUM2INT(y);
138
+ dst_rect.w = ptr->rect.w;
139
+ dst_rect.h = ptr->rect.h;
140
+
141
+ SDL_RenderCopyEx(bird_core.renderer, texture_ptr->data, &ptr->rect,
142
+ &dst_rect, ptr->angle, &ptr->center, ptr->flip);
143
+
144
+ return self;
145
+ }
146
+
147
+ void
148
+ Init_red_bird_dynamic_sprite(void)
149
+ {
150
+ id_at_texture = rb_intern("@texture");
151
+ id_flip = ID2SYM(rb_intern("flip"));
152
+ id_vertical = ID2SYM(rb_intern("vertical"));
153
+ id_horizontal = ID2SYM(rb_intern("horizontal"));
154
+ id_both = ID2SYM(rb_intern("both"));
155
+
156
+ bird_cDynamicSprite = rb_define_class_under(bird_m, "DynamicSprite",
157
+ rb_cData);
158
+ rb_define_alloc_func(bird_cDynamicSprite, bird_alloc_dynamic_sprite);
159
+ rb_define_method(bird_cDynamicSprite, "initialize",
160
+ bird_cDynamicSprite_initialize, 6);
161
+ rb_define_method(bird_cDynamicSprite, "render_to_screen",
162
+ bird_cDynamicSprite_render_to_screen, 2);
163
+ }