示例#1
0
 public static void EffectOptions(CharacterBody owner, GameObject effectPrefab, bool transmit)
 {
     GradiusOption.instance.FireForAllOptions(owner, (option, _b, _t, direction) =>
     {
         EffectData effectData = new EffectData
         {
             origin     = option.transform.position,
             rootObject = option,
             rotation   = RoR2Util.QuaternionSafeLookRotation(direction)
         };
         EffectManager.SpawnEffect(effectPrefab, effectData, transmit);
     });
 }
 public override void FixedUpdate()
 {
     base.FixedUpdate();
     timer += Time.fixedDeltaTime;
     if (timer >= intervalFire)
     {
         timer -= intervalFire;
         Vector3 position  = aimOrigin.position;
         Vector3 direction = transform.forward;
         direction = RoR2Util.ApplySpread(direction, 0, spread, 1, 1);
         Quaternion rotation = RoR2Util.QuaternionSafeLookRotation(direction);
         StopSound();
         soundId = (int)RoR2Util.PlaySound(soundString, gameObject);
         if (effectPrefab)
         {
             EffectData effectData = new EffectData
             {
                 origin     = position,
                 rootObject = aimOrigin.gameObject,
                 rotation   = rotation
             };
             EffectManager.SpawnEffect(effectPrefab, effectData, false);
             Util.EffectOptions(characterBody, effectPrefab, false);
         }
         if (isAuthority)
         {
             float computedDamage = damageStat * damageCoefficient;
             FireProjectileInfo fireProjectileInfo = new FireProjectileInfo
             {
                 projectilePrefab = grenadePrefab,
                 crit             = RollCrit(),
                 damage           = computedDamage,
                 damageColorIndex = DamageColorIndex.Default,
                 force            = 0f,
                 owner            = gameObject,
                 position         = position,
                 rotation         = rotation
             };
             ProjectileManager.instance.FireProjectile(fireProjectileInfo);
             Util.FireOptions(characterBody, fireProjectileInfo, (_o, optionDirection) =>
             {
                 return(RoR2Util.ApplySpread(optionDirection, 0, spread, 1, 1));
             });
             Util.TriggerArmsRace(characterBody, computedDamage);
         }
     }
     if (isAuthority && fixedAge >= duration)
     {
         outer.SetNextStateToMain();
     }
 }
示例#3
0
 private void DoMayhem()
 {
     mayhemIntervalTimer += Time.fixedDeltaTime;
     if (mayhemIntervalTimer >= mayhemInterval)
     {
         Ray        aimRay   = SetAim(CycleAim(ref currentAim));
         Quaternion rotation = RoR2Util.QuaternionSafeLookRotation(aimRay.direction);
         if (effectPrefab)
         {
             EffectData effectData = new EffectData
             {
                 origin     = aimRay.origin,
                 rootObject = root.gameObject,
                 rotation   = rotation
             };
             EffectManager.SpawnEffect(effectPrefab, effectData, false);
             Util.EffectOptions(characterBody, effectPrefab, false);
         }
         if (NetworkServer.active)
         {
             int   projectileIndex   = Random.Range(0, projectilePrefabs.Count);
             float computedDamage    = characterBody.damage * damageCoefficients[projectileIndex];
             FireProjectileInfo info = new FireProjectileInfo
             {
                 projectilePrefab = projectilePrefabs[projectileIndex],
                 crit             = characterBody.RollCrit(),
                 damage           = computedDamage,
                 damageColorIndex = DamageColorIndex.Default,
                 force            = forces[projectileIndex],
                 owner            = gameObject,
                 position         = aimRay.origin,
                 rotation         = rotation
             };
             ProjectileManager.instance.FireProjectile(info);
             Util.FireOptions(characterBody, info, (_o, _d) => aimRay.direction);
             Util.TriggerArmsRace(characterBody, computedDamage);
         }
         mayhemIntervalTimer -= mayhemInterval;
     }
 }
示例#4
0
 public static void FireOptions(CharacterBody owner, FireProjectileInfo ownerInfo, Func <GameObject, Vector3, Vector3> customDirection)
 {
     GradiusOption.instance.FireForAllOptions(owner, (option, _b, _t, direction) =>
     {
         if (customDirection != null)
         {
             direction = customDirection(option, direction);
         }
         FireProjectileInfo fireProjectileInfo = new FireProjectileInfo
         {
             projectilePrefab = ownerInfo.projectilePrefab,
             crit             = ownerInfo.crit,
             damage           = ownerInfo.damage,
             damageColorIndex = ownerInfo.damageColorIndex,
             force            = ownerInfo.force,
             owner            = ownerInfo.owner,
             position         = option.transform.position,
             rotation         = RoR2Util.QuaternionSafeLookRotation(direction)
         };
         ProjectileManager.instance.FireProjectile(fireProjectileInfo);
     });
 }
示例#5
0
 private void FixedUpdate()
 {
     timer += Time.fixedDeltaTime;
     if (timer >= cooldown)
     {
         enemyFinder = new BullseyeSearch
         {
             maxDistanceFilter = range,
             maxAngleFilter    = 180f,
             searchOrigin      = transform.position,
             searchDirection   = inputBank.GetAimRay().direction,
             filterByLoS       = true,
             sortMode          = BullseyeSearch.SortMode.Distance,
             teamMaskFilter    = TeamMask.allButNeutral
         };
         if (teamComponent)
         {
             enemyFinder.teamMaskFilter.RemoveTeam(teamComponent.teamIndex);
         }
         enemyFinder.RefreshCandidates();
         target = enemyFinder.GetResults().FirstOrDefault();
         if (target)
         {
             Vector3    targetPosition  = target.transform.position;
             float      currentDistance = range * 3;
             Vector3    aimOrigin       = transform.position;
             GameObject root            = gameObject;
             foreach (Transform child in transform.Find("ModelBase").Find("MainBody"))
             {
                 Vector3 childPosition    = child.transform.position;
                 float   computedDistance = Vector3.Distance(targetPosition, childPosition);
                 if (computedDistance < currentDistance)
                 {
                     aimOrigin       = childPosition;
                     currentDistance = computedDistance;
                     root            = child.gameObject;
                 }
             }
             Quaternion rotation = RoR2Util.QuaternionSafeLookRotation((targetPosition - aimOrigin).normalized);
             RoR2Util.PlaySound(soundString, gameObject);
             if (effectPrefab)
             {
                 EffectData effectData = new EffectData
                 {
                     origin     = aimOrigin,
                     rootObject = root,
                     rotation   = rotation
                 };
                 EffectManager.SpawnEffect(effectPrefab, effectData, false);
                 Util.EffectOptions(characterBody, effectPrefab, false);
             }
             if (NetworkServer.active)
             {
                 float computedDamage    = characterBody.damage * damageCoefficient;
                 FireProjectileInfo info = new FireProjectileInfo
                 {
                     projectilePrefab = projectilePrefab,
                     position         = aimOrigin,
                     rotation         = rotation,
                     owner            = gameObject,
                     damage           = computedDamage,
                     force            = force,
                     crit             = characterBody.RollCrit(),
                     damageColorIndex = DamageColorIndex.Default,
                     speedOverride    = velocity
                 };
                 ProjectileManager.instance.FireProjectile(info);
                 Util.FireOptions(characterBody, info, (option, _d) =>
                 {
                     return((targetPosition - option.transform.position).normalized);
                 });
                 Util.TriggerArmsRace(characterBody, computedDamage);
             }
             timer -= cooldown;
         }
         timer = Mathf.Min(cooldown, timer);
     }
 }
示例#6
0
        // Token: 0x0600065A RID: 1626 RVA: 0x0001A2E8 File Offset: 0x000184E8
        public bool CanBeAffordedByInteractor(Interactor activator)
        {
            NetworkUser networkUser = Util.LookUpBodyNetworkUser(activator.gameObject);

            return(networkUser && (ulong)networkUser.lunarCoins >= (ulong)((long)this.GetCostForInteractor(activator)));
        }