Example #1
0
        protected override Vector3 GetMoveVector()
        {
            float   speed      = CalculationSpeed(m_defaultSpeed, m_inputParam.Input);
            Vector3 moveVector = Mathv.CalculateMoveVector(m_inputParam.Input.MoveDirection, speed);

            return(moveVector);
        }
Example #2
0
    private Transform SpawnProjectile(Vector2 velocity)
    {
        Vector3   spawnLocation = transform.position + transform.rotation * (Vector3)spawnOffset;
        float     rotationFromProjectileVelocity = fixRotation ? 0 : velocity.y;
        Transform projectile = Instantiate(projectilePrefab, spawnLocation, Quaternion.Euler(0, 0, rotationFromProjectileVelocity - angleWhenUpright));

        projectilesFired.Add(projectile);

        Rigidbody2D      rb = projectile.GetComponent <Rigidbody2D>();
        ProjectileDriver pd = projectile.GetComponent <ProjectileDriver>();

        if (rb != null)
        {
            rb.velocity = transform.rotation * (Vector3)Mathv.Pol2Car(velocity);
        }
        if (pd != null)
        {
            pd.sourceObject = transform;
            if (input != null)
            {
                pd.playerId = input.playerId;
            }
        }
        return(projectile);
    }
    public override void Invoke()
    {
        base.Invoke();

        float angle    = Random.Range(0.0f, 360.0f);
        float distance = Random.Range(0f, distanceMax);

        pool.Current.position = Mathv.GetVector2(angle, distance);
    }
Example #4
0
 protected IEnumerator UpdateRoutine()
 {
     yield return(CoroutineUtils.UpdateRoutine(() => true, elapsedTime => {
         Vector3 frequency = _frequency;
         frequency *= _frequencyScale;
         Vector3 phase = (_phaseDivPI + Vector3.one * _totalPhaseDivPI) * Mathf.PI;
         Vector3 translation = Mathv.Mul(_amplitude, Mathv.Sin(frequency * elapsedTime + phase));
         transform.localPosition = _initialPosition + translation;
     }));
 }
Example #5
0
    private void FixedUpdate()
    {
        Vector2 movement = input.GetCircularMovementVector(inputDeadZone);
        bool    isFacingMovementDirection = true;
        Vector2 targetVelocity;

        // Change rotation
        if (faceMovementDirection && movement != Vector2.zero)
        {
            float rotationTarget = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg + rotationOffset;
            float rotationDelta  = Mathv.ClampAngle180(rotationTarget - transform.eulerAngles.z);
            isFacingMovementDirection = Mathf.Abs(rotationDelta) <= turnSpeed;
            rotationDelta             = (rotationDelta > 0) ? Mathf.Min(rotationDelta, turnSpeed) : Mathf.Max(rotationDelta, -turnSpeed);
            transform.Rotate(rotationDelta * Vector3.forward);
        }

        // Change velocity
        float tq = Mathv.LerpQRound(0, 1, Mathf.InverseLerp(inputDeadZone, 1, movement.magnitude), walkSpeedLevels);

        if (onlyMoveForward)
        {
            if (isFacingMovementDirection)
            {
                targetVelocity = Mathf.Lerp(minWalkableSpeed, walkSpeed, tq) * movement.normalized;
            }
            else
            {
                targetVelocity = minWalkableSpeed * transform.TransformDirection(Quaternion.AngleAxis(rotationOffset, Vector3.forward) * Vector3.right);
            }
        }
        else
        {
            targetVelocity = Mathf.Lerp(minWalkableSpeed, walkSpeed, tq) * movement.normalized;
        }
        if (acceleration == Mathf.Infinity)
        {
            rb.velocity = targetVelocity;
        }
        else
        {
            rb.AddForce(acceleration * targetVelocity);
            if (targetVelocity.magnitude == 0)
            {
                rb.drag = deceleration;
            }
            else
            {
                float idealDrag = acceleration / targetVelocity.magnitude;
                rb.drag = acceleration / (acceleration * Time.deltaTime + 1); // [TODO] work around PhysX drag approximation
            }
        }

        UpdateAnimation();
    }
Example #6
0
    private void FixedUpdate()
    {
        Vector2 movement = input.GetCircularAimVector(inputDeadZone);

        if (movement != Vector2.zero)
        {
            float rotationTarget = Mathf.Atan2(movement.y, movement.x) * Mathf.Rad2Deg - rotationOffset;
            float rotationDelta  = Mathv.ClampAngle180(rotationTarget - transform.eulerAngles.z);
            rotationDelta = (rotationDelta > 0) ? Mathf.Min(rotationDelta, turnSpeed) : Mathf.Max(rotationDelta, -turnSpeed);
            transform.Rotate(rotationDelta * Vector3.forward);
        }
    }
Example #7
0
    private void SetCellNoneEnterRisksLevel1(int x, int y, CellNode cellNode, CellNode[] nodes, int columns)
    {
        if (cellNode.ngbrPlayerPawnsCount[0] >= 3)
        {
            //Func<int, int, bool> nodeIsLocked = (nodeX, nodeY) => {
            //    return nodes[GetCellNodeIndex(nodeX, nodeY, columns)].locked;
            //};
            bool NodeIsPlayerPawn(int nodeX, int nodeY)
            {
                return(nodes[GetCellNodeIndex(nodeX, nodeY, columns)].isPlayerPawn);
            }

            bool[] ngbrsEnterRisk = cellNode.ngbrsEnterRisk;
            for (int i = 0; i < 4; i += 2)
            {
                Vector2Int absDelta = Mathv.Abs(_cellNgbrsDeltaXY[i] /*.Negative()*/);
                ngbrsEnterRisk[i] =
                    NodeIsPlayerPawn(x - absDelta.y, y - absDelta.x) &&
                    NodeIsPlayerPawn(x + absDelta.y, y + absDelta.x);
            }
            ngbrsEnterRisk[1] = ngbrsEnterRisk[0];
            ngbrsEnterRisk[3] = ngbrsEnterRisk[2];
            bool risk02 = ngbrsEnterRisk[0] || ngbrsEnterRisk[2];
            for (int i = 4; i < 8; i++)
            {
                ngbrsEnterRisk[i] = risk02;
            }
            if (!risk02)
            {
                for (int i = 4; i < 8; i++)
                {
                    Vector2Int delta = _cellNgbrsDeltaXY[i].Negative();
                    ngbrsEnterRisk[i] |= !NodeIsPlayerPawn(x + delta.x, y + delta.y) &&
                                         NodeIsPlayerPawn(x, y + delta.y) &&
                                         NodeIsPlayerPawn(x + delta.x, y);
                }
            }
        }
    }
Example #8
0
 protected override void UpdateVelocity()
 {
     LocalVelocity = Mathv.CalculateVelocity(LocalVelocity, m_constantAcceleration);
 }