baku 0.2.4 → 0.2.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +3 -77
- data/lib/baku/entity.rb +4 -0
- data/lib/baku/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4635f01f25cbff83a5aa0938436ed437a367c91f
|
4
|
+
data.tar.gz: 98cbe6bac2f0ff44d30379d31835e9aa1b5517e1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d44df506415840612bd94bbe97a97b97578f675f07140148cb23bf10843d99cb2d26272865b2ec457de12790c98936daae4482f6496a117e4de876719bf4ec9
|
7
|
+
data.tar.gz: 71e863d553c62ea6685cbb7f66e4e1a96bd7084568cd6d422c623165ff81ea63a68d07492fa66b49afd4e80578bf957b2834ee81e7c7c449e8cbf39a9c716634
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -1,16 +1,10 @@
|
|
1
1
|
# Baku
|
2
2
|
|
3
|
-
Baku provides a simple Entity Component System framework for use with Ruby game
|
4
|
-
engines. It has been tested with [Gosu](https://www.libgosu.org/ruby.html), but
|
5
|
-
should be flexible enough to work with any Ruby project that has a game loop.
|
3
|
+
Baku provides a simple Entity Component System framework for use with Ruby game engines. It has been tested with [Gosu](https://www.libgosu.org/ruby.html), but should be flexible enough to work with any Ruby project that has a game loop.
|
6
4
|
|
7
|
-
Baku is still very much a work in progress. There are undoubtedly bugs. I will
|
8
|
-
be continually iterating and improving on it as I use it for my personal game
|
9
|
-
development projects. Enjoy!
|
5
|
+
Baku is still very much a work in progress. There are undoubtedly bugs. I will be continually iterating and improving on it as I use it for my personal game development projects. Enjoy!
|
10
6
|
|
11
|
-
|
12
|
-
|
13
|
-
The [Quick Start Guide](https://github.com/jtuttle/baku/wiki/Quick-Start-Guide) will walk you through setting up a basic project with Gosu and Baku.
|
7
|
+
The [Baku wiki](https://github.com/jtuttle/baku/wiki) includes a [quick start guide](https://github.com/jtuttle/baku/wiki/quick-start-guide) if you're already familiar with the ECS approach. If not, there is also a descriptive [tutorial](https://github.com/jtuttle/baku/wiki/tutorial) that will cover ECS concepts while walking you through setting up Gosu with Baku.
|
14
8
|
|
15
9
|
## Installation
|
16
10
|
|
@@ -28,74 +22,6 @@ Or install it yourself as:
|
|
28
22
|
|
29
23
|
$ gem install baku
|
30
24
|
|
31
|
-
## Usage
|
32
|
-
|
33
|
-
Create components by overriding `Baku::Component` and calling `super()`. The
|
34
|
-
example component below simple stores the x and y coordinates of an entity in
|
35
|
-
a 2D space.
|
36
|
-
|
37
|
-
```
|
38
|
-
class TransformComponent < Baku::Component
|
39
|
-
attr_accessor :x, :y
|
40
|
-
|
41
|
-
def initialize(x, y)
|
42
|
-
super()
|
43
|
-
|
44
|
-
@x = x
|
45
|
-
@y = y
|
46
|
-
end
|
47
|
-
end
|
48
|
-
```
|
49
|
-
|
50
|
-
Create systems by overriding `Baku::System` and calling `super()` to specify the
|
51
|
-
components that an entity must possess in order for it to be processed by the
|
52
|
-
system. The example system below will only operate on entities that possess both
|
53
|
-
a `TransformComponent` and a `VelocityComponent`. You will also need to specify
|
54
|
-
whether the system will be run during the `:update` or `:draw` loop.
|
55
|
-
|
56
|
-
```
|
57
|
-
class MovementSystem < Baku::System
|
58
|
-
def initialize
|
59
|
-
super([TransformComponent, VelocityComponent], :update)
|
60
|
-
end
|
61
|
-
|
62
|
-
def process_entity(entity, transform, velocity)
|
63
|
-
transform.x += velocity.x
|
64
|
-
transform.y += velocity.y
|
65
|
-
end
|
66
|
-
end
|
67
|
-
```
|
68
|
-
|
69
|
-
In your game initialization logic, create a `Baku::World` instance and register
|
70
|
-
any systems you want to use. In the below example, we register our example
|
71
|
-
system from above and create an entity that will be processed by the system:
|
72
|
-
|
73
|
-
```
|
74
|
-
def game_initialization
|
75
|
-
@world = Baku::World.new
|
76
|
-
@world.add_system(MovementSystem.new)
|
77
|
-
|
78
|
-
entity = @world.create_entity
|
79
|
-
entity.add_component(TransformComponent)
|
80
|
-
entity.add_component(VelocityComponent)
|
81
|
-
end
|
82
|
-
```
|
83
|
-
|
84
|
-
In your game `update` and `draw` loops, call the `Baku::World` instance's
|
85
|
-
`update` and `draw` methods. You'll want to keep track of the millseconds
|
86
|
-
between frames and pass that to the `update` method if you're planning to
|
87
|
-
use the entity component system for anything that needs it.
|
88
|
-
|
89
|
-
```
|
90
|
-
def game_update_loop
|
91
|
-
@world.update(delta_ms)
|
92
|
-
end
|
93
|
-
|
94
|
-
def game_draw_loop
|
95
|
-
@world.draw
|
96
|
-
end
|
97
|
-
```
|
98
|
-
|
99
25
|
## Development
|
100
26
|
|
101
27
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run
|
data/lib/baku/entity.rb
CHANGED
@@ -34,6 +34,10 @@ module Baku
|
|
34
34
|
|
35
35
|
dispatch_event(:component_removed, self, @components[component_class])
|
36
36
|
end
|
37
|
+
|
38
|
+
def has_component?(component_class)
|
39
|
+
@components.has_key?(component_class)
|
40
|
+
end
|
37
41
|
|
38
42
|
def get_component(component_class)
|
39
43
|
@components[component_class]
|
data/lib/baku/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: baku
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Tuttle
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-11-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|