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 void HandleStimulus(GameEntity stimulusTarget, StimulusDefinition stimulus, GameEntity stimulusSource)
 {
     /*if (stimulus == _gameConfig.StimuliDefinitions.NoticeFriend || stimulus == _gameConfig.StimuliDefinitions.NoticeEnemy)
      * {
      *      Notice(stimulusSource, stimulus, stimulusTarget, stimulus == _gameConfig.StimuliDefinitions.NoticeEnemy);
      * }*/
 }
Ejemplo n.º 3
0
        public void OnSendStimulus(GameEntity activeEntity, int range, StimulusDefinition stimulusDefinition)
        {
            IEnumerable <GameEntity> otherActorsAround = _entityDetector.DetectEntities(activeEntity.position.Position, range)
                                                         .Where(a => a != activeEntity);

            foreach (GameEntity receiver in otherActorsAround)
            {
//				_stimulusSender.OnSendStimulus(receiver, stimulusDefinition, activeEntity);
            }
        }
Ejemplo n.º 4
0
        public IActivity ResolveNewActivityForActorIfApplicable(StimulusDefinition stimulus, GameEntity targetActor, GameEntity entity)
        {
            IEnumerable <Skill> skillsThatMayBreakIn = entity.skills.Skills
                                                       .Where(s => s.StimuliToBreakIn.Contains(stimulus))
                                                       .Where(s => s.Conditions.All(c => c.Evaluate(entity, _conditionContext)));

            if (skillsThatMayBreakIn.Any())
            {
                StimulusContext stimulusContext = new StimulusContext {
                    TargetEntity = targetActor
                };
                float skillScore;
                float minScoreAllowed = entity.hasActivity ? entity.activity.Activity.Score : 0f;
                Skill skill           = _utilityAi.ResolveSkill(entity, skillsThatMayBreakIn, stimulusContext, minScoreAllowed, out skillScore);

                IActivity activityToReturn = null;
                if (skill != null)
                {
                    try
                    {
                        activityToReturn = skill.ActivityCreator.CreateActivity(_activityCreationContext, skillScore, null, entity);
                    }
                    catch (Exception e)
                    {
                        Debug.LogError(e.Message + ", stack trace: " + e.StackTrace);
                        activityToReturn = entity.activity.Activity;
                    }
                }
                else
                {
                    activityToReturn = entity.activity.Activity;
                }

                return(activityToReturn);
            }

            return(entity.hasActivity ? entity.activity.Activity : null);
        }