Ejemplo n.º 1
0
        public override void process(Entity entity)
        {
            var projectileComponent = entity.getComponent <ProjectileComponent>();

            var lastPosition = entity.position;

            projectileComponent.update();
            var newPosition = entity.position;

            var linecast = Physics.linecast(lastPosition, newPosition, 1 << SceneMap.PLAYER_LAYER);

            if (linecast.collider != null)
            {
                if (_playerBattler.onHit(linecast.normal * -1))
                {
                    entity.destroy();
                }
                return;
            }

            CollisionResult collisionResult;
            var             collider = entity.getComponent <Collider>();

            // shots vs map
            if (collider.collidesWithAnyOfType <MapBoxCollider>(out collisionResult))
            {
                Console.WriteLine("hey");
                entity.destroy();
            }

            // shots vs player
            if (_playerBattler.isOnImmunity() || _playerCollider == null)
            {
                return;
            }
            if (collider.collidesWith(_playerCollider, out collisionResult))
            {
                if (_playerBattler.onHit(collisionResult))
                {
                    entity.destroy();
                }
            }
        }
        public override void process(Entity entity)
        {
            var missile = entity.getComponent <MissileComponent>();

            // shots vs map
            CollisionResult collisionResult;
            var             collider = entity.getComponent <Collider>();

            if (collider.collidesWithAnyOfType <MapBoxCollider>(out collisionResult))
            {
                if (missile != null)
                {
                    createMissileExplosionEffect(missile);
                }
                else
                {
                    createBulletEffect(entity.getComponent <ShotComponent>(), collisionResult.normal);
                }
                entity.destroy();
            }

            // player vs shots
            if (missile != null)
            {
                if (_playerSprite.getCurrentAnimation().FramesToAttack.Contains(_playerSprite.CurrentFrame))
                {
                    foreach (var attackCollider in _playerSprite.getCurrentFrame().AttackColliders)
                    {
                        if (attackCollider.collidesWith(collider, out collisionResult))
                        {
                            createMissileExplosionEffect(missile);
                            entity.destroy();
                        }
                    }
                }
            }

            // shots vs player
            if (_playerBattler.isOnImmunity())
            {
                return;
            }
            if (collider.collidesWith(_playerCollider, out collisionResult))
            {
                if (missile != null)
                {
                    createMissileExplosionEffect(missile);
                }
                _playerBattler.onHit(collisionResult);
                entity.destroy();
            }
        }
        public override void process(Entity entity)
        {
            var projectileComponent = entity.getComponent <ProjectileComponent>();

            var lastPosition = entity.position;

            projectileComponent.update();
            var newPosition = entity.position;

            var flag = 1 << (projectileComponent.Data.FromPlayerId == 0
                           ? GlobalConstants.PLAYER_LAYER
                           : GlobalConstants.ENEMY_LAYER);

            var linecast = Physics.linecast(lastPosition, newPosition, flag);

            if (linecast.collider != null)
            {
                if (linecast.collider.entity.getComponent <BattleComponent>().onHit(linecast.normal * -1))
                {
                    entity.destroy();
                }
                return;
            }

            CollisionResult collisionResult;
            var             collider = entity.getComponent <Collider>();

            // shots vs map
            if (collider.collidesWithAnyOfType <MapBoxCollider>(out collisionResult))
            {
                entity.destroy();
            }

            // shots vs player
            if (_playerBattler.isOnImmunity() || _playerCollider == null ||
                projectileComponent.Data.FromPlayerId > 0)
            {
                return;
            }
            if (collider.collidesWith(_playerCollider, out collisionResult))
            {
                if (_playerBattler.onHit(collisionResult))
                {
                    entity.destroy();
                }
            }
        }