Esempio n. 1
0
        public override void Behave(Scene r)
        {
            if (MainCharacter.Current == null)
            {
                return;
            }
            if (IsActive == false)
            {
                return;
            }

            IsBeingTargeted = MainCharacter.Current.Target == this;

            var routeToMainCharacter = SceneHelpers.CalculateLineOfSight(r, this.Bounds, MainCharacter.Current.Bounds.Location, 1);

            if (routeToMainCharacter.Obstacles.Where(o => o is Wall).Count() == 0 && this.Bounds.Location.CalculateDistanceTo(MainCharacter.Current.Bounds.Location) < 6)
            {
                if (_seeker.IsSeeking == false)
                {
                    SoundEffects.Instance.PlaySound("zombiealert");
                    _seeker.IsSeeking = true;
                    _roamer.IsRoaming = false;
                }
            }
            else
            {
                _seeker.IsSeeking = false;
                _roamer.IsRoaming = true;
            }
        }
Esempio n. 2
0
        public override void Behave(Scene scene)
        {
            var targets = Scene.Things.Where(t => targetFilter(t))
                          .OrderBy(z => sourceEval().Location.CalculateDistanceTo(z.Bounds.Location));

            foreach (var target in targets)
            {
                var route = SceneHelpers.CalculateLineOfSight(scene, sourceEval(), target.Bounds.Location, 1);

                if (route.Obstacles.Where(o => o is Wall).Count() == 0)
                {
                    TargetChanged.Fire(target);
                    return;
                }
            }

            TargetChanged.Fire(null);
        }