protected override void OnUpdate() { if (gameStateModel == null) { return; } var time = Time.DeltaTime; Entities.WithStructuralChanges().ForEach( (Entity entity, int entityInQueryIndex, ref Translation translation, ref BoardPositionComponent boardPositionComponent, in SwappingComponent swapComponent) => { var startPosition = BoardCalculator.ConvertBoardPositionToTransformPosition(swapComponent.OriginBoardPosition); var targetPosition = BoardCalculator.ConvertBoardPositionToTransformPosition(swapComponent.TargetBoardPosition); var direction = targetPosition - translation.Value; if (math.distancesq(translation.Value, targetPosition) < 0.01f) { boardPositionComponent = new BoardPositionComponent { Position = swapComponent.TargetBoardPosition }; boardModel.SetEntityAt(swapComponent.TargetBoardPosition.x, swapComponent.TargetBoardPosition.y, entity); translation = new Translation { Value = targetPosition }; EntityManager.RemoveComponent <SwappingComponent>(entity); } else { var velocity = math.normalize(direction) * 7 * time; translation.Value += velocity; } }).Run(); }
protected override void OnUpdate() { if (gameStateModel == null || gameStateModel.State != Match3State.MatchesFall) { return; } var time = Time.DeltaTime; Entities.WithAll <IsFallingComponent>().WithNone <DestroyedComponent>().WithStructuralChanges().ForEach( (Entity entity, int entityInQueryIndex, ref BoardPositionComponent boardPositionComponent) => { var positionUnder = new int2(boardPositionComponent.Position.x, boardPositionComponent.Position.y - 1); if (boardModel.IsPositionInBorders(positionUnder) && !boardModel.HasEntityAt(positionUnder)) { boardModel.ClearAt(boardPositionComponent.Position); if (EntityManager.HasComponent <MoveToBoardPositionComponent>(entity) == false) { EntityManager.AddComponentData(entity, new MoveToBoardPositionComponent { TargetPosition = positionUnder }); } else { EntityManager.SetComponentData(entity, new MoveToBoardPositionComponent { TargetPosition = positionUnder }); } boardPositionComponent = new BoardPositionComponent { Position = positionUnder }; boardModel.SetEntityAt(positionUnder.x, positionUnder.y, entity); } else { if (boardModel.IsPositionInBorders(positionUnder) == false) { EntityManager.RemoveComponent <IsFallingComponent>(entity); } else { var entityUnder = boardModel.GetEntityAt(positionUnder.x, positionUnder.y); if (EntityManager.HasComponent <IsFallingComponent>(entityUnder) == false) { EntityManager.RemoveComponent <IsFallingComponent>(entity); } } } }).Run(); Entities.WithNone <DestroyedComponent>().WithStructuralChanges().ForEach( (Entity entity, int entityInQueryIndex, ref Translation translation, in BoardPositionComponent boardPositionComponent, in MoveToBoardPositionComponent moveComponent) => { var targetPosition = BoardCalculator.ConvertBoardPositionToTransformPosition(boardPositionComponent.Position); var direction = targetPosition - translation.Value; if (math.distancesq(translation.Value, targetPosition) < 0.01f || translation.Value.y < targetPosition.y) { translation = new Translation { Value = targetPosition }; EntityManager.RemoveComponent <MoveToBoardPositionComponent>(entity); } else { var velocity = math.normalize(direction) * 10 * time; translation.Value += velocity; } }).Run();