protected override Vector3 GetMoveVector() { float speed = CalculationSpeed(m_defaultSpeed, m_inputParam.Input); Vector3 moveVector = Mathv.CalculateMoveVector(m_inputParam.Input.MoveDirection, speed); return(moveVector); }
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); }
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; })); }
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(); }
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); } }
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); } } } }
protected override void UpdateVelocity() { LocalVelocity = Mathv.CalculateVelocity(LocalVelocity, m_constantAcceleration); }