public Cell(int x, int y, CellTypes type = CellTypes.Usual) { this.x = x; this.y = y; this.Type = type; Position = GamefieldUtility.ConvertXYToPosition(x, y, Chuzzle.Scale); }
public void Show() { gameObject.SetActive(true); IntVector2 targetPosition; Chuzzle arrowChuzzle; GamefieldUtility.Tip(gamefield.Level.ActiveChuzzles, out targetPosition, out arrowChuzzle); fromFingerPosition = arrowChuzzle.Current.IntVector2Position; toFingerPosition = targetPosition; var fromPosition = GamefieldUtility.ConvertXYToPosition((int)fromFingerPosition.x, (int)fromFingerPosition.y, Chuzzle.Scale); finger.transform.position = fromPosition; finger.Values["position"] = GamefieldUtility.ConvertXYToPosition((int)toFingerPosition.x, (int)toFingerPosition.y, Chuzzle.Scale); finger.Play(); Tutorial.instance.targetCell = gamefield.Level.GetCellAt(targetPosition); Tutorial.instance.takeableChuzzle = gamefield.Level.At(fromFingerPosition.x, fromFingerPosition.y); gamefield.TileDestroyed += OnTileDestroyed; tutorialCloud.SetText("Drag to destroy"); tutorialCloud.SetPosition(Camera.main.WorldToScreenPoint(fromPosition + Vector3.up * 0.5f)); tutorialCloud.Show(); }
private void MoveChuzzles(List <Cell> activeCells) { foreach (var c in SelectedChuzzles) { var copyPosition = c.transform.position; var real = GamefieldUtility.ToRealCoordinates(c); var targetCell = GamefieldUtility.CellAt(activeCells, real.x, real.y); var difference = c.transform.position - GamefieldUtility.ConvertXYToPosition(real.x, real.y, Chuzzle.Scale); var isNeedCopy = false; if (targetCell != null && !targetCell.IsTemporary) { if (!_isVerticalDrag) { if (difference.x > 0) { isNeedCopy = targetCell.Right == null || (targetCell.Right != null && targetCell.Right.Type != CellTypes.Usual); if (isNeedCopy) { var rightCell = GetRightCell(activeCells, targetCell.Right, c); copyPosition = rightCell.Position + difference - new Vector3(Chuzzle.Scale.x, 0, 0); } } else { isNeedCopy = targetCell.Left == null || (targetCell.Left != null && targetCell.Left.Type != CellTypes.Usual); if (isNeedCopy) { var leftCell = GetLeftCell(activeCells, targetCell.Left, c); copyPosition = leftCell.Position + difference + new Vector3(Chuzzle.Scale.x, 0, 0); } } } else { if (difference.y > 0) { isNeedCopy = targetCell.Top == null || (targetCell.Top != null && (targetCell.Top.Type == CellTypes.Block || targetCell.Top.IsTemporary)); if (isNeedCopy) { var topCell = GetTopCell(activeCells, targetCell.Top, c); copyPosition = topCell.Position + difference - new Vector3(0, Chuzzle.Scale.y, 0); } } else { isNeedCopy = targetCell.Bottom == null || (targetCell.Bottom != null && targetCell.Bottom.Type == CellTypes.Block); if (isNeedCopy) { var bottomCell = GetBottomCell(activeCells, targetCell.Bottom, c); copyPosition = bottomCell.Position + difference + new Vector3(0, Chuzzle.Scale.y, 0); } } } } else { isNeedCopy = true; } if (targetCell == null || targetCell.Type == CellTypes.Block || targetCell.IsTemporary) { switch (CurrentDirection) { case Direction.Left: //if border targetCell = GetLeftCell(activeCells, targetCell, c); break; case Direction.Right: targetCell = GetRightCell(activeCells, targetCell, c); break; case Direction.Top: //if border targetCell = GetTopCell(activeCells, targetCell, c); break; case Direction.Bottom: targetCell = GetBottomCell(activeCells, targetCell, c); break; default: throw new ArgumentOutOfRangeException("Current direction can not be shit"); } c.transform.position = targetCell.Position + difference; // Debug.Log("New coord: "+GamefieldUtility.ToRealCoordinates(c)+" for "+c.gameObject.name + " pos: "+c.transform.position); } if (difference.magnitude < (Chuzzle.Scale.x / 25)) { isNeedCopy = false; } if (isNeedCopy) { c.Teleportable.Show(); c.Teleportable.Copy.transform.position = copyPosition; } else { c.Teleportable.Hide(); } } }