Ejemplo n.º 1
0
        public void Notice(GameEntity noticedEntity, StimulusDefinition stimulus, GameEntity entity, bool noticingEnemy)
        {
            HashSet <Guid> entitiesSeen = entity.vision.EntitiesNoticed;

            entitiesSeen.Add(noticedEntity.id.Id);
            entity.ReplaceVision(entity.vision.VisionRange, entity.vision.PerceptionRange, entitiesSeen);

            if (noticingEnemy && entity.hasAware)
            {
                entity.ReplaceAware(int.MaxValue);
            }

            IActivity activityFromReaction = _activityResolver.ResolveNewActivityForActorIfApplicable(stimulus, noticedEntity, entity);

            if (activityFromReaction == null)
            {
                return;
            }

            if (entity.hasActivity)
            {
                _activityInterruptor.FailAndReplace(entity, entity.activity.Activity, activityFromReaction);
            }
            else
            {
                entity.AddActivity(activityFromReaction);
            }
        }
Ejemplo n.º 2
0
        public IGameAction GetAction(GameEntity entity)
        {
            IGameAction gameActionToReturn = null;

            IActivity activity = entity.hasActivity ? entity.activity.Activity : null;

            if (activity != null)
            {
                ActivityStep activityStep = activity.CheckAndResolveStep(entity);

                if (activityStep.State == ActivityState.FinishedSuccess)
                {
                }
                else if (activityStep.State == ActivityState.FinishedFailure)
                {
                    _activityInterruptor.FailAndReplace(entity, null);
                }
                return(activityStep.GameAction);
            }

            Decision decision = _context.playerDecision.Decision;

            if (decision == Decision.None)
            {
                return(null);
            }

            if (decision == Decision.PickUp)
            {
                gameActionToReturn = ResolveForPickUp(entity);
            }
            else if (decision == Decision.Drop)
            {
                gameActionToReturn = ResolveForDrop(entity);
            }
            else if (decision == Decision.Eat)
            {
                gameActionToReturn = ResolveForEat(entity);
            }
            else if (decision == Decision.Pass)
            {
                gameActionToReturn = _actionFactory.CreatePassAction(entity);
            }
            // todo clean this up

            /*else if (decision == Decision.TakeItem1)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 0);
             * }
             * else if (decision == Decision.TakeItem2)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 1);
             * }
             * else if (decision == Decision.TakeItem3)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 2);
             * }
             * else if (decision == Decision.TakeItem4)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 3);
             * }
             * else if (decision == Decision.TakeItem5)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 4);
             * }
             * else if (decision == Decision.TakeItem6)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 5);
             * }
             * else if (decision == Decision.TakeItem7)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 6);
             * }
             * else if (decision == Decision.TakeItem8)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 7);
             * }
             * else if (decision == Decision.TakeItem9)
             * {
             *      gameActionToReturn = CreateTakeFromInventoryActionIfPossible(entity, 8);
             * }*/
            else if (_moveInputs.Contains(decision))
            {
                gameActionToReturn = ResolveForMove(entity, decision);
            }
            else if (decision == Decision.Custom0)
            {
                gameActionToReturn = _actionFactory.CreateLambdaAction(
                    targetEntity =>
                {
                    targetEntity.ReplaceIntegrity(targetEntity.integrity.MaxIntegrity, targetEntity.integrity.MaxIntegrity);
                    return(Enumerable.Empty <IActionEffect>());
                }, entity);
            }
            else if (decision == Decision.Custom1)
            {
                gameActionToReturn = _actionFactory.CreateLambdaAction(actionEntity =>
                {
                    throw new Exception("test pawła 2");
                }, entity);
            }
            else if (decision == Decision.Custom2)
            {
                gameActionToReturn = ResolveForAlphaNumber(2, entity);
            }
            else if (decision == Decision.Custom3)
            {
                gameActionToReturn = ResolveForAlphaNumber(3, entity);
            }
            else if (decision == Decision.Custom4)
            {
                gameActionToReturn = ResolveForAlphaNumber(4, entity);
            }
            else if (decision == Decision.Custom5)
            {
                gameActionToReturn = ResolveForAlphaNumber(5, entity);
            }

            if (gameActionToReturn != null)
            {
                _context.ReplacePlayerDecision(Decision.None, Position.Zero, Position.MinValue);
            }

            return(gameActionToReturn);
        }