From 1cc813218940b0e4182389912582869f499d86f8 Mon Sep 17 00:00:00 2001 From: Ukendio Date: Sat, 3 Aug 2024 04:51:22 +0200 Subject: [PATCH] rename example folder --- example/.gitignore | 6 - example/README.md | 17 --- example/src/client/init.client.luau | 1 - example/src/server/init.server.luau | 1 - example/src/shared/common.luau | 203 ---------------------------- 5 files changed, 228 deletions(-) delete mode 100644 example/.gitignore delete mode 100644 example/README.md delete mode 100644 example/src/client/init.client.luau delete mode 100644 example/src/server/init.server.luau delete mode 100644 example/src/shared/common.luau diff --git a/example/.gitignore b/example/.gitignore deleted file mode 100644 index cf9d94d..0000000 --- a/example/.gitignore +++ /dev/null @@ -1,6 +0,0 @@ -# Project place file -/example.rbxlx - -# Roblox Studio lock files -/*.rbxlx.lock -/*.rbxl.lock \ No newline at end of file diff --git a/example/README.md b/example/README.md deleted file mode 100644 index 5223a3e..0000000 --- a/example/README.md +++ /dev/null @@ -1,17 +0,0 @@ -# example -Generated by [Rojo](https://github.com/rojo-rbx/rojo) 7.4.1. - -## Getting Started -To build the place from scratch, use: - -```bash -rojo build -o "example.rbxlx" -``` - -Next, open `example.rbxlx` in Roblox Studio and start the Rojo server: - -```bash -rojo serve -``` - -For more help, check out [the Rojo documentation](https://rojo.space/docs). \ No newline at end of file diff --git a/example/src/client/init.client.luau b/example/src/client/init.client.luau deleted file mode 100644 index 505f71c..0000000 --- a/example/src/client/init.client.luau +++ /dev/null @@ -1 +0,0 @@ -print("Hello world, from client!") \ No newline at end of file diff --git a/example/src/server/init.server.luau b/example/src/server/init.server.luau deleted file mode 100644 index feebef1..0000000 --- a/example/src/server/init.server.luau +++ /dev/null @@ -1 +0,0 @@ -print("Hello world, from server!") \ No newline at end of file diff --git a/example/src/shared/common.luau b/example/src/shared/common.luau deleted file mode 100644 index 4860d6b..0000000 --- a/example/src/shared/common.luau +++ /dev/null @@ -1,203 +0,0 @@ ---!optimize 2 ---!native - -local jecs = require(game:GetService("ReplicatedStorage").ecs) - -type World = jecs.WorldShim -type Entity = jecs.Entity - -local function panic(str) - -- We don't want to interrupt the loop when we error - task.spawn(error, str) -end - -local function Scheduler(world, ...) - local systems = { ... } - local systemsNames = {} - local N = #systems - local system - local dt - - for i, module in systems do - local sys = require(module) - systems[i] = sys - local file, line = debug.info(2, "sl") - systemsNames[sys] = `{file}->::{line}::->{debug.info(sys, "n")}` - end - - local function run() - local name = systemsNames[system] - - debug.profilebegin(name) - debug.setmemorycategory(name) - system(world, dt) - debug.profileend() - end - - local function loop(sinceLastFrame) - debug.profilebegin("loop()") - - for i = N, 1, -1 do - system = systems[i] - - dt = sinceLastFrame - - local didNotYield, why = xpcall(function() - for _ in run do end - end, debug.traceback) - - if didNotYield then - continue - end - - if string.find(why, "thread is not yieldable") then - N -= 1 - local name = table.remove(systems, i) - panic("Not allowed to yield in the systems." - .. "\n" - .. `System: {name} has been ejected` - ) - else - panic(why) - end - end - - debug.profileend() - debug.resetmemorycategory() - end - - return loop -end - -type Tracker = { track: (world: World, fn: (changes: { - added: () -> () -> (number, T), - removed: () -> () -> number, - changed: () -> () -> (number, T, T) - }) -> ()) -> () -} - -type Entity = number & { __nominal_type_dont_use: T } - -local function diff(a, b) - local size = 0 - for k, v in a do - if b[k] ~= v then - return true - end - size += 1 - end - for k, v in b do - size -= 1 - end - - if size ~= 0 then - return true - end - - return false -end - -local function ChangeTracker(world, T: Entity): Tracker - local PreviousT = jecs.pair(jecs.Rest, T) - local add = {} - local added - local removed - local is_trivial - - local function changes_added() - added = true - local q = world:query(T):without(PreviousT):drain() - return function() - local id, data = q.next() - if not id then - return nil - end - - is_trivial = typeof(data) ~= "table" - - add[id] = data - - return id, data - end - end - - local function changes_changed() - local q = world:query(T, PreviousT):drain() - - return function() - local id, new, old = q.next() - while true do - if not id then - return nil - end - - if not is_trivial then - if diff(new, old) then - break - end - elseif new ~= old then - break - end - - id, new, old = q.next() - end - - local record = world.entityIndex.sparse[id] - local archetype = record.archetype - local column = archetype.records[PreviousT].column - local data = if is_trivial then new else table.clone(new) - archetype.columns[column][record.row] = data - - return id, old, new - end - end - - local function changes_removed() - removed = true - - local q = world:query(PreviousT):without(T):drain() - return function() - local id = q.next() - if id then - world:remove(id, PreviousT) - end - return id - end - end - - local changes = { - added = changes_added, - changed = changes_changed, - removed = changes_removed, - } - - local function track(fn) - added = false - removed = false - - fn(changes) - - if not added then - for _ in changes_added() do - end - end - - if not removed then - for _ in changes_removed() do - end - end - - for e, data in add do - world:set(e, PreviousT, if is_trivial then data else table.clone(data)) - end - end - - local tracker = { track = track } - - return tracker -end - -return { - Scheduler = Scheduler, - ChangeTracker = ChangeTracker, -}