kiwi-ecs 0.0.3 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2ecb91b181779636d95d7c72fb3e8bcb6713498253b03ea8dc033a9e99027f59
4
- data.tar.gz: 1e06daecfa95b5ecd6f3a6faca0a3b4385dd501ceed81ab9b6816ba62cc327df
3
+ metadata.gz: 3c28c74f941f35abc3fe5ae1d565f8942f7676b01341e4c3efeef7969dcb1512
4
+ data.tar.gz: 6ac603e29b87be9c27da787dc330291f8c6bc8ce28e8807e4b8d36294609638e
5
5
  SHA512:
6
- metadata.gz: 05a2f1676d8883b1e0bdbecd4138e5c424482bedd23a945a815444c86eae88c692b769ebe8cbbfc00910b47ba4219bed79bce5e6c4f678c71de784a5e4078869
7
- data.tar.gz: '08a375f932ad364d8194bd97cfd71578eaad9631e8e989c76bfb9dbd33cdacc83c93ba6afd740ee2dc3c80e79fb7576c2c213d912fffee0285ddf155fa85c54f'
6
+ metadata.gz: db0833836918141ec6f231b943c9c2fb6455e232c6d451cb46b80ff949eb245a164d037dfd984054af69019bf717ebe380734c6a74a1493db429623ed22825d1
7
+ data.tar.gz: a1d9e6d195d65505ea25f21f5cc98224c4bf4729adaca7fb4a0fa9725a74e3748956853d7fda3e22d6108eab4d98651a612a10b847784f8bee3c99f47f3bd7b3
data/README.md CHANGED
@@ -27,7 +27,7 @@ require 'kiwi-ecs'
27
27
  The world is the main object that controls the ecs.
28
28
 
29
29
  ```ruby
30
- world = World.new
30
+ world = Kiwi::World.new
31
31
  ```
32
32
 
33
33
  ### Components
data/lib/arch_store.rb CHANGED
@@ -1,5 +1,9 @@
1
1
  require_relative 'archetype'
2
2
 
3
+ module Kiwi
4
+ # Internal methods not meant for outside use
5
+ module Internal
6
+
3
7
  class ArchStore
4
8
  # [[Integer]:Integer]
5
9
  attr_accessor :compMap
@@ -28,3 +32,6 @@ class ArchStore
28
32
  end
29
33
  end
30
34
  end
35
+
36
+ end
37
+ end
data/lib/archetype.rb CHANGED
@@ -1,93 +1,97 @@
1
1
  ComponentColumn = Struct.new(:components)
2
2
 
3
- class Archetype
4
- # @params [Array<Integer>] componentIds
5
- def initialize(componentIds)
6
- # [Integer(componentId): ComponentColumn]
7
- @components = componentIds.map do |compId|
8
- [compId, ComponentColumn.new([])]
9
- end.to_h
10
- @availableEntityRows = []
11
- @entities = []
12
- end
13
-
14
- # @return [int]
15
- def new_arch_row_id(entityId)
16
- id = @availableEntityRows.pop
17
- if id != nil
18
- @entities[id] = entityId
19
- return id
20
- else
21
- id = @entities.size
22
- @entities.push entityId
23
- return id
24
- end
25
- end
26
-
27
- def set_component(archRowId, component)
28
- compCol = @components[component.class.object_id]
29
- if compCol.components.size <= archRowId
30
- compCol.components.push component
31
- else
32
- compCol.components[archRowId] = component
33
- end
34
- end
35
-
36
- def get_component(archRowId, componentId)
37
- return @components[componentId].components[archRowId]
38
- end
39
-
40
- def has_component(componentId)
41
- return @components[componentId] != nil
42
- end
3
+ module Kiwi
4
+ module Internal
5
+ class Archetype
6
+ # @params [Array<Integer>] componentIds
7
+ def initialize(componentIds)
8
+ # [Integer(componentId): ComponentColumn]
9
+ @components = componentIds.map do |compId|
10
+ [compId, ComponentColumn.new([])]
11
+ end.to_h
12
+ @availableEntityRows = []
13
+ @entities = []
14
+ end
43
15
 
44
- def remove_entity(archRowId)
45
- @availableEntityRows.push(archRowId)
46
- @entities[archRowId] = nil
47
- end
16
+ # @return [int]
17
+ def new_arch_row_id(entityId)
18
+ id = @availableEntityRows.pop
19
+ if id != nil
20
+ @entities[id] = entityId
21
+ return id
22
+ else
23
+ id = @entities.size
24
+ @entities.push entityId
25
+ return id
26
+ end
27
+ end
48
28
 
49
- # @return [[Component, EntityId]]
50
- def active_components(componentIds)
51
- # [comp1a, comp1b]
52
- # [comp2a, comp2b]
53
- # ...
54
- components = componentIds
55
- .map do |compId|
56
- @components[compId].components
29
+ def set_component(archRowId, component)
30
+ compCol = @components[component.class.object_id]
31
+ if compCol.components.size <= archRowId
32
+ compCol.components.push component
33
+ else
34
+ compCol.components[archRowId] = component
35
+ end
57
36
  end
58
- compCount = componentIds.size
59
37
 
60
- @entities
61
- .each_with_index
62
- .filter do |entId, _|
63
- entId != nil
38
+ def get_component(archRowId, componentId)
39
+ return @components[componentId].components[archRowId]
64
40
  end
65
- .map do |_, rowIdx|
66
- (0...compCount).map do |compRowId|
67
- components[compRowId][rowIdx]
68
- end
41
+
42
+ def has_component(componentId)
43
+ return @components[componentId] != nil
69
44
  end
70
- end
71
45
 
72
- def components_and_ids(componentIds)
73
- # [comp1a, comp1b]
74
- # [comp2a, comp2b]
75
- # ...
76
- components = componentIds
77
- .map do |compId|
78
- @components[compId].components
46
+ def remove_entity(archRowId)
47
+ @availableEntityRows.push(archRowId)
48
+ @entities[archRowId] = nil
79
49
  end
80
- compCount = componentIds.size
81
50
 
82
- @entities
83
- .each_with_index
84
- .filter do |entId, _|
85
- entId != nil
51
+ # @return [[Component, EntityId]]
52
+ def active_components(componentIds)
53
+ # [comp1a, comp1b]
54
+ # [comp2a, comp2b]
55
+ # ...
56
+ components = componentIds
57
+ .map do |compId|
58
+ @components[compId].components
59
+ end
60
+ compCount = componentIds.size
61
+
62
+ @entities
63
+ .each_with_index
64
+ .filter do |entId, _|
65
+ entId != nil
66
+ end
67
+ .map do |_, rowIdx|
68
+ (0...compCount).map do |compRowId|
69
+ components[compRowId][rowIdx]
70
+ end
71
+ end
86
72
  end
87
- .map do |entId, rowIdx|
88
- [entId, *(0...compCount).map do |compRowId|
89
- components[compRowId][rowIdx]
90
- end]
73
+
74
+ def components_and_ids(componentIds)
75
+ # [comp1a, comp1b]
76
+ # [comp2a, comp2b]
77
+ # ...
78
+ components = componentIds
79
+ .map do |compId|
80
+ @components[compId].components
81
+ end
82
+ compCount = componentIds.size
83
+
84
+ @entities
85
+ .each_with_index
86
+ .filter do |entId, _|
87
+ entId != nil
88
+ end
89
+ .map do |entId, rowIdx|
90
+ [entId, *(0...compCount).map do |compRowId|
91
+ components[compRowId][rowIdx]
92
+ end]
93
+ end
91
94
  end
95
+ end
92
96
  end
93
97
  end
data/lib/bitmap.rb CHANGED
@@ -1,3 +1,6 @@
1
+ module Kiwi
2
+ module Internal
3
+
1
4
  # TODO: actual bitmap implementation
2
5
  class Bitmap
3
6
  def initialize
@@ -30,3 +33,6 @@ class Bitmap
30
33
  end
31
34
  end
32
35
  end
36
+
37
+ end
38
+ end
data/lib/entity.rb CHANGED
@@ -1,6 +1,9 @@
1
1
  require 'set'
2
2
  require_relative 'bitmap'
3
3
 
4
+ module Kiwi
5
+ module Internal
6
+
4
7
  Entity = Struct.new(:archId, :archRow)
5
8
 
6
9
  class EntityStore
@@ -100,3 +103,6 @@ class EntityStore
100
103
  end
101
104
  end
102
105
  end
106
+
107
+ end
108
+ end
data/lib/query.rb CHANGED
@@ -1,3 +1,5 @@
1
+ module Kiwi
2
+ module Internal
1
3
  module Query
2
4
  # @return [enumerator<Integer>]
3
5
  def query_ids
@@ -54,3 +56,5 @@ module Query
54
56
  end
55
57
  end
56
58
  end
59
+ end
60
+ end
data/lib/world.rb CHANGED
@@ -2,63 +2,65 @@ require_relative 'entity'
2
2
  require_relative 'arch_store'
3
3
  require_relative 'query'
4
4
 
5
- class World
6
- def initialize
7
- @entityStore = EntityStore.new
8
- @archStore = ArchStore.new
9
- end
5
+ module Kiwi
6
+ class World
7
+ def initialize
8
+ @entityStore = Kiwi::Internal::EntityStore.new
9
+ @archStore = Kiwi::Internal::ArchStore.new
10
+ end
10
11
 
11
- def spawn(*components)
12
- compIds = components.map { |c| c.class.object_id }.sort
13
- archId = @archStore.get_archetype_id(compIds)
14
- entId = @entityStore.new_id
15
- archetype = @archStore.get(archId)
16
- archRowId = archetype.new_arch_row_id(entId)
17
- @entityStore.spawn(entId, archId, archRowId)
18
- for component in components
19
- archetype.set_component(archRowId, component)
12
+ def spawn(*components)
13
+ compIds = components.map { |c| c.class.object_id }.sort
14
+ archId = @archStore.get_archetype_id(compIds)
15
+ entId = @entityStore.new_id
16
+ archetype = @archStore.get(archId)
17
+ archRowId = archetype.new_arch_row_id(entId)
18
+ @entityStore.spawn(entId, archId, archRowId)
19
+ for component in components
20
+ archetype.set_component(archRowId, component)
21
+ end
22
+ return entId
20
23
  end
21
- return entId
22
- end
23
24
 
24
- def get_component(entityId, componentType)
25
- entity = @entityStore.get(entityId)
26
- archetype = @archStore.get(entity.archId)
27
- archetype.get_component(entity.archRow, componentType.object_id)
28
- end
25
+ def get_component(entityId, componentType)
26
+ entity = @entityStore.get(entityId)
27
+ archetype = @archStore.get(entity.archId)
28
+ archetype.get_component(entity.archRow, componentType.object_id)
29
+ end
29
30
 
30
- def kill(entityId)
31
- entity = @entityStore.get entityId
32
- @entityStore.kill(entityId)
33
- archetype = @archStore.get(entity.archId)
34
- archetype.remove_entity(entity.archRow)
35
- end
31
+ def kill(entityId)
32
+ entity = @entityStore.get entityId
33
+ @entityStore.kill(entityId)
34
+ archetype = @archStore.get(entity.archId)
35
+ archetype.remove_entity(entity.archRow)
36
+ end
36
37
 
37
- def entity_count
38
- return @entityStore.entity_count
39
- end
38
+ def entity_count
39
+ return @entityStore.entity_count
40
+ end
40
41
 
41
- def has_component(entityId, componentType)
42
- entity = @entityStore.get(entityId)
43
- archetype = @archStore.get(entity.archId)
44
- return archetype.has_component(componentType.object_id)
45
- end
42
+ def has_component(entityId, componentType)
43
+ entity = @entityStore.get(entityId)
44
+ archetype = @archStore.get(entity.archId)
45
+ return archetype.has_component(componentType.object_id)
46
+ end
46
47
 
47
- def has_flag(entityId, flagId)
48
- return @entityStore.has_flag entityId, flagId
49
- end
48
+ def has_flag(entityId, flagId)
49
+ return @entityStore.has_flag entityId, flagId
50
+ end
50
51
 
51
- def has_flags(entityId, *flagIds)
52
- return flagIds.filter { |flagId| !@entityStore.has_flag entityId, flagId }.count == 0
53
- end
52
+ def has_flags(entityId, *flagIds)
53
+ return flagIds.filter { |flagId| !@entityStore.has_flag entityId, flagId }.count == 0
54
+ end
54
55
 
55
- def set_flag(entityId, flagId)
56
- @entityStore.set_flag(entityId, flagId)
57
- end
56
+ def set_flag(entityId, flagId)
57
+ @entityStore.set_flag(entityId, flagId)
58
+ end
58
59
 
59
- def remove_flag(entityId, flagId)
60
- @entityStore.remove_flag(entityId, flagId)
61
- end
60
+ def remove_flag(entityId, flagId)
61
+ @entityStore.remove_flag(entityId, flagId)
62
+ end
62
63
 
63
- include Query
64
+ include Kiwi::Internal::Query
65
+ end
64
66
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kiwi-ecs
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Everaert
@@ -10,8 +10,9 @@ bindir: bin
10
10
  cert_chain: []
11
11
  date: 2023-08-11 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Kiwi is a versatile entity component system that is focussed on fast
14
- iteration and a nice api
13
+ description: |-
14
+ == Description
15
+ Kiwi is a versatile entity component system that is focussed on fast iteration and a nice api
15
16
  email:
16
17
  executables: []
17
18
  extensions: []