Ejemplo n.º 1
0
        private void Fall()
        {
            if (_isRising)
            {
                return;
            }

            // TODO: This is a placeholder
            float fallAmount =
                (World.Instance.gravity + 2 * DistanceFallen) * World.Instance.DeltaTime;

            Vector3 newPosition            = _rootObj.transform.position - Vector3.up * fallAmount;
            float   groundHeightDifference = GroundHeightDifferenceFromPos(newPosition);

            if (groundHeightDifference < 0f)
            {
                _rootObj.transform.position = newPosition;
                DistanceFallen += fallAmount;
                //Debug.Log("Falling " + fallAmount);
            }
            else
            {
                _rootObj.transform.position = newPosition +
                                              Vector3.up * groundHeightDifference;
                UpdateTopOfHeadAndFootPositions();
                UpdateFallingAndRising(false);
                //onGround = true;
                //_usedToBeOnGround = false;
            }

            if (DistanceFallen >= _maxFallDistance)
            {
                _fallenOffMap = true;
                Debug.Log(_rootObj.name + " fell off map");

                if (_character != null)
                {
                    _character.Kill();
                }
            }
        }