private bool CheckPastTimeToLive(LaunchedMissileComp lmc) { if (lmc.TimeAlive > lmc.projectileInfo.TimeToLive) { RangedCombatHelper.PerformAreaExplosion(lmc); return(true); } return(false); }
private void HandleDetonationDistance(LaunchedMissileComp lmc) { if (lmc.detonationDistance.IsAlmost(0)) { return; } if (lmc.projectileInfo.target != null && Vector3.SqrMagnitude(lmc.transform.position - lmc.projectileInfo.target.position) <= lmc.detonationDistance) { RangedCombatHelper.PerformAreaExplosion(lmc); } }
private void UpdatePIDMethod(LaunchedMissileComp lmc) { Vector3 hitPos = RangedCombatHelper.Predict(lmc.transform.position, lmc.projectileInfo.target.position, lmc.targetLastPos, lmc.projectileInfo.FlightSpeed); lmc.targetLastPos = lmc.projectileInfo.target.position; lmc.transform.rotation = Quaternion.Lerp(lmc.transform.rotation, Quaternion.LookRotation(hitPos - lmc.transform.position), Time.deltaTime * lmc.projectileInfo.RotationSpeed); lmc.transform.position += lmc.transform.forward * Time.deltaTime * lmc.projectileInfo.FlightSpeed; }
public override void Update() { var matches = missileMatcher.GetMatches(); foreach (var match in matches) { var cc = match.GetComponent <CollisionEnterComp>(); var lmc = match.GetComponent <LaunchedMissileComp>(); if (lmc.projectileInfo.ExplosionImpactRadius > 0 && cc.Other.Count > 0) { Debug.Log($"Performing area explosion from collision"); RangedCombatHelper.PerformAreaExplosion(lmc); } else { foreach (var coll in cc.Other) { //var oth = coll.gameObject.GetComponent<EntityWrapper>(); var oth = coll.gameObject.GetEntityWrapper(); if (oth != null) { if (!oth.Entity.HasComponent(ComponentTypes.DamageComp)) { Debug.Log($"Missile Collision system adding collision to {oth.Entity.EntityName}"); var dc = oth.Entity.GetOrAddComponent <DamageComp>(ComponentTypes.DamageComp); dc.damagePackets.Push(new DamagePacket(lmc.projectileInfo.HullDamage, lmc.projectileInfo.ShieldDamage)); ZenUtils.ApplyExplosionForce(oth, coll.contacts[0].point, lmc.projectileInfo.ExplosionImpactRadius); } } } if (cc.Other.Count > 0) // missile hit *something* so blow up { Debug.Log($"Missile Collision system adding damage from collision to missile"); match.GetOrAddComponent <DamageComp>(ComponentTypes.DamageComp).damagePackets.Push(new DamagePacket()); } } } }