internal void TryDig(DigDirection direction) { Vector3 position = GetDigPosition(direction); WorldTile tileToDig = gameTiles.GetTileAt(position); if (tileToDig != null && tileToDig.Ore.Data != null && tileToDig.Ore.Data.ore != Ore.BedRock) { if (tileToDig.TilemapMember.GetTile(tileToDig.LocalPlace) == null) { return; } if (!digParticles.isPlaying) { digParticles.Play(); } RotateDigParticles(direction); tileToDig.Durability -= Time.deltaTime * DigSpeed * GetTierMultiplier(); playerEnergy.DecreaseEnergy(Time.deltaTime); if (tileToDig.Durability <= 0) { Debug.Log("Mined " + tileToDig.Ore.Data.ore.ToString()); playerResources.AddOre(tileToDig.Ore.Data.ore); gameTiles.RemoveTile(tileToDig); soundManager.PlaySfx("Destroy", 0.65f); } } else if (digParticles.isPlaying) { digParticles.Stop(); } }
private bool CanDig(DigDirection direction) { if (!isGrounded) { return(false); } //Check Timer Vector2 raycastDirection = Vector2.zero; switch (direction) { case DigDirection.Left: raycastDirection = Vector2.left; break; case DigDirection.Right: raycastDirection = Vector2.right; break; case DigDirection.Down: raycastDirection = Vector2.down; break; } bool canDig = Physics2D.Raycast(transform.position, raycastDirection, groundCheckDistance, groundLayerMask); return(canDig); }
void Dig(DigDirection direction) { Vector3 positionForCell = transform.position; if (direction == DigDirection.Left) { positionForCell += Vector3.left * 10; } if (direction == DigDirection.Right) { positionForCell += Vector3.right * 10; } Vector3Int currentCellPosition = GetCellPosition(positionForCell, direction); TileBase tileBelowPlayer = tilemap.GetTile(currentCellPosition); if (tileBelowPlayer != null) { // Before we delete the tile, get the correct money reward GetMoney(currentCellPosition); tilemap.SetTile(currentCellPosition, null); } }
// The tilemap is rotated 180 degrees to make math easy // So we have to adjust tile position Vector3Int GetCellPosition(Vector3 position, DigDirection direction) { Vector3Int cellPos = tilemap.WorldToCell(position); if (direction == DigDirection.Down) { cellPos.y += 1; } return(cellPos); }
private void RotateDigParticles(DigDirection direction) { float z = 0; switch (direction) { case DigDirection.Up: z = -90f; break; case DigDirection.Down: z = 90f; break; } digParticlePivot.localRotation = Quaternion.Euler(0, 0, z); }
private Vector3 GetDigPosition(DigDirection direction) { switch (direction) { case DigDirection.Up: return(transform.position + Vector3.up); case DigDirection.Down: return(transform.position + Vector3.down); case DigDirection.Left: return(transform.position + Vector3.left); case DigDirection.Right: return(transform.position + Vector3.right); default: return(transform.position + Vector3.up); } }