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); } }
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); } }
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); } }
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; } }
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; } }
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 }; } } }