private void FireBeam_FixedUpdate(On.EntityStates.EngiTurret.EngiTurretWeapon.FireBeam.orig_FixedUpdate orig, FireBeam self) { float optionFireTimer = self.fireTimer + Time.fixedDeltaTime; orig(self); if (DroneNameCheck(self.characterBody, "RoboBallGreenBuddy") || DroneNameCheck(self.characterBody, "RoboBallRedBuddy")) { FireForAllOptions(self.characterBody, (option, behavior, target, direction) => { Ray laserRay = new Ray(option.transform.position, direction); float rate = self.fireFrequency * self.characterBody.attackSpeed; float fraction = 1f / rate; if (optionFireTimer > fraction) { if (self.effectPrefab) { option.MuzzleEffect(self.effectPrefab, false); } if (self.isAuthority) { BulletAttack bulletAttack = new BulletAttack() { owner = self.gameObject, weapon = option, origin = laserRay.origin, aimVector = laserRay.direction, minSpread = self.minSpread, maxSpread = self.maxSpread, bulletCount = 1U, damage = self.damageCoefficient * self.damageStat / self.fireFrequency * damageMultiplier, procCoefficient = self.procCoefficient * self.fireFrequency, force = self.force * damageMultiplier, muzzleName = self.muzzleString, hitEffectPrefab = self.hitEffectPrefab, isCrit = self.characterBody.RollCrit(), HitEffectNormal = false, radius = 0f, maxDistance = self.maxDistance }; self.ModifyBullet(bulletAttack); if (!empathyCoresOptionSyncEffect) { bulletAttack.tracerEffectPrefab = FireGatling.tracerEffectPrefab; } bulletAttack.Fire(); } } if (empathyCoresOptionSyncEffect && behavior.U.SafeCheck("laserEffectInstance") && behavior.U.SafeCheck("laserEffectInstanceEndTransform")) { Vector3 position = ((GameObject)behavior.U["laserEffectInstance"]).transform.parent.position; Vector3 point = laserRay.GetPoint(self.maxDistance); if (Physics.Raycast(laserRay.origin, laserRay.direction, out RaycastHit raycastHit, self.maxDistance, LayerIndex.world.mask | LayerIndex.entityPrecise.mask, QueryTriggerInteraction.UseGlobal)) { point = raycastHit.point; } ((Transform)behavior.U["laserEffectInstanceEndTransform"]).position = point; } });
// Use this for initialization void Start() { canFireLazer = true; player = GetComponent <PlayerController>(); fireBeam = FindObjectOfType <FireBeam>(); }