mirror of
				https://github.com/Ukendio/jecs.git
				synced 2025-11-04 02:49:18 +00:00 
			
		
		
		
	Fix types issues
This commit is contained in:
		
							parent
							
								
									666a3ef6de
								
							
						
					
					
						commit
						7b43748f18
					
				
					 5 changed files with 48 additions and 51 deletions
				
			
		| 
						 | 
					@ -2,42 +2,46 @@
 | 
				
			||||||
local jecs = require("@jecs")
 | 
					local jecs = require("@jecs")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Description<T...> = jecs.Query<T...>
 | 
					export type Iter<T...> = (query: Query<T...>) -> () -> (jecs.Entity, T...)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type ObserverArm = (<a>(
 | 
					type Id<T=any> = jecs.Id<T>
 | 
				
			||||||
	PatchedWorld,
 | 
					
 | 
				
			||||||
	{
 | 
					type Query<T...> = typeof(setmetatable(
 | 
				
			||||||
		query: jecs.Query<a>,
 | 
						{} :: {
 | 
				
			||||||
		callback: ((jecs.Entity) -> ())?
 | 
							iter: Iter<T...>,
 | 
				
			||||||
 | 
							with: (<a>(Query<T...>, Id<a>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b>(Query<T...>, Id<a>, Id<b>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b, c>(Query<T...>, Id<a>, Id<b>, Id<c>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b, c>(Query<T...>, Id<a>, Id<b>, Id<c>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b, c, d>(Query<T...>, Id<a>, Id<b>, Id<c>, Id) -> Query<T...>),
 | 
				
			||||||
 | 
							without: (<a>(Query<T...>, Id<a>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b>(Query<T...>, Id<a>, Id<b>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b, c>(Query<T...>, Id<a>, Id<b>, Id<c>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b, c>(Query<T...>, Id<a>, Id<b>, Id<c>) -> Query<T...>)
 | 
				
			||||||
 | 
								& (<a, b, c, d>(Query<T...>, Id<a>, Id<b>, Id<c>, Id) -> Query<T...>),
 | 
				
			||||||
 | 
							archetypes: (self: Query<T...>) -> { jecs.Archetype },
 | 
				
			||||||
 | 
							cached: (self: Query<T...>) -> Query<T...>,
 | 
				
			||||||
 | 
						},
 | 
				
			||||||
 | 
						{} :: {
 | 
				
			||||||
 | 
							__iter: Iter<T...>,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
) -> () -> () -> (jecs.Entity)) & (<a, b>(
 | 
					))
 | 
				
			||||||
	PatchedWorld,
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		query: jecs.Query<a, b>,
 | 
					 | 
				
			||||||
		callback: ((jecs.Entity) -> ())?
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
) -> () -> () -> (jecs.Entity)) & (<a, b, c>(
 | 
					 | 
				
			||||||
	PatchedWorld,
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		query: jecs.Query<a, b, c>,
 | 
					 | 
				
			||||||
		callback: ((jecs.Entity) -> ())?
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
) -> () -> () -> (jecs.Entity))
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
export type PatchedWorld = jecs.World & {
 | 
					export type PatchedWorld = jecs.World & {
 | 
				
			||||||
	added: <T>(PatchedWorld, jecs.Id<T>, <e>(e: jecs.Entity<e>, id: jecs.Id<T>, value: T?) -> ()) -> () -> (),
 | 
						added: <T>(PatchedWorld, jecs.Id<T>, <e>(e: jecs.Entity<e>, id: jecs.Id<T>, value: T?) -> ()) -> () -> (),
 | 
				
			||||||
	removed: <T>(PatchedWorld, jecs.Id<T>, (e: jecs.Entity, id: jecs.Id) -> ()) -> () -> (),
 | 
						removed: <T>(PatchedWorld, jecs.Id<T>, (e: jecs.Entity, id: jecs.Id) -> ()) -> () -> (),
 | 
				
			||||||
	changed:  <T>(PatchedWorld, jecs.Id<T>, <e>(e: jecs.Entity<e>, id: jecs.Id<T>, value: T) -> ()) -> () -> (),
 | 
						changed:  <T>(PatchedWorld, jecs.Id<T>, <e>(e: jecs.Entity<e>, id: jecs.Id<T>, value: T) -> ()) -> () -> (),
 | 
				
			||||||
	observer: ObserverArm & any,
 | 
						observer: <T...>(PatchedWorld, Query<T...>, callback: ((jecs.Entity, jecs.Id, any?) -> ())?) -> () -> () -> (jecs.Entity),
 | 
				
			||||||
	monitor: ObserverArm & any
 | 
						monitor: <T...>(PatchedWorld, Query<T...>, callback: ((jecs.Entity, jecs.Id, any?) -> ())?) -> () -> () -> (jecs.Entity)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function observers_new(
 | 
					local function observers_new<T...>(
 | 
				
			||||||
	world: PatchedWorld,
 | 
						world: PatchedWorld,
 | 
				
			||||||
	query: any,
 | 
						query: Query<T...>,
 | 
				
			||||||
	callback: (<T, a>(jecs.Entity<T>, jecs.Id<a>, value: a?) -> ())?
 | 
						callback: (<T, a>(jecs.Entity<T>, jecs.Id<a>, value: a?) -> ())?
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
	query = query:cached()
 | 
						query = query:cached()
 | 
				
			||||||
 | 
						callback = callback
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local archetypes = {}
 | 
						local archetypes = {}
 | 
				
			||||||
	local terms = query.ids
 | 
						local terms = query.ids
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,13 +1,11 @@
 | 
				
			||||||
local function collect<T...>(
 | 
					
 | 
				
			||||||
	signal: {
 | 
					--!strict
 | 
				
			||||||
		Connect: (RBXScriptSignal<T...>, fn: (T...) -> ()) -> RBXScriptConnection
 | 
					local function collect(signal)
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
): () -> (T...)
 | 
					 | 
				
			||||||
	local enqueued = {}
 | 
						local enqueued = {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local i = 0
 | 
						local i = 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	local connection = (signal :: any):Connect(function(...)
 | 
						local connection = signal:Connect(function(...)
 | 
				
			||||||
		table.insert(enqueued, { ... })
 | 
							table.insert(enqueued, { ... })
 | 
				
			||||||
		i += 1
 | 
							i += 1
 | 
				
			||||||
	end)
 | 
						end)
 | 
				
			||||||
| 
						 | 
					@ -25,4 +23,11 @@ local function collect<T...>(
 | 
				
			||||||
	end, connection
 | 
						end, connection
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return collect
 | 
					type Signal<T... = ...any> = {
 | 
				
			||||||
 | 
					    Connect: (self: Signal<T...>, callback: (T...) -> ()) -> RBXScriptConnection,
 | 
				
			||||||
 | 
					    ConnectParallel: (self: Signal<T...>, callback: (T...) -> ()) -> RBXScriptConnection,
 | 
				
			||||||
 | 
					    Once: (self: Signal<T...>, callback: (T...) -> ()) -> RBXScriptConnection,
 | 
				
			||||||
 | 
					    Wait: (self: Signal<T...>) -> (T...)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					return collect :: <T...>(Signal<T...>) -> (() -> (T...), RBXScriptConnection)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,40 +1,32 @@
 | 
				
			||||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
					local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
				
			||||||
local types = require("../ReplicatedStorage/types")
 | 
					local types = require("../ReplicatedStorage/types")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
type Signal<T...> = {
 | 
					 | 
				
			||||||
	Connect: (Signal<T...>, fn: (T...) -> ()) -> RBXScriptConnection
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
type Remote<T...> = {
 | 
					type Remote<T...> = {
 | 
				
			||||||
	FireClient: (Remote<T...>, T...) -> (),
 | 
						FireClient: (Remote<T...>, Player, T...) -> (),
 | 
				
			||||||
	FireAllClients: (Remote<T...>, T...) -> (),
 | 
						FireAllClients: (Remote<T...>, T...) -> (),
 | 
				
			||||||
	FireServer: (Remote<T...>) -> (),
 | 
						FireServer: (Remote<T...>, T...) -> (),
 | 
				
			||||||
	OnServerEvent: {
 | 
						OnServerEvent: RBXScriptSignal<(Player, T...)>,
 | 
				
			||||||
		Connect: (any, fn: (Player, T...) -> () ) -> ()
 | 
						OnClientEvent: RBXScriptSignal<T...>
 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	OnClientEvent: {
 | 
					 | 
				
			||||||
		Connect: (any, fn: (T...) -> () ) -> ()
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function stream_ensure(name): Remote<any>
 | 
					local function stream_ensure(name)
 | 
				
			||||||
	local remote = ReplicatedStorage:FindFirstChild(name)
 | 
						local remote = ReplicatedStorage:FindFirstChild(name)
 | 
				
			||||||
	if not remote then
 | 
						if not remote then
 | 
				
			||||||
		remote = Instance.new("RemoteEvent")
 | 
							remote = Instance.new("RemoteEvent")
 | 
				
			||||||
		remote.Name = name
 | 
							remote.Name = name
 | 
				
			||||||
		remote.Parent = ReplicatedStorage
 | 
							remote.Parent = ReplicatedStorage
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	return remote :: any
 | 
						return remote
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
local function datagram_ensure(name): Remote<any>
 | 
					local function datagram_ensure(name)
 | 
				
			||||||
	local remote = ReplicatedStorage:FindFirstChild(name)
 | 
						local remote = ReplicatedStorage:FindFirstChild(name)
 | 
				
			||||||
	if not remote then
 | 
						if not remote then
 | 
				
			||||||
		remote = Instance.new("UnreliableRemoteEvent")
 | 
							remote = Instance.new("UnreliableRemoteEvent")
 | 
				
			||||||
		remote.Name = name
 | 
							remote.Name = name
 | 
				
			||||||
		remote.Parent = ReplicatedStorage
 | 
							remote.Parent = ReplicatedStorage
 | 
				
			||||||
	end
 | 
						end
 | 
				
			||||||
	return remote :: any
 | 
						return remote
 | 
				
			||||||
end
 | 
					end
 | 
				
			||||||
 | 
					
 | 
				
			||||||
return {
 | 
					return {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -88,9 +88,6 @@ return function(world: types.World)
 | 
				
			||||||
            if removed then
 | 
					            if removed then
 | 
				
			||||||
                for _, entity in removed do
 | 
					                for _, entity in removed do
 | 
				
			||||||
                    entity = ecs_ensure_entity(world, entity)
 | 
					                    entity = ecs_ensure_entity(world, entity)
 | 
				
			||||||
                    if not world:contains(entity) then
 | 
					 | 
				
			||||||
                        continue
 | 
					 | 
				
			||||||
                    end
 | 
					 | 
				
			||||||
                    world:remove(entity, id)
 | 
					                    world:remove(entity, id)
 | 
				
			||||||
                end
 | 
					                end
 | 
				
			||||||
            end
 | 
					            end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,3 @@
 | 
				
			||||||
 | 
					 | 
				
			||||||
--!strict
 | 
					--!strict
 | 
				
			||||||
local Players = game:GetService("Players")
 | 
					local Players = game:GetService("Players")
 | 
				
			||||||
local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
					local ReplicatedStorage = game:GetService("ReplicatedStorage")
 | 
				
			||||||
| 
						 | 
					@ -177,7 +176,7 @@ return function(world: ty.World)
 | 
				
			||||||
		            set_n += 1
 | 
							            set_n += 1
 | 
				
			||||||
		            set_ids[set_n] = e
 | 
							            set_ids[set_n] = e
 | 
				
			||||||
		            set_values[set_n] = v or true
 | 
							            set_values[set_n] = v or true
 | 
				
			||||||
		        elseif not world:contains(e) then
 | 
							        elseif world:contains(e) then
 | 
				
			||||||
		            removed_n += 1
 | 
							            removed_n += 1
 | 
				
			||||||
		            removed_ids[removed_n] = e
 | 
							            removed_ids[removed_n] = e
 | 
				
			||||||
		        end
 | 
							        end
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue