コード例 #1
0
        public override int ResolveCollision(Direction direction)
        {
            IEnvironmentContainer environment = _owner.Environment;
            int offset       = 0;
            var expectedSpec = GetExpectedSpecs(_owner, direction, _owner.Stats.StepLength);
            var collided     = environment.Instances.FirstOrDefault(instance =>
                                                                    instance != null && Collider.Colliding(new CollisionModel(instance.Actor.Stats.Size, instance.Actor.Position.X, instance.Actor.Position.Y), expectedSpec) &&
                                                                    _owner != instance.Actor && _creator != instance.Actor && !(instance is Projectile) && !(instance is MovableObjectBehavior));

            if (collided == null)
            {
                switch (direction)
                {
                case Direction.Down:
                case Direction.Up:
                    offset = expectedSpec.Y - _owner.Position.Y;
                    break;

                case Direction.Right:
                case Direction.Left:
                    offset = expectedSpec.X - _owner.Position.X;
                    break;
                }
                _owner.Position = new Stats.Point(expectedSpec.X, expectedSpec.Y);
            }
            else
            {
                var behavior = environment.Instances.FirstOrDefault(x => x.Actor == _owner);
                environment.RemoveInstance(behavior);

                collided.Actor.HandleAttack(_owner.Stats);
            }

            return(Math.Abs(offset));
        }
コード例 #2
0
        public virtual void HandleAttack(IStats attackerStats)
        {
            _owner.Stats.AddLives(-attackerStats.Damage);
            IEnvironmentContainer environment = _owner.Environment;

            //environment.AddInstance(DamageAnimationFactory.GetHeart(_owner));
            if (_owner.Stats.HealthPercentage <= 0)
            {
                var ownerInstance = environment.Instances.FirstOrDefault(x => x.Actor == _owner);
                if (ownerInstance != null)
                {
                    environment.RemoveInstance(ownerInstance);
                }
            }
        }