Fix types in export

This commit is contained in:
Ukendio 2024-08-18 16:46:52 +02:00
parent f2d6d76686
commit f302fad3b6
7 changed files with 39 additions and 25 deletions

View file

@ -1,13 +1,22 @@
local jecs = require(game:GetService("ReplicatedStorage").ecs) local jecs = require(game:GetService("ReplicatedStorage").ecs)
local world = require(script.Parent.world) local world = require(script.Parent.world)
local components = { type Entity<T=nil> = jecs.Entity<T>
local components: {
Character: Entity<Model>,
Mob: Entity,
Model: Entity<Model>,
Player: Entity,
Target: Entity,
Transform: Entity<CFrame>,
Velocity: Entity<number>,
} = {
Character = world:component(), Character = world:component(),
Mob = world:component(), Mob = world:component(),
Model = world:component() :: jecs.Entity<Model>, Model = world:component(),
Player = world:component(), Player = world:component(),
Target = world:component(), Target = world:component(),
Transform = world:component() :: jecs.Entity<CFrame>, Transform = world:component(),
Velocity = world:component(), Velocity = world:component(),
} }

View file

@ -1,6 +1,6 @@
local jecs = require(game:GetService("ReplicatedStorage").ecs) local jecs = require(game:GetService("ReplicatedStorage").ecs)
local world = require(script.world) local world = require(script.world) :: jecs.World
export type World = jecs.World
local std = { local std = {
ChangeTracker = require(script.changetracker), ChangeTracker = require(script.changetracker),
Scheduler = require(script.scheduler), Scheduler = require(script.scheduler),
@ -11,7 +11,7 @@ local std = {
handle = require(script.handle), handle = require(script.handle),
interval = require(script.interval), interval = require(script.interval),
ref = require(script.ref), ref = require(script.ref),
world = world, world = world :: World,
pair = jecs.pair, pair = jecs.pair,
__ = jecs.w, __ = jecs.w,
} }

View file

@ -1,5 +1,4 @@
local jecs = require(game:GetService("ReplicatedStorage").ecs) local jecs = require(game:GetService("ReplicatedStorage").ecs)
export type World = jecs.t_world
-- I like the idea of only having the world be a singleton. -- I like the idea of only having the world be a singleton.
return jecs.World.new() return jecs.World.new() :: jecs.World

View file

@ -1,12 +1,11 @@
--!strict
local ReplicatedStorage = game:GetService("ReplicatedStorage") local ReplicatedStorage = game:GetService("ReplicatedStorage")
local blink = require(game:GetService("ServerScriptService").net) local blink = require(game:GetService("ServerScriptService").net)
local jecs = require(ReplicatedStorage.ecs) local jecs = require(ReplicatedStorage.ecs)
local pair = jecs.pair
local __ = jecs.Wildcard local __ = jecs.Wildcard
local std = require(ReplicatedStorage.std) local std = require(ReplicatedStorage.std)
local world = std.world local world: std.World = std.world
local cts = std.components local cts = std.components
local Mob = cts.Mob local Mob = cts.Mob
@ -14,7 +13,6 @@ local Transform = cts.Transform
local Velocity = cts.Velocity local Velocity = cts.Velocity
local Player = cts.Player local Player = cts.Player
local Character = cts.Character local Character = cts.Character
print("client Model", cts.Model)
local function mobsMove(dt: number) local function mobsMove(dt: number)
local players = world:query(Character):with(Player) local players = world:query(Character):with(Player)
@ -23,15 +21,18 @@ local function mobsMove(dt: number)
local p = cf.Position local p = cf.Position
local target local target
for playerId, character in players do
local pos = character.PrimaryPart.Position for playerId, character in players:iter() do
local pos = (character.PrimaryPart::Part).Position
if true then if true then
target = pos target = pos
break break
end end
if not target then if not target then
target = pos target = pos
elseif (p - pos).Magnitude < (p - target) then elseif (p - pos).Magnitude
< (p - target).Magnitude
then
target = pos target = pos
end end
end end

View file

@ -11,14 +11,16 @@ local Character = cts.Character
local playersAdded = collect(Players.PlayerAdded) local playersAdded = collect(Players.PlayerAdded)
local playersRemoved = collect(Players.PlayerRemoving) local playersRemoved = collect(Players.PlayerRemoving)
local world: std.World = std.world
local conn = {} local conn = {}
local function players() local function players()
for _, player in playersAdded do for _, player in playersAdded do
std.world:set( world:set(
std.world:entity(), std.world:entity(),
std.world:entity()) cts.Transform
)
local e = ref(player.UserId):set(Player, player) local e = ref(player.UserId):set(Player, player)
local characterAdd = player.CharacterAdded local characterAdd = player.CharacterAdded

View file

@ -3,5 +3,4 @@ wally = "upliftgames/wally@0.3.2"
rojo = "rojo-rbx/rojo@7.4.1" rojo = "rojo-rbx/rojo@7.4.1"
stylua = "johnnymorganz/stylua@0.19.1" stylua = "johnnymorganz/stylua@0.19.1"
selene = "kampfkarren/selene@0.26.1" selene = "kampfkarren/selene@0.26.1"
wally-patch-package = "Barocena/wally-patch-package@1.2.1"
Blink = "1Axen/Blink@0.14.1" Blink = "1Axen/Blink@0.14.1"

View file

@ -1442,9 +1442,9 @@ end
export type Pair = number export type Pair = number
type Item = () -> (number, ...any) type Item<T...> = (self: Query<T...>) -> (Entity, T...)
export type Entity<T = nil> = number & {__DO_NOT_USE_OR_YOU_WILL_BE_FIRED: T } export type Entity<T = nil> = number & {__T: T }
type Iter<T...> = (query: Query<T...>) -> () -> (Entity, T...) type Iter<T...> = (query: Query<T...>) -> () -> (Entity, T...)
@ -1452,14 +1452,14 @@ type Query<T...> = typeof(setmetatable({}, {
__iter = (nil :: any) :: Iter<T...> __iter = (nil :: any) :: Iter<T...>
})) & { })) & {
iter: Iter<T...>, iter: Iter<T...>,
next: Item, next: Item<T...>,
with: (Query<T...>) -> Query<T...>, with: (self: Query<T...>, ...i53) -> Query<T...>,
without: (Query<T...>, ...i53) -> Query<T...>, without: (self: Query<T...>, ...i53) -> Query<T...>,
replace: (Query<T...>, <U...>(T...) -> (U...)) -> (), replace: (self: Query<T...>, <U...>(T...) -> (U...)) -> (),
archetypes: () -> { Archetype }, archetypes: () -> { Archetype },
} }
type World = { export type World = {
archetypeIndex: { [string]: Archetype }, archetypeIndex: { [string]: Archetype },
archetypes: Archetypes, archetypes: Archetypes,
componentIndex: ComponentIndex, componentIndex: ComponentIndex,
@ -1496,6 +1496,10 @@ type World = {
& (<A, B, C>(self: World, id: Entity, Entity<A>, Entity<B>, Entity<C>) -> (A, B, C)) & (<A, B, C>(self: World, id: Entity, Entity<A>, Entity<B>, Entity<C>) -> (A, B, C))
& <A, B, C, D>(self: World, id: Entity, Entity<A>, Entity<B>, Entity<C>, Entity<D>) -> (A, B, C, D), & <A, B, C, D>(self: World, id: Entity, Entity<A>, Entity<B>, Entity<C>, Entity<D>) -> (A, B, C, D),
has: (self: World, ...Entity) -> boolean,
parent: (self: World, entity: Entity) -> Entity,
--- Searches the world for entities that match a given query --- Searches the world for entities that match a given query
query: (<A>(self: World, Entity<A>) -> Query<A>) query: (<A>(self: World, Entity<A>) -> Query<A>)
& (<A, B>(self: World, Entity<A>, Entity<B>) -> Query<A, B>) & (<A, B>(self: World, Entity<A>, Entity<B>) -> Query<A, B>)