public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) { BufferAccessor <StatefulTriggerEvent> triggerEventsBufferAccessor = chunk.GetBufferAccessor(triggerEventBufferType); for (var i = 0; i < chunk.Count; i++) { DynamicBuffer <StatefulTriggerEvent> triggerEventsBuffer = triggerEventsBufferAccessor[i]; for (var j = triggerEventsBuffer.Length - 1; j >= 0; j--) { StatefulTriggerEvent triggerEvent = triggerEventsBuffer[j]; if (triggerEvent._isStale) { if (triggerEvent.State == PhysicsEventState.Exit) { triggerEventsBuffer.RemoveAt(j); } else { triggerEvent.State = PhysicsEventState.Exit; triggerEventsBuffer[j] = triggerEvent; } } } } }
public void Execute(ArchetypeChunk chunk, int chunkIndex, int firstEntityIndex) { BufferAccessor <StatefulTriggerEvent> triggerEventsBufferAccessor = chunk.GetBufferAccessor(triggerEventBufferType); for (var i = 0; i < chunk.Count; i++) { DynamicBuffer <StatefulTriggerEvent> triggerEventsBuffer = triggerEventsBufferAccessor[i]; for (var j = triggerEventsBuffer.Length - 1; j >= 0; j--) { StatefulTriggerEvent triggerEventElement = triggerEventsBuffer[j]; triggerEventElement._isStale = true; triggerEventsBuffer[j] = triggerEventElement; } } }
private void ProcessForEntity(Entity entity, Entity otherEntity) { if (triggerEventBufferFromEntity.HasComponent(entity)) { DynamicBuffer <StatefulTriggerEvent> triggerEventBuffer = triggerEventBufferFromEntity[entity]; var foundMatch = false; for (var i = 0; i < triggerEventBuffer.Length; i++) { StatefulTriggerEvent triggerEvent = triggerEventBuffer[i]; // If entity is already there, update to Stay if (triggerEvent.Entity == otherEntity) { foundMatch = true; triggerEvent.State = PhysicsEventState.Stay; triggerEvent._isStale = false; triggerEventBuffer[i] = triggerEvent; break; } } // If it's a new entity, add as Enter if (!foundMatch) { triggerEventBuffer.Add( new StatefulTriggerEvent { Entity = otherEntity, State = PhysicsEventState.Enter, _isStale = false } ); } } }