示例#1
0
        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;
                    }
                });
示例#2
0
 // Use this for initialization
 void Start()
 {
     canFireLazer = true;
     player       = GetComponent <PlayerController>();
     fireBeam     = FindObjectOfType <FireBeam>();
 }