public UseAbilityOnTargetHandler(IEventSystem eventSystem, GameConfiguration gameConfiguration, Level level, MovementAdvisor movementAdvisor, IAbilityHandlerRepository abilityHandlerRepository) { EventSystem = eventSystem; GameConfiguration = gameConfiguration; Level = level; MovementAdvisor = movementAdvisor; AbilityHandlerRepository = abilityHandlerRepository; }
public void MoveTowards(Unit unit, Unit target) { var bestMovement = MovementAdvisor.GetBestMovementTowardsTarget(unit, target); var newDirection = unit.Position - bestMovement; var directionType = newDirection.GetDirection(); var oldPosition = unit.Position; var oldDirection = unit.FacingDirection; unit.Position = bestMovement; unit.FacingDirection = directionType; EventSystem.Publish(new UnitMovingEvent(unit, oldPosition, oldDirection)); }
public object GetBestLocation(IHasDataId context, IUtilityVariables variables) { var ownerUnit = (context as Unit); var targetUtility = variables .GetRelatedUtilities(UtilityVariableTypes.IsADanger) .OrderByDescending(x => x.Value) .FirstOrDefault(); if (targetUtility.Key.UtilityId == 0) { return(MovementAdvisor.GetBestMovementAwayFromLocation(ownerUnit, ownerUnit.Position)); } var targetUnit = Level.GameUnits.FirstOrDefault(x => x.Agent.OwnerContext.Id == targetUtility.Key.RelatedId); if (targetUnit == null) { return(MovementAdvisor.GetBestMovementAwayFromLocation(ownerUnit, ownerUnit.Position)); } return(MovementAdvisor.GetBestMovementAwayFromTarget(ownerUnit, targetUnit.Unit)); }
public ShouldEscapeAdviceApplicator(IRequirementChecker <Unit> requirementChecker, MovementAdvisor movementAdvisor, Level level) : base(requirementChecker) { MovementAdvisor = movementAdvisor; Level = level; }