Esempio n. 1
0
    public void SpawnObstacle(Vector2 startPosition, Vector2 endPosition)
    {
        Vector2 spawnPosition = (startPosition + endPosition) / 2;
        Vector2 direction     = endPosition - startPosition;
        float   length        = direction.magnitude;

        Transform newObstacle = Instantiate(obstacle, spawnPosition, QuaternionExtension.RotateToDirection(direction, -90)).transform;

        newObstacle.localScale = new Vector3(newObstacle.localScale.x, length, newObstacle.localScale.z);
    }
Esempio n. 2
0
        private void ProcessDestinationMode(float progress)
        {
            if (isFirstUpdate)
            {
                originalOrientation = movementComponent.Orientation;
                Vector3 desired = Vector3.right;
                switch (destinationRotationMode.ShowFacingDirection())
                {
                case FacingDirection.Enemy:
                    Character         enemy = FindEnemy();
                    MovementComponent enemyMovementComponent = enemy.GameObject().GetComponent <EntityReference>().Entity
                                                               .GetComponent <MovementComponent>();
                    Vector3 clampedEnemyPos = enemyMovementComponent.PositionV3.CloneWithNewY(movementComponent.Position.y);
                    desired = clampedEnemyPos - movementComponent.PositionV3;
                    break;

                case FacingDirection.Left:
                    desired = Vector3.left;
                    break;

                case FacingDirection.Right:
                    desired = Vector3.right;
                    break;
                }
                Vector3 facing = movementComponent.Orientation * Vector3.right;
                deltaQuaternion       = Quaternion.FromToRotation(facing, desired);
                destinationQuaternion = originalOrientation * deltaQuaternion;
                float deltaAngle = Vector3.Angle(facing, desired);
                float dotProduct = Quaternion.Dot(originalOrientation, destinationQuaternion);
                if (dotProduct < 0)                  //longer rotation path detected, switch to shorter path
                {
                    originalOrientation = originalOrientation.ScalarMultiply(-1);
                    deltaQuaternion     = deltaQuaternion.ScalarMultiply(-1);
                }
                if (deltaAngle > destinationRotationMode.maxAngle)
                {
                    deltaAngle = destinationRotationMode.maxAngle;
                    Vector3 axis     = Vector3.up;
                    float   outAngle = 0;
                    deltaQuaternion.ToAngleAxis(out outAngle, out axis);
                    deltaQuaternion       = Quaternion.AngleAxis(deltaAngle, axis);
                    destinationQuaternion = originalOrientation * deltaQuaternion;
                }
            }
            movementComponent.SetOrientation(
                QuaternionExtension.Interpolate(
                    originalOrientation, destinationQuaternion, interpolator, progress, true
                    )
                );

            if (progress >= 1)
            {
                movementComponent.SetOrientation(destinationQuaternion);
            }
        }
Esempio n. 3
0
    private void StickToGround()
    {
        int hitCount = Physics2D.Raycast(transform.position, -transform.up, m_ContactFilter2D, m_HitResults, m_BoxCollider2D.bounds.extents.y + castDistance);

        Debug.DrawRay(transform.position, -transform.up * (m_BoxCollider2D.bounds.extents.y + castDistance));

        if (hitCount > 0)
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, QuaternionExtension.RotateToDirection(m_HitResults[0].normal, -90), 5f * Time.deltaTime);
        }
        else
        {
            transform.rotation = Quaternion.Slerp(transform.rotation, QuaternionExtension.RotateToDirection(Vector3.down, 90), 5f * Time.deltaTime);
        }
    }
Esempio n. 4
0
 internal void PostStepUpdate()
 {
     transform.position = body.GetPosition();
     transform.rotation = QuaternionExtension.FromAngle2D(body.GetAngle());
 }