@rbxts/replecs 0.2.1 → 0.2.3-test1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -200,6 +200,24 @@ function client_replicator.entity_set(
200
200
  end
201
201
  end
202
202
 
203
+ function client_replicator.entity_add(client: Client, entity: Entity, tag: Entity, changed_hooks: ChangedHooksEntry?)
204
+ if client.command_buffers_active then
205
+ local command_buffer = get_command_buffer(client, entity)
206
+ command_buffer.tags[tag] = true
207
+ else
208
+ if changed_hooks then
209
+ if not changed_hooks.overrides then
210
+ client.world:add(entity, tag)
211
+ end
212
+ for _, callback in changed_hooks.callbacks do
213
+ callback(entity, tag)
214
+ end
215
+ else
216
+ client.world:add(entity, tag)
217
+ end
218
+ end
219
+ end
220
+
203
221
  function client_replicator.entity_set_unreliable(
204
222
  client: Client,
205
223
  entity: Entity,
@@ -230,31 +248,13 @@ function client_replicator.entity_set_pair(
230
248
  if pair_relation then
231
249
  pair_relation[target] = { value = value }
232
250
  else
233
- command_buffer.pairs_values[relation] = { [target] = value }
251
+ command_buffer.pairs_values[relation] = { [target] = { value = value } }
234
252
  end
235
253
  else
236
254
  client_replicator.entity_set(client, entity, PAIR(relation, target), value, changed_hooks)
237
255
  end
238
256
  end
239
257
 
240
- function client_replicator.entity_add(
241
- client: Client,
242
- entity: Entity,
243
- component: Entity,
244
- changed_hooks: ChangedHooksEntry?
245
- )
246
- if changed_hooks then
247
- if not changed_hooks.overrides then
248
- client.world:add(entity, component)
249
- end
250
- for _, callback in changed_hooks.callbacks do
251
- callback(entity, component)
252
- end
253
- else
254
- client.world:add(entity, component)
255
- end
256
- end
257
-
258
258
  function client_replicator.entity_add_pair(
259
259
  client: Client,
260
260
  entity: Entity,
@@ -150,41 +150,26 @@ declare namespace Replecs {
150
150
  }
151
151
 
152
152
  export interface ServerImp {
153
- set_networked(
154
- server: Server,
155
- entity: Entity,
156
- filter?: MemberFilter
157
- ): void;
158
- stop_networked(server: Server, entity: Entity): void;
153
+ set_networked(entity: Entity, filter?: MemberFilter): void;
154
+ stop_networked(entity: Entity): void;
159
155
 
160
156
  set_reliable(
161
- server: Server,
162
157
  entity: Entity,
163
158
  component: Entity,
164
159
  filter?: MemberFilter
165
160
  ): void;
166
161
  set_unreliable(
167
- server: Server,
168
162
  entity: Entity,
169
163
  component: Entity,
170
164
  filter?: MemberFilter
171
165
  ): void;
172
- set_pair(
173
- server: Server,
174
- entity: Entity,
175
- relation: Entity,
176
- filter?: MemberFilter
177
- ): void;
178
- set_custom(
179
- server: Server,
180
- entity: Entity,
181
- handler: Entity | CustomId
182
- ): void;
166
+ set_pair(entity: Entity, relation: Entity, filter?: MemberFilter): void;
167
+ set_custom(entity: Entity, handler: Entity | CustomId): void;
183
168
 
184
- stop_reliable(server: Server, entity: Entity, component: Entity): void;
185
- stop_unreliable(server: Server, entity: Entity, component: Entity): void;
186
- stop_pair(server: Server, entity: Entity, relation: Entity): void;
187
- remove_custom(server: Server, entity: Entity): void;
169
+ stop_reliable(entity: Entity, component: Entity): void;
170
+ stop_unreliable(entity: Entity, component: Entity): void;
171
+ stop_pair(entity: Entity, relation: Entity): void;
172
+ remove_custom(entity: Entity): void;
188
173
  }
189
174
 
190
175
  export interface Server extends ServerImp {
@@ -114,7 +114,6 @@ export type MaskingController = {
114
114
 
115
115
  client_indexes: { [Member]: number },
116
116
  group_indexes: { [number]: number },
117
- member_indexes: { [Member]: number },
118
117
  client_aliases: { [any]: Member },
119
118
 
120
119
  compact_count: number,
@@ -1173,8 +1172,10 @@ function masking_controller.stop_component(
1173
1172
  else
1174
1173
  if entity_lookup then
1175
1174
  remove_component_active(entity_lookup.storage_group, entity, component, component_type)
1175
+ entity_lookup.components[component_type][component] = nil
1176
+ else
1177
+ remove_component_index_entry(masking.lookups.postponed, entity, component, component_type)
1176
1178
  end
1177
- entity_lookup.components[component_type][component] = nil
1178
1179
  end
1179
1180
  end
1180
1181
 
@@ -1341,16 +1342,16 @@ end
1341
1342
  local function bitmask_from_set(masking: MaskingInternal, member_set: { [Member]: boolean }): utils.Bitmask
1342
1343
  local new_bitmask = utils.bitmask.create(masking.member_count)
1343
1344
  for member: Member in member_set do
1344
- local index = masking.member_indexes[member]
1345
+ local index = masking.client_indexes[member]
1345
1346
  if not index then
1346
- local alias = masking.member_indexes[masking.client_aliases[member]]
1347
+ local alias = masking.client_indexes[masking.client_aliases[member]]
1347
1348
  if alias then
1348
1349
  if utils.is_client_valid(alias) then
1349
1350
  index = alias
1350
1351
  end
1351
1352
  elseif utils.is_client_valid(member) then
1352
1353
  masking_controller.register_client(masking, member)
1353
- index = masking.member_indexes[member]
1354
+ index = masking.client_indexes[member]
1354
1355
  end
1355
1356
  end
1356
1357
  if index then
@@ -1416,23 +1417,15 @@ end
1416
1417
  function masking_controller.compact_members(masking: MaskingInternal)
1417
1418
  -- we dont recompute as nothing should've changed
1418
1419
  -- so this should be hopefully quite cheap
1419
- local old_indexes = masking.member_indexes
1420
+ local old_indexes = masking.client_indexes
1420
1421
  local new_indexes: { [Member]: number } = {}
1421
1422
 
1422
1423
  local new_count = 0
1423
1424
  for member in old_indexes do
1424
1425
  new_indexes[member] = new_count
1425
-
1426
- if masking.client_indexes[member] then
1427
- masking.client_indexes[member] = new_count
1428
- end
1429
- if masking.group_indexes[new_count] then
1430
- masking.group_indexes[new_count] = member
1431
- end
1432
-
1433
1426
  new_count += 1
1434
1427
  end
1435
- masking.member_indexes = new_indexes
1428
+ masking.client_indexes = new_indexes
1436
1429
  masking.member_count = new_count
1437
1430
 
1438
1431
  for _, entity_lookup in masking.lookups.entities do
@@ -1469,7 +1462,9 @@ function masking_controller.compact_members(masking: MaskingInternal)
1469
1462
  local active = masking.active_members_generator
1470
1463
 
1471
1464
  all.bitmask = remap_bitmask(all.bitmask, old_indexes, new_indexes, new_count)
1465
+ all.result = all.bitmask
1472
1466
  unactive.bitmask = remap_bitmask(unactive.bitmask, old_indexes, new_indexes, new_count)
1467
+ unactive.result = unactive.bitmask
1473
1468
  active.result = remap_bitmask(active.result, old_indexes, new_indexes, new_count)
1474
1469
 
1475
1470
  local new_storages: Storages = {}
@@ -1529,14 +1524,14 @@ end
1529
1524
 
1530
1525
  function masking_controller.create_all_members_generator(masking: MaskingInternal)
1531
1526
  local filter: MemberFilter = {}
1532
- for member in masking.member_indexes do
1527
+ for member in masking.client_indexes do
1533
1528
  filter[member] = true
1534
1529
  end
1535
- local bitmask = utils.bitmask.from_set(masking.member_indexes, filter, masking.member_count)
1530
+ local bitmask = utils.bitmask.from_set(masking.client_indexes, filter, masking.member_count)
1536
1531
  return mask_generator.create(bitmask) :: MaskGeneratorWithBitmask
1537
1532
  end
1538
1533
  function masking_controller.create_unactive_generator(masking: MaskingController)
1539
- local bitmask = utils.bitmask.from_set(masking.member_indexes, masking.unreplicated, masking.member_count)
1534
+ local bitmask = utils.bitmask.from_set(masking.client_indexes, masking.unreplicated, masking.member_count)
1540
1535
  return mask_generator.create(bitmask) :: MaskGeneratorWithBitmask
1541
1536
  end
1542
1537
  function masking_controller.create_active_generator(masking: MaskingController): MaskGenerator
@@ -1557,13 +1552,12 @@ end
1557
1552
  --function masking_controller.unregister_mask_group(masking: MaskingInternal, group: Member) end
1558
1553
 
1559
1554
  function masking_controller.register_client(masking: MaskingInternal, member: Member)
1560
- if masking.member_indexes[member] then
1555
+ if masking.client_indexes[member] then
1561
1556
  return
1562
1557
  end
1563
1558
 
1564
1559
  local current = masking.member_count
1565
1560
  masking.client_indexes[member] = current
1566
- masking.member_indexes[member] = current
1567
1561
  masking.member_count += 1
1568
1562
 
1569
1563
  masking.unreplicated[member] = true
@@ -1577,12 +1571,11 @@ function masking_controller.register_client(masking: MaskingInternal, member: Me
1577
1571
  end
1578
1572
 
1579
1573
  function masking_controller.unregister_client(masking: MaskingInternal, member: Member)
1580
- local index = masking.member_indexes[member]
1574
+ local index = masking.client_indexes[member]
1581
1575
  if index == nil then
1582
1576
  return
1583
1577
  end
1584
1578
  masking.client_indexes[member] = nil
1585
- masking.member_indexes[member] = nil
1586
1579
  masking.all_members_generator.bitmask:clear(index)
1587
1580
  masking.active_members_generator:compute()
1588
1581
  end
@@ -1607,7 +1600,6 @@ end
1607
1600
  local function create(): MaskingController
1608
1601
  local self = {} :: MaskingInternal
1609
1602
 
1610
- self.member_indexes = {}
1611
1603
  self.client_indexes = {}
1612
1604
  self.group_indexes = {}
1613
1605
  self.client_aliases = {}
@@ -1426,12 +1426,15 @@ function server_replicator.init(server: Server, wrd: World?)
1426
1426
  error "Providing a world is required to start replecs"
1427
1427
  end
1428
1428
 
1429
- local hooks = {
1430
- added = (world :: any).added,
1431
- changed = (world :: any).changed,
1432
- removed = (world :: any).removed,
1433
- }
1434
- server.hooks = hooks
1429
+ local hooks = server.hooks
1430
+ if not hooks then
1431
+ hooks = {
1432
+ added = (world :: any).added,
1433
+ changed = (world :: any).changed,
1434
+ removed = (world :: any).removed,
1435
+ }
1436
+ server.hooks = hooks
1437
+ end
1435
1438
 
1436
1439
  local components = server.components
1437
1440
  server.shared = utils.resolved_shared(world, components, server.registered_custom_ids)
@@ -1630,6 +1633,15 @@ local function create(world: World?, components: common.Components): Server
1630
1633
  jecs.Name,
1631
1634
  }
1632
1635
 
1636
+ if world then
1637
+ local hooks = {
1638
+ added = (world :: any).added,
1639
+ changed = (world :: any).changed,
1640
+ removed = (world :: any).removed,
1641
+ }
1642
+ self.hooks = hooks
1643
+ end
1644
+
1633
1645
  return setmetatable(self, server_replicator) :: any
1634
1646
  end
1635
1647
 
@@ -1,2 +1,2 @@
1
1
  -- Automatically generated
2
- return "0.2.1"
2
+ return ""
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rbxts/replecs",
3
- "version": "0.2.1",
3
+ "version": "0.2.3-test1",
4
4
  "description": "Replication library for Jecs",
5
5
  "main": "out/init.lua",
6
6
  "types": "out/index.d.ts",