Ejemplo n.º 1
0
        protected override void OnUpdate()
        {
            var ecbPackage = m_ecbSystem.CreateCommandBuffer();
            var ecb        = ecbPackage.ToConcurrent();

            var bulletLayer = sceneGlobalEntity.GetCollectionComponent <BulletCollisionLayer>(true).layer;

            var processor = new DamageHitShipsAndDestroyBulletProcessor
            {
                bulletDamageCdfe = GetComponentDataFromEntity <Damage>(true),
                shipHealthCdfe   = this.GetPhysicsComponentDataFromEntity <ShipHealth>(),
                ecb = ecb
            };

            var backup = Dependency;

            Dependency = default;

            Entities.WithAll <FactionTag>().ForEach((Entity entity, int entityInQueryIndex) =>
            {
                if (entityInQueryIndex == 0)
                {
                    Dependency = backup;
                }

                var shipLayer = EntityManager.GetCollectionComponent <FactionShipsCollisionLayer>(entity, true).layer;
                Dependency    = Physics.FindPairs(bulletLayer, shipLayer, processor).ScheduleParallel(Dependency);
            }).WithoutBurst().Run();

            m_ecbSystem.AddJobHandleForProducer(Dependency);
        }
Ejemplo n.º 2
0
        protected override void OnUpdate()
        {
            var dcb = latiosWorld.syncPoint.CreateDestroyCommandBuffer().AsParallelWriter();
            var icb = latiosWorld.syncPoint.CreateInstantiateCommandBuffer <Rotation, Translation>().AsParallelWriter();

            int frameId = m_frameId;

            Entities.ForEach((ref BulletFirer firer) =>
            {
                if (!firer.initialized)
                {
                    firer.lastImpactFrame = frameId;
                    firer.initialized     = true;
                }
            }).ScheduleParallel();

            var bulletLayer = sceneBlackboardEntity.GetCollectionComponent <BulletCollisionLayer>(true).layer;

            var processor = new DamageHitShipsAndDestroyBulletProcessor
            {
                bulletDamageCdfe        = GetComponentDataFromEntity <Damage>(true),
                bulletFirerCdfe         = GetComponentDataFromEntity <BulletFirer>(),
                shipHealthCdfe          = GetComponentDataFromEntity <ShipHealth>(),
                shipHitEffectPrefabCdfe = GetComponentDataFromEntity <ShipHitEffectPrefab>(true),
                dcb     = dcb,
                icb     = icb,
                frameId = frameId
            };

            var backup = Dependency;

            Dependency = default;

            Entities.WithAll <FactionTag>().ForEach((Entity entity, int entityInQueryIndex) =>
            {
                if (entityInQueryIndex == 0)
                {
                    Dependency = backup;
                }

                var shipLayer = EntityManager.GetCollectionComponent <FactionShipsCollisionLayer>(entity, true).layer;
                Dependency    = Physics.FindPairs(bulletLayer, shipLayer, processor).ScheduleParallel(Dependency);
            }).WithoutBurst().Run();

            m_frameId++;
        }