예제 #1
0
        public MainCharacter()
        {
            Inventory = new Inventory();
            Speed     = new SpeedTracker(this);
            Targeting = new Targeting(() => this.Bounds, t => t is Zombie);
            Added.SubscribeForLifetime(() => { Scene.Add(Targeting); }, this.LifetimeManager);
            Removed.SubscribeForLifetime(() => { Scene.Remove(Targeting); }, this.LifetimeManager);
            Targeting.TargetChanged.SubscribeForLifetime((target) =>
            {
                if (this.Target != null && this.Target.IsExpired == false)
                {
                    Scene.Update(this.Target);
                }

                this.Target = target;

                if (this.Target != null && this.Target.IsExpired == false)
                {
                    Scene.Update(this.Target);
                }
            }, this.LifetimeManager);

            Speed.Bounciness  = 0;
            this.HealthPoints = 100;
            Speed.HitDetectionTypes.Add(typeof(Wall));

            Added.SubscribeForLifetime(OnAdded, this.LifetimeManager);
            Removed.SubscribeForLifetime(OnRemoved, this.LifetimeManager);
        }
예제 #2
0
 public Turret()
 {
     Added.SubscribeForLifetime(() => { Scene.Add(targeting = new Targeting(() => this.Bounds, Filter)); targeting.TargetChanged.SubscribeForLifetime(TargetChanged, this.LifetimeManager); }, this.LifetimeManager);
     Removed.SubscribeForLifetime(() => { Scene.Remove(targeting); }, this.LifetimeManager);
     Governor.Rate = TimeSpan.FromSeconds(.3);
     AmmoPerBurst  = 2;
 }
예제 #3
0
 public Door()
 {
     Added.SubscribeForLifetime(() =>
     {
         this.State = this.State;
     }, this.Lifetime);
     Lifetime.OnDisposed(() => FindCieling().ForEach(c => c.Lifetime.Dispose()));
 }
예제 #4
0
 public Door()
 {
     Added.SubscribeForLifetime(() =>
     {
         this.IsOpen = this.IsOpen;
     }, this.LifetimeManager);
     Removed.SubscribeForLifetime(() => FindCieling().ForEach(c => Scene.Remove(c)), this.LifetimeManager);
 }
        public void SynchronizeForLifetime(Action <T> addAction, Action <T> removeAction, Action changedAction, LifetimeManager manager)
        {
            Added.SubscribeForLifetime(addAction, manager);
            Removed.SubscribeForLifetime(removeAction, manager);
            Changed.SubscribeForLifetime(changedAction, manager);

            foreach (var obj in this)
            {
                addAction(obj);
            }

            changedAction();
        }
예제 #6
0
        private void InitializeTargeting()
        {
            Targeting = new AutoTargetingFunction(() => this.Bounds, t => t is Enemy || t.HasSimpleTag("enemy"));
            Added.SubscribeForLifetime(() => { Time.CurrentTime.Add(Targeting); }, this.Lifetime);
            this.Lifetime.OnDisposed(Targeting.Lifetime.Dispose);

            Targeting.TargetChanged.SubscribeForLifetime((target) =>
            {
                if (this.Target != null && this.Target.Lifetime.IsExpired == false)
                {
                    this.Target.SizeOrPositionChanged.Fire();
                }

                this.Target = target as Character;

                if (this.Target != null && this.Target.Lifetime.IsExpired == false)
                {
                    this.Target.SizeOrPositionChanged.Fire();
                }
            }, this.Lifetime);
        }