Exemplo n.º 1
0
    /// <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);
    }
Exemplo n.º 2
0
    public void InterruptMovementPreparation()
    {
        currentUsabilityState = UsabilityState.None;

        EndMovementPreparation();

        currentDistancesByUsedActionPoints = new List <float>();
    }
Exemplo n.º 3
0
    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);
    }
Exemplo n.º 4
0
    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();
    }
Exemplo n.º 5
0
 public void EndMovement()
 {
     currentUsabilityState = UsabilityState.None;
 }