void UpdatePoints() { beamLine.SetPosition(0, transform.position); beamLine.SetPosition(1, transform.position); if (targetProjectile != null) { if (hitEffect != null) { hitEffect.transform.position = targetProjectile.transform.position; } beamLine.SetPosition(1, targetProjectile.transform.position); beamLine.material.mainTextureScale = new Vector2(Vector3.Distance(transform.position, targetProjectile.transform.position), 1); float range = (targetProjectile.transform.position - transform.position).sqrMagnitude; float damage = attachedWeapon.baseWeapon.CalculateDamage(range) * GetDeltaTime(); damage += damage * damageBonus; AccumulatedDamage += damage; totalDamage += damage; if (DamageIntervalTimer > 0) { DamageIntervalTimer -= GetDeltaTime(); } else { DamageIntervalTimer = ResourceManager.instance.GetGameConstants().BeamDamageIntervalTime; targetProjectile.TakeDamage(attachedWeapon.baseWeapon, AccumulatedDamage); AccumulatedDamage = 0; } } else { RaycastHit[] hits; hits = Physics.RaycastAll(transform.position, GetWorldTargetOffset() - transform.position, attachedWeapon.baseWeapon.GetMaxRange(), 1 << 12, QueryTriggerInteraction.Ignore); foreach (RaycastHit hit in hits) { if (LastHitObject == null) { if (hit.transform.root.gameObject.tag == "Ship" || hit.transform.root.gameObject.tag == "Fighter" || hit.transform.root.gameObject.tag == "Station") { SpaceUnit HitUnit = hit.transform.root.GetComponent <SpaceUnit>(); if (attachedWeapon.isEnemy(HitUnit)) { LastHitObject = hit.transform.root.gameObject; LastHitUnit = HitUnit; LastHitUnit.CheckShieldHit(hit.point, transform.position); if (hitEffect != null) { hitEffect.transform.position = hit.point; } beamLine.SetPosition(1, hit.point); beamLine.material.mainTextureScale = new Vector2(Vector3.Distance(transform.position, hit.point), 1); float range = (hit.point - transform.position).sqrMagnitude; float damage = attachedWeapon.baseWeapon.CalculateDamage(range) * GetDeltaTime(); damage += damage * damageBonus; totalDamage += damage; AccumulatedDamage = damage; DamageIntervalTimer = ResourceManager.instance.GetGameConstants().BeamDamageIntervalTime; return; } } } else { if (hit.transform.root.gameObject == LastHitObject) { LastHitUnit.CheckShieldHit(hit.point, transform.position); if (hitEffect != null) { hitEffect.transform.position = hit.point; } beamLine.SetPosition(1, hit.point); beamLine.material.mainTextureScale = new Vector2(Vector3.Distance(transform.position, hit.point), 1); float range = (hit.point - transform.position).sqrMagnitude; float damage = attachedWeapon.baseWeapon.CalculateDamage(range) * GetDeltaTime(); damage += damage * damageBonus; totalDamage += damage; AccumulatedDamage += damage; if (DamageIntervalTimer > 0) { DamageIntervalTimer -= GetDeltaTime(); } else { DamageIntervalTimer = ResourceManager.instance.GetGameConstants().BeamDamageIntervalTime; DealDamage(LastHitUnit, AccumulatedDamage); AccumulatedDamage = 0; } return; } else if (hit.transform.root.gameObject.tag == "Ship" || hit.transform.root.gameObject.tag == "Fighter" || hit.transform.root.gameObject.tag == "Station") { SpaceUnit HitUnit = hit.transform.root.GetComponent <SpaceUnit>(); if (attachedWeapon.isEnemy(HitUnit)) { if (LastHitUnit != null && AccumulatedDamage > 0) { DealDamage(LastHitUnit, AccumulatedDamage); } LastHitObject = hit.transform.root.gameObject; LastHitUnit = HitUnit; LastHitUnit.CheckShieldHit(hit.point, transform.position); if (hitEffect != null) { hitEffect.transform.position = hit.point; } beamLine.SetPosition(1, hit.point); beamLine.material.mainTextureScale = new Vector2(Vector3.Distance(transform.position, hit.point), 1); float range = (hit.point - transform.position).sqrMagnitude; float damage = attachedWeapon.baseWeapon.CalculateDamage(range) * GetDeltaTime(); damage += damage * damageBonus; totalDamage += damage; AccumulatedDamage = damage; DamageIntervalTimer = ResourceManager.instance.GetGameConstants().BeamDamageIntervalTime; return; } } } } } }