44 Commits

Author SHA1 Message Date
0d7adcb5fd Merge pull request #27 from BlackMATov/dev
Dev
2025-10-20 16:16:39 +07:00
BlackMATov
f48f1bb290 v1.4.0 2025-10-20 16:11:03 +07:00
BlackMATov
6f1a85165f more tests 2025-10-16 06:22:30 +07:00
BlackMATov
bd87e593e9 root directory cleanup 2025-10-14 17:50:51 +07:00
BlackMATov
0eac310fd5 style fixes 2025-10-12 23:35:28 +07:00
BlackMATov
22cedd26bb remove some of the specialized defer functions in favor of the universal defer_call_hook 2025-10-12 07:04:44 +07:00
BlackMATov
d298be4188 ON_REMOVE hooks are now invoked before the fragment is actually removed from the entity
issue: https://github.com/BlackMATov/evolved.lua/issues/26
2025-10-12 06:46:43 +07:00
BlackMATov
24933e6a04 little internal hooks refactoring 2025-10-08 16:18:49 +07:00
BlackMATov
6841bb42fe style fixes 2025-10-07 22:56:29 +07:00
2903b077fe Merge pull request #24 from BlackMATov/dev
Dev
2025-09-26 17:30:35 +07:00
7b6ac89c8a Merge pull request #21 from BlackMATov/dev
Dev
2025-09-12 05:30:07 +07:00
6bf13890ef Merge pull request #14 from BlackMATov/dev
Dev
2025-06-06 21:28:17 +07:00
db191b805f Merge pull request #13 from BlackMATov/dev
Dev
2025-05-23 20:07:43 +07:00
5ab963022c Merge pull request #12 from BlackMATov/dev
Dev
2025-05-21 20:48:59 +07:00
7de95207d6 Merge pull request #11 from BlackMATov/dev
Dev
2025-05-21 17:34:13 +07:00
4d3b909efb Merge pull request #10 from BlackMATov/dev
Dev
2025-05-21 06:20:38 +07:00
52b3cbeb20 Merge pull request #9 from BlackMATov/dev
Dev
2025-05-21 03:38:16 +07:00
fec193f4f0 Merge pull request #8 from BlackMATov/dev
Dev
2025-05-21 02:11:39 +07:00
e672b0291a Merge pull request #7 from BlackMATov/dev
Dev
2025-05-02 07:28:38 +07:00
4624f2e603 Merge pull request #6 from BlackMATov/dev
Dev
2025-04-30 23:47:13 +07:00
c25769f64f Merge pull request #5 from BlackMATov/dev
Dev
2025-04-19 18:40:25 +07:00
d7274765cb Merge pull request #4 from BlackMATov/dev
Dev
2025-04-09 03:04:19 +07:00
ef033e7a0c Merge pull request #3 from BlackMATov/dev
Dev
2025-04-09 00:58:14 +07:00
3638dedca5 Merge pull request #2 from BlackMATov/dev
Dev
2025-04-06 21:27:33 +07:00
d025ea039b Merge pull request #1 from BlackMATov/dev
Dev
2025-04-05 02:12:18 +07:00
BlackMATov
6c0df71f17 Merge branch 'dev' 2025-03-27 15:36:58 +07:00
BlackMATov
730bffc3ad Merge branch 'dev' 2025-03-19 06:52:10 +07:00
BlackMATov
4bbd7ee60a Merge branch 'dev' 2025-03-18 07:08:27 +07:00
BlackMATov
79aecc8db3 Merge branch 'dev' 2025-03-17 00:23:36 +07:00
BlackMATov
b803faea63 Merge branch 'dev' 2025-03-16 07:46:26 +07:00
BlackMATov
722eda0b9b Merge branch 'dev' 2025-03-16 02:06:17 +07:00
BlackMATov
c6def51830 Merge branch 'dev' 2025-03-10 08:14:38 +07:00
BlackMATov
65312f79dd Merge branch 'dev' 2025-03-08 06:07:06 +07:00
BlackMATov
9877e41705 Merge branch 'dev' 2025-03-02 12:09:33 +07:00
BlackMATov
3b8367d5c4 Merge branch 'dev' 2025-02-24 06:06:26 +07:00
BlackMATov
419a6b6c45 Merge branch 'dev' 2025-02-23 03:54:56 +07:00
BlackMATov
368b50770c Merge branch 'dev' 2025-02-22 00:31:27 +07:00
BlackMATov
0d49802235 Merge branch 'dev' 2025-02-08 04:52:56 +07:00
BlackMATov
f096d747f3 Merge branch 'dev' 2025-01-31 22:14:13 +07:00
BlackMATov
4d88063c10 Merge branch 'dev' 2025-01-31 12:51:30 +07:00
BlackMATov
bf135534c0 Merge branch 'dev' 2025-01-25 08:37:55 +07:00
BlackMATov
177ea7f180 Merge branch 'dev' 2025-01-21 10:52:19 +07:00
BlackMATov
b98b5f9c42 Merge branch 'dev' 2025-01-18 01:39:27 +07:00
BlackMATov
c7120e8608 opt: get chunk by fragments without sorting 2025-01-16 06:42:03 +07:00
7 changed files with 289 additions and 656 deletions

View File

@@ -59,7 +59,7 @@
- [Chunk](#chunk) - [Chunk](#chunk)
- [Builder](#builder) - [Builder](#builder)
- [Changelog](#changelog) - [Changelog](#changelog)
- [vX.X.X](#vxxx) - [v1.4.0](#v140)
- [v1.3.0](#v130) - [v1.3.0](#v130)
- [v1.2.0](#v120) - [v1.2.0](#v120)
- [v1.1.0](#v110) - [v1.1.0](#v110)
@@ -154,11 +154,11 @@ function evolved.alive_any(...) end
Sometimes (for debugging purposes, for example), it is necessary to extract the index and version from an identifier or to pack them back into an identifier. The [`evolved.pack`](#evolvedpack) and [`evolved.unpack`](#evolvedunpack) functions can be used for this purpose. Sometimes (for debugging purposes, for example), it is necessary to extract the index and version from an identifier or to pack them back into an identifier. The [`evolved.pack`](#evolvedpack) and [`evolved.unpack`](#evolvedunpack) functions can be used for this purpose.
```lua ```lua
---@param index integer ---@param primary integer
---@param version integer ---@param secondary integer
---@return evolved.id id ---@return evolved.id id
---@nodiscard ---@nodiscard
function evolved.pack(index, version) end function evolved.pack(primary, secondary) end
---@param id evolved.id ---@param id evolved.id
---@return integer primary ---@return integer primary
@@ -1300,10 +1300,11 @@ builder_mt:destruction_policy :: id -> builder
## Changelog ## Changelog
### vX.X.X ### v1.4.0
- Improved query execution performance by caching some internal calculations - Improved query execution performance by caching some internal calculations
- Added the universal [`builder.build`](#evolvedbuilder_mtbuild) and [`builder.multi_build`](#evolvedbuilder_mtmulti_build) methods that can be used to spawn or clone entities depending on the method arguments - Added the universal [`builder.build`](#evolvedbuilder_mtbuild) and [`builder.multi_build`](#evolvedbuilder_mtmulti_build) methods that can be used to spawn or clone entities depending on the method arguments
- [`evolved.ON_REMOVE`](#evolvedon_remove) hooks are now invoked before the fragment is actually removed from the entity
### v1.3.0 ### v1.3.0
@@ -1409,11 +1410,11 @@ function evolved.name(...) end
### `evolved.pack` ### `evolved.pack`
```lua ```lua
---@param index integer ---@param primary integer
---@param version integer ---@param secondary integer
---@return evolved.id id ---@return evolved.id id
---@nodiscard ---@nodiscard
function evolved.pack(index, version) end function evolved.pack(primary, secondary) end
``` ```
### `evolved.unpack` ### `evolved.unpack`

View File

@@ -10,7 +10,9 @@
## Thoughts ## Thoughts
- We can return deferred status from modifying operations and spawn/clone methods. - We can return deferred status from modifying operations and spawn/clone methods.
- We should have a way to not copy components on deferred spawn/clone.
## Known Issues ## Known Issues
- Required fragments are slower than they should be - Required fragments are slower than they should be
- Errors in hooks are cannot be handled properly right now

View File

@@ -3,6 +3,7 @@ require 'develop.samples.systems'
require 'develop.testing.build_tests' require 'develop.testing.build_tests'
require 'develop.testing.cancel_tests' require 'develop.testing.cancel_tests'
require 'develop.testing.locate_tests' require 'develop.testing.locate_tests'
require 'develop.testing.main_tests'
require 'develop.testing.multi_spawn_tests' require 'develop.testing.multi_spawn_tests'
require 'develop.testing.name_tests' require 'develop.testing.name_tests'
require 'develop.testing.requires_fragment_tests' require 'develop.testing.requires_fragment_tests'
@@ -15,8 +16,6 @@ require 'develop.benchmarks.process_bmarks'
require 'develop.benchmarks.spawn_bmarks' require 'develop.benchmarks.spawn_bmarks'
require 'develop.benchmarks.table_bmarks' require 'develop.benchmarks.table_bmarks'
require 'develop.untests'
local basics = require 'develop.basics' local basics = require 'develop.basics'
print '----------------------------------------' print '----------------------------------------'

View File

@@ -2530,7 +2530,7 @@ do
end) end)
:on_remove(function(e, f, c) :on_remove(function(e, f, c)
f2_remove_count = f2_remove_count + 1 f2_remove_count = f2_remove_count + 1
assert(evo.get(e, f) == nil) assert(evo.get(e, f) == c)
assert(evo.alive(f)) assert(evo.alive(f))
assert(c == 82) assert(c == 82)
end) end)
@@ -3321,7 +3321,7 @@ do
remove_count = remove_count + 1 remove_count = remove_count + 1
assert(f == f1) assert(f == f1)
assert(c == 51) assert(c == 51)
assert(evo.get(e, f1) == nil) assert(evo.get(e, f1) == c)
do do
evo.remove(e, f2) evo.remove(e, f2)
@@ -3348,7 +3348,7 @@ do
remove_count = remove_count + 1 remove_count = remove_count + 1
assert(f == f2) assert(f == f2)
assert(c == 51) assert(c == 51)
assert(evo.get(e, f2) == nil) assert(evo.get(e, f2) == c)
end) end)
end end
@@ -3518,8 +3518,7 @@ do
assert(e == e1 or e == e2) assert(e == e1 or e == e2)
assert(f == f1) assert(f == f1)
assert(c == 51) assert(c == 51)
assert(evo.get(e1, f1) == nil) assert(evo.get(e, f) == c)
assert(evo.get(e2, f1) == nil)
end) end)
do do
@@ -7006,3 +7005,93 @@ do
end end
end end
end end
do
local s1, s2 = evo.id(2)
local process_order = ''
evo.set(s1, evo.PROLOGUE, function()
process_order = process_order .. '1'
end)
evo.set(s2, evo.PROLOGUE, function()
process_order = process_order .. '2'
end)
do
process_order = ''
evo.set(s2, evo.GROUP, s1)
evo.process(s1)
assert(process_order == '12')
end
do
process_order = ''
evo.remove(s2, evo.GROUP)
evo.process(s1)
assert(process_order == '1')
end
end
do
local s1, s2, s3 = evo.id(3)
local process_order = ''
evo.set(s1, evo.PROLOGUE, function()
process_order = process_order .. '1'
end)
evo.set(s2, evo.PROLOGUE, function()
process_order = process_order .. '2'
end)
evo.set(s3, evo.PROLOGUE, function()
process_order = process_order .. '3'
end)
do
process_order = ''
evo.set(s2, evo.GROUP, s1)
evo.process(s1)
assert(process_order == '12')
end
do
process_order = ''
evo.set(s2, evo.GROUP, s3)
evo.process(s1)
assert(process_order == '1')
evo.process(s3)
assert(process_order == '132')
end
end
do
local f1, f2 = evo.id(2)
evo.set(f1, evo.NAME, 'f1')
evo.set(f2, evo.NAME, 'f2')
do
local c1 = evo.chunk(f1)
assert(tostring(c1) == '<f1>')
local c2 = evo.chunk(f2)
assert(tostring(c2) == '<f2>')
local c12 = evo.chunk(f1, f2)
assert(tostring(c12) == '<f1, f2>')
local c21 = evo.chunk(f2, f1)
assert(tostring(c21) == '<f1, f2>')
end
do
local b = evo.builder():set(f1)
assert(tostring(b) == '<f1>')
b:set(f1, 1):set(f2, 2)
assert(tostring(b) == '<f1, f2>')
end
end

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,34 @@
rockspec_format = "3.0"
package = "evolved.lua"
version = "1.4.0-0"
source = {
url = "git://github.com/BlackMATov/evolved.lua",
tag = "v1.4.0",
}
description = {
homepage = "https://github.com/BlackMATov/evolved.lua",
summary = "Evolved ECS (Entity-Component-System) for Lua",
detailed = [[
`evolved.lua` is a fast and flexible ECS (Entity-Component-System) library for Lua.
It is designed to be simple and easy to use, while providing all the features needed to create complex systems with blazing performance.
]],
license = "MIT",
labels = {
"ecs",
"entity",
"entities",
"component",
"components",
"entity-component",
"entity-component-system",
},
}
dependencies = {
"lua >= 5.1",
}
build = {
type = "builtin",
modules = {
evolved = "evolved.lua",
}
}