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); } }
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); * }*/ }
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); } }
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); }