Esempio n. 1
0
        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();
            }
        }
Esempio n. 2
0
 protected virtual void CharacterDead()
 {
     if (sourceTile)
     {
         sourceTile.occupied = false;
         sourceTile          = null;
     }
     if (destinationTile)
     {
         destinationTile.occupied = false;
         destinationTile          = null;
     }
     Destroy(gameObject);
 }
Esempio n. 3
0
        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);
        }
Esempio n. 4
0
        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();
        }