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(); } }
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; } }
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); }); }
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); } }
// 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))); }