private IEnumerator Attack(Vector2 pointOnTarget) { base.aiActor.MovementSpeed = 0; isAttacking = true; base.aiAnimator.PlayUntilFinished("attack"); yield return(new WaitForSeconds(0.33f)); AkSoundEngine.PostEvent("Play_ENM_wizardred_shoot_01", base.gameObject); GameObject projobj = ProjSpawnHelper.SpawnProjectileTowardsPoint(DarkPrinceProjectile, base.sprite.WorldCenter, pointOnTarget); Projectile proj = projobj.GetComponent <Projectile>(); if (proj) { proj.Owner = Owner; proj.Shooter = base.specRigidbody; proj.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); proj.baseData.speed *= Owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); proj.baseData.range *= Owner.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); proj.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); proj.BossDamageMultiplier *= Owner.stats.GetStatValue(PlayerStats.StatType.DamageToBosses); proj.UpdateSpeed(); proj.ApplyCompanionModifierToBullet(Owner); Owner.DoPostProcessProjectile(proj); } yield return(new WaitForSeconds(0.1f)); base.aiActor.MovementSpeed = base.aiActor.BaseMovementSpeed; isAttacking = false; attackTimer = 2; yield break; }
private IEnumerator GoodButterfingersEffect() { yield return(null); for (int i = 0; i < 6; i++) { GameObject ProjToSpawn = (PickupObjectDatabase.GetById(503) as Gun).DefaultModule.projectiles[0].gameObject; if (UnityEngine.Random.value <= 0.5f) { ProjToSpawn = (PickupObjectDatabase.GetById(512) as Gun).DefaultModule.projectiles[0].gameObject; } GameObject spawnedShot = ProjSpawnHelper.SpawnProjectileTowardsPoint(ProjToSpawn, m_attachedPlayer.CenterPosition, m_attachedPlayer.unadjustedAimPoint, 0, 10, m_attachedPlayer); Projectile component = spawnedShot.GetComponent <Projectile>(); if (component != null) { component.Owner = m_attachedPlayer; component.Shooter = m_attachedPlayer.specRigidbody; component.baseData.damage *= m_attachedPlayer.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.speed *= m_attachedPlayer.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); component.baseData.force *= m_attachedPlayer.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.baseData.range *= m_attachedPlayer.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); m_attachedPlayer.DoPostProcessProjectile(component); } yield return(new WaitForSeconds(0.2f)); } yield break; }
protected override void DoEffect(PlayerController user) { int amountOfBullets = storedProjectiles.Count(); float direction = UnityEngine.Random.insideUnitCircle.ToAngle(); if (user.CurrentGun != null) { direction = user.CurrentGun.CurrentAngle; } for (int i = amountOfBullets - 1; i >= 0; i--) { float finaldir = ProjSpawnHelper.GetAccuracyAngled(direction, 25, user); GameObject prefab = storedProjectiles[i].gameObject; GameObject spawnedBulletOBJ = SpawnManager.SpawnProjectile(prefab, user.sprite.WorldCenter, Quaternion.Euler(0f, 0f, finaldir), true); Projectile component = spawnedBulletOBJ.GetComponent <Projectile>(); if (component != null) { component.Owner = user; component.Shooter = user.specRigidbody; component.baseData.speed *= UnityEngine.Random.Range(0.9f, 1.1f); } storedProjectiles.RemoveAt(i); Destroy(prefab); } }
private void TriggerShootBullet(float range, float speed, float overrideDamageMult = 1) { if (base.specRigidbody && Owner && Owner.CurrentGun) { float currentGunAngleVariance = Owner.CurrentGun.RawDefaultModule().angleVariance; GameObject gameObject = ProjSpawnHelper.SpawnProjectileTowardsPoint(DroneCompanion.DroneCompanionProjectile.gameObject, base.specRigidbody.UnitBottomCenter, Owner.unadjustedAimPoint.XY(), 0, currentGunAngleVariance); Projectile component = gameObject.GetComponent <Projectile>(); if (component != null) { component.Owner = Owner; component.Shooter = base.specRigidbody; //COMPANION SHIT component.ApplyCompanionModifierToBullet(Owner); component.TreatedAsNonProjectileForChallenge = true; component.baseData.range = range; component.baseData.damage *= overrideDamageMult; component.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.speed = speed; component.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.AdditionalScaleMultiplier *= Owner.stats.GetStatValue(PlayerStats.StatType.PlayerBulletScale); component.UpdateSpeed(); Owner.DoPostProcessProjectile(component); } if (Owner.PlayerHasActiveSynergy("Wrong Kind Of Drone") && UnityEngine.Random.value <= 0.2f) { FireBeeBullet(); } } }
private void DoProjectileSpawn() { Vector2 projectileSpawnPosition = this.m_basicBeam.GetPointOnBeam(UnityEngine.Random.value); Vector2 nearestEnemyPosition = projectileSpawnPosition.GetPositionOfNearestEnemy(true, true); if (nearestEnemyPosition != Vector2.zero) { GameObject gameObject = ProjSpawnHelper.SpawnProjectileTowardsPoint(this.projectileToFire.gameObject, projectileSpawnPosition, nearestEnemyPosition, 0, 5); gameObject.AddComponent <BulletIsFromBeam>(); Projectile component = gameObject.GetComponent <Projectile>(); if (component != null) { component.Owner = this.m_owner; component.TreatedAsNonProjectileForChallenge = true; component.Shooter = this.m_owner.specRigidbody; component.collidesWithPlayer = false; if (this.addFromBulletWithGunComponent) { component.gameObject.GetOrAddComponent <BulletsWithGuns.BulletFromBulletWithGun>(); } //Stats if (this.doPostProcess) { component.baseData.damage *= this.m_owner.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.speed *= this.m_owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); component.baseData.range *= this.m_owner.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); component.AdditionalScaleMultiplier *= this.m_owner.stats.GetStatValue(PlayerStats.StatType.PlayerBulletScale);; component.baseData.force *= this.m_owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.BossDamageMultiplier *= this.m_owner.stats.GetStatValue(PlayerStats.StatType.DamageToBosses); this.m_owner.DoPostProcessProjectile(component); } } } }
private void FireBeeBullet() { Projectile projectile = ((Gun)ETGMod.Databases.Items[14]).DefaultModule.projectiles[0]; GameObject gameObject = ProjSpawnHelper.SpawnProjectileTowardsPoint(projectile.gameObject, base.specRigidbody.UnitBottomCenter, Owner.unadjustedAimPoint.XY(), 0, 0); Projectile component = gameObject.GetComponent <Projectile>(); if (component != null) { component.Owner = Owner; component.Shooter = base.specRigidbody; Owner.DoPostProcessProjectile(component); } }
private void Fire() { AkSoundEngine.PostEvent("Play_WPN_smileyrevolver_shot_01", gameObject); GameObject spawnedProj = ProjSpawnHelper.SpawnProjectileTowardsPoint((PickupObjectDatabase.GetById(86) as Gun).DefaultModule.projectiles[0].gameObject, Owner.specRigidbody.UnitCenter, Owner.specRigidbody.UnitCenter.GetPositionOfNearestEnemy(true, true), 0, 20, Owner); Projectile spawnedProjectileComp = spawnedProj.GetComponent <Projectile>(); spawnedProjectileComp.Owner = Owner; spawnedProjectileComp.Shooter = Owner.specRigidbody; spawnedProjectileComp.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); spawnedProjectileComp.baseData.speed *= Owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); spawnedProjectileComp.baseData.range *= Owner.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); spawnedProjectileComp.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); Owner.DoPostProcessProjectile(spawnedProjectileComp); spawnedProjectileComp.ApplyCompanionModifierToBullet(Owner); }
private void FireBullet(PlayerController Owner, Vector2 startPos, Vector2 targetPos, float angleOffset, float anglevariance) { GameObject gameObject = ProjSpawnHelper.SpawnProjectileTowardsPoint(GlassShard.GlassShardProjectile.gameObject, startPos, targetPos, angleOffset, anglevariance); Projectile component = gameObject.GetComponent <Projectile>(); if (component != null) { component.Owner = Owner; component.Shooter = Owner.specRigidbody; component.TreatedAsNonProjectileForChallenge = true; component.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.speed *= Owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); component.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.AdditionalScaleMultiplier *= Owner.stats.GetStatValue(PlayerStats.StatType.PlayerBulletScale); component.UpdateSpeed(); Owner.DoPostProcessProjectile(component); } }
private void OwnerPostProcess(Projectile proj, float something) { if (UnityEngine.Random.value <= 0.2f) { if (Owner.IsInCombat && base.aiActor.OverrideTarget && base.aiActor.OverrideTarget.sprite) { base.aiAnimator.PlayUntilFinished("attack"); GameObject spawned = ProjSpawnHelper.SpawnProjectileTowardsPoint(proj.gameObject, base.sprite.WorldCenter, base.aiActor.OverrideTarget.sprite.WorldCenter, 0, 5, Owner); Projectile spawnedProj = spawned.GetComponent <Projectile>(); if (spawnedProj) { spawnedProj.Owner = Owner; spawnedProj.Shooter = Owner.specRigidbody; spawnedProj.ApplyCompanionModifierToBullet(Owner); } } } }
protected override void Update() { if (this.m_extantOrbital != null) { if (timer > 0) { timer -= BraveTime.DeltaTime; } else if (timer <= 0) { if (Owner.PlayerHasActiveSynergy("Ultravioleter Guon Stone")) { timer = UnityEngine.Random.Range(0.1f, 0.5f); m_extantOrbital.GetComponent <PlayerOrbital>().orbitRadius = UnityEngine.Random.Range(1f, 5f); } else { timer = UnityEngine.Random.Range(0.1f, 1f); m_extantOrbital.GetComponent <PlayerOrbital>().orbitRadius = UnityEngine.Random.Range(2f, 6f); } if (Owner.IsInCombat && Owner.PlayerHasActiveSynergy("Xenochrome")) { if (UnityEngine.Random.value <= 0.5f) { GameObject obj = ProjSpawnHelper.SpawnProjectileTowardsPoint(xenochromePrefab.gameObject, m_extantOrbital.transform.position, Owner.transform.position); Projectile component = obj.GetComponent <Projectile>(); if (component != null) { component.Owner = Owner; component.Shooter = Owner.specRigidbody; component.collidesWithPlayer = false; component.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.range *= Owner.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); component.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.baseData.speed *= Owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); Owner.DoPostProcessProjectile(component); } } } } base.Update(); } }
private void Update() { if (hasStarted && this.m_projectile && this.m_player && this.m_rigidBody) { if (timer > 0) { timer -= BraveTime.DeltaTime; } if (timer <= 0) { for (int i = 0; i < numToFire; i++) { Vector2 projectileSpawnPosition = this.m_projectile.sprite.WorldCenter; Vector2 nearestEnemyPosition = projectileSpawnPosition.GetPositionOfNearestEnemy(true, true); if (nearestEnemyPosition != Vector2.zero) { GameObject gameObject = ProjSpawnHelper.SpawnProjectileTowardsPoint(this.projectileToFire.gameObject, projectileSpawnPosition, nearestEnemyPosition, 0, AngleVariance); Projectile component = gameObject.GetComponent <Projectile>(); if (component != null) { component.Owner = this.m_player; component.TreatedAsNonProjectileForChallenge = true; component.Shooter = this.m_rigidBody; component.collidesWithPlayer = false; component.baseData.damage *= this.m_player.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.speed *= this.m_player.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); component.baseData.range *= this.m_player.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); component.AdditionalScaleMultiplier *= this.m_player.stats.GetStatValue(PlayerStats.StatType.PlayerBulletScale);; component.baseData.force *= this.m_player.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.BossDamageMultiplier *= this.m_player.stats.GetStatValue(PlayerStats.StatType.DamageToBosses); this.m_player.DoPostProcessProjectile(component); } } } timer = TimeBetweenAttacks; } } }
private IEnumerator SpawnAdditionalProjectile(Projectile source, Projectile toSpawn, float variance = 0f, float FromAim = 0f, bool helix = false) { //ETGModConsole.Log("spawn additional ran"); yield return(null); GameObject spawnBee = SpawnManager.SpawnProjectile(toSpawn.gameObject, source.specRigidbody.UnitCenter, Quaternion.Euler(0f, 0f, ProjSpawnHelper.GetAccuracyAngled(source.Direction.ToAngle() + FromAim, variance, source.ProjectilePlayerOwner())), true); if (spawnBee.GetComponent <Projectile>()) { Projectile beeproj = spawnBee.GetComponent <Projectile>(); beeproj.Owner = source.Owner; beeproj.Shooter = source.Shooter; beeproj.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); beeproj.baseData.speed *= Owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); beeproj.baseData.range *= Owner.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); beeproj.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); beeproj.BossDamageMultiplier *= Owner.stats.GetStatValue(PlayerStats.StatType.DamageToBosses); beeproj.UpdateSpeed(); if (helix) { beeproj.ConvertToHelixMotion(true); } beeproj.PossibleSourceGun = source.PossibleSourceGun; beeproj.gameObject.AddComponent <HasBeenBulletShuffled>(); Owner.DoPostProcessProjectile(beeproj); } yield break; }
private void Update() { if (timer >= 0) { timer -= BraveTime.DeltaTime; } else { if (owner && owner.IsInCombat) { if (shoots) { int numToFire = 1; if (isGlass) { numToFire += owner.GetNumberOfItemInInventory(565); } for (int i = 0; i < numToFire; i++) { AIActor nearestEnemy = ((Vector2)base.transform.position).GetNearestEnemyToPosition(); if (nearestEnemy != null) { Vector2 nearestEnemyPos = nearestEnemy.transform.position; if (nearestEnemy.specRigidbody) { nearestEnemyPos = nearestEnemy.specRigidbody.UnitCenter; } float angleVar = 5; if (i > 1 && isGlass) { angleVar = 10; } GameObject proj = ProjSpawnHelper.SpawnProjectileTowardsPoint((PickupObjectDatabase.GetById(gunIDToShoot) as Gun).DefaultModule.projectiles[0].gameObject, sprite.WorldCenter, nearestEnemyPos, 0, angleVar, owner); Projectile component = proj.GetComponent <Projectile>(); if (component) { component.Owner = owner; component.Shooter = body; component.ApplyCompanionModifierToBullet(owner); component.baseData.damage *= owner.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.range *= owner.stats.GetStatValue(PlayerStats.StatType.RangeMultiplier); component.baseData.speed *= owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); component.baseData.force *= owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); owner.DoPostProcessProjectile(component); if (curseShot) { component.AdjustPlayerProjectileTint(ExtendedColours.cursedBulletsPurple, 2); component.CurseSparks = true; component.baseData.damage *= ((0.15f * owner.stats.GetStatValue(PlayerStats.StatType.Curse)) + 1); } if (isCyclops) { component.AdditionalScaleMultiplier *= 1.5f; component.baseData.damage *= 3f; PierceProjModifier pierce = component.gameObject.AddComponent <PierceProjModifier>(); pierce.penetration = 3; } } } } } else if (isBarrel) { Vector2 barrelPos = sprite.WorldCenter; CellData cell = GameManager.Instance.Dungeon.data.cellData[(int)barrelPos.x][(int)barrelPos.y]; if (cell.type == CellType.FLOOR) { GameObject barrel = UnityEngine.Object.Instantiate <GameObject>(EasyPlaceableObjects.GenericBarrel, barrelPos, Quaternion.identity); barrel.GetComponentInChildren <MinorBreakable>().OnlyBrokenByCode = true; barrel.GetComponentInChildren <SpeculativeRigidbody>().OnPreRigidbodyCollision += HandlePreCollision; barrel.GetComponentInChildren <SpeculativeRigidbody>().PrimaryPixelCollider.CollisionLayer = CollisionLayer.EnemyBulletBlocker; barrel.GetComponentInChildren <tk2dSprite>().PlaceAtPositionByAnchor(barrelPos, tk2dSprite.Anchor.LowerCenter); StartCoroutine(BreakBarrel(barrel.GetComponentInChildren <MinorBreakable>())); } } } timer = shootDelay; } }
public override void Update() { if (Owner && !Dungeon.IsGenerating && Owner.IsInCombat && base.transform.position.GetAbsoluteRoom() == Owner.CurrentRoom) { if (timer > 0) { timer -= BraveTime.DeltaTime; } if (timer <= 0) { //do stuff bool doAnim = false; if ((GameManager.Instance.Dungeon.tileIndices.tilesetId == GlobalDungeonData.ValidTilesets.HELLGEON) || Owner.PlayerHasActiveSynergy("They Grow Inside")) { float chance = 0.25f; if (Owner.PlayerHasActiveSynergy("They Grow Inside")) { chance = 0.50f; } if (UnityEngine.Random.value <= chance) { doAnim = true; VolleyReplacementSynergyProcessor shotgrubProcessor = (PickupObjectDatabase.GetById(347) as Gun).GetComponent <VolleyReplacementSynergyProcessor>(); Projectile bullet = shotgrubProcessor.SynergyVolley.projectiles[0].projectiles[0].projectile; GameObject spawnedProj = ProjSpawnHelper.SpawnProjectileTowardsPoint(bullet.gameObject, base.sprite.WorldCenter, base.specRigidbody.UnitCenter.GetPositionOfNearestEnemy(false, true), 0, 15); Projectile component = spawnedProj.GetComponent <Projectile>(); if (component != null) { component.Owner = Owner; component.Shooter = Owner.specRigidbody; //COMPANION SHIT component.TreatedAsNonProjectileForChallenge = true; component.baseData.damage *= Owner.stats.GetStatValue(PlayerStats.StatType.Damage); component.baseData.speed *= Owner.stats.GetStatValue(PlayerStats.StatType.ProjectileSpeed); component.baseData.force *= Owner.stats.GetStatValue(PlayerStats.StatType.KnockbackMultiplier); component.AdditionalScaleMultiplier *= Owner.stats.GetStatValue(PlayerStats.StatType.PlayerBulletScale); component.UpdateSpeed(); base.HandleCompanionPostProcessProjectile(component); } } } if (UnityEngine.Random.value <= 0.02f) { doAnim = true; bool shouldJam = false; if (Owner.PlayerHasActiveSynergy("Cursed Ceramics")) { shouldJam = true; } AIActor fairy = CompanionisedEnemyUtility.SpawnCompanionisedEnemy(Owner, "c182a5cb704d460d9d099a47af49c913", base.specRigidbody.UnitCenter.ToIntVector2(), false, ExtendedColours.brown, 10, 2, shouldJam, true); fairy.specRigidbody.CollideWithOthers = false; } if (UnityEngine.Random.value <= 0.05f && Owner.PlayerHasActiveSynergy("The Potter Boy")) { doAnim = true; AIActor randomActiveEnemy = base.transform.position.GetAbsoluteRoom().GetRandomActiveEnemy(false); if (randomActiveEnemy && randomActiveEnemy.IsNormalEnemy && randomActiveEnemy.healthHaver && !randomActiveEnemy.healthHaver.IsBoss) { randomActiveEnemy.Transmogrify(EnemyDatabase.GetOrLoadByGuid("76bc43539fc24648bff4568c75c686d1"), (GameObject)ResourceCache.Acquire("Global VFX/VFX_Item_Spawn_Poof")); } } if (doAnim && this.aiAnimator) { this.aiAnimator.PlayUntilFinished("spawnobject", false, null, -1f, false); } timer = 2f; } if (RadialTimer > 0) { RadialTimer -= BraveTime.DeltaTime; } if (RadialTimer <= 0) { HandleRadialEffects(); RadialTimer = 0.05f; } } base.Update(); }