Exemple #1
0
 public void Execute(FindPairsResult result)
 {
     if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out _))
     {
         dcb.Add(result.entityA, result.jobIndex);
     }
 }
Exemple #2
0
            public void Execute(FindPairsResult result)
            {
                var bulletFirer = bulletFirerCdfe[result.entityA];

                if (bulletFirer.entity == result.entityB)
                {
                    if (((bulletFirer.lastImpactFrame + 2) - frameId) > 0)
                    {
                        bulletFirer.lastImpactFrame     = frameId;
                        bulletFirerCdfe[result.entityA] = bulletFirer;
                        return;
                    }
                }

                if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out _))
                {
                    var damage = bulletDamageCdfe[result.entityA];
                    var health = shipHealthCdfe[result.entityB];

                    health.health -= damage.damage;

                    shipHealthCdfe[result.entityB] = health;

                    dcb.Add(result.entityA, result.jobIndex);
                }
            }
Exemple #3
0
 public void Execute(FindPairsResult result)
 {
     //No need to check narrow phase. AABB check is good enough
     safeToSpawnCdfe[result.entityA] = new SafeToSpawn {
         safe = false
     };
 }
 public void Execute(FindPairsResult result)
 {
     if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out ColliderDistanceResult _))
     {
         ecb.DestroyEntity(result.jobIndex, result.bodyA.entity);
         ecb.DestroyEntity(result.jobIndex, result.bodyB.entity);
     }
 }
Exemple #5
0
 public void Execute(FindPairsResult result)
 {
     safeToSpawnCdfe[result.entityA] = new SafeToSpawn {
         safe = false
     };
     safeToSpawnCdfe[result.entityB] = new SafeToSpawn {
         safe = false
     };
 }
            public void Execute(FindPairsResult result)
            {
                if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out _))
                {
                    var damage = explosionDamageCdfe[result.entityA];
                    var health = shipHealthCdfe[result.entityB];

                    health.health -= damage.damage;

                    shipHealthCdfe[result.entityB] = health;
                }
            }
Exemple #7
0
            public void Execute(FindPairsResult result)
            {
                if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out _))
                {
                    var damage = bulletDamageCdfe[result.entityA];
                    var health = shipHealthCdfe[result.entityB];

                    health.health -= damage.damage;

                    shipHealthCdfe[result.entityB] = health;

                    ecb.DestroyEntity(result.jobIndex, result.entityA);
                }
            }
            public void Execute(FindPairsResult result)
            {
                if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out _))
                {
                    var healthA = shipHealthCdfe[result.entityA];
                    var healthB = shipHealthCdfe[result.entityB];
                    var damageA = shipDamageCdfe[result.entityA];
                    var damageB = shipDamageCdfe[result.entityB];

                    healthA.health -= damageB.damage;
                    healthB.health -= damageA.damage;

                    shipHealthCdfe[result.entityA] = healthA;
                    shipHealthCdfe[result.entityB] = healthB;
                }
            }
Exemple #9
0
            public void Execute(FindPairsResult result)
            {
                var bulletFirer = bulletFirerCdfe[result.entityA];

                if (bulletFirer.entity == result.entityB)
                {
                    if (((bulletFirer.lastImpactFrame + 2) - frameId) > 0)
                    {
                        bulletFirer.lastImpactFrame     = frameId;
                        bulletFirerCdfe[result.entityA] = bulletFirer;
                        return;
                    }
                }

                if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out var hitData))
                {
                    var damage = bulletDamageCdfe[result.entityA];
                    var health = shipHealthCdfe[result.entityB];

                    health.health -= damage.damage;

                    shipHealthCdfe[result.entityB] = health;

                    dcb.Add(result.entityA, result.jobIndex);

                    var hitPrefab = shipHitEffectPrefabCdfe[result.entityB];
                    if (hitPrefab.hitEffectPrefab != Entity.Null)
                    {
                        float3 upDir    = math.select(math.up(), math.forward(), math.abs(hitData.normalB.y) == 1f);
                        var    rotation = new Rotation {
                            Value = quaternion.LookRotationSafe(hitData.normalB, upDir)
                        };
                        icb.Add(hitPrefab.hitEffectPrefab, rotation, new Translation {
                            Value = hitData.hitpointB
                        }, result.jobIndex);
                    }
                }
            }
            public void Execute(FindPairsResult result)
            {
                if (Physics.DistanceBetween(result.bodyA.collider, result.bodyA.transform, result.bodyB.collider, result.bodyB.transform, 0f, out _))
                {
                    var   aabb          = Physics.CalculateAabb(result.bodyB.collider, RigidTransform.identity);
                    float forwardOffset = -aabb.min.z * 2;  //Distance to butt doubled for safety

                    var            destEntity = destCDFE[result.entityA].wormholeDestination;
                    SphereCollider destCol    = colCDFE[destEntity];
                    float          destRad    = destCol.radius;
                    var            destLtw    = ltwCDFE[destEntity];

                    var destInSrcRot = math.mul(math.inverse(result.bodyA.transform.rot), destLtw.Rotation);
                    //var newRot       = math.mul(result.bodyB.transform.rot, destInSrcRot);
                    var newRot = math.mul(destInSrcRot, result.bodyB.transform.rot);

                    var newPos = destLtw.Position + math.rotate(destInSrcRot, result.bodyB.transform.pos - result.bodyA.transform.pos);
                    var wormholeProjectedOffset = math.dot(math.forward(newRot), destLtw.Position - newPos);

                    newPos += (wormholeProjectedOffset + forwardOffset + destRad) * math.forward(newRot) * 1f;

                    posCDFE[result.entityB] = new Translation {
                        Value = newPos
                    };
                    rotCDFE[result.entityB] = new Rotation {
                        Value = newRot
                    };

                    //This could cause bullets to phase past ships, but will have to suffice until we have layer-scope spherecasts and the butt is fixed-length.
                    if (prevPosCDFE.HasComponent(result.entityB))
                    {
                        prevPosCDFE[result.entityB] = new BulletPreviousPosition {
                            previousPosition = newPos
                        };
                    }
                }
            }