private void CheckGround(bool firstCheck = false) { Vector3 start = transform.position; Vector3 end = start + Vector3.down; RaycastHit hitInfo; if (Physics.Linecast(start + groundOffset, end + groundOffset, out hitInfo, groundLayerMask.value)) { if (firstCheck) { sourceTile = hitInfo.transform.GetComponent <GroundCollider>(); sourceTile.occupied = true; } else { if (destinationTile) { sourceTile = destinationTile; } } idle = true; } else { Falling(); } }
protected virtual void CharacterDead() { if (sourceTile) { sourceTile.occupied = false; sourceTile = null; } if (destinationTile) { destinationTile.occupied = false; destinationTile = null; } Destroy(gameObject); }
private bool IsDestinationTileAvailable(Vector3 end) { RaycastHit hitInfo; // Check for an available ground on destination tile, also if it is not occupied if (Physics.Linecast(end + groundOffset, end + groundOffset + Vector3.down, out hitInfo, groundLayerMask.value)) { destinationTile = hitInfo.transform.GetComponent <GroundCollider>(); if (destinationTile.occupied == false) { destinationTile.occupied = true; return(true); } else { destinationTile = null; return(false); } } destinationTile = null; return(true); }
private IEnumerator SmoothMovement(Vector3 start, Vector3 end) { Vector3 moveDirection = (end - start); float t = 0; for (t = Time.deltaTime / moveTime; t < 1; t += Time.deltaTime / moveTime) { characterBody.localPosition = new Vector3(0, jumpHeight * Mathf.Sin(Mathf.PI * t), 0); transform.position = start + (moveDirection * t); if (t > 0.5f) { if (sourceTile) { sourceTile.occupied = false; sourceTile = null; } } yield return(null); } characterBody.localPosition = Vector3.zero; transform.position = end; moveTime = originalMoveTime; CheckGround(); }