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); }
public override IaData CalculateAction(GameObject currentSimulatedObject, int sideId) { GameObject simulatedObjectClone = PieceUtils.ClonePieceObject(currentSimulatedObject); IaData iaInformations = new IaData(); Transform transform; //position map elements => [lines, collumns] transform = SimulateMovement(Vector3.right, simulatedObjectClone, sideId); if (transform != null) { iaInformations.TargetPosition = transform.position; iaInformations.TargetRotation = transform.rotation; Destroy(simulatedObjectClone); return(iaInformations); } simulatedObjectClone.transform.SetPositionAndRotation(currentSimulatedObject.transform.position, currentSimulatedObject.transform.rotation); transform = SimulateMovement(Vector3.left, simulatedObjectClone, sideId); if (transform == null) { iaInformations.TargetPosition = currentSimulatedObject.transform.position; iaInformations.TargetRotation = currentSimulatedObject.transform.rotation; } else { iaInformations.TargetPosition = transform.position; iaInformations.TargetRotation = transform.rotation; } Destroy(simulatedObjectClone); return(iaInformations); }