/// <summary> /// Return -1 if error (not enough points,...) /// Returns cost if succeeded /// </summary> /// <param name="targetPosition"></param> /// <returns></returns> public int TryStartMovement(Vector3 targetPosition) { if (IsMoving) { return(-1); } List <Vector3> trajectory = GetClampedTrajectory(targetPosition); targetPosition = trajectory[trajectory.Count - 1]; float movementDistance = 0; for (int i = 1; i < trajectory.Count; i++) { movementDistance += Vector3.Distance(trajectory[i - 1], trajectory[i]); } int movementCost = GetActionPointsByDistance(movementDistance); _player.MoveTo(targetPosition); currentUsabilityState = UsabilityState.Using; EndMovementPreparation(); actionPointsUsedThisTurnToMove += movementCost; CameraManager.instance.GetPlayerCamera.ResetPlayerCamera(); return(movementCost); }
public void InterruptMovementPreparation() { currentUsabilityState = UsabilityState.None; EndMovementPreparation(); currentDistancesByUsedActionPoints = new List <float>(); }
public void StartMovementPreparation(int availableActionPoints) { currentlyAvailableActionPoints = availableActionPoints; GenerateDistancesPerActionPoints(currentlyAvailableActionPoints); currentUsabilityState = UsabilityState.Preparing; currentPreviewCost = 0; List <Vector3> trueMovementTrajectory = GetClampedTrajectory(currentWorldMouseResult.mouseWorldPosition); float movementDistance = 0; for (int i = 1; i < trueMovementTrajectory.Count; i++) { movementDistance += Vector3.Distance(trueMovementTrajectory[i - 1], trueMovementTrajectory[i]); } bool maxRangeMovement = Mathf.Abs(movementDistance - GetMaxDistance()) < 0.01f; Vector3 targetPosition = trueMovementTrajectory[trueMovementTrajectory.Count - 1]; int movementCost = GetActionPointsByDistance(movementDistance); if (movementCost > currentlyAvailableActionPoints) { maxRangeMovement = true; targetPosition = GetClampedTargetPosition(targetPosition); movementCost = currentlyAvailableActionPoints; } if (movementCost != currentPreviewCost) { currentPreviewCost = movementCost; OnPreparationAmountChanged?.Invoke(currentPreviewCost); UIManager.Instance.GetActionBar.UpdatePreConsommationPointBar(availableActionPoints, movementCost); } PreviewCompetencesManager.Instance.StartMovementPreview(currentDistancesByUsedActionPoints, trueMovementTrajectory, currentRecallCompetence, maxRangeMovement ? currentPreviewCost : currentPreviewCost - 1, maxRangeMovement); UIManager.Instance.ShowActionPointsCostText(); UIManager.Instance.UpdateActionPointCostText(movementCost, currentlyAvailableActionPoints); }
public void ChangeUsabilityState(UsabilityState usabilityState, ActionType compType) { if (usabilityState == UsabilityState.Preparing) { maxRecallRange = DiscManager.Instance.recallRange; maxThrowRange = DiscManager.Instance.throwRange; } if (currentUsabilityState == UsabilityState.Preparing) { EndPreparation(); } currentUsabilityState = usabilityState; currentCompetenceType = compType; if (currentUsabilityState == UsabilityState.Preparing) { StartPreparation(); } OnCompetenceStateChanged?.Invoke(); }
public void EndMovement() { currentUsabilityState = UsabilityState.None; }