void IEntity.EUpdate(float delta)
    {
        if (Spatial == null)
        {
            Spatial = FindObjectOfType <SpatialIndex>();
        }

        mIsGrounded = Physics.CheckSphere(GroundCheck.position, GroundDistance, GroundMask);

        if (mIsGrounded && mVelocity.y < 0)
        {
            mVelocity.y = -2f;

            Spatial.GetFloorState(transform.position.x, transform.position.z, gameObject);
        }

        float x = Input.GetAxis("Horizontal");
        float z = Input.GetAxis("Vertical");

        Vector3 move = transform.right * x + transform.forward * z;

        Controller.Move(move * Speed * Time.deltaTime);

        if (Input.GetButtonDown("Jump") && mIsGrounded)
        {
            mVelocity.y = Mathf.Sqrt(JumpHeight * -2f * Physics.gravity.y);
        }

        if (!FlyMode)
        {
            mVelocity += Physics.gravity * Time.deltaTime;
            Controller.Move(mVelocity * Time.deltaTime);
        }
    }