private void AttackTarget( INonPlayableCreatureObject creature, Point position, Point targetPosition, Direction adjustedTargetDirection) { creature.Direction = adjustedTargetDirection; if (CurrentGame.Map.GetCell(position).Objects.Any(obj => obj.BlocksAttack)) // Don't attack if standing inside the wall { return; } var targetCell = CurrentGame.Map.GetCell(targetPosition); var wall = targetCell.Objects.FirstOrDefault(obj => obj.BlocksAttack); if (wall != null) { return; } var target = GetTarget(targetCell); if (target == null) { return; } creature.Attack(position, targetPosition, target); }
public bool Update(INonPlayableCreatureObject creature, Point position) { if (creature.Statuses.Contains(ParalyzedObjectStatus.StatusType)) { return(true); } var visibleArea = VisibilityHelper.GetVisibleArea(creature.VisibilityRange, position); var relativeTargetPosition = GetNearestTargetPosition(visibleArea); if (relativeTargetPosition == null) { return(true); } var absoluteTargetPosition = new Point( position.X - creature.VisibilityRange + relativeTargetPosition.X, position.Y - creature.VisibilityRange + relativeTargetPosition.Y); var adjustedTargetDirection = Point.GetAdjustedPointRelativeDirection(position, absoluteTargetPosition); if (adjustedTargetDirection.HasValue) { AttackTarget(creature, position, absoluteTargetPosition, adjustedTargetDirection.Value); return(true); } TryMoveToTarget(creature, position, absoluteTargetPosition); return(true); }
public bool Update(INonPlayableCreatureObject creature, Point position) { var direction = RandomHelper.GetRandomElement(Enum.GetValues(typeof(Direction)).Cast <Direction>().ToArray()); var targetPosition = Point.GetPointInDirection(position, direction); MovementHelper.MoveCreature(creature, position, targetPosition, true, true, true); return(true); }
public static bool GetIfPlayerVisible(INonPlayableCreatureObject creature, Point position) { var playerPosition = CurrentGame.Map.GetObjectPosition <IPlayer>(); if (playerPosition == null) { return(false); } return (CreaturesVisibilityHelper.GetIfPointIsVisible(position, creature.VisibilityRange, playerPosition)); }
public void Update(INonPlayableCreatureObject creature, Point position) { var endTurn = false; while (!endTurn) { var nextStrategy = GetNextStrategy(creature, position); if (nextStrategy != null) { currentStrategy = nextStrategy; } endTurn = currentStrategy.Update(creature, position); } }
public bool Update(INonPlayableCreatureObject creature, Point position) { if (!currentDirection.HasValue) { currentDirection = GenerateDirection(); } var targetPoint = Point.GetPointInDirection(position, currentDirection.Value); var movementResult = MovementHelper.MoveCreature(creature, position, targetPoint, true, true, true); if (!movementResult.Success) { currentDirection = null; } return(true); }
private ICreatureStrategy GetNextStrategy(INonPlayableCreatureObject creature, Point position) { var matchingRule = rules.FirstOrDefault(rule => rule.Source == currentStrategy && rule.Condition(creature, position)); return(matchingRule?.Target); }
public bool Update(INonPlayableCreatureObject creature, Point position) { return(true); }
private void TryMoveToTarget(INonPlayableCreatureObject creature, Point position, Point playerPosition) { movementStrategy.TryMove(creature, position, playerPosition); }
public static int GetHealthPercent(INonPlayableCreatureObject creature) { return((int)Math.Ceiling(creature.Health / (double)creature.MaxHealth)); }