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); }
public IEnumerable <Position> GetPositions(PositionCriteria criteria) { IQueryable <Position> query = context.Positions; if (criteria.ContactId > 0) { query = query.Where(Position => Position.ContactId == criteria.ContactId); } query = query.OrderByDescending(Position => Position.Created); return(query.ToList()); }
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); }