Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }
Exemplo n.º 4
0
        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));
        }
Exemplo n.º 5
0
        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);
            }
        }
Exemplo n.º 6
0
        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);
        }
Exemplo n.º 7
0
        private ICreatureStrategy GetNextStrategy(INonPlayableCreatureObject creature, Point position)
        {
            var matchingRule = rules.FirstOrDefault(rule => rule.Source == currentStrategy && rule.Condition(creature, position));

            return(matchingRule?.Target);
        }
Exemplo n.º 8
0
 public bool Update(INonPlayableCreatureObject creature, Point position)
 {
     return(true);
 }
Exemplo n.º 9
0
 private void TryMoveToTarget(INonPlayableCreatureObject creature, Point position, Point playerPosition)
 {
     movementStrategy.TryMove(creature, position, playerPosition);
 }
Exemplo n.º 10
0
 public static int GetHealthPercent(INonPlayableCreatureObject creature)
 {
     return((int)Math.Ceiling(creature.Health / (double)creature.MaxHealth));
 }