Пример #1
0
    public void UpdateValidPositionCriteriaList(GameObject objectClone, int playerSide)
    {
        float            highestDistance = AiUtils.GetHighestDistanceBetweenPieces(playerSide, objectClone);
        PositionCriteria criteria        = new PositionCriteria(objectClone.transform.position, objectClone.transform.rotation, highestDistance);

        ValidPositionCriteriaList.Add(criteria);
    }
Пример #2
0
    public override IaData CalculateAction(GameObject currentSimulatedObject, int sideId)
    {
        GameObject simulatedObjectClone = PieceUtils.ClonePieceObject(currentSimulatedObject);

        IaData iaInformations = new IaData();

        Vector3    finalCalculatedPosition;
        Quaternion finalCalculatedRotation;

        this.SimulateMovement(Vector3.right, simulatedObjectClone, sideId);

        simulatedObjectClone.transform.SetPositionAndRotation(currentSimulatedObject.transform.position, currentSimulatedObject.transform.rotation);

        bool isMovePossible = MovementUtils.IsMovementPossible(Vector3.left, simulatedObjectClone);

        if (isMovePossible)
        {
            MovementGeneratorUtils.SimulateNextTranslation(simulatedObjectClone, Vector3.left);
        }

        this.SimulateMovement(Vector3.left, simulatedObjectClone, sideId);

        if (ValidPositionCriteriaList.Count != 0)
        {
            //Order position criterias by distance descending then take the one with the highest distance property(which mean the one with less peace on ground)
            PositionCriteria positionCriteria = ValidPositionCriteriaList.OrderByDescending(criteria => criteria.Distance).First();
            finalCalculatedPosition = positionCriteria.ValidPosition;
            finalCalculatedRotation = positionCriteria.ValidRotation;
        }
        else
        {
            finalCalculatedPosition = currentSimulatedObject.transform.position;
            finalCalculatedRotation = currentSimulatedObject.transform.rotation;
        }

        iaInformations.TargetPosition = finalCalculatedPosition;
        iaInformations.TargetRotation = finalCalculatedRotation;

        Destroy(simulatedObjectClone);
        return(iaInformations);
    }