public bool HandleDragEnd(Vector3 screenPos) { if (dragged != null && dragged.hasGameObject) { var gridPos = Utils.GetPlaneTouchPos(screenPos, cameraService.activeCamera); var cell = gridService.GetCell(gridPos); if (cell != null && gridService.IsOccupied(cell) && cell.cell.occupant.hasOrderList) { foreach (var order in cell.cell.occupant.orderList.orderList) { bool isObjectOrder = string.Equals(dragged.objectId, order.id); bool isTypeOrder = string.Equals(dragged.typeId, order.id); if (cell.cell.occupant.hasGameObject && (isObjectOrder || isTypeOrder) && !cell.cell.occupant.orderList.Filled()) { float animationLength = 0.3f; var orderId = isObjectOrder ? dragged.objectId : dragged.typeId; if (!cell.cell.occupant.orderList.HasFilledOrder(orderId)) { AddOrder(orderId, cell.cell.occupant); SceneAttachment.AttachCoroutine(TryCompleteOrderAfterAnimation(dragged, orderId, cell, animationLength)); return(true); } } } } dragged = null; } return(false); }
public bool HandleDragEnd(Vector3 screenPos) { if (dragged != null && dragged.hasGameObject) { var gridPos = Utils.GetPlaneTouchPos(screenPos, cameraService.activeCamera); var cell = gridService.GetCell(gridPos); if (gridService.IsOccupied(cell)) { var occupant = cell.cell.occupant; var mergeComboData = dataProvider.GetMergeComboDataForInput(dragged.objectId); var canMerge = occupant != dragged && mergeComboData != null && dragged.objectId.Equals(occupant.objectId); if (canMerge) { Utils.SetSortingLayer(dragged, Constants.SORTING_LAYER_DEFAULT); var spawnPos = occupant.position; dragged.isDraggable = false; occupant.isDraggable = false; // destroy the entities gridService.DeAttach(dragged); gridService.DeAttach(occupant); dragged.Destroy(); occupant.Destroy(); // spawn the output entity var command = new CommandData(); command.type = Constants.COMMAND_SPAWN_OBJ; command.output = mergeComboData.output; command.count = 1; commandSystem.Execute(command, spawnPos, cell); factoryEntity.CreateVFX(mergeComboData.vfx, spawnPos); // execute the merge complete command commandSystem.Execute(mergeComboData.mergeCompleteCommand, spawnPos, cell); // consume the gesture event return(true); } } } return(false); }