red_bird 0.1.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 (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
+ }