Store class
Пакет: com.hypixel.hytale.component
Файл: com/hypixel/hytale/component/Store.java
implements: ComponentAccessor<ECS_TYPE>
Поля (371)
| Модификаторы | Тип | Имя |
|---|---|---|
|
return this.count > |
0 |
final |
Store[] |
EMPTY_ARRAY |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
|
break |
|
private int |
count |
|
BitSet |
systemIndexesx |
|
BitSet |
systemIndexesx |
|
int |
systemIndexx |
|
int |
systemIndexx |
|
SystemType |
systemTypex |
|
SystemType |
systemTypex |
|
ComponentRegistry.Data |
var1 |
|
CommandBuffer |
var1 |
|
ObjectArrayList |
var1 |
|
Thread |
var1 |
|
int |
var10 |
|
Ref |
var10 |
|
SystemType |
var10 |
|
ComponentRegistry.Data |
var10 |
|
BitSet |
var10 |
|
BitSet |
var10 |
|
BitSet |
var10 |
|
ArchetypeChunk |
var10 |
|
int |
var10 |
|
EntityEventSystem |
var10 |
|
int |
var10 |
|
|
var10 |
|
int |
var10 |
|
int |
var10 |
|
ArchetypeChunk |
var10 |
|
BitSet |
var10 |
|
QuerySystem |
var10 |
|
SystemType |
var11 |
|
BitSet |
var11 |
|
SystemType |
var11 |
|
int |
var11 |
|
int |
var11 |
|
ComponentRegistry.Data |
var11 |
|
BitSet |
var11 |
|
EntityEventSystem |
var11 |
|
boolean |
var11 |
|
ComponentRegistry.Data |
var11 |
|
BitSet |
var12 |
|
BitSet |
var12 |
|
BitSet |
var12 |
|
RefChangeSystem |
var12 |
|
RefChangeSystem |
var12 |
|
BitSet |
var12 |
|
ComponentRegistry.Data |
var12 |
|
ArchetypeChunk |
var12 |
|
ArchetypeChunk |
var12 |
|
BitSet |
var12 |
|
ArchetypeChunk |
var12 |
|
BitSet |
var13 |
|
int |
var13 |
|
|
var13 |
|
|
var13 |
|
|
var13 |
|
int |
var13 |
|
int |
var13 |
|
|
var13 |
|
int |
var13 |
|
BitSet |
var13 |
|
BitSet |
var13 |
|
HistoricMetric[] |
var13 |
|
Archetype |
var13 |
|
SystemType |
var13 |
|
int |
var13 |
|
HolderSystem |
var14 |
|
RefChangeSystem |
var14 |
|
int |
var14 |
|
int |
var14 |
|
SystemType |
var14 |
|
BitSet |
var14 |
|
RefChangeSystem |
var14 |
|
RefSystem |
var15 |
|
Ref |
var15 |
|
RefChangeSystem |
var15 |
|
ArchetypeChunk |
var15 |
|
int |
var15 |
|
boolean |
var16 |
|
Holder |
var16 |
|
BitSet |
var16 |
|
int |
var16 |
|
ArchetypeChunk |
var16 |
|
int |
var17 |
|
Ref |
var17 |
|
ParallelRangeTask |
var17 |
|
ArchetypeChunk |
var18 |
|
int |
var18 |
|
int |
var19 |
|
ISystem |
var19 |
|
HistoricMetric[] |
var2 |
|
int |
var2 |
|
int |
var2 |
|
int |
var2 |
|
CommandBuffer |
var2 |
|
CommandBuffer |
var2 |
|
CommandBuffer |
var2 |
|
WorldEventType |
var2 |
|
int |
var2 |
|
int |
var2 |
|
|
var2 |
|
|
var2 |
|
int |
var2 |
|
int |
var20 |
|
boolean |
var20 |
|
int |
var21 |
|
int |
var21 |
|
int |
var22 |
|
String |
var22 |
|
SystemType |
var23 |
|
ArchetypeChunk |
var24 |
|
Ref |
var24 |
|
CommandBuffer |
var25 |
|
BitSet |
var25 |
|
Codec |
var25 |
|
ComponentRegistry.Data |
var26 |
|
int |
var26 |
|
CommandBuffer |
var26 |
|
ArchetypeChunk |
var26 |
|
int |
var27 |
|
HolderSystem |
var27 |
|
ArchetypeChunk |
var27 |
|
int |
var28 |
|
Holder |
var28 |
|
SystemType |
var29 |
|
int |
var29 |
|
SystemMetricData[] |
var3 |
|
CompletableFuture[] |
var3 |
|
int |
var3 |
|
BitSet |
var3 |
|
ArchetypeChunk |
var3 |
|
Component[] |
var3 |
|
|
var3 |
|
|
var3 |
|
CommandBuffer |
var3 |
|
CommandBuffer |
var3 |
|
Component |
var3 |
|
int |
var3 |
|
CommandBuffer |
var3 |
|
CommandBuffer |
var3 |
|
boolean |
var3 |
|
|
var3 |
|
CommandBuffer |
var3 |
|
CommandBuffer |
var3 |
|
CommandBuffer |
var3 |
|
CommandBuffer |
var3 |
|
CommandBuffer |
var3 |
|
EntityEventType |
var3 |
|
EntityHolderEventType |
var3 |
|
ComponentRegistry.Data |
var3 |
|
WorldEventType |
var3 |
|
ComponentRegistry.Data |
var3 |
|
int |
var3 |
|
int |
var3 |
|
ComponentRegistry.Data |
var3 |
|
Archetype |
var3 |
|
Ref |
var30 |
|
int |
var30 |
|
BitSet |
var31 |
|
ArchetypeChunk |
var32 |
|
int |
var33 |
|
Archetype |
var33 |
|
ArchetypeChunk |
var34 |
|
Archetype |
var34 |
|
|
var34 |
|
HolderSystem |
var35 |
|
Archetype |
var35 |
|
Ref |
var36 |
|
int |
var36 |
|
int |
var36 |
|
ArchetypeChunk |
var37 |
|
int |
var38 |
|
Ref |
var39 |
|
Holder |
var39 |
|
ResourceType |
var4 |
|
int |
var4 |
|
int |
var4 |
|
Archetype |
var4 |
|
ComponentRegistry.Data |
var4 |
|
CommandBuffer |
var4 |
|
ArchetypeChunk |
var4 |
|
Component |
var4 |
|
|
var4 |
|
|
var4 |
|
CommandBuffer |
var4 |
|
CommandBuffer |
var4 |
|
CommandBuffer |
var4 |
|
ArchetypeChunk |
var4 |
|
ArchetypeChunk |
var4 |
|
boolean |
var4 |
|
|
var4 |
|
|
var4 |
|
ArchetypeChunk |
var4 |
|
boolean |
var4 |
|
|
var4 |
|
|
var4 |
|
BitSet |
var4 |
|
boolean |
var4 |
|
|
var4 |
|
ArchetypeChunk |
var4 |
|
ComponentRegistry.Data |
var4 |
|
ComponentRegistry.Data |
var4 |
|
ComponentRegistry.Data |
var4 |
|
CommandBuffer |
var4 |
|
EntityEventType |
var4 |
|
EntityHolderEventType |
var4 |
|
ComponentRegistry.Data |
var4 |
|
BitSet |
var4 |
|
CommandBuffer |
var4 |
|
UnknownComponents |
var4 |
|
int |
var4 |
|
ComponentRegistry.Data |
var4 |
|
BitSet |
var40 |
|
RefSystem |
var41 |
|
ISystem |
var5 |
|
int |
var5 |
|
ArchetypeChunk |
var5 |
|
String[] |
var5 |
|
ComponentRegistry.Data |
var5 |
|
Ref[] |
var5 |
|
int |
var5 |
|
Holder[] |
var5 |
|
Component |
var5 |
|
ArchetypeChunk |
var5 |
|
ArchetypeChunk |
var5 |
|
ArchetypeChunk |
var5 |
|
Component |
var5 |
|
int |
var5 |
|
ArchetypeChunk |
var5 |
|
ArchetypeChunk |
var5 |
|
int |
var5 |
|
int |
var5 |
|
BitSet |
var5 |
|
int |
var5 |
|
CommandBuffer |
var5 |
|
ComponentRegistry.Data |
var5 |
|
CommandBuffer |
var5 |
|
CommandBuffer |
var5 |
|
BitSet |
var5 |
|
ComponentRegistry.Data |
var5 |
|
ComponentRegistry.Data |
var5 |
|
BitSet |
var5 |
|
int |
var5 |
|
boolean |
var5 |
|
ResourceType |
var5 |
|
ISystem |
var5 |
|
ComponentType |
var5 |
|
UnknownComponents |
var5 |
|
UnknownComponents |
var5 |
|
|
var5 |
|
|
var5 |
|
ArchetypeChunk |
var5 |
|
int |
var5 |
|
BitSet |
var5 |
|
MetricResults |
var6 |
|
|
var6 |
|
ResourceType |
var6 |
|
int |
var6 |
|
int |
var6 |
|
ComponentType |
var6 |
|
SystemType |
var6 |
|
CommandBuffer |
var6 |
|
int |
var6 |
|
int |
var6 |
|
Component |
var6 |
|
int |
var6 |
|
ArchetypeChunk |
var6 |
|
int |
var6 |
|
int |
var6 |
|
ParallelRangeTask |
var6 |
|
ArchetypeChunk |
var6 |
|
BitSet |
var6 |
|
CommandBuffer |
var6 |
|
BitSet |
var6 |
|
BitSet |
var6 |
|
int |
var6 |
|
CommandBuffer |
var6 |
|
BitSet |
var6 |
|
int |
var6 |
|
TickableSystem |
var6 |
|
BitSet |
var6 |
|
DataChange |
var6 |
|
ComponentType |
var6 |
|
Component |
var6 |
|
Component |
var6 |
|
int |
var6 |
|
Archetype |
var6 |
|
BitSet |
var6 |
|
int |
var6 |
|
SystemType |
var7 |
|
BitSet |
var7 |
|
int |
var7 |
|
ArchetypeChunk |
var7 |
|
int |
var7 |
|
Component |
var7 |
|
Component |
var7 |
|
Archetype |
var7 |
|
Component |
var7 |
|
ArchetypeChunk |
var7 |
|
int |
var7 |
|
int |
var7 |
|
int |
var7 |
|
BitSet |
var7 |
|
ArchetypeChunk |
var7 |
|
Archetype |
var7 |
|
WorldEventSystem |
var7 |
|
BitSet |
var7 |
|
Archetype |
var7 |
|
WorldEventSystem |
var7 |
|
long |
var7 |
|
int |
var7 |
|
BitSet |
var7 |
|
String |
var7 |
|
QuerySystem |
var7 |
|
int |
var7 |
|
SystemType |
var7 |
|
BitSet |
var8 |
|
ComponentType |
var8 |
|
int |
var8 |
|
|
var8 |
|
|
var8 |
|
int |
var8 |
|
int |
var8 |
|
int |
var8 |
|
BitSet |
var8 |
|
BitSet |
var8 |
|
int |
var8 |
|
Archetype |
var8 |
|
ParallelRangeTask |
var8 |
|
ArchetypeDataSystem |
var8 |
|
int |
var8 |
|
BitSet |
var8 |
|
int |
var8 |
|
ArchetypeChunk |
var8 |
|
int |
var8 |
|
int |
var8 |
|
Codec |
var8 |
|
BitSet |
var8 |
|
ArchetypeChunk |
var8 |
|
BitSet |
var8 |
|
HolderSystem |
var9 |
|
ComponentRegistry.Data |
var9 |
|
ComponentRegistry.Data |
var9 |
|
ComponentRegistry.Data |
var9 |
|
ArchetypeChunk |
var9 |
|
int |
var9 |
|
int |
var9 |
|
BitSet |
var9 |
|
EntityDataSystem |
var9 |
|
int |
var9 |
|
|
var9 |
|
EntityHolderEventSystem |
var9 |
|
BitSet |
var9 |
|
EntityHolderEventSystem |
var9 |
|
long |
var9 |
|
ISystem |
var9 |
|
Holder |
var9 |
|
int |
var9 |
|
int |
var9 |
|
int |
var9 |
Методы (190)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Unable to shutdown store while thread is still running!") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("EntityReference is already in use!") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("EntityReference is not for this store!") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("EntityHolder and EntityReference array length doesn't match!") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("EntityHolder start and length exceed array length!") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("EntityReference start and length exceed array length!") |
abstract |
throw new |
IllegalArgumentExceptionthrow new IllegalArgumentException("Entity already contains component type: " + var3) |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Store is already shutdown!") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Store is shutdown!") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Store is currently processing! Ensure you aren't calling a store method from a system.") |
abstract |
throw new |
IllegalStateExceptionthrow new IllegalStateException("Assert not in thread! " + this.thread + " but was in " + var1) |
|
private |
ProcessingCounterprivate ProcessingCounter() |
abstract |
throw new |
UnsupportedOperationExceptionthrow new UnsupportedOperationException("Conditions are not supported") |
public |
void |
addEntitiesvoid addEntities(@Nonnull Holder<ECS_TYPE>[] var1, @Nonnull Ref<ECS_TYPE>[] var2, @Nonnull AddReason var3) |
public |
void |
addEntitiesvoid addEntities(@Nonnull Holder<ECS_TYPE>[] var1, int var2, @Nonnull Ref<ECS_TYPE>[] var3, int var4, int var5, @Nonnull AddReason var6) |
public |
void |
assertThreadvoid assertThread() |
public |
void |
assertWriteProcessingvoid assertWriteProcessing() |
private |
<T extends Component<ECS_TYPE>> void |
datachunk_addComponent<T extends Component<ECS_TYPE>> void datachunk_addComponent(@Nonnull Ref<ECS_TYPE> var1,
@Nonnull ArchetypeChunk<ECS_TYPE> var2,
@Nonnull ComponentType<ECS_TYPE, T> var3,
@Nonnull T var4,
@Nonnull CommandBuffer<ECS_TYPE> var5) |
public |
<T extends Component<ECS_TYPE>> void |
ensureComponent<T extends Component<ECS_TYPE>> void ensureComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) |
public |
<T extends ArchetypeDataSystem<ECS_TYPE, Q, R>, Q, R> void |
fetch<T extends ArchetypeDataSystem<ECS_TYPE, Q, R>, Q, R> void fetch(@Nonnull SystemType<ECS_TYPE, T> var1, Q var2, @Nonnull List<R> var3) |
public |
<T extends EntityDataSystem<ECS_TYPE, Q, R>, Q, R> void |
fetch<T extends EntityDataSystem<ECS_TYPE, Q, R>, Q, R> void fetch(@Nonnull Collection<Ref<ECS_TYPE>> var1, @Nonnull SystemType<ECS_TYPE, T> var2, @Nonnull Q var3, @Nonnull List<R> var4) |
private |
int |
findOrCreateArchetypeChunkint findOrCreateArchetypeChunk(@Nonnull Archetype<ECS_TYPE> var1) |
|
|
for for(int var3 = 0; var3 < var2; var3++) |
|
|
for for(int var6 = 0; var6 < this.entitiesSize; var6++) |
|
|
for for(int var5 = 0; var5 < var2; var5++) |
|
|
for for(int var4 = 0; var4 < this.archetypeSize; var4++) |
|
|
for for(int var2 = 0; var2 < this.archetypeSize; var2++) |
|
|
for for(int var6 = 0; var6 < var3; var6++) |
|
|
for for(int var9 = var4; var9 < var8; var9++) |
|
|
for for(int var15 = var2; var15 < var7; var15++) |
|
|
for for(int var33 = var27; var13 < var8; var33++) |
|
|
for for(int var34 = var27; var13 < var5; var34++) |
|
|
for for(int var38 = var4; var38 < var8; var38++) |
|
|
for for(int var6 = 0; var6 < var3; var6++) |
|
|
for for(int var9 = var2; var9 < var7; var9++) |
|
|
for for(int var14 = var2; var14 < var7; var14++) |
|
|
for for(int var27 = 0; var27 < var5; var27++) |
|
|
for for(int var28 = var2; var28 < var7; var28++) |
|
|
for for(int var37 = var4; var37 < var8; var37++) |
|
|
for for(int var3 = 0; var3 < this.archetypeSize; var3++) |
|
|
for for(int var4 = 0; var4 < this.archetypeSize; var4++) |
|
|
for for(int var10 = 0; var10 < this.archetypeSize; var10++) |
|
|
for for(int var11 = 0; var11 < this.archetypeSize; var11++) |
|
|
for for(int var3 = 0; var3 < this.archetypeSize; var3++) |
|
|
for for(int var5 = 0; var5 < this.archetypeSize; var5++) |
|
|
for for(Ref var11 : var1) |
|
|
for for(int var4 = 0; var4 < this.resources.length; var4++) |
|
|
for for(int var31 = 0; var31 < var29; var31++) |
|
|
for for(int var11 = 0; var11 < var10; var11++) |
|
|
for for(int var24 = 0; var24 < this.archetypeSize; var24++) |
|
|
for for(int var23 = 0; var23 < this.archetypeSize; var23++) |
|
|
for for(int var4 = var3; var4 < var2; var4++) |
|
|
for for(int var11 = 0; var11 < var3; var11++) |
|
|
for for(int var12 = 0; var12 < this.archetypeSize; var12++) |
|
|
for for(int var9 = 0; var9 < this.archetypeSize; var9++) |
abstract |
|
for for(int var4 = 0; var4 < var1.getSystemSize() |
abstract |
|
for for(int var6 = 0; var6 < var1.getSystemSize() |
abstract |
|
for for(int var7 = var4.getMinIndex() |
abstract |
|
for for(int var5 = var1.getMinIndex() |
abstract |
|
for for(int var8 = var6.size() |
abstract |
|
for for(int var19 = var17.size() |
abstract |
|
for for(int var10 = var8.size() |
abstract |
|
for for(int var12 = 0; var12 < var2.getDataChangeCount() |
abstract |
|
for for(int var17 = 0; var17 < var1.getSystemSize() |
abstract |
|
for for(int var38 = 0; var38 < var1.getSystemSize() |
abstract |
|
for for(int var14 = 0; var14 < var1.getSystemSize() |
public |
void |
forEachChunkvoid forEachChunk(@Nonnull BiConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var1) |
public |
boolean |
forEachChunkboolean forEachChunk(@Nonnull BiPredicate<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var1) |
public |
void |
forEachChunkvoid forEachChunk(Query<ECS_TYPE> var1, @Nonnull BiConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) |
public |
boolean |
forEachChunkboolean forEachChunk(Query<ECS_TYPE> var1, @Nonnull BiPredicate<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) |
public |
void |
forEachChunkvoid forEachChunk(int var1, @Nonnull BiConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) |
public |
boolean |
forEachChunkboolean forEachChunk(int var1, @Nonnull BiPredicate<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) |
public |
void |
forEachEntityParallelvoid forEachEntityParallel(IntBiObjectConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var1) |
public |
void |
forEachEntityParallelvoid forEachEntityParallel(Query<ECS_TYPE> var1, IntBiObjectConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) |
public |
int |
getArchetypeChunkCountint getArchetypeChunkCount() |
public |
int |
getArchetypeChunkCountForint getArchetypeChunkCountFor(int var1) |
public |
int |
getEntityCountint getEntityCount() |
public |
int |
getEntityCountForint getEntityCountFor(@Nonnull Query<ECS_TYPE> var1) |
public |
int |
getEntityCountForint getEntityCountFor(int var1) |
public |
int |
getStoreIndexint getStoreIndex() |
|
|
if if(var5 instanceof MetricSystem var7) |
|
|
if if(var4 != null) |
|
|
if if(this.shutdown) |
|
|
if if(var6 != null) |
|
|
if if(var1 instanceof ExactArchetypeQuery var2) |
|
|
if if(var3 != null) |
|
|
if if(var8 != null) |
|
|
if if(var6 != null) |
|
|
if if(var21 <= var20) |
|
|
if if(var1.length != var2.length) |
|
|
if if(var1.length < var7) |
|
|
if if(var3.length < var8) |
|
|
if if(var28 <= this.entitiesSize) |
|
|
if if(var21 > 1) |
|
|
if if(var5 != var22) |
|
|
if if(var1.length != var2.length) |
|
|
if if(var1.length < var7) |
|
|
if if(var3.length < var8) |
|
|
if if(var13 != var38) |
|
|
if if(var4 == null) |
|
|
if if(var4 == null) |
|
|
if if(COUNT_SEQLOCK_RETRIES) |
|
|
if if(this.shutdown) |
|
|
if if(var4 != null) |
|
|
if if(this.shutdown) |
|
|
if if(this.shutdown) |
|
|
if if(var1 instanceof ExactArchetypeQuery var4) |
|
|
if if(var5 != Integer.MIN_VALUE) |
|
|
if if(this.shutdown) |
|
|
if if(var1 instanceof ExactArchetypeQuery var5) |
|
|
if if(var6 != Integer.MIN_VALUE) |
|
|
if if(this.shutdown) |
|
|
if if(this.shutdown) |
|
|
if if(this.shutdown) |
|
|
if if(var4 != null) |
|
|
if if(var5 != 0) |
|
|
if if(this.shutdown) |
|
|
if if(var1 instanceof ExactArchetypeQuery var4) |
|
|
if if(var14 != Integer.MIN_VALUE) |
|
|
if if(var16 != 0) |
|
|
if if(var7 != 0) |
|
|
if if(this.shutdown) |
|
|
if if(this.shutdown) |
|
|
if if(var3 != null) |
|
|
if if(this.shutdown) |
|
|
if if(var9 < 0) |
|
|
if if(var3 != null) |
|
|
if if(this.shutdown) |
|
|
if if(var2 != null) |
|
|
if if(this.shutdown) |
|
|
if if(var4 != null) |
|
|
if if(var10 < 0) |
|
|
if if(var4 != null) |
|
|
if if(var3 != null) |
|
|
if if(this.shutdown) |
|
|
if if(this.shutdown) |
|
|
if if(this.shutdown) |
|
|
if if(this.shutdown) |
|
|
if if(this.resources[var4] == null && var5 != null) |
|
|
if if(var10 >= 0) |
|
|
if if(var11) |
|
|
if if(var3 instanceof SystemChange var4) |
|
|
if if(var5 instanceof StoreSystem) |
|
|
if if(var5 instanceof StoreSystem) |
|
|
if if(var3 instanceof ComponentChange var4) |
|
|
if if(var25 != null) |
|
|
if if(var32 != null) |
|
|
if if(var12 != null) |
|
|
if if(var8 != null) |
|
|
if if(var19 instanceof ArchetypeChunkSystem var21) |
|
|
if if(var19 instanceof ArchetypeChunkSystem var20) |
|
|
if if(var3 < var2) |
|
|
if if(var5 != null) |
|
|
if if(var2 != Integer.MIN_VALUE) |
|
|
if if(var4 <= var2) |
|
|
if if(var10 instanceof ArchetypeChunkSystem) |
|
|
if if(var2 == this.archetypeSize - 1) |
protected |
<Event extends EcsEvent> void |
internal_invoke<Event extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, Ref<ECS_TYPE> var2, Event var3) |
protected |
<Event extends EcsEvent> void |
internal_invoke<Event extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, @Nonnull EntityEventType<ECS_TYPE, Event> var2, Ref<ECS_TYPE> var3, Event var4) |
protected |
<Event extends EcsEvent> void |
internal_invoke<Event extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, Holder<ECS_TYPE> var2, Event var3) |
protected |
<Event extends EcsEvent> void |
internal_invoke<Event extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, @Nonnull EntityHolderEventType<ECS_TYPE, Event> var2, Holder<ECS_TYPE> var3, Event var4) |
protected |
<Event extends EcsEvent> void |
internal_invoke<Event extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, Event var2) |
protected |
<Event extends EcsEvent> void |
internal_invoke<Event extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, @Nonnull WorldEventType<ECS_TYPE, Event> var2, Event var3) |
public |
boolean |
isAliveInDifferentThreadboolean isAliveInDifferentThread() |
|
public boolean |
isHeldpublic boolean isHeld() |
public |
boolean |
isInThreadboolean isInThread() |
public |
boolean |
isShutdownboolean isShutdown() |
|
public void |
lockpublic void lock() |
|
public void |
lockInterruptiblypublic void lockInterruptibly() |
|
public Condition |
newConditionpublic Condition newCondition() |
|
void |
onAddvoid onAdd(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) |
public |
void |
pausedTickvoid pausedTick(float var1) |
private |
void |
removeArchetypeChunkvoid removeArchetypeChunk(@Nonnull ArchetypeChunk<ECS_TYPE> var1) |
public |
<T extends Component<ECS_TYPE>> boolean |
removeComponentIfExists<T extends Component<ECS_TYPE>> boolean removeComponentIfExists(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) |
public |
<T extends Component<ECS_TYPE>> void |
replaceComponent<T extends Component<ECS_TYPE>> void replaceComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3) |
public |
<T extends Resource<ECS_TYPE>> void |
replaceResource<T extends Resource<ECS_TYPE>> void replaceResource(@Nonnull ResourceType<ECS_TYPE, T> var1, @Nonnull T var2) |
public |
void |
shutdownvoid shutdown() |
|
void |
shutdown0void shutdown0(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) |
|
void |
storeCommandBuffervoid storeCommandBuffer(@Nonnull CommandBuffer<ECS_TYPE> var1) |
public |
void |
tickvoid tick(float var1) |
public |
void |
tickvoid tick(ArchetypeTickingSystem<ECS_TYPE> var1, float var2, int var3) |
private |
<Tickable extends TickableSystem<ECS_TYPE>> void |
tickInternal<Tickable extends TickableSystem<ECS_TYPE>> void tickInternal(float var1, SystemType<ECS_TYPE, Tickable> var2) |
|
public boolean |
tryLockpublic boolean tryLock() |
|
public boolean |
tryLockpublic boolean tryLock(long var1, @Nonnull TimeUnit var3) |
|
public void |
unlockpublic void unlock() |
private |
void |
updateArchetypeIndexesvoid updateArchetypeIndexes(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) |
|
void |
updateDatavoid updateData(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2) |
private |
void |
updateDatavoid updateData(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, DataChange var3) |
private |
void |
updateData0void updateData0(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, DataChange var3) |
|
|
while while(true) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.component;
class="kw">import com.hypixel.hytale.codec.Codec;
class="kw">import com.hypixel.hytale.codec.codecs.array.ArrayCodec;
class="kw">import com.hypixel.hytale.common.util.ArrayUtil;
class="kw">import com.hypixel.hytale.component.data.ForEachTaskData;
class="kw">import com.hypixel.hytale.component.data.change.ChangeType;
class="kw">import com.hypixel.hytale.component.data.change.ComponentChange;
class="kw">import com.hypixel.hytale.component.data.change.DataChange;
class="kw">import com.hypixel.hytale.component.data.change.SystemChange;
class="kw">import com.hypixel.hytale.component.data.unknown.UnknownComponents;
class="kw">import com.hypixel.hytale.component.event.EntityEventType;
class="kw">import com.hypixel.hytale.component.event.EntityHolderEventType;
class="kw">import com.hypixel.hytale.component.event.WorldEventType;
class="kw">import com.hypixel.hytale.component.metric.ArchetypeChunkData;
class="kw">import com.hypixel.hytale.component.metric.SystemMetricData;
class="kw">import com.hypixel.hytale.component.query.ExactArchetypeQuery;
class="kw">import com.hypixel.hytale.component.query.Query;
class="kw">import com.hypixel.hytale.component.system.ArchetypeChunkSystem;
class="kw">import com.hypixel.hytale.component.system.EcsEvent;
class="kw">import com.hypixel.hytale.component.system.EntityEventSystem;
class="kw">import com.hypixel.hytale.component.system.EntityHolderEventSystem;
class="kw">import com.hypixel.hytale.component.system.HolderSystem;
class="kw">import com.hypixel.hytale.component.system.ISystem;
class="kw">import com.hypixel.hytale.component.system.MetricSystem;
class="kw">import com.hypixel.hytale.component.system.QuerySystem;
class="kw">import com.hypixel.hytale.component.system.RefChangeSystem;
class="kw">import com.hypixel.hytale.component.system.RefSystem;
class="kw">import com.hypixel.hytale.component.system.StoreSystem;
class="kw">import com.hypixel.hytale.component.system.WorldEventSystem;
class="kw">import com.hypixel.hytale.component.system.data.ArchetypeDataSystem;
class="kw">import com.hypixel.hytale.component.system.data.EntityDataSystem;
class="kw">import com.hypixel.hytale.component.system.tick.ArchetypeTickingSystem;
class="kw">import com.hypixel.hytale.component.system.tick.EntityTickingSystem;
class="kw">import com.hypixel.hytale.component.system.tick.TickableSystem;
class="kw">import com.hypixel.hytale.component.system.tick.TickingSystem;
class="kw">import com.hypixel.hytale.component.task.ParallelRangeTask;
class="kw">import com.hypixel.hytale.component.task.ParallelTask;
class="kw">import com.hypixel.hytale.function.consumer.IntBiObjectConsumer;
class="kw">import com.hypixel.hytale.metrics.MetricResults;
class="kw">import com.hypixel.hytale.metrics.MetricsRegistry;
class="kw">import com.hypixel.hytale.metrics.metric.HistoricMetric;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntMap;
class="kw">import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap;
class="kw">import it.unimi.dsi.fastutil.objects.ObjectArrayList;
class="kw">import java.lang.invoke.VarHandle;
class="kw">import java.util.ArrayDeque;
class="kw">import java.util.Arrays;
class="kw">import java.util.BitSet;
class="kw">import java.util.Collection;
class="kw">import java.util.Deque;
class="kw">import java.util.List;
class="kw">import java.util.Objects;
class="kw">import java.util.concurrent.CompletableFuture;
class="kw">import java.util.concurrent.TimeUnit;
class="kw">import java.util.concurrent.atomic.AtomicLong;
class="kw">import java.util.concurrent.locks.Condition;
class="kw">import java.util.concurrent.locks.Lock;
class="kw">import java.util.function.BiConsumer;
class="kw">import java.util.function.BiPredicate;
class="kw">import java.util.function.Predicate;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class Store<ECS_TYPE> class="kw">implements ComponentAccessor<ECS_TYPE> {
class="kw">public class="kw">static class="kw">final Store[] EMPTY_ARRAY = new Store[0];
class="kw">private class="kw">static class="kw">final boolean COUNT_SEQLOCK_RETRIES = Store.class.desiredAssertionStatus();
@Nonnull
class="kw">public class="kw">static class="kw">final MetricsRegistry<Store<?>> METRICS_REGISTRY = new MetricsRegistry<Store<?>>()
.register("ArchetypeChunkCount", Store::getArchetypeChunkCount, Codec.INTEGER)
.register("EntityCount", Store::getEntityCount, Codec.INTEGER)
.register(
"Systems",
var0 -> {
ComponentRegistry.Data var1 = var0.getRegistry().getData();
HistoricMetric[] var2 = var0.getSystemMetrics();
SystemMetricData[] var3 = new SystemMetricData[var1.getSystemSize()];
for (int var4 = 0; var4 < var1.getSystemSize(); var4++) {
ISystem var5 = var1.getSystem(var4);
MetricResults var6 = null;
if (var5 class="kw">instanceof MetricSystem var7) {
var6 = var7.toMetricResults(var0);
}
var3[var4] = new SystemMetricData(
var5.getClass().getName(),
var0.getArchetypeChunkCountFor(var4),
var0.getEntityCountFor(var4),
var5 class="kw">instanceof TickingSystem ? var2[var4] : null,
var6
);
}
class="kw">return var3;
},
new ArrayCodec<>(SystemMetricData.CODEC, SystemMetricData[]::new)
)
.register("ArchetypeChunks", Store::collectArchetypeChunkData, new ArrayCodec<>(ArchetypeChunkData.CODEC, ArchetypeChunkData[]::new));
@Nonnull
class="kw">private class="kw">final ComponentRegistry<ECS_TYPE> registry;
@Nonnull
class="kw">private class="kw">final ECS_TYPE externalData;
@Nonnull
class="kw">private class="kw">final IResourceStorage resourceStorage;
class="kw">private class="kw">final Deque<CommandBuffer<ECS_TYPE>> commandBuffers = new ArrayDeque<>();
class="kw">private class="kw">final Thread thread = Thread.currentThread();
@Nonnull
class="kw">private class="kw">final ParallelTask<EntityTickingSystem.SystemTaskData<ECS_TYPE>> parallelTask = new ParallelTask<>(EntityTickingSystem.SystemTaskData::new);
@Nonnull
class="kw">private class="kw">final ParallelTask<ForEachTaskData<ECS_TYPE>> forEachTask = new ParallelTask<>(ForEachTaskData::new);
@Nonnull
class="kw">private class="kw">final ParallelTask<EntityDataSystem.SystemTaskData<ECS_TYPE, ?, ?>> fetchTask = new ParallelTask<>(EntityDataSystem.SystemTaskData::new);
@Nonnull
class="kw">private class="kw">final Store.ProcessingCounter processing = new Store.ProcessingCounter();
class="kw">private class="kw">volatile boolean shutdown;
int storeIndex;
class="kw">private int entitiesSize;
@Nonnull
class="kw">private Ref<ECS_TYPE>[] refs = new Ref[16];
@Nonnull
class="kw">private BitSet[] systemIndexToArchetypeChunkIndexes = ArrayUtil.EMPTY_BITSET_ARRAY;
@Nonnull
class="kw">private class="kw">final Object2IntMap<Archetype<ECS_TYPE>> archetypeToIndexMap = new Object2IntOpenHashMap();
class="kw">private int archetypeSize;
@Nonnull
class="kw">private class="kw">final BitSet archetypeChunkReuse = new BitSet();
@Nonnull
class="kw">private ArchetypeChunk<ECS_TYPE>[] archetypeChunks = ArchetypeChunk.emptyArray();
@Nonnull
class="kw">private Resource<ECS_TYPE>[] resources = Resource.EMPTY_ARRAY;
@Nonnull
class="kw">private HistoricMetric[] systemMetrics = HistoricMetric.EMPTY_ARRAY;
@Deprecated(forRemoval = true)
class="kw">private boolean disableProcessingAssert = false;
@Nonnull
class="kw">final AtomicLong seqlockRetries = new AtomicLong();
Store(@Nonnull ComponentRegistry<ECS_TYPE> var1, int var2, @Nonnull ECS_TYPE var3, @Nonnull IResourceStorage var4) {
this.registry = var1;
this.storeIndex = var2;
this.externalData = var3;
this.resourceStorage = var4;
this.archetypeToIndexMap.defaultReturnValue(Integer.MIN_VALUE);
}
@Nonnull
CommandBuffer<ECS_TYPE> takeCommandBuffer() {
this.assertThread();
if (this.commandBuffers.isEmpty()) {
class="kw">return new CommandBuffer<>(this);
}
CommandBuffer var1 = this.commandBuffers.pop();
assert var1.setThread();
class="kw">return var1;
}
void storeCommandBuffer(@Nonnull CommandBuffer<ECS_TYPE> var1) {
this.assertThread();
var1.validateEmpty();
this.commandBuffers.add(var1);
}
class="kw">public int getStoreIndex() {
class="kw">return this.storeIndex;
}
@Nonnull
class="kw">public ComponentRegistry<ECS_TYPE> getRegistry() {
class="kw">return this.registry;
}
@Nonnull
@Override
class="kw">public ECS_TYPE getExternalData() {
class="kw">return this.externalData;
}
@Nonnull
class="kw">public IResourceStorage getResourceStorage() {
class="kw">return this.resourceStorage;
}
@Nonnull
class="kw">public ParallelTask<EntityTickingSystem.SystemTaskData<ECS_TYPE>> getParallelTask() {
class="kw">return this.parallelTask;
}
@Nonnull
class="kw">public ParallelTask<EntityDataSystem.SystemTaskData<ECS_TYPE, ?, ?>> getFetchTask() {
class="kw">return this.fetchTask;
}
@Nonnull
class="kw">public HistoricMetric[] getSystemMetrics() {
this.assertThread();
class="kw">return this.systemMetrics;
}
class="kw">public boolean isShutdown() {
class="kw">return this.shutdown;
}
void onAdd(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) {
this.updateArchetypeIndexes(var1);
int var2 = var1.getResourceSize();
this.resources = Arrays.copyOf(this.resources, var2);
for (int var3 = 0; var3 < var2; var3++) {
ResourceType var4 = (ResourceType<ECS_TYPE, ? class="kw">extends Resource<ECS_TYPE>>)var1.getResourceType(var3);
if (var4 != null) {
this.resources[var3] = (Resource<ECS_TYPE>)this.resourceStorage.load(this, var1, var4).join();
}
}
for (int var6 = 0; var6 < var1.getSystemSize(); var6++) {
this.updateData(var1, var1, new SystemChange<>(ChangeType.REGISTERED, var1.getSystem(var6)));
}
this.systemMetrics = Arrays.copyOf(this.systemMetrics, var1.getSystemSize());
SystemType var7 = this.registry.getTickableSystemType();
BitSet var8 = var1.getSystemIndexesForType(var7);
int var5 = -1;
while ((var5 = var8.nextSetBit(var5 + 1)) >= 0) {
this.systemMetrics[var5] = HistoricMetric.builder(33333333L, TimeUnit.NANOSECONDS)
.addPeriod(1L, TimeUnit.SECONDS)
.addPeriod(1L, TimeUnit.MINUTES)
.addPeriod(5L, TimeUnit.MINUTES)
.build();
}
}
class="kw">public void shutdown() {
if (this.shutdown) {
throw new IllegalStateException("Store is already shutdown!");
}
this.registry.removeStore(this);
}
void shutdown0(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) {
if (this.thread.isAlive() && this.thread != Thread.currentThread()) {
throw new IllegalArgumentException("Unable to shutdown store while thread is still running!");
}
for (int var2 = var1.getSystemSize() - 1; var2 >= 0; var2--) {
this.updateData(var1, var1, new SystemChange<>(ChangeType.UNREGISTERED, var1.getSystem(var2)));
}
this.saveAllResources0(var1).join();
this.processing.lock();
try {
for (int var6 = 0; var6 < this.entitiesSize; var6++) {
this.refs[var6].invalidate();
this.refs[var6] = null;
}
} class="kw">finally {
this.processing.unlock();
}
this.shutdown = true;
}
@Nonnull
class="kw">public CompletableFuture<Void> saveAllResources() {
class="kw">return this.saveAllResources0(this.registry.getData());
}
@Nonnull
class="kw">private CompletableFuture<Void> saveAllResources0(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) {
int var2 = var1.getResourceSize();
CompletableFuture[] var3 = new CompletableFuture[var2];
int var4 = 0;
for (int var5 = 0; var5 < var2; var5++) {
ResourceType var6 = (ResourceType<ECS_TYPE, ? class="kw">extends Resource<ECS_TYPE>>)var1.getResourceType(var5);
if (var6 != null) {
var3[var4++] = this.resourceStorage.save(this, var1, var6, this.resources[var5]);
}
}
class="kw">return CompletableFuture.allOf(Arrays.copyOf(var3, var4));
}
class="kw">public int getEntityCount() {
class="kw">return this.entitiesSize;
}
class="kw">public int getEntityCountFor(@Nonnull Query<ECS_TYPE> var1) {
this.assertThread();
if (var1 class="kw">instanceof ExactArchetypeQuery var2) {
int var6 = this.archetypeToIndexMap.getInt(var2.getArchetype());
class="kw">return var6 != Integer.MIN_VALUE ? this.archetypeChunks[var6].size() : 0;
} else {
int var3 = 0;
for (int var4 = 0; var4 < this.archetypeSize; var4++) {
ArchetypeChunk var5 = this.archetypeChunks[var4];
if (var5 != null && var1.test(var5.getArchetype())) {
var3 += var5.size();
}
}
class="kw">return var3;
}
}
class="kw">public int getEntityCountFor(int var1) {
this.assertThread();
int var2 = 0;
BitSet var3 = this.systemIndexToArchetypeChunkIndexes[var1];
int var4 = -1;
while ((var4 = var3.nextSetBit(var4 + 1)) >= 0) {
var2 += this.archetypeChunks[var4].size();
}
class="kw">return var2;
}
class="kw">public int getArchetypeChunkCount() {
this.assertThread();
class="kw">return this.archetypeSize;
}
@Nonnull
class="kw">public ArchetypeChunkData[] collectArchetypeChunkData() {
this.assertThread();
ObjectArrayList var1 = new ObjectArrayList(this.archetypeSize);
for (int var2 = 0; var2 < this.archetypeSize; var2++) {
ArchetypeChunk var3 = this.archetypeChunks[var2];
if (var3 != null) {
Archetype var4 = var3.getArchetype();
String[] var5 = new String[var4.count()];
int var6 = 0;
for (int var7 = var4.getMinIndex(); var7 < var4.length(); var7++) {
ComponentType var8 = (ComponentType<ECS_TYPE, ? class="kw">extends Component<ECS_TYPE>>)var4.get(var7);
if (var8 != null) {
var5[var6++] = var8.getTypeClass().getName();
}
}
var1.add(new ArchetypeChunkData(var5, var3.size()));
}
}
class="kw">return (ArchetypeChunkData[])var1.toArray(ArchetypeChunkData[]::new);
}
class="kw">public int getArchetypeChunkCountFor(int var1) {
this.assertThread();
class="kw">return this.systemIndexToArchetypeChunkIndexes[var1].cardinality();
}
@Nullable
class="kw">public Ref<ECS_TYPE> addEntity(@Nonnull Archetype<ECS_TYPE> var1, @Nonnull AddReason var2) {
this.assertThread();
this.assertWriteProcessing();
Component[] var3;
if (var1.isEmpty()) {
var3 = Component.EMPTY_ARRAY;
} else {
ComponentRegistry.Data var4 = this.registry._internal_getData();
var3 = new Component[var1.length()];
for (int var5 = var1.getMinIndex(); var5 < var1.length(); var5++) {
ComponentType var6 = (ComponentType<ECS_TYPE, ? class="kw">extends Component<ECS_TYPE>>)var1.get(var5);
if (var6 != null) {
var3[var6.getIndex()] = var4.createComponent((ComponentType<ECS_TYPE, Component<ECS_TYPE>>)var6);
}
}
}
class="kw">return this.addEntity(this.registry.newHolder(var1, var3), new Ref<>(this), var2);
}
@Nullable
@Override
class="kw">public Ref<ECS_TYPE> addEntity(@Nonnull Holder<ECS_TYPE> var1, @Nonnull AddReason var2) {
class="kw">return this.addEntity(var1, new Ref<>(this), var2);
}
@Nullable
class="kw">public Ref<ECS_TYPE> addEntity(@Nonnull Holder<ECS_TYPE> var1, @Nonnull Ref<ECS_TYPE> var2, @Nonnull AddReason var3) {
if (var2.isValid()) {
throw new IllegalArgumentException("EntityReference is already in use!");
}
if (var2.getStore() != this) {
throw new IllegalArgumentException("EntityReference is not for this store!");
}
this.assertThread();
this.assertWriteProcessing();
CommandBuffer var4 = this.takeCommandBuffer();
ComponentRegistry.Data var5 = this.registry._internal_getData();
this.processing.lock();
try {
SystemType var6 = this.registry.getHolderSystemType();
BitSet var7 = var5.getSystemIndexesForType(var6);
int var8 = -1;
while ((var8 = var7.nextSetBit(var8 + 1)) >= 0) {
HolderSystem var9 = var5.getSystem(var8, var6);
if (var9.test(this.registry, var1.getArchetype())) {
var9.onEntityAdd(var1, var3, this);
}
}
int var20 = this.entitiesSize++;
int var21 = this.refs.length;
if (var21 <= var20) {
var8 = ArrayUtil.grow(var20);
this.refs = Arrays.copyOf(this.refs, var8);
}
this.refs[var20] = var2;
var2.setIndex(var20);
var8 = this.findOrCreateArchetypeChunk(var1.getArchetype());
ArchetypeChunk var24 = this.archetypeChunks[var8];
int var10 = var24.addEntity(var2, var1);
var2.beginMutation();
var2.setPosition(var24, var10);
var2.endMutation();
SystemType systemTypex = this.registry.getRefSystemType();
BitSet systemIndexesx = var5.getSystemIndexesForType(systemTypex);
BitSet var13 = var24.getSystemIndexes();
var4.track(var2);
int systemIndexx = -1;
while ((systemIndexx = systemIndexesx.nextSetBit(systemIndexx + 1)) >= 0) {
if (var13.get(systemIndexx)) {
RefSystem var15 = var5.getSystem(systemIndexx, systemTypex);
boolean var16 = this.disableProcessingAssert;
this.disableProcessingAssert = var15 class="kw">instanceof DisableProcessingAssert;
var15.onEntityAdded(var2, var3, this, var4);
this.disableProcessingAssert = var16;
if (var4.consumeWasTrackedRefRemoved()) {
break;
}
}
}
} class="kw">finally {
this.processing.unlock();
}
var4.consume();
class="kw">return var2.isValid() ? var2 : null;
}
@Nonnull
@Override
class="kw">public Ref<ECS_TYPE>[] addEntities(@Nonnull Holder<ECS_TYPE>[] var1, @Nonnull AddReason var2) {
class="kw">return this.addEntities(var1, 0, var1.length, var2);
}
@Nonnull
class="kw">public Ref<ECS_TYPE>[] addEntities(@Nonnull Holder<ECS_TYPE>[] var1, int var2, int var3, @Nonnull AddReason var4) {
Ref[] var5 = new Ref[var3];
for (int var6 = 0; var6 < var3; var6++) {
var5[var6] = new Ref<>(this);
}
this.addEntities(var1, var2, var5, 0, var3, var4);
class="kw">return var5;
}
class="kw">public void addEntities(@Nonnull Holder<ECS_TYPE>[] var1, @Nonnull Ref<ECS_TYPE>[] var2, @Nonnull AddReason var3) {
if (var1.length != var2.length) {
throw new IllegalArgumentException("EntityHolder and EntityReference array length doesn't match!");
}
this.addEntities(var1, 0, var2, 0, var1.length, var3);
}
class="kw">public void addEntities(@Nonnull Holder<ECS_TYPE>[] var1, int var2, @Nonnull Ref<ECS_TYPE>[] var3, int var4, int var5, @Nonnull AddReason var6) {
int var7 = var2 + var5;
int var8 = var4 + var5;
if (var1.length < var7) {
throw new IllegalArgumentException("EntityHolder start and length exceed array length!");
}
if (var3.length < var8) {
throw new IllegalArgumentException("EntityReference start and length exceed array length!");
}
for (int var9 = var4; var9 < var8; var9++) {
Ref var10 = var3[var9];
if (var10.isValid()) {
throw new IllegalArgumentException("EntityReference is already in use!");
}
if (var10.getStore() != this) {
throw new IllegalArgumentException("EntityReference is not for this store!");
}
}
this.assertThread();
this.assertWriteProcessing();
CommandBuffer var25 = this.takeCommandBuffer();
ComponentRegistry.Data var26 = this.registry._internal_getData();
this.processing.lock();
try {
SystemType var11 = this.registry.getHolderSystemType();
BitSet var12 = var26.getSystemIndexesForType(var11);
int var13 = -1;
while ((var13 = var12.nextSetBit(var13 + 1)) >= 0) {
HolderSystem var14 = var26.getSystem(var13, var11);
for (int var15 = var2; var15 < var7; var15++) {
if (var14.test(this.registry, var1[var15].getArchetype())) {
var14.onEntityAdd(var1[var15], var6, this);
}
}
}
int var27 = this.entitiesSize;
this.entitiesSize += var5;
int var28 = this.refs.length;
if (var28 <= this.entitiesSize) {
var13 = ArrayUtil.grow(this.entitiesSize);
this.refs = Arrays.copyOf(this.refs, var13);
}
System.arraycopy(var3, var4, this.refs, var27, var5);
var13 = var4;
for (int var33 = var27; var13 < var8; var33++) {
var3[var13].setIndex(var33);
var13++;
}
var13 = 0;
for (int var34 = var27; var13 < var5; var34++) {
Ref var36 = var3[var4 + var13];
Holder var16 = var1[var2 + var13];
int var17 = this.findOrCreateArchetypeChunk(var16.getArchetype());
ArchetypeChunk var18 = this.archetypeChunks[var17];
int var19 = var18.addEntity(var36, var16);
var36.beginMutation();
var36.setPosition(var18, var19);
var36.endMutation();
var13++;
}
SystemType systemTypex = this.registry.getRefSystemType();
BitSet systemIndexesx = var26.getSystemIndexesForType(systemTypex);
int systemIndexx = -1;
while ((systemIndexx = systemIndexesx.nextSetBit(systemIndexx + 1)) >= 0) {
for (int var38 = var4; var38 < var8; var38++) {
Ref var39 = var3[var38];
BitSet var40 = var39.getArchetypeChunk().getSystemIndexes();
if (var40.get(systemIndexx)) {
RefSystem var41 = var26.getSystem(systemIndexx, systemTypex);
boolean var20 = this.disableProcessingAssert;
this.disableProcessingAssert = var41 class="kw">instanceof DisableProcessingAssert;
var25.track(var39);
var41.onEntityAdded(var39, var6, this, var25);
if (var25.consumeWasTrackedRefRemoved()) {
int var21 = var8 - var38;
if (var21 > 1) {
System.arraycopy(var3, var38 + 1, var3, var38, var21 - 1);
var3[var8 - 1] = var39;
var38--;
}
var8--;
var5--;
}
this.disableProcessingAssert = var20;
}
}
}
} class="kw">finally {
this.processing.unlock();
}
var25.consume();
}
@Nonnull
class="kw">public Holder<ECS_TYPE> copyEntity(@Nonnull Ref<ECS_TYPE> var1) {
class="kw">return this.copyEntity(var1, this.registry.newHolder());
}
@Nonnull
class="kw">public Holder<ECS_TYPE> copyEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull Holder<ECS_TYPE> var2) {
this.assertThread();
var1.validate(this);
class="kw">return var1.getArchetypeChunk().copyEntity(var1.getChunkEntityIndex(), var2);
}
@Nonnull
class="kw">public Holder<ECS_TYPE> copySerializableEntity(@Nonnull Ref<ECS_TYPE> var1) {
class="kw">return this.copySerializableEntity(var1, this.registry.newHolder(), null);
}
@Nonnull
class="kw">public Holder<ECS_TYPE> copySerializableEntity(
@Nonnull Ref<ECS_TYPE> var1, @Nonnull Holder<ECS_TYPE> var2, @Nullable Predicate<ComponentType<ECS_TYPE, ?>> var3
) {
this.assertThread();
var1.validate(this);
class="kw">return var1.getArchetypeChunk().copySerializableEntity(this.registry.getData(), var1.getChunkEntityIndex(), var2, var3);
}
@Nonnull
@Override
class="kw">public Archetype<ECS_TYPE> getArchetype(@Nonnull Ref<ECS_TYPE> var1) {
this.assertThread();
var1.validate(this);
class="kw">return var1.getArchetypeChunk().getArchetype();
}
@Nonnull
class="kw">protected Archetype<ECS_TYPE> __internal_getArchetype(@Nonnull Ref<ECS_TYPE> var1) {
var1.validate(this);
class="kw">return var1.getArchetypeChunk().getArchetype();
}
@Nonnull
class="kw">public Holder<ECS_TYPE> removeEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull RemoveReason var2) {
class="kw">return this.removeEntity(var1, this.registry.newHolder(), var2);
}
@Nonnull
@Override
class="kw">public Holder<ECS_TYPE> removeEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull Holder<ECS_TYPE> var2, @Nonnull RemoveReason var3) {
class="kw">return this.removeEntity(var1, var2, var3, null);
}
@Nonnull
Holder<ECS_TYPE> removeEntity(@Nonnull Ref<ECS_TYPE> var1, @Nonnull Holder<ECS_TYPE> var2, @Nonnull RemoveReason var3, @Nullable Throwable var4) {
this.assertThread();
this.assertWriteProcessing();
int var5 = var1.validate(this);
CommandBuffer var6 = this.takeCommandBuffer();
ArchetypeChunk var7 = var1.getArchetypeChunk();
int var8 = var1.getChunkEntityIndex();
ComponentRegistry.Data var9 = this.registry._internal_getData();
this.processing.lock();
try {
SystemType var10 = this.registry.getRefSystemType();
BitSet var11 = var9.getSystemIndexesForType(var10);
BitSet var12 = var7.getSystemIndexes();
int var13 = -1;
while ((var13 = var11.nextSetBit(var13 + 1)) >= 0) {
if (var12.get(var13)) {
var9.getSystem(var13, var10).onEntityRemove(var1, var3, this, var6);
}
}
int var22 = this.entitiesSize - 1;
if (var5 != var22) {
Ref var24 = this.refs[var22];
var24.setIndex(var5);
this.refs[var5] = var24;
}
this.refs[var22] = null;
this.entitiesSize = var22;
var1.beginMutation();
var7.removeEntity(var8, var2);
if (var7.size() == 0) {
this.removeArchetypeChunk(var7);
}
var1.invalidate(var4);
} class="kw">finally {
this.processing.unlock();
}
var6.consume();
this.processing.lock();
try {
SystemType var23 = this.registry.getHolderSystemType();
BitSet var25 = var9.getSystemIndexesForType(var23);
int var26 = -1;
while ((var26 = var25.nextSetBit(var26 + 1)) >= 0) {
HolderSystem var27 = var9.getSystem(var26, var23);
if (var27.test(this.registry, var2.getArchetype())) {
var27.onEntityRemoved(var2, var3, this);
}
}
} class="kw">finally {
this.processing.unlock();
}
class="kw">return var2;
}
@Nonnull
class="kw">public Holder<ECS_TYPE>[] removeEntities(@Nonnull Ref<ECS_TYPE>[] var1, @Nonnull RemoveReason var2) {
class="kw">return this.removeEntities(var1, 0, var1.length, var2);
}
@Nonnull
class="kw">public Holder<ECS_TYPE>[] removeEntities(@Nonnull Ref<ECS_TYPE>[] var1, int var2, int var3, @Nonnull RemoveReason var4) {
Holder[] var5 = new Holder[var3];
for (int var6 = 0; var6 < var3; var6++) {
var5[var6] = this.registry.newHolder();
}
class="kw">return this.removeEntities(var1, var2, var5, 0, var3, var4);
}
@Nonnull
class="kw">public Holder<ECS_TYPE>[] removeEntities(@Nonnull Ref<ECS_TYPE>[] var1, @Nonnull Holder<ECS_TYPE>[] var2, @Nonnull RemoveReason var3) {
if (var1.length != var2.length) {
throw new IllegalArgumentException("EntityHolder and EntityReference array length doesn't match!");
} else {
class="kw">return this.removeEntities(var1, 0, var2, 0, var1.length, var3);
}
}
@Nonnull
class="kw">public Holder<ECS_TYPE>[] removeEntities(
@Nonnull Ref<ECS_TYPE>[] var1, int var2, @Nonnull Holder<ECS_TYPE>[] var3, int var4, int var5, @Nonnull RemoveReason var6
) {
int var7 = var2 + var5;
int var8 = var4 + var5;
if (var1.length < var7) {
throw new IllegalArgumentException("EntityReference start and length exceed array length!");
}
if (var3.length < var8) {
throw new IllegalArgumentException("EntityHolder start and length exceed array length!");
}
for (int var9 = var2; var9 < var7; var9++) {
var1[var9].validate(this);
}
this.assertThread();
this.assertWriteProcessing();
CommandBuffer var26 = this.takeCommandBuffer();
ComponentRegistry.Data var10 = this.registry._internal_getData();
this.processing.lock();
try {
SystemType var11 = this.registry.getRefSystemType();
BitSet var12 = var10.getSystemIndexesForType(var11);
int var13 = -1;
while ((var13 = var12.nextSetBit(var13 + 1)) >= 0) {
for (int var14 = var2; var14 < var7; var14++) {
Ref var15 = var1[var14];
BitSet var16 = var15.getArchetypeChunk().getSystemIndexes();
if (var16.get(var13)) {
var10.getSystem(var13, var11).onEntityRemove(var1[var14], var6, this, var26);
}
}
}
for (int var27 = 0; var27 < var5; var27++) {
Ref var30 = var1[var2 + var27];
var13 = var30.getIndex();
ArchetypeChunk var34 = var30.getArchetypeChunk();
int var36 = var30.getChunkEntityIndex();
int var38 = this.entitiesSize - 1;
if (var13 != var38) {
Ref var17 = this.refs[var38];
var17.setIndex(var13);
this.refs[var13] = var17;
}
this.refs[var38] = null;
this.entitiesSize = var38;
Holder var39 = var3[var4 + var27];
var30.beginMutation();
var34.removeEntity(var36, var39);
if (var34.size() == 0) {
this.removeArchetypeChunk(var34);
}
}
for (int var28 = var2; var28 < var7; var28++) {
var1[var28].invalidate();
}
} class="kw">finally {
this.processing.unlock();
}
var26.consume();
this.processing.lock();
try {
SystemType var29 = this.registry.getHolderSystemType();
BitSet var31 = var10.getSystemIndexesForType(var29);
int var33 = -1;
while ((var33 = var31.nextSetBit(var33 + 1)) >= 0) {
HolderSystem var35 = var10.getSystem(var33, var29);
for (int var37 = var4; var37 < var8; var37++) {
if (var35.test(this.registry, var3[var37].getArchetype())) {
var35.onEntityRemoved(var3[var37], var6, this);
}
}
}
} class="kw">finally {
this.processing.unlock();
}
class="kw">return var3;
}
class="kw">public <T class="kw">extends Component<ECS_TYPE>> void ensureComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
this.assertThread();
this.assertWriteProcessing();
var2.validateRegistry(this.registry);
var2.validate();
CommandBuffer var3 = this.takeCommandBuffer();
this.processing.lock();
try {
ArchetypeChunk var4 = var1.getArchetypeChunk();
if (!var4.getArchetype().contains(var2)) {
Component var5 = this.registry._internal_getData().createComponent(var2);
this.datachunk_addComponent(var1, var4, var2, var5, var3);
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
}
@Nonnull
@Override
class="kw">public <T class="kw">extends Component<ECS_TYPE>> T ensureAndGetComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
this.assertThread();
this.assertWriteProcessing();
var2.validateRegistry(this.registry);
var2.validate();
CommandBuffer var3 = this.takeCommandBuffer();
this.processing.lock();
Component var4;
try {
ArchetypeChunk var5 = var1.getArchetypeChunk();
var4 = var5.__internal_getComponent(var1.getChunkEntityIndex(), var2);
if (var4 == null) {
var4 = this.registry._internal_getData().createComponent(var2);
this.datachunk_addComponent(var1, var5, var2, var4, var3);
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
class="kw">return var4;
}
@Nonnull
@Override
class="kw">public <T class="kw">extends Component<ECS_TYPE>> T addComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
this.assertThread();
this.assertWriteProcessing();
Component var3 = this.registry._internal_getData().createComponent(var2);
this.addComponent(var1, var2, var3);
class="kw">return var3;
}
@Override
class="kw">public <T class="kw">extends Component<ECS_TYPE>> void addComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3) {
this.assertThread();
this.assertWriteProcessing();
var1.validate(this);
var2.validateRegistry(this.registry);
var2.validate();
Objects.requireNonNull(var3);
CommandBuffer var4 = this.takeCommandBuffer();
this.processing.lock();
try {
this.datachunk_addComponent(var1, var1.getArchetypeChunk(), var2, var3, var4);
} class="kw">finally {
this.processing.unlock();
}
var4.consume();
}
class="kw">public <T class="kw">extends Component<ECS_TYPE>> void replaceComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3) {
this.assertThread();
this.assertWriteProcessing();
var1.validate(this);
var2.validateRegistry(this.registry);
var2.validate();
Objects.requireNonNull(var3);
CommandBuffer var4 = this.takeCommandBuffer();
this.processing.lock();
try {
ArchetypeChunk var5 = var1.getArchetypeChunk();
int var6 = var1.getChunkEntityIndex();
Component var7 = var5.__internal_getComponent(var6, var2);
var5.setComponent(var6, var2, var3);
BitSet var8 = var5.getSystemIndexes();
ComponentRegistry.Data var9 = this.registry._internal_getData();
BitSet var10 = var9.getSystemIndexesForType(this.registry.getRefChangeSystemType());
int var11 = -1;
while ((var11 = var10.nextSetBit(var11 + 1)) >= 0) {
if (var8.get(var11)) {
RefChangeSystem var12 = (RefChangeSystem<ECS_TYPE, T>)var9.getSystem(var11);
if (var12.componentType().getIndex() == var2.getIndex()) {
var12.onComponentSet(var1, var7, var3, this, var4);
}
}
}
} class="kw">finally {
this.processing.unlock();
}
var4.consume();
}
@Override
class="kw">public <T class="kw">extends Component<ECS_TYPE>> void putComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2, @Nonnull T var3) {
this.assertThread();
this.assertWriteProcessing();
var1.validate(this);
var2.validateRegistry(this.registry);
var2.validate();
Objects.requireNonNull(var3);
CommandBuffer var4 = this.takeCommandBuffer();
this.processing.lock();
try {
ArchetypeChunk var5 = var1.getArchetypeChunk();
if (var5.getArchetype().contains(var2)) {
int var6 = var1.getChunkEntityIndex();
Component var7 = var5.__internal_getComponent(var6, var2);
var5.setComponent(var6, var2, var3);
BitSet var8 = var5.getSystemIndexes();
ComponentRegistry.Data var9 = this.registry._internal_getData();
BitSet var10 = var9.getSystemIndexesForType(this.registry.getRefChangeSystemType());
int var11 = -1;
while ((var11 = var10.nextSetBit(var11 + 1)) >= 0) {
if (var8.get(var11)) {
RefChangeSystem var12 = (RefChangeSystem<ECS_TYPE, T>)var9.getSystem(var11);
if (var12.componentType().getIndex() == var2.getIndex()) {
var12.onComponentSet(var1, var7, var3, this, var4);
}
}
}
} else {
this.datachunk_addComponent(var1, var5, var2, var3, var4);
}
} class="kw">finally {
this.processing.unlock();
}
var4.consume();
}
@Override
class="kw">public <T class="kw">extends Component<ECS_TYPE>> T getComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
this.assertThread();
class="kw">return this.__internal_getComponent(var1, var2);
}
@Nullable
class="kw">public <T class="kw">extends Component<ECS_TYPE>> T getComponentConcurrent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
var2.validateRegistry(this.registry);
var2.validate();
while (true) {
int var3 = var1.getSeq();
if ((var3 & 1) != 0) {
Thread.onSpinWait();
} else {
if (!var1.isValid(this)) {
class="kw">return null;
}
ArchetypeChunk var4 = var1.getArchetypeChunk();
if (var4 == null) {
Thread.onSpinWait();
} else {
Component var5 = var4.__internal_getComponentConcurrent(var1.getChunkEntityIndex(), var2);
VarHandle.loadLoadFence();
if (var3 == var1.getSeq()) {
class="kw">return var5;
}
if (COUNT_SEQLOCK_RETRIES) {
this.seqlockRetries.incrementAndGet();
}
Thread.onSpinWait();
}
}
}
}
@Nullable
class="kw">protected <T class="kw">extends Component<ECS_TYPE>> T __internal_getComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
var1.validate(this);
var2.validateRegistry(this.registry);
var2.validate();
class="kw">return var1.getArchetypeChunk().__internal_getComponent(var1.getChunkEntityIndex(), var2);
}
@Override
class="kw">public <T class="kw">extends Component<ECS_TYPE>> void removeComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
this.assertThread();
this.assertWriteProcessing();
var1.validate(this);
var2.validateRegistry(this.registry);
var2.validate();
CommandBuffer var3 = this.takeCommandBuffer();
this.processing.lock();
try {
ArchetypeChunk var4 = var1.getArchetypeChunk();
int var5 = var1.getChunkEntityIndex();
Component var6 = var4.__internal_getComponent(var5, var2);
assert var6 != null;
Archetype var7 = Archetype.remove(var4.getArchetype(), var2);
int var8 = this.findOrCreateArchetypeChunk(var7);
ArchetypeChunk var9 = this.archetypeChunks[var8];
var9.addEntityFrom(var1, var4, var5);
BitSet var10 = var4.getSystemIndexes();
ComponentRegistry.Data var11 = this.registry._internal_getData();
BitSet var12 = var11.getSystemIndexesForType(this.registry.getRefChangeSystemType());
int var13 = -1;
while ((var13 = var12.nextSetBit(var13 + 1)) >= 0) {
if (var10.get(var13)) {
RefChangeSystem var14 = (RefChangeSystem<ECS_TYPE, T>)var11.getSystem(var13);
if (var14.componentType().getIndex() == var2.getIndex()) {
var14.onComponentRemoved(var1, var6, this, var3);
}
}
}
if (var4.size() == 0) {
this.removeArchetypeChunk(var4);
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
}
@Override
class="kw">public <T class="kw">extends Component<ECS_TYPE>> void tryRemoveComponent(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
this.removeComponentIfExists(var1, var2);
}
class="kw">public <T class="kw">extends Component<ECS_TYPE>> boolean removeComponentIfExists(@Nonnull Ref<ECS_TYPE> var1, @Nonnull ComponentType<ECS_TYPE, T> var2) {
this.assertThread();
this.assertWriteProcessing();
var1.validate(this);
var2.validateRegistry(this.registry);
var2.validate();
CommandBuffer var3 = this.takeCommandBuffer();
this.processing.lock();
boolean var4;
try {
ArchetypeChunk var5 = var1.getArchetypeChunk();
if (!var5.getArchetype().contains(var2)) {
var4 = false;
} else {
int var6 = var1.getChunkEntityIndex();
Component var7 = var5.__internal_getComponent(var6, var2);
assert var7 != null;
Archetype var8 = Archetype.remove(var5.getArchetype(), var2);
int var9 = this.findOrCreateArchetypeChunk(var8);
ArchetypeChunk var10 = this.archetypeChunks[var9];
var10.addEntityFrom(var1, var5, var6);
BitSet var11 = var5.getSystemIndexes();
ComponentRegistry.Data var12 = this.registry._internal_getData();
BitSet var13 = var12.getSystemIndexesForType(this.registry.getRefChangeSystemType());
int var14 = -1;
while ((var14 = var13.nextSetBit(var14 + 1)) >= 0) {
if (var11.get(var14)) {
RefChangeSystem var15 = (RefChangeSystem<ECS_TYPE, T>)var12.getSystem(var14);
if (var15.componentType().getIndex() == var2.getIndex()) {
var15.onComponentRemoved(var1, var7, this, var3);
}
}
}
if (var5.size() == 0) {
this.removeArchetypeChunk(var5);
}
var4 = true;
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
class="kw">return var4;
}
class="kw">public <T class="kw">extends Resource<ECS_TYPE>> void replaceResource(@Nonnull ResourceType<ECS_TYPE, T> var1, @Nonnull T var2) {
this.assertThread();
var1.validateRegistry(this.registry);
Objects.requireNonNull(var2);
this.resources[var1.getIndex()] = var2;
}
@Nonnull
@Override
class="kw">public <T class="kw">extends Resource<ECS_TYPE>> T getResource(@Nonnull ResourceType<ECS_TYPE, T> var1) {
var1.validateRegistry(this.registry);
class="kw">return (T)this.resources[var1.getIndex()];
}
@Nonnull
class="kw">protected <T class="kw">extends Resource<ECS_TYPE>> T __internal_getResource(@Nonnull ResourceType<ECS_TYPE, T> var1) {
var1.validateRegistry(this.registry);
class="kw">return (T)this.resources[var1.getIndex()];
}
class="kw">public void forEachChunk(@Nonnull BiConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var1) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var2 = this.takeCommandBuffer();
this.processing.lock();
try {
for (int var3 = 0; var3 < this.archetypeSize; var3++) {
ArchetypeChunk var4 = this.archetypeChunks[var3];
if (var4 != null) {
var1.accept(var4, var2);
}
}
} class="kw">finally {
this.processing.unlock();
}
var2.consume();
}
class="kw">public boolean forEachChunk(@Nonnull BiPredicate<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var1) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var2 = this.takeCommandBuffer();
boolean var3 = false;
this.processing.lock();
try {
for (int var4 = 0; var4 < this.archetypeSize; var4++) {
ArchetypeChunk var5 = this.archetypeChunks[var4];
if (var5 != null && var1.test(var5, var2)) {
var3 = true;
break;
}
}
} class="kw">finally {
this.processing.unlock();
}
var2.consume();
class="kw">return var3;
}
class="kw">public void forEachChunk(Query<ECS_TYPE> var1, @Nonnull BiConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var3 = this.takeCommandBuffer();
this.processing.lock();
try {
if (var1 class="kw">instanceof ExactArchetypeQuery var4) {
int var5 = this.archetypeToIndexMap.getInt(var4.getArchetype());
if (var5 != Integer.MIN_VALUE) {
var2.accept(this.archetypeChunks[var5], var3);
}
} else {
for (int var10 = 0; var10 < this.archetypeSize; var10++) {
ArchetypeChunk var6 = this.archetypeChunks[var10];
if (var6 != null && var1.test(var6.getArchetype())) {
var2.accept(this.archetypeChunks[var10], var3);
}
}
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
}
class="kw">public boolean forEachChunk(Query<ECS_TYPE> var1, @Nonnull BiPredicate<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var3 = this.takeCommandBuffer();
boolean var4 = false;
this.processing.lock();
try {
if (var1 class="kw">instanceof ExactArchetypeQuery var5) {
int var6 = this.archetypeToIndexMap.getInt(var5.getArchetype());
if (var6 != Integer.MIN_VALUE) {
var4 = var2.test(this.archetypeChunks[var6], var3);
}
} else {
for (int var11 = 0; var11 < this.archetypeSize; var11++) {
ArchetypeChunk var7 = this.archetypeChunks[var11];
if (var7 != null && var1.test(var7.getArchetype()) && var2.test(this.archetypeChunks[var11], var3)) {
var4 = true;
break;
}
}
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
class="kw">return var4;
}
class="kw">public void forEachChunk(int var1, @Nonnull BiConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var3 = this.takeCommandBuffer();
this.processing.lock();
try {
BitSet var4 = this.systemIndexToArchetypeChunkIndexes[var1];
int var5 = -1;
while ((var5 = var4.nextSetBit(var5 + 1)) >= 0) {
var2.accept(this.archetypeChunks[var5], var3);
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
}
class="kw">public boolean forEachChunk(int var1, @Nonnull BiPredicate<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var3 = this.takeCommandBuffer();
boolean var4 = false;
this.processing.lock();
try {
BitSet var5 = this.systemIndexToArchetypeChunkIndexes[var1];
int var6 = -1;
while ((var6 = var5.nextSetBit(var6 + 1)) >= 0) {
if (var2.test(this.archetypeChunks[var6], var3)) {
var4 = true;
break;
}
}
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
class="kw">return var4;
}
class="kw">public void forEachEntityParallel(IntBiObjectConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var1) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var2 = this.takeCommandBuffer();
this.forEachTask.init();
this.processing.lock();
try {
for (int var3 = 0; var3 < this.archetypeSize; var3++) {
ArchetypeChunk var4 = this.archetypeChunks[var3];
if (var4 != null) {
int var5 = var4.size();
if (var5 != 0) {
ParallelRangeTask var6 = this.forEachTask.appendTask();
var6.init(0, var5);
int var7 = 0;
for (int var8 = var6.size(); var7 < var8; var7++) {
var6.get(var7).init(var1, var4, var2.fork());
}
}
}
}
ForEachTaskData.invokeParallelTask(this.forEachTask, var2);
} class="kw">finally {
this.processing.unlock();
}
var2.consume();
}
class="kw">public void forEachEntityParallel(Query<ECS_TYPE> var1, IntBiObjectConsumer<ArchetypeChunk<ECS_TYPE>, CommandBuffer<ECS_TYPE>> var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var3 = this.takeCommandBuffer();
this.forEachTask.init();
this.processing.lock();
try {
if (var1 class="kw">instanceof ExactArchetypeQuery var4) {
int var14 = this.archetypeToIndexMap.getInt(var4.getArchetype());
if (var14 != Integer.MIN_VALUE) {
ArchetypeChunk var15 = this.archetypeChunks[var14];
int var16 = var15.size();
if (var16 != 0) {
ParallelRangeTask var17 = this.forEachTask.appendTask();
var17.init(0, var16);
int var18 = 0;
for (int var19 = var17.size(); var18 < var19; var18++) {
var17.get(var18).init(var2, var15, var3.fork());
}
}
}
} else {
for (int var5 = 0; var5 < this.archetypeSize; var5++) {
ArchetypeChunk var6 = this.archetypeChunks[var5];
if (var6 != null && var1.test(var6.getArchetype())) {
int var7 = var6.size();
if (var7 != 0) {
ParallelRangeTask var8 = this.forEachTask.appendTask();
var8.init(0, var7);
int var9 = 0;
for (int var10 = var8.size(); var9 < var10; var9++) {
var8.get(var9).init(var2, var6, var3.fork());
}
}
}
}
}
ForEachTaskData.invokeParallelTask(this.forEachTask, var3);
} class="kw">finally {
this.processing.unlock();
}
var3.consume();
}
class="kw">public <T class="kw">extends ArchetypeDataSystem<ECS_TYPE, Q, R>, Q, R> void fetch(@Nonnull SystemType<ECS_TYPE, T> var1, Q var2, @Nonnull List<R> var3) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
ComponentRegistry.Data var4 = this.registry._internal_getData();
CommandBuffer var5 = this.takeCommandBuffer();
this.fetchTask.init();
BitSet var6 = var4.getSystemIndexesForType(var1);
this.processing.lock();
try {
int var7 = -1;
while ((var7 = var6.nextSetBit(var7 + 1)) >= 0) {
ArchetypeDataSystem var8 = (T)var4.getSystem(var7, var1);
BitSet var9 = this.systemIndexToArchetypeChunkIndexes[var7];
int var10 = -1;
while ((var10 = var9.nextSetBit(var10 + 1)) >= 0) {
var8.fetch(this.archetypeChunks[var10], this, var5, var2, var3);
}
}
EntityDataSystem.SystemTaskData.invokeParallelTask(this.fetchTask, var5, var3);
} class="kw">finally {
this.processing.unlock();
}
var5.consume();
}
class="kw">public <T class="kw">extends EntityDataSystem<ECS_TYPE, Q, R>, Q, R> void fetch(
@Nonnull Collection<Ref<ECS_TYPE>> var1, @Nonnull SystemType<ECS_TYPE, T> var2, @Nonnull Q var3, @Nonnull List<R> var4
) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
ComponentRegistry.Data var5 = this.registry._internal_getData();
CommandBuffer var6 = this.takeCommandBuffer();
this.fetchTask.init();
BitSet var7 = var5.getSystemIndexesForType(var2);
this.processing.lock();
try {
int var8 = -1;
while ((var8 = var7.nextSetBit(var8 + 1)) >= 0) {
EntityDataSystem var9 = (T)var5.getSystem(var8, var2);
for (Ref var11 : var1) {
ArchetypeChunk var12 = var11.getArchetypeChunk();
BitSet var13 = var12.getSystemIndexes();
if (var13.get(var8)) {
var9.fetch(var11.getChunkEntityIndex(), var12, this, var6, var3, var4);
}
}
}
EntityDataSystem.SystemTaskData.invokeParallelTask(this.fetchTask, var6, var4);
} class="kw">finally {
this.processing.unlock();
}
var6.consume();
}
@Override
class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull Ref<ECS_TYPE> var1, @Nonnull Event var2) {
EntityEventType var3 = this.registry.getEntityEventTypeForClass(var2.getClass());
if (var3 != null) {
((Store<ECS_TYPE>)this).invoke(var3, var1, var2);
}
}
@Override
class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull EntityEventType<ECS_TYPE, Event> var1, @Nonnull Ref<ECS_TYPE> var2, @Nonnull Event var3) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
ComponentRegistry.Data var4 = this.registry._internal_getData();
CommandBuffer var5 = this.takeCommandBuffer();
var5.track(var2);
BitSet var6 = var4.getSystemIndexesForType(var1);
this.processing.lock();
try {
ArchetypeChunk var7 = var2.getArchetypeChunk();
BitSet var8 = var7.getSystemIndexes();
int var9 = -1;
while ((var9 = var6.nextSetBit(var9 + 1)) >= 0) {
var9 = var8.nextSetBit(var9);
if (var9 < 0) {
break;
}
if (var6.get(var9)) {
EntityEventSystem var10 = var4.getSystem(var9, var1);
var10.handleInternal(var2.getChunkEntityIndex(), var7, this, var5, var3);
if (var5.consumeWasTrackedRefRemoved()) {
break;
}
}
}
} class="kw">finally {
this.processing.unlock();
}
var5.consume();
}
@Override
class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull Holder<ECS_TYPE> var1, @Nonnull Event var2) {
EntityHolderEventType var3 = this.registry.getEntityHolderEventTypeForClass(var2.getClass());
if (var3 != null) {
((Store<ECS_TYPE>)this).invoke(var3, var1, var2);
}
}
@Override
class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull EntityHolderEventType<ECS_TYPE, Event> var1, @Nonnull Holder<ECS_TYPE> var2, @Nonnull Event var3) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
ComponentRegistry.Data var4 = this.registry._internal_getData();
CommandBuffer var5 = this.takeCommandBuffer();
BitSet var6 = var4.getSystemIndexesForType(var1);
this.processing.lock();
try {
Archetype var7 = var2.getArchetype();
int var8 = -1;
while ((var8 = var6.nextSetBit(var8 + 1)) >= 0) {
EntityHolderEventSystem var9 = var4.getSystem(var8, var1);
if (var9.getQuery() != null && var9.getQuery().test(var7)) {
var9.handleInternal(var2, this, var5, var3);
}
}
} class="kw">finally {
this.processing.unlock();
}
var5.consume();
}
@Override
class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull Event var1) {
WorldEventType var2 = this.registry.getWorldEventTypeForClass(var1.getClass());
if (var2 != null) {
((Store<ECS_TYPE>)this).invoke(var2, var1);
}
}
@Override
class="kw">public <Event class="kw">extends EcsEvent> void invoke(@Nonnull WorldEventType<ECS_TYPE, Event> var1, @Nonnull Event var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
ComponentRegistry.Data var3 = this.registry._internal_getData();
CommandBuffer var4 = this.takeCommandBuffer();
BitSet var5 = var3.getSystemIndexesForType(var1);
this.processing.lock();
try {
int var6 = -1;
while ((var6 = var5.nextSetBit(var6 + 1)) >= 0) {
WorldEventSystem var7 = var3.getSystem(var6, var1);
var7.handleInternal(this, var4, var2);
}
} class="kw">finally {
this.processing.unlock();
}
var4.consume();
}
class="kw">protected <Event class="kw">extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, Ref<ECS_TYPE> var2, Event var3) {
EntityEventType var4 = this.registry.getEntityEventTypeForClass(var3.getClass());
if (var4 != null) {
((Store<ECS_TYPE>)this).internal_invoke(var1, var4, var2, var3);
}
}
class="kw">protected <Event class="kw">extends EcsEvent> void internal_invoke(
CommandBuffer<ECS_TYPE> var1, @Nonnull EntityEventType<ECS_TYPE, Event> var2, Ref<ECS_TYPE> var3, Event var4
) {
ComponentRegistry.Data var5 = this.registry._internal_getData();
CommandBuffer var6 = var1.fork();
var6.track(var3);
BitSet var7 = var5.getSystemIndexesForType(var2);
ArchetypeChunk var8 = var3.getArchetypeChunk();
BitSet var9 = var8.getSystemIndexes();
int var10 = -1;
while ((var10 = var7.nextSetBit(var10 + 1)) >= 0) {
var10 = var9.nextSetBit(var10);
if (var10 < 0) {
break;
}
if (var7.get(var10)) {
EntityEventSystem var11 = var5.getSystem(var10, var2);
var11.handleInternal(var3.getChunkEntityIndex(), var8, this, var6, var4);
if (var6.consumeWasTrackedRefRemoved()) {
break;
}
}
}
var6.mergeParallel(var1);
}
class="kw">protected <Event class="kw">extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, Holder<ECS_TYPE> var2, Event var3) {
EntityHolderEventType var4 = this.registry.getEntityHolderEventTypeForClass(var3.getClass());
if (var4 != null) {
((Store<ECS_TYPE>)this).internal_invoke(var1, var4, var2, var3);
}
}
class="kw">protected <Event class="kw">extends EcsEvent> void internal_invoke(
CommandBuffer<ECS_TYPE> var1, @Nonnull EntityHolderEventType<ECS_TYPE, Event> var2, Holder<ECS_TYPE> var3, Event var4
) {
ComponentRegistry.Data var5 = this.registry._internal_getData();
BitSet var6 = var5.getSystemIndexesForType(var2);
Archetype var7 = var3.getArchetype();
int var8 = -1;
while ((var8 = var6.nextSetBit(var8 + 1)) >= 0) {
EntityHolderEventSystem var9 = var5.getSystem(var8, var2);
if (var9.getQuery() != null && var9.getQuery().test(var7)) {
var9.handleInternal(var3, this, var1, var4);
}
}
}
class="kw">protected <Event class="kw">extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, Event var2) {
WorldEventType var3 = this.registry.getWorldEventTypeForClass(var2.getClass());
if (var3 != null) {
((Store<ECS_TYPE>)this).internal_invoke(var1, var3, var2);
}
}
class="kw">protected <Event class="kw">extends EcsEvent> void internal_invoke(CommandBuffer<ECS_TYPE> var1, @Nonnull WorldEventType<ECS_TYPE, Event> var2, Event var3) {
ComponentRegistry.Data var4 = this.registry._internal_getData();
BitSet var5 = var4.getSystemIndexesForType(var2);
int var6 = -1;
while ((var6 = var5.nextSetBit(var6 + 1)) >= 0) {
WorldEventSystem var7 = var4.getSystem(var6, var2);
var7.handleInternal(this, var1, var3);
}
}
class="kw">public void tick(float var1) {
this.tickInternal(var1, this.registry.getTickingSystemType());
}
class="kw">public void pausedTick(float var1) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
this.tickInternal(var1, this.registry.getRunWhenPausedSystemType());
}
class="kw">private <Tickable class="kw">extends TickableSystem<ECS_TYPE>> void tickInternal(float var1, SystemType<ECS_TYPE, Tickable> var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
this.registry.getDataUpdateLock().readLock().lock();
try {
ComponentRegistry.Data var3 = this.registry.doDataUpdate();
BitSet var4 = var3.getSystemIndexesForType(var2);
int var5 = -1;
while ((var5 = var4.nextSetBit(var5 + 1)) >= 0) {
TickableSystem var6 = (Tickable)var3.getSystem(var5, var2);
long var7 = System.nanoTime();
var6.tick(var1, var5, this);
long var9 = System.nanoTime();
this.systemMetrics[var5].add(var9, var9 - var7);
}
} class="kw">finally {
this.registry.getDataUpdateLock().readLock().unlock();
}
}
class="kw">public void tick(ArchetypeTickingSystem<ECS_TYPE> var1, float var2, int var3) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
this.assertThread();
CommandBuffer var4 = this.takeCommandBuffer();
this.parallelTask.init();
boolean var5 = this.disableProcessingAssert;
this.disableProcessingAssert = var1 class="kw">instanceof DisableProcessingAssert;
this.processing.lock();
try {
BitSet var6 = this.systemIndexToArchetypeChunkIndexes[var3];
int var7 = -1;
while ((var7 = var6.nextSetBit(var7 + 1)) >= 0) {
var1.tick(var2, this.archetypeChunks[var7], this, var4);
}
EntityTickingSystem.SystemTaskData.invokeParallelTask(this.parallelTask, var4);
} class="kw">finally {
this.processing.unlock();
this.disableProcessingAssert = var5;
}
var4.consume();
}
void updateData(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2) {
if (this.shutdown) {
throw new IllegalStateException("Store is shutdown!");
}
int var3 = var2.getResourceSize();
this.resources = Arrays.copyOf(this.resources, var3);
for (int var4 = 0; var4 < this.resources.length; var4++) {
ResourceType var5 = (ResourceType<ECS_TYPE, ? class="kw">extends Resource<ECS_TYPE>>)var2.getResourceType(var4);
if (this.resources[var4] == null && var5 != null) {
this.resources[var4] = (Resource<ECS_TYPE>)this.resourceStorage.load(this, var2, var5).join();
} else if (this.resources[var4] != null && var5 == null) {
this.resources[var4] = null;
}
}
boolean var11 = false;
for (int var12 = 0; var12 < var2.getDataChangeCount(); var12++) {
DataChange var6 = var2.getDataChange(var12);
var11 |= var6 class="kw">instanceof SystemChange;
this.updateData(var1, var2, var6);
}
HistoricMetric[] var13 = this.systemMetrics;
this.systemMetrics = new HistoricMetric[var2.getSystemSize()];
SystemType var14 = this.registry.getTickableSystemType();
BitSet var7 = var2.getSystemIndexesForType(var14);
int var8 = -1;
while ((var8 = var7.nextSetBit(var8 + 1)) >= 0) {
ISystem var9 = var2.getSystem(var8);
int var10 = var1.indexOf(var9);
if (var10 >= 0) {
this.systemMetrics[var8] = var13[var10];
} else {
this.systemMetrics[var8] = HistoricMetric.builder(33333333L, TimeUnit.NANOSECONDS)
.addPeriod(1L, TimeUnit.SECONDS)
.addPeriod(1L, TimeUnit.MINUTES)
.addPeriod(5L, TimeUnit.MINUTES)
.build();
}
}
if (var11) {
this.updateArchetypeIndexes(var2);
}
}
class="kw">private void updateData(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, DataChange var3) {
this.processing.lock();
try {
this.updateData0(var1, var2, var3);
} class="kw">finally {
this.processing.unlock();
}
if (var3 class="kw">instanceof SystemChange var4) {
ISystem var5 = var4.getSystem();
class="kw">switch (var4.getType()) {
case REGISTERED:
if (var5 class="kw">instanceof StoreSystem) {
((StoreSystem)var5).onSystemAddedToStore(this);
}
break;
case UNREGISTERED:
if (var5 class="kw">instanceof StoreSystem) {
((StoreSystem)var5).onSystemRemovedFromStore(this);
}
}
}
}
class="kw">private void updateData0(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1, @Nonnull ComponentRegistry.Data<ECS_TYPE> var2, DataChange var3) {
if (var3 class="kw">instanceof ComponentChange var4) {
ComponentType var5 = var4.getComponentType();
ComponentType var6 = this.registry.getUnknownComponentType();
class="kw">switch (var4.getType()) {
case REGISTERED:
String var22 = var2.getComponentId(var5);
Codec var25 = var2.getComponentCodec((ComponentType<ECS_TYPE, Component<ECS_TYPE>>)var5);
if (var25 != null) {
Holder var28 = this.registry._internal_newEntityHolder();
int var29 = this.archetypeSize;
for (int var31 = 0; var31 < var29; var31++) {
ArchetypeChunk var32 = this.archetypeChunks[var31];
if (var32 != null) {
Archetype var33 = var32.getArchetype();
if (!var33.contains(var5) && var33.contains(var6)) {
Archetype var35 = Archetype.add(var33, var5);
int var36 = this.findOrCreateArchetypeChunk(var35);
ArchetypeChunk var37 = this.archetypeChunks[var36];
var32.transferSomeTo(var28, var37, var3x -> {
UnknownComponents var4 = var32.getComponent(var3x, var6);
assert var4 != null;
class="kw">return var4.contains(var22);
}, var4x -> {
UnknownComponents var5 = var4x.getComponent(var6);
assert var5 != null;
Component var6 = var5.removeComponent(var22, var25);
var4x.addComponent(var5, var6);
}, (var1x, var2x) -> var2x.setPosition(var37, var1x));
if (var32.size() == 0) {
this.archetypeToIndexMap.removeInt(var32.getArchetype());
this.archetypeChunks[var31] = null;
for (int var17 = 0; var17 < var1.getSystemSize(); var17++) {
this.systemIndexToArchetypeChunkIndexes[var17].clear(var31);
}
var32.getSystemIndexes().clear();
this.archetypeChunkReuse.set(var31);
}
if (var37.size() == 0) {
this.archetypeToIndexMap.removeInt(var37.getArchetype());
this.archetypeChunks[var36] = null;
for (int var38 = 0; var38 < var1.getSystemSize(); var38++) {
this.systemIndexToArchetypeChunkIndexes[var38].clear(var36);
}
var37.getSystemIndexes().clear();
this.archetypeChunkReuse.set(var36);
}
}
}
}
}
break;
case UNREGISTERED:
Holder var9 = this.registry._internal_newEntityHolder();
String var7 = var1.getComponentId(var5);
Codec var8 = var1.getComponentCodec((ComponentType<ECS_TYPE, Component<ECS_TYPE>>)var5);
int var10 = this.archetypeSize;
for (int var11 = 0; var11 < var10; var11++) {
ArchetypeChunk var12 = this.archetypeChunks[var11];
if (var12 != null) {
Archetype var13 = var12.getArchetype();
if (var13.contains(var5)) {
this.archetypeToIndexMap.removeInt(var12.getArchetype());
this.archetypeChunks[var11] = null;
for (int var14 = 0; var14 < var1.getSystemSize(); var14++) {
this.systemIndexToArchetypeChunkIndexes[var14].clear(var11);
}
var12.getSystemIndexes().clear();
this.archetypeChunkReuse.set(var11);
Archetype var34 = Archetype.remove(var13, var5);
if (var8 != null && !var34.contains(var6)) {
var34 = Archetype.add(var34, var6);
}
int var15 = this.findOrCreateArchetypeChunk(var34);
ArchetypeChunk var16 = this.archetypeChunks[var15];
var12.transferTo(var9, var16, var4x -> {
if (var8 != null) {
UnknownComponents var5;
if (var4x.getArchetype().contains(var6)) {
var5 = var4x.getComponent(var6);
assert var5 != null;
} else {
var5 = new UnknownComponents<>();
var4x.addComponent(var6, var5);
}
Component var6 = var4x.getComponent((ComponentType<ECS_TYPE, Component<ECS_TYPE>>)var5);
var5.addComponent(var7, var6, var8);
}
var4x.removeComponent(var5);
}, (var1x, var2x) -> var2x.setPosition(var16, var1x));
}
}
}
int var30 = this.archetypeChunkReuse.previousClearBit(var10 - 1);
this.archetypeSize = var30 + 1;
this.archetypeChunkReuse.clear(this.archetypeSize, var10);
}
} else if (var3 class="kw">instanceof SystemChange var18) {
ISystem var19 = var18.getSystem();
class="kw">switch (var18.getType()) {
case REGISTERED:
if (var19 class="kw">instanceof ArchetypeChunkSystem var21) {
for (int var24 = 0; var24 < this.archetypeSize; var24++) {
ArchetypeChunk var27 = this.archetypeChunks[var24];
if (var27 != null && var21.test(this.registry, var27.getArchetype())) {
var21.onSystemAddedToArchetypeChunk(var27);
}
}
}
break;
case UNREGISTERED:
if (var19 class="kw">instanceof ArchetypeChunkSystem var20) {
for (int var23 = 0; var23 < this.archetypeSize; var23++) {
ArchetypeChunk var26 = this.archetypeChunks[var23];
if (var26 != null && var20.test(this.registry, var26.getArchetype())) {
var20.onSystemRemovedFromArchetypeChunk(var26);
}
}
}
}
}
}
class="kw">private void updateArchetypeIndexes(@Nonnull ComponentRegistry.Data<ECS_TYPE> var1) {
int var2 = var1.getSystemSize();
int var3 = this.systemIndexToArchetypeChunkIndexes.length;
if (var3 < var2) {
this.systemIndexToArchetypeChunkIndexes = Arrays.copyOf(this.systemIndexToArchetypeChunkIndexes, var2);
for (int var4 = var3; var4 < var2; var4++) {
this.systemIndexToArchetypeChunkIndexes[var4] = new BitSet(this.archetypeSize);
}
}
for (int var11 = 0; var11 < var3; var11++) {
this.systemIndexToArchetypeChunkIndexes[var11].clear();
}
for (int var12 = 0; var12 < this.archetypeSize; var12++) {
ArchetypeChunk var5 = this.archetypeChunks[var12];
if (var5 != null) {
var5.getSystemIndexes().clear();
}
}
SystemType var13 = this.registry.getQuerySystemType();
BitSet var14 = var1.getSystemIndexesForType(var13);
int var6 = -1;
while ((var6 = var14.nextSetBit(var6 + 1)) >= 0) {
QuerySystem var7 = var1.getSystem(var6, var13);
BitSet var8 = this.systemIndexToArchetypeChunkIndexes[var6];
for (int var9 = 0; var9 < this.archetypeSize; var9++) {
ArchetypeChunk var10 = this.archetypeChunks[var9];
if (var10 != null && var7.test(this.registry, var10.getArchetype())) {
var8.set(var9);
var10.getSystemIndexes().set(var6);
}
}
}
}
class="kw">public void assertWriteProcessing() {
if (this.processing.isHeld() && !this.disableProcessingAssert) {
throw new IllegalStateException("Store is currently processing! Ensure you aren't calling a store method from a system.");
}
}
@Deprecated
class="kw">public boolean isProcessing() {
class="kw">return this.processing.isHeld();
}
class="kw">public void assertThread() {
Thread var1 = Thread.currentThread();
if (var1 != this.thread && this.thread.isAlive()) {
throw new IllegalStateException("Assert not in thread! " + this.thread + " but was in " + var1);
}
}
class="kw">public boolean isInThread() {
class="kw">return Thread.currentThread() == this.thread;
}
class="kw">public boolean isAliveInDifferentThread() {
class="kw">return this.thread.isAlive() && Thread.currentThread() != this.thread;
}
@Nonnull
@Override
class="kw">public String toString() {
class="kw">return "Store{super()="
+ this.getClass()
+ "@"
+ this.hashCode()
+ ", registry="
+ this.registry.getClass()
+ "@"
+ this.registry.hashCode()
+ ", shutdown="
+ this.shutdown
+ ", storeIndex="
+ this.storeIndex
+ ", systemIndexToArchetypeChunkIndexes="
+ Arrays.toString(this.systemIndexToArchetypeChunkIndexes)
+ ", archetypeSize="
+ this.archetypeSize
+ ", archetypeChunks="
+ Arrays.toString(this.archetypeChunks)
+ "}";
}
class="kw">private <T class="kw">extends Component<ECS_TYPE>> void datachunk_addComponent(
@Nonnull Ref<ECS_TYPE> var1,
@Nonnull ArchetypeChunk<ECS_TYPE> var2,
@Nonnull ComponentType<ECS_TYPE, T> var3,
@Nonnull T var4,
@Nonnull CommandBuffer<ECS_TYPE> var5
) {
if (var2.getArchetype().contains(var3)) {
throw new IllegalArgumentException("Entity already contains component type: " + var3);
}
Archetype var6 = Archetype.add(var2.getArchetype(), var3);
int var7 = this.findOrCreateArchetypeChunk(var6);
ArchetypeChunk var8 = this.archetypeChunks[var7];
int var9 = var1.getChunkEntityIndex();
var8.addEntityFrom(var1, var2, var9, var3, var4);
BitSet var10 = var8.getSystemIndexes();
ComponentRegistry.Data var11 = this.registry._internal_getData();
BitSet var12 = var11.getSystemIndexesForType(this.registry.getRefChangeSystemType());
int var13 = -1;
while ((var13 = var12.nextSetBit(var13 + 1)) >= 0) {
if (var10.get(var13)) {
RefChangeSystem var14 = (RefChangeSystem<ECS_TYPE, T>)var11.getSystem(var13);
if (var14.componentType().getIndex() == var3.getIndex()) {
var14.onComponentAdded(var1, var4, this, var5);
}
}
}
if (var2.size() == 0) {
this.removeArchetypeChunk(var2);
}
}
class="kw">private int findOrCreateArchetypeChunk(@Nonnull Archetype<ECS_TYPE> var1) {
int var2 = this.archetypeToIndexMap.getInt(var1);
if (var2 != Integer.MIN_VALUE) {
class="kw">return var2;
}
ComponentRegistry.Data var3 = this.registry._internal_getData();
if (this.archetypeChunkReuse.isEmpty()) {
var2 = this.archetypeSize++;
} else {
var2 = this.archetypeChunkReuse.nextSetBit(0);
this.archetypeChunkReuse.clear(var2);
}
int var4 = this.archetypeChunks.length;
if (var4 <= var2) {
int var5 = ArrayUtil.grow(var2);
this.archetypeChunks = Arrays.copyOf(this.archetypeChunks, var5);
}
ArchetypeChunk var12 = new ArchetypeChunk<>(this, var1);
var12.setArchetypeIndex(var2);
this.archetypeChunks[var2] = var12;
this.archetypeToIndexMap.put(var1, var2);
BitSet var6 = var12.getSystemIndexes();
SystemType var7 = this.registry.getQuerySystemType();
BitSet var8 = var3.getSystemIndexesForType(var7);
int var9 = -1;
while ((var9 = var8.nextSetBit(var9 + 1)) >= 0) {
QuerySystem var10 = var3.getSystem(var9, var7);
if (var10.test(this.registry, var1)) {
this.systemIndexToArchetypeChunkIndexes[var9].set(var2);
var6.set(var9);
if (var10 class="kw">instanceof ArchetypeChunkSystem) {
((ArchetypeChunkSystem)var10).onSystemAddedToArchetypeChunk(var12);
}
}
}
class="kw">return var2;
}
class="kw">private void removeArchetypeChunk(@Nonnull ArchetypeChunk<ECS_TYPE> var1) {
int var2 = var1.getArchetypeIndex();
Archetype var3 = var1.getArchetype();
this.archetypeToIndexMap.removeInt(var3);
this.archetypeChunks[var2] = null;
var1.getSystemIndexes().clear();
ComponentRegistry.Data var4 = this.registry._internal_getData();
BitSet var5 = var4.getSystemIndexesForType(this.registry.getQuerySystemType());
int var6 = -1;
while ((var6 = var5.nextSetBit(var6 + 1)) >= 0) {
this.systemIndexToArchetypeChunkIndexes[var6].clear(var2);
if (var4.getSystem(var6) class="kw">instanceof ArchetypeChunkSystem var8 && var8.test(this.registry, var3)) {
var8.onSystemRemovedFromArchetypeChunk(var1);
}
}
if (var2 == this.archetypeSize - 1) {
int var9 = this.archetypeChunkReuse.previousClearBit(var2 - 1);
this.archetypeSize = var9 + 1;
this.archetypeChunkReuse.clear(this.archetypeSize, var2);
} else {
this.archetypeChunkReuse.set(var2);
}
}
class="kw">private class="kw">static class ProcessingCounter class="kw">implements Lock {
class="kw">private int count = 0;
class="kw">private ProcessingCounter() {
}
class="kw">public boolean isHeld() {
class="kw">return this.count > 0;
}
@Override
class="kw">public void lock() {
this.count++;
}
@Override
class="kw">public void lockInterruptibly() {
throw new UnsupportedOperationException("lockInterruptibly() is not supported");
}
@Override
class="kw">public boolean tryLock() {
throw new UnsupportedOperationException("tryLock() is not supported");
}
@Override
class="kw">public boolean tryLock(long var1, @Nonnull TimeUnit var3) {
throw new UnsupportedOperationException("tryLock() is not supported");
}
@Override
class="kw">public void unlock() {
this.count--;
}
@Nonnull
@Override
class="kw">public Condition newCondition() {
throw new UnsupportedOperationException("Conditions are not supported");
}
}
}