private void EditNovaBomb() { GameObject novaProj = Resources.Load <GameObject>("Prefabs/Projectiles/MageLightningBombProjectile"); ProjectileSimple novaSimp = novaProj.GetComponent <ProjectileSimple>(); novaSimp.velocity *= 1.25f; Rigidbody rb = novaProj.GetComponent <Rigidbody>(); rb.useGravity = true; rb.drag = 1f; novaProj.GetComponent <Rigidbody>().useGravity = true; ProjectileImpactExplosion novaImpact = novaProj.GetComponent <ProjectileImpactExplosion>(); novaImpact.blastDamageCoefficient = 1.0f; novaImpact.falloffModel = RoR2.BlastAttack.FalloffModel.None; novaImpact.blastRadius = 15f; ProjectileProximityBeamController novaBeams = novaProj.GetComponent <ProjectileProximityBeamController>(); novaBeams.attackRange *= 1.25f; novaBeams.attackInterval *= 0.9f; novaBeams.bounces += 1; }
private void ResetNearbyThermite() { Collider[] array = Physics.OverlapSphere(this.transform.position, 40f, LayerIndex.projectile.mask); for (int i = 0; i < array.Length; i++) { ProjectileController pc = array[i].GetComponentInParent <ProjectileController>(); if (pc && pc.gameObject != this.gameObject) { BootlegThermiteOverlapAttack bt = pc.gameObject.GetComponent <BootlegThermiteOverlapAttack>(); if (bt && bt.stuckObject == this.stuckObject) { //bt.detonated = true; bt.detonationStopwatch = -0.13f * (i + 1); ProjectileSimple ps = pc.gameObject.GetComponent <ProjectileSimple>(); if (ps) { ps.stopwatch = 0f; } if (bt.projectileImpactExplosion) { bt.projectileImpactExplosion.stopwatch = 0f; } if (bt.stuckObject && bt.stuckObjectHealthComponent && bt.stuckObjectHealthComponent.body) { bt.cachedThermiteCount = bt.stuckObjectHealthComponent.body.GetBuffCount(ModContentPack.thermiteBuff); } } } } }
private void AdjustSpeedEnemyProjectile(On.RoR2.Projectile.ProjectileManager.orig_FireProjectile_FireProjectileInfo orig, ProjectileManager self, FireProjectileInfo fireProjectileInfo) { GameObject owner = fireProjectileInfo.owner; if (owner) { CharacterBody cb = owner.GetComponent <CharacterBody>(); if (cb) { var teamComponent = cb.teamComponent; if (teamComponent) { var teamIndex = teamComponent.teamIndex; if (teamIndex != TeamIndex.Player) //Enemies only { var prefab = fireProjectileInfo.projectilePrefab; if (prefab) { ProjectileSimple projectileSimple = prefab.GetComponent <ProjectileSimple>(); if (projectileSimple) { //var oldSpeed = projectileSimple.velocity; var speedMult = CalculateEnemyProjectileSpeedMultiplier(); fireProjectileInfo.speedOverride = projectileSimple.desiredForwardSpeed * (1f + speedMult); fireProjectileInfo.useSpeedOverride = true; //Debug.Log("vel " + projectileSimple.velocity + " speedoverride " + fireProjectileInfo.speedOverride); } } } //fireProjectileInfo._speedOverride = fireProjectileInfo. } } } orig(self, fireProjectileInfo); }
private static void CreateFireSpellRing() { fireSpellRingPrefab = CloneProjectilePrefab("Fireball", "ManipulatorFireRing"); UnityEngine.GameObject.Destroy(fireSpellRingPrefab.GetComponent <ProjectileSingleTargetImpact>()); ManipulatorProjectileAttachOnImpact manipulatorAttach = fireSpellRingPrefab.AddComponent <ManipulatorProjectileAttachOnImpact>(); ProjectileDamage manipulatorDamage = fireSpellRingPrefab.GetComponent <ProjectileDamage>(); manipulatorAttach.destroyOnWorld = true; manipulatorAttach.destroyWhenNotAlive = false; manipulatorAttach.attachTickMax = fireSpellTickMax; manipulatorAttach.attachDuration = fireSpellAttachDuration; manipulatorAttach.attachDamageCoefficient = fireSpellAttachCoefficient; manipulatorAttach.attachPrefab = CreateAttachRing(); manipulatorAttach.ownerController = fireSpellRingPrefab.GetComponent <ProjectileController>(); manipulatorAttach.attachPrefab.transform.SetParent(fireSpellRingPrefab.transform); //Debug.LogWarning("Manipulator Attach Prefab: " + manipulatorAttach.attachPrefab); ProjectileController ringController = fireSpellRingPrefab.GetComponent <ProjectileController>(); ringController.procCoefficient = StatValues.fireSpellCoefficient; ProjectileSimple fireRingSimple = fireSpellRingPrefab.GetComponent <ProjectileSimple>(); //fireRingSimple.velocity = fireSpellRingVelocity; fireRingSimple.desiredForwardSpeed = fireSpellRingVelocity; fireRingSimple.lifetime = 3f; }
private void BuildFlareProjectile() { GameObject flareProjectile = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("SS2PyroFlare", true); ProjectileCatalog.getAdditionalEntries += delegate(List <GameObject> list) { list.Add(flareProjectile); }; ProjectileSimple ps = flareProjectile.GetComponent <ProjectileSimple>(); ps.lifetime = 18f; ProjectileImpactExplosion pie = flareProjectile.GetComponent <ProjectileImpactExplosion>(); pie.blastRadius = 8f; pie.blastDamageCoefficient = 1f; pie.blastProcCoefficient = 1f; pie.timerAfterImpact = false; pie.falloffModel = BlastAttack.FalloffModel.None; pie.lifetime = 18f; pie.destroyOnEnemy = true; pie.destroyOnWorld = true; ProjectileDamage pd = flareProjectile.GetComponent <ProjectileDamage>(); pd.damage = 0f; pd.damageColorIndex = DamageColorIndex.Default; pd.damageType = DamageType.IgniteOnHit; Flaregun.projectilePrefab = flareProjectile; FireFlareBurst.projectilePrefab = flareProjectile; //unused skill GameObject reflectProjectile = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("SS2PyroFlareReflect", true); ProjectileCatalog.getAdditionalEntries += delegate(List <GameObject> list) { list.Add(reflectProjectile); }; ProjectileImpactExplosion pie2 = reflectProjectile.GetComponent <ProjectileImpactExplosion>(); pie2.blastRadius = 8f; pie2.blastDamageCoefficient = 1f; pie2.blastProcCoefficient = 1f; pie2.timerAfterImpact = false; pie2.falloffModel = BlastAttack.FalloffModel.None; pie2.lifetime = 18f; pie2.destroyOnEnemy = true; pie2.destroyOnWorld = true; ProjectileDamage pd2 = reflectProjectile.GetComponent <ProjectileDamage>(); pd2.damage = 0f; pd2.damageColorIndex = DamageColorIndex.Default; pd2.damageType = DamageType.IgniteOnHit; HeatWave.reflectProjectilePrefab = reflectProjectile; }
private void Awake() { projSimp = gameObject.GetComponent <ProjectileSimple>(); if (!projSimp) { return; } projSimp.desiredForwardSpeed *= MortarTube.instance.velocityMultiplier; }
private void Start() { if (!NetworkServer.active) { enabled = false; return; } transform = gameObject.transform; targetComponent = GetComponent <ProjectileTargetComponent>(); projectileSimple = GetComponent <ProjectileSimple>(); model = gameObject.transform.Find("Model"); velocity = maxVelocity; velocityAsVector = Vector3.zero; }
// Token: 0x0600295A RID: 10586 RVA: 0x000ADDA8 File Offset: 0x000ABFA8 public override void OnEnter() { base.OnEnter(); if (this.arcVisualizerPrefab) { this.arcVisualizerLineRenderer = UnityEngine.Object.Instantiate <GameObject>(this.arcVisualizerPrefab, base.transform.position, Quaternion.identity).GetComponent <LineRenderer>(); this.calculateArcPointsJob = default(AimThrowableBase.CalculateArcPointsJob); this.completeArcPointsVisualizerJobMethod = new Action(this.CompleteArcVisualizerJob); RoR2Application.onLateUpdate += this.completeArcPointsVisualizerJobMethod; } if (this.endpointVisualizerPrefab) { this.endpointVisualizerTransform = UnityEngine.Object.Instantiate <GameObject>(this.endpointVisualizerPrefab, base.transform.position, Quaternion.identity).transform; } if (base.characterBody) { base.characterBody.hideCrosshair = true; } ProjectileSimple component = this.projectilePrefab.GetComponent <ProjectileSimple>(); if (component) { this.projectileBaseSpeed = component.velocity; } Rigidbody component2 = this.projectilePrefab.GetComponent <Rigidbody>(); if (component2) { this.useGravity = component2.useGravity; } this.minimumDuration = this.baseMinimumDuration / this.attackSpeedStat; ProjectileImpactExplosion component3 = this.projectilePrefab.GetComponent <ProjectileImpactExplosion>(); if (component3) { this.detonationRadius = component3.blastRadius; if (this.endpointVisualizerTransform) { this.endpointVisualizerTransform.localScale = new Vector3(this.detonationRadius, this.detonationRadius, this.detonationRadius); } } this.UpdateVisualizers(this.currentTrajectoryInfo); SceneCamera.onSceneCameraPreRender += this.OnPreRenderSceneCam; }
private void CreateProjectiles() { GameObject secondaryProj = Resources.Load <GameObject>("Prefabs/Projectiles/CrocoSpit").InstantiateClone("sprayProj"); States.Secondary.FireSpray.projectilePrefab = secondaryProj; ProjectileCatalog.getAdditionalEntries += (list) => { list.Add(secondaryProj); }; ProjectileSimple spraySimp = secondaryProj.GetComponent <ProjectileSimple>(); spraySimp.lifetime = 0.3f; ProjectileController controller = secondaryProj.GetComponent <ProjectileController>(); controller.procCoefficient = 0.5f * ((1f / numberOfPellets) + Mathf.Sqrt(1f / numberOfPellets)); }
void Fragmentation() { int nombre = 360 / nbproj; for (float i = 0 + Random.Range(0, 0.2f); i < nbproj; i++) { // gob = (GameObject)(Instantiate(projectile,transform.position,new Quaternion())); gob = SimplePool.Spawn(projectile, transform.position, new Quaternion()); ProjectileSimple proj = gob.GetComponent <ProjectileSimple>(); proj.tag = "EnnemyBullet"; proj.GetComponent <SpriteRenderer> ().color = Color.white; proj.setVitesse(0.02f); proj.setDirection(new Vector2(Mathf.Cos(Mathf.PI * (i * nombre) / 180), Mathf.Sin(Mathf.PI * (i * nombre) / 180))); proj.transform.localScale = this.gameObject.transform.localScale / 1.5f; } Destroy(this.gameObject); }
private void Detonate() { ProjectileSimple ps = this.gameObject.GetComponent <ProjectileSimple>(); if (!this.detonated) { this.detonated = true; if (ps) { ps.stopwatch = 0f; } /*if (this.projectileDamage) * { * this.projectileDamage.damage *= this.cachedThermiteCount; * }*/ if (projectileImpactExplosion) { /*float radius = projectileImpactExplosion.blastRadius; * for (int i = 0; i < this.cachedThermiteCount; i++) * { * radius *= 0.95f; * projectileImpactExplosion.blastRadius += radius; * }*/ //projectileImpactExplosion.blastRadius = projectileImpactExplosion.blastRadius * this.cachedThermiteCount; projectileImpactExplosion.blastRadius *= 2f; projectileImpactExplosion.stopwatch = projectileImpactExplosion.lifetime; } } else { if (projectileImpactExplosion) { projectileImpactExplosion.stopwatch = projectileImpactExplosion.lifetime; } if (ps) { ps.stopwatch = ps.lifetime; } } }
// Update is called once per frame void Update() { transform.position += new Vector3(0, -0.01f * vitesse, 0); if (Time.fixedTime - temps >= ecart) { temps = Time.fixedTime; //gob = (GameObject)(Instantiate (obj, transform.position, new Quaternion ())); gob = SimplePool.Spawn(obj, transform.position, new Quaternion()); gob.transform.localScale = new Vector3(0.6f, 0.6f, 1); ProjectileSimple proj = gob.GetComponent <ProjectileSimple> (); proj.setVitesse(vitesseProj); try{ proj.setDirection(new Vector2(GameObject.Find("Joueur").transform.position.x - transform.position.x, GameObject.Find("Joueur").transform.position.y - transform.position.y)); } catch { proj.setDirection(new Vector2(Random.Range(0, 5), Random.Range(0, 5))); } } }
// Update is called once per frame void Update() { transform.position += new Vector3(vitesse, 0, 0); if (Time.fixedTime - temps >= ecart) { temps = Time.fixedTime; //On tire dans les 4 directions //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion())); gob = SimplePool.Spawn(obj, transform.position, new Quaternion()); gob.transform.localScale = new Vector3(0.6f, 0.6f, 1); ProjectileSimple proj = gob.GetComponent <ProjectileSimple>(); proj.setVitesse(0.02f); proj.setDirection(new Vector2(0, -1)); proj.setDegat(1); //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion())); gob = SimplePool.Spawn(obj, transform.position, new Quaternion()); gob.transform.localScale = new Vector3(0.6f, 0.6f, 1); proj = gob.GetComponent <ProjectileSimple>(); proj.setVitesse(0.02f); proj.setDirection(new Vector2(0, 1)); proj.setDegat(1); //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion())); gob = SimplePool.Spawn(obj, transform.position, new Quaternion()); gob.transform.localScale = new Vector3(0.6f, 0.6f, 1); proj = gob.GetComponent <ProjectileSimple>(); proj.setVitesse(0.02f); proj.setDirection(new Vector2(1, 0)); proj.setDegat(1); //gob = (GameObject)(Instantiate(obj,transform.position,new Quaternion())); gob = SimplePool.Spawn(obj, transform.position, new Quaternion()); gob.transform.localScale = new Vector3(0.6f, 0.6f, 1); proj = gob.GetComponent <ProjectileSimple>(); proj.setVitesse(0.02f); proj.setDirection(new Vector2(-1, 0)); proj.setDegat(1); } }
private static GameObject CreateBlinkExplosion(string newExplosionName, float newExplosionDelay, float newBlastRadius, float newBlastDamage, DamageType damageType, bool iceBuff) { GameObject newBlinkPrefab = CloneProjectilePrefab("CommandoGrenadeProjectile", newExplosionName); UnityEngine.GameObject.Destroy(newBlinkPrefab.GetComponent <ProjectileImpactExplosion>()); ProjectileBlinkExplosion newBlinkExplosion = newBlinkPrefab.AddComponent <ProjectileBlinkExplosion>(); ProjectileController newBlinkController = newBlinkPrefab.GetComponent <ProjectileController>(); Rigidbody newBlinkBody = newBlinkPrefab.GetComponent <Rigidbody>(); ProjectileSimple newBlinkProjectile = newBlinkPrefab.GetComponent <ProjectileSimple>(); newBlinkPrefab.GetComponent <ProjectileDamage>().damageType = damageType; newBlinkBody.useGravity = false; newBlinkProjectile.desiredForwardSpeed = 0f; newBlinkExplosion.lifetime = newExplosionDelay; newBlinkExplosion.timerAfterImpact = false; newBlinkExplosion.blastRadius = newBlastRadius; newBlinkExplosion.blastDamageCoefficient = newBlastDamage; newBlinkExplosion.useIceDebuff = iceBuff; return(newBlinkPrefab); }
public void Awake() { Chat.AddMessage("Loaded ImprovedCommando!"); SurvivorAPI.SurvivorCatalogReady += delegate(object s, EventArgs e) { //get commando body GameObject gameObject = BodyCatalog.FindBodyPrefab("CommandoBody"); //replace the utiltiy GenericSkill utility = gameObject.GetComponent <SkillLocator>().utility; utility.activationState = new EntityStates.SerializableEntityStateType(typeof(EntityStates.Commando.CommandoWeapon.Dodgestateimproved)); object box2 = utility.activationState; var field2 = typeof(EntityStates.SerializableEntityStateType)?.GetField("_typeName", BindingFlags.NonPublic | BindingFlags.Instance); field2?.SetValue(box2, typeof(EntityStates.Commando.CommandoWeapon.Dodgestateimproved)?.AssemblyQualifiedName); utility.activationState = (EntityStates.SerializableEntityStateType)box2; utility.baseRechargeInterval = 5f; utility.baseMaxStock = 2; //edit utility descriptions utility.skillNameToken = "Reposition"; utility.skillDescriptionToken = "<i>Rolls</i> a short distance, with a short speed boost after. Holds 2 charges."; //load the FMJ GameObject fmjprefab = Resources.Load <GameObject>("prefabs/projectiles/fmj"); ProjectileSimple fmjprojectilesimple = fmjprefab.GetComponentInChildren <ProjectileSimple>(); fmjprojectilesimple.velocity = 200f; /* * //load secondary * GenericSkill secondary = gameObject.GetComponent<SkillLocator>().secondary; * secondary.baseMaxStock = 2; * GenericSkill special = gameObject.GetComponent<SkillLocator>().special; * special.skillDescriptionToken = "Fire rapidly, stunning enemies for 6x100% damage and reload all Phase Rounds."; * On.EntityStates.Commando.CommandoWeapon.FireBarrage.OnExit += (orig, self) => * { * orig(self); * GenericSkill secondaryskill = self.outer.commonComponents.characterBody.GetComponent<SkillLocator>().secondary; * secondaryskill.Reset(); * };*/ }; }
// Token: 0x06002DA8 RID: 11688 RVA: 0x000C1E10 File Offset: 0x000C0010 private void FireGauntlet() { if (hasFiredGauntlet) { return; } base.characterBody.AddSpreadBloom(EntityStates.Mage.Weapon.FireFireBolt.bloom); hasFiredGauntlet = true; Ray aimRay = base.GetAimRay(); if (childLocator) { muzzleTransform = childLocator.FindChild(muzzleString); } if (base.isAuthority) { if (!projectilePrefab) { projectilePrefab = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("magefireboltcopy"); } if (!filter) { filter = projectilePrefab.AddComponent <TeamFilter>(); } if (!targeter) { targeter = projectilePrefab.AddComponent <ProjectileTargetComponent>(); } if (!targetfinder) { targetfinder = projectilePrefab.AddComponent <ProjectileSphereTargetFinder>(); targetfinder.lookRange = 12; targetfinder.allowTargetLoss = true; targetfinder.onlySearchIfNoTarget = true; targetfinder.testLoS = true; targetfinder.targetSearchInterval = 0.15f; } if (!steertoward) { steertoward = projectilePrefab.AddComponent <ProjectileSteerTowardTarget>(); steertoward.rotationSpeed = 360f; } if (!projectile) { projectile = projectilePrefab.AddComponent <ProjectileSimple>(); projectile.velocity = 50f; projectile.updateAfterFiring = true; } for (int i = 0; i < 2; i++) { ProjectileManager.instance.FireProjectile(projectilePrefab, aimRay.origin, Util.QuaternionSafeLookRotation(aimRay.direction + (new Vector3(Random.Range(-36f, 36f), Random.Range(-36f, 36f), Random.Range(-36f, 36f)) / 360f)), base.gameObject, 1f * damageStat, 0f, base.characterBody.RollCrit()); } } }
// Token: 0x06002DA8 RID: 11688 RVA: 0x000C1E10 File Offset: 0x000C0010 private void FireGauntlet() { if (hasFiredGauntlet) { return; } base.characterBody.AddSpreadBloom(EntityStates.Mage.Weapon.FireFireBolt.bloom); hasFiredGauntlet = true; Ray aimRay = base.GetAimRay(); if (childLocator) { muzzleTransform = childLocator.FindChild(muzzleString); } if (NetworkServer.active) { if (!projectilePrefab) { projectilePrefab = Resources.Load <GameObject>("prefabs/projectiles/magefireboltbasic").InstantiateClone("magefireboltcopy"); } if (!filter) { filter = projectilePrefab.AddComponent <TeamFilter>(); } if (!targeter) { targeter = projectilePrefab.AddComponent <ProjectileTargetComponent>(); } if (!steertoward) { steertoward = projectilePrefab.AddComponent <ProjectileSteerTowardTarget>(); steertoward.rotationSpeed = 360f; } if (!targetfinder) { targetfinder = projectilePrefab.AddComponent <ProjectileSphereTargetFinder>(); targetfinder.lookRange = 16; targetfinder.allowTargetLoss = false; targetfinder.onlySearchIfNoTarget = true; targetfinder.testLoS = true; targetfinder.targetSearchInterval = 0.15f; } if (!projectile) { projectile = projectilePrefab.AddComponent <ProjectileSimple>(); projectile.velocity = 50f; projectile.updateAfterFiring = true; } BullseyeSearch bullseyeSearch = new BullseyeSearch(); bullseyeSearch.searchOrigin = aimRay.origin; bullseyeSearch.searchDirection = aimRay.direction; bullseyeSearch.maxDistanceFilter = 100f; bullseyeSearch.maxAngleFilter = 60f; bullseyeSearch.teamMaskFilter = TeamMask.allButNeutral; bullseyeSearch.teamMaskFilter.RemoveTeam(base.teamComponent.teamIndex); bullseyeSearch.sortMode = BullseyeSearch.SortMode.Angle; bullseyeSearch.RefreshCandidates(); List <HurtBox> list = bullseyeSearch.GetResults().ToList <HurtBox>(); HurtBox hurtBox = (list.Count > 0) ? list[0] : null; if (hurtBox) { targeter.target = hurtBox.transform; } for (int i = 0; i < 2; i++) { Quaternion direction = Util.QuaternionSafeLookRotation(aimRay.direction + (new Vector3(Random.Range(-36f, 36f), Random.Range(-36f, 36f), Random.Range(-36f, 36f)) / 360f)); ProjectileManager.instance.FireProjectile(projectilePrefab, aimRay.origin, direction, base.gameObject, 0.8f * damageStat, 0f, base.characterBody.RollCrit(), DamageColorIndex.Default, hurtBox ? hurtBox.gameObject : null); } } }
private void CreateLightningSword(Int32 meshInd) { GameObject ghost = this.CreateLightningSwordGhost(meshInd); GameObject proj = Resources.Load <GameObject>("Prefabs/Projectiles/LunarNeedleProjectile").InstantiateClone("LightningSwordProjectile" + meshInd.ToString()); ProjectileCatalog.getAdditionalEntries += (list) => list.Add(proj); AltArtiPassive.lightningProjectile[meshInd] = proj; ProjectileController projController = proj.GetComponent <ProjectileController>(); projController.ghostPrefab = ghost; projController.procCoefficient = 0.2f; ProjectileSimple projSimple = proj.GetComponent <ProjectileSimple>(); projSimple.enabled = true; projSimple.enableVelocityOverLifetime = false; projSimple.velocity = 60f; ProjectileDirectionalTargetFinder projTargetFind = proj.GetComponent <ProjectileDirectionalTargetFinder>(); projTargetFind.enabled = false; ProjectileSteerTowardTarget projSteering = proj.GetComponent <ProjectileSteerTowardTarget>(); projSteering.enabled = true; projSteering.rotationSpeed = 140f; ProjectileStickOnImpact projStick = proj.GetComponent <ProjectileStickOnImpact>(); //projStick.ignoreCharacters = false; //projStick.ignoreWorld = false; projStick.alignNormals = false; ProjectileImpactExplosion projExpl = proj.GetComponent <ProjectileImpactExplosion>(); projExpl.impactEffect = Resources.Load <GameObject>("Prefabs/Effects/LightningStakeNova"); projExpl.explosionSoundString = "Play_item_lunar_primaryReplace_impact"; projExpl.lifetimeExpiredSoundString = ""; projExpl.offsetForLifetimeExpiredSound = 0f; projExpl.destroyOnEnemy = false; projExpl.destroyOnWorld = false; projExpl.timerAfterImpact = true; projExpl.falloffModel = BlastAttack.FalloffModel.None; projExpl.lifetime = 10f; projExpl.lifetimeAfterImpact = 1f; projExpl.lifetimeRandomOffset = 0f; projExpl.blastRadius = 1f; projExpl.blastDamageCoefficient = 1f; projExpl.blastProcCoefficient = 0.2f; projExpl.bonusBlastForce = Vector3.zero; projExpl.fireChildren = false; projExpl.childrenProjectilePrefab = null; projExpl.childrenCount = 0; projExpl.childrenDamageCoefficient = 0f; projExpl.minAngleOffset = Vector3.zero; projExpl.maxAngleOffset = Vector3.zero; projExpl.transformSpace = ProjectileImpactExplosion.TransformSpace.World; projExpl.projectileHealthComponent = null; ProjectileSingleTargetImpact projStimp = proj.GetComponent <ProjectileSingleTargetImpact>(); projStimp.destroyOnWorld = false; projStimp.hitSoundString = "Play_item_proc_dagger_impact"; projStimp.enemyHitSoundString = "Play_item_proc_dagger_impact"; proj.AddComponent <Components.SoundOnAwake>().sound = "Play_item_proc_dagger_spawn"; //UnityEngine.Object.DestroyImmediate( proj.GetComponent<ProjectileSingleTargetImpact>() ); UnityEngine.Object.Destroy(proj.GetComponent <AwakeEvent>()); UnityEngine.Object.Destroy(proj.GetComponent <DelayedEvent>()); }
// Update is called once per frame void Update() { if (suivre && (Input.GetAxis("Mouse X") != 0) || (Input.GetAxis("Mouse Y") != 0)) //Le joueur ne suit la souris que si un mouvement est detecté { LerpPosition = 0; Cursor.visible = true; transform.position = new Vector3(transform.position.x, transform.position.y, 0); } if (Cursor.visible) { LerpPosition += Time.fixedDeltaTime * 4; transform.position = Vector3.Lerp(transform.position, Camera.main.ScreenToWorldPoint(Input.mousePosition), LerpPosition); transform.position = new Vector3(transform.position.x, transform.position.y, 0); } if (Input.GetKey(KeyCode.LeftArrow)) { transform.position += new Vector3(-Variables.sensiX, 0, 0); Cursor.visible = false; } if (Input.GetKey(KeyCode.RightArrow)) { transform.position += new Vector3(Variables.sensiX, 0, 0); Cursor.visible = false; } if (Input.GetKey(KeyCode.UpArrow)) { transform.position += new Vector3(0, Variables.sensiY, 0); Cursor.visible = false; } if (Input.GetKey(KeyCode.DownArrow)) { transform.position += new Vector3(0, -Variables.sensiY, 0); Cursor.visible = false; } if ((Input.GetMouseButton(0) || Input.GetKey(KeyCode.Space) || Variables.autoFire) && Time.fixedTime - temps >= ecart) { GameObject.Find("Son").GetComponent <AudioSource> ().clip = sontir; GameObject.Find("Son").GetComponent <AudioSource> ().Play(); temps = Time.fixedTime; //instance = (GameObject)(Instantiate (gob, transform.position , new Quaternion ())); instance = SimplePool.Spawn(gob, transform.position, new Quaternion()); instance.tag = "AllyBullet"; instance.GetComponent <SpriteRenderer> ().color = Color.white; instance.transform.Rotate(Vector3.forward * -270); ProjectileSimple proj = instance.GetComponent <ProjectileSimple> (); proj.setVitesse(0.07f); proj.setDirection(new Vector2(0, 0.1f)); proj.setPosition(transform.position); proj.setDegat(degat); if (boost2) { proj.setPerforant(true); } else { proj.setPerforant(false); proj.setDegat(degat); } if (boost) { //instance = (GameObject)(Instantiate (gob, transform.position , new Quaternion ())); instance = SimplePool.Spawn(gob, transform.position, new Quaternion()); instance.transform.Rotate(Vector3.forward * -300); instance.tag = "AllyBullet"; instance.GetComponent <SpriteRenderer> ().color = Color.white; proj = instance.GetComponent <ProjectileSimple> (); proj.setVitesse(0.07f); proj.setDirection(new Vector2(0.05f, 0.1f)); proj.setPosition(transform.position); proj.setDegat(degat); if (boost2) { proj.setPerforant(true); } else { proj.setPerforant(false); proj.setDegat(degat); } //instance = (GameObject)(Instantiate (gob, transform.position , new Quaternion ())); instance = SimplePool.Spawn(gob, transform.position, new Quaternion()); instance.tag = "AllyBullet"; instance.GetComponent <SpriteRenderer> ().color = Color.white; instance.transform.Rotate(Vector3.forward * -240); proj = instance.GetComponent <ProjectileSimple> (); proj.setVitesse(0.07f); proj.setDirection(new Vector2(-0.05f, 0.1f)); proj.setPosition(transform.position); proj.setDegat(degat); if (boost2) { proj.setPerforant(true); } else { proj.setPerforant(false); proj.setDegat(degat); } } } if (Time.fixedTime > temps2 + retard && invincible) { ChangerEtat(); } if (temps3 < Time.fixedTime) //A chaque frame on verifie que le bonus est terminé { boost = false; ecart = 0.2f; } if (temps5 < Time.fixedTime && boost2) { degat = 1; boost2 = false; } }
public override void OnEnter() { base.OnEnter(); ProjectileTargetComponent projTarget = projPrefab.GetComponent <ProjectileTargetComponent>(); if (!projTarget) { projTarget = projPrefab.AddComponent <ProjectileTargetComponent>(); } ProjectileDirectionalTargetFinder projFinder = projPrefab.GetComponent <ProjectileDirectionalTargetFinder>(); if (!projFinder) { projFinder = projPrefab.AddComponent <ProjectileDirectionalTargetFinder>(); } projFinder.lookCone = 6.5f; projFinder.lookRange = 60.0f; projFinder.targetSearchInterval = 0.15f; projFinder.onlySearchIfNoTarget = false; projFinder.allowTargetLoss = true; projFinder.testLoS = true; projFinder.ignoreAir = false; ProjectileSteerTowardTarget projSteer = projPrefab.GetComponent <ProjectileSteerTowardTarget>(); if (!projSteer) { projSteer = projPrefab.AddComponent <ProjectileSteerTowardTarget>(); } projSteer.rotationSpeed = 45.0f; ProjectileSimple projSimp = projPrefab.GetComponent <ProjectileSimple>(); if (!projSimp) { Debug.Log("Dafuq you done?"); } projSimp.updateAfterFiring = true; duration = baseDuration; arrowFireEnd = duration * spacingFrac; arrowTime = (duration - arrowFireEnd) / baseArrowsToFire / attackSpeedStat; this.projPrefab.GetComponent <ProjectileController>().procCoefficient = 0.4f; Transform modelTrans = base.GetModelTransform(); PlayCrossfade("Gesture, Override", "FireSeekingShot", "FireSeekingShot.playbackRate", arrowTime, arrowTime * 0.2f / attackSpeedStat); PlayCrossfade("Gesture, Additive", "FireSeekingShot", "FireSeekingShot.playbackRate", arrowTime, arrowTime * 0.2f / attackSpeedStat); if (modelTrans) { childLoc = modelTrans.GetComponent <ChildLocator>(); anim = modelTrans.GetComponent <Animator>(); } if (characterBody) { characterBody.SetAimTimer(duration + 1.0f); } timer = 0.0f; arrowTimer = 0.0f; arrowCounter = 0; fireArrow(); }
private static GameObject CreateNewWave(string waveName, DamageType damageType, string ghostPrefabName, Vector3 waveCoreSize, Vector3 waveOuterSize, Vector3 rotation, bool useIceDebuff) { //clone fire projectile, fix size (original size is 0.05, 0.05, 1) GameObject newWavePrefab = CloneProjectilePrefab("Fireball", waveName); newWavePrefab.transform.localScale = new Vector3(1f, 1f, 1f); newWavePrefab.transform.localRotation = Quaternion.Euler(StatValues.waveRotation1); //create 'container' to enable local rotation of the wave GameObject transformBox = new GameObject("TransformBox"); transformBox.transform.parent = newWavePrefab.transform; transformBox.layer = 14; //set ghost, damage and owner ProjectileController newWaveController = newWavePrefab.GetComponent <ProjectileController>(); newWaveController.ghostPrefab = CreateGhostPrefab(ghostPrefabName); newWaveController.GetComponent <ProjectileDamage>().damageType = damageType; newWaveController.owner = Survivors.Manipulator.characterPrefab; newWaveController.procCoefficient = StatValues.waveProcCoefficient; TeamFilter newWaveTeam = newWavePrefab.GetComponent <TeamFilter>(); newWaveTeam.defaultTeam = TeamIndex.Player; //replace single target impact with custom impact script UnityEngine.Object.Destroy(newWavePrefab.GetComponent <ProjectileSingleTargetImpact>()); ManipulatorProjectileWaveImpact newWaveImpact = newWavePrefab.AddComponent <ManipulatorProjectileWaveImpact>(); newWaveImpact.destroyOnWorld = true; newWaveImpact.destroyWhenNotAlive = true; newWaveImpact.useIceDebuff = useIceDebuff; ProjectileSimple newWaveSimple = newWavePrefab.GetComponent <ProjectileSimple>(); newWaveSimple.lifetime = StatValues.waveLifetime; //newWaveSimple.velocity = waveVelocity; newWaveSimple.desiredForwardSpeed = StatValues.waveSpeed; //replace sphere with core box (smaller middle, collides with both terrain and enemies) //UnityEngine.Object.Destroy(newWavePrefab.GetComponent<SphereCollider>()); BoxCollider newWaveBox = newWavePrefab.AddComponent <BoxCollider>(); newWaveBox.transform.parent = transformBox.transform; newWaveBox.size = waveCoreSize; //add outer box collider (collides with enemies only) GameObject childObject = new GameObject("OuterBox"); childObject.layer = 14; childObject.transform.parent = transformBox.transform; ManipulatorProjectileChildCollisionDetection childScript = childObject.AddComponent <ManipulatorProjectileChildCollisionDetection>(); childScript.AddBoxCollider(waveOuterSize, childObject); //set local rotation Quaternion quaternion = Quaternion.Euler(rotation); transformBox.transform.localRotation = quaternion; //return result return(newWavePrefab); }
private static GameObject CreateKnifeProjectile() { GameObject obj = PrefabsCore.CreatePrefab("KnifeProjectile", true); obj.layer = LayerIndex.projectile.intVal; _ = obj.AddOrGetComponent <NetworkIdentity>(); _ = obj.AddOrGetComponent <TeamFilter>(); ProjectileController projControl = obj.AddOrGetComponent <ProjectileController>(); projControl.allowPrediction = false; projControl.catalogIndex = -1; projControl.ghostPrefab = null; // FUTURE: Knife projectile ghost projControl.ghostTransformAnchor = null; projControl.owner = null; projControl.procCoefficient = 1f; projControl.startSound = null; // FUTURE: Knife start sound Rigidbody rb = obj.AddOrGetComponent <Rigidbody>(); rb.mass = 1f; rb.drag = 0.6f; rb.angularDrag = 0.05f; rb.useGravity = true; rb.isKinematic = false; rb.interpolation = RigidbodyInterpolation.Interpolate; rb.collisionDetectionMode = CollisionDetectionMode.Continuous; ProjectileNetworkTransform projNetTrans = obj.AddOrGetComponent <ProjectileNetworkTransform>(); projNetTrans.positionTransmitInterval = 0.033333334f; projNetTrans.interpolationFactor = 1f; projNetTrans.allowClientsideCollision = false; ProjectileStickOnImpact projStick = obj.AddOrGetComponent <ProjectileStickOnImpact>(); projStick.alignNormals = false; projStick.ignoreCharacters = false; projStick.ignoreWorld = false; projStick.stickEvent = new UnityEngine.Events.UnityEvent(); ProjectileSingleTargetImpact projImpact = obj.AddOrGetComponent <ProjectileSingleTargetImpact>(); projImpact.destroyOnWorld = false; projImpact.destroyWhenNotAlive = false; projImpact.enemyHitSoundString = null; // FUTURE: Knife hit sound projImpact.hitSoundString = null; // FUTURE: Knife world hit sound projImpact.impactEffect = null; // FUTURE: Knife impact effect ProjectileSimple projSimple = obj.AddOrGetComponent <ProjectileSimple>(); projSimple.enableVelocityOverLifetime = false; projSimple.lifetime = 18f; projSimple.updateAfterFiring = false; projSimple.velocity = 175f; projSimple.velocityOverLifetime = null; SphereCollider col = obj.AddOrGetComponent <SphereCollider>(); col.center = Vector3.zero; col.contactOffset = 0f; col.isTrigger = false; col.material = null; col.radius = 0.3f; ProjectileDamage damage = obj.AddOrGetComponent <ProjectileDamage>(); damage.crit = false; damage.damage = 0f; damage.damageColorIndex = DamageColorIndex.Default; damage.force = 0f; var debuff = obj.AddOrGetComponent <ProjectileInflictTimedBuff>(); debuff.duration = CatalogModule.resetDuration * 2f; _ = obj.AddOrGetComponent <Deployable>(); _ = obj.AddOrGetComponent <KnifeDeployableSync>(); SphereCollider ownerDetection = obj.AddComponent <SphereCollider>(); ownerDetection.isTrigger = true; ownerDetection.radius = 10f; foreach (IRuntimePrefabComponent runtimePrefabComp in obj.GetComponents <IRuntimePrefabComponent>()) { runtimePrefabComp.InitializePrefab(); } return(obj); }
public override void OnLoad() { base.OnLoad(); itemDef.name = "MysticsItems_DroneWires"; SetItemTierWhenAvailable(ItemTier.Tier2); itemDef.tags = new ItemTag[] { ItemTag.Damage, ItemTag.CannotCopy }; itemDef.pickupModelPrefab = PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/Model.prefab")); itemDef.pickupIconSprite = Main.AssetBundle.LoadAsset <Sprite>("Assets/Items/Wires/Icon.png"); itemDisplayPrefab = PrepareItemDisplayModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/DisplayModel.prefab")); onSetupIDRS += () => { AddDisplayRule("CommandoBody", "Chest", new Vector3(-0.0882F, 0.29957F, 0.10621F), new Vector3(24.65009F, 16.77799F, 135.6651F), new Vector3(0.07763F, 0.07608F, 0.09464F)); AddDisplayRule("HuntressBody", "Chest", new Vector3(0.11016F, 0.19166F, 0.06043F), new Vector3(3.66903F, 357.0302F, 46.24356F), new Vector3(0.06181F, 0.06181F, 0.07285F)); AddDisplayRule("Bandit2Body", "Chest", new Vector3(0.02937F, 0.2926F, -0.00376F), new Vector3(0F, 0F, 49.27628F), new Vector3(0.06534F, 0.07626F, 0.07902F)); AddDisplayRule("ToolbotBody", "Chest", new Vector3(-0.44676F, 0.83563F, -0.35079F), new Vector3(0F, 255.7838F, 12.94845F), new Vector3(0.29993F, 0.29993F, 0.29993F)); AddDisplayRule("EngiBody", "Chest", new Vector3(0.12126F, 0.34647F, 0.02248F), new Vector3(9.43959F, 353.3998F, 54.79713F), new Vector3(0.08793F, 0.10983F, 0.12737F)); //AddDisplayRule("EngiTurretBody", "Head", new Vector3(0.035F, 0.89075F, -1.47928F), new Vector3(0F, 90F, 303.695F), new Vector3(0.07847F, 0.07847F, 0.07847F)); //AddDisplayRule("EngiWalkerTurretBody", "Head", new Vector3(0.03562F, 1.40676F, -1.39837F), new Vector3(0F, 90F, 303.1705F), new Vector3(0.08093F, 0.09844F, 0.07912F)); AddDisplayRule("MageBody", "Chest", new Vector3(0.04831F, 0.18725F, -0.00428F), new Vector3(0F, 0F, 60.53666F), new Vector3(0.07311F, 0.07311F, 0.06881F)); AddDisplayRule("MercBody", "Chest", new Vector3(-0.05362F, 0.21034F, -0.00002F), new Vector3(0F, 0F, 117.922F), new Vector3(0.0773F, 0.0773F, 0.10484F)); AddDisplayRule("TreebotBody", "FlowerBase", new Vector3(0.17759F, 1.01678F, -0.22692F), new Vector3(343.6147F, 91.47517F, 0F), new Vector3(0.12892F, 0.22446F, 0.19628F)); AddDisplayRule("LoaderBody", "Chest", new Vector3(0.2286F, 0.17001F, -0.14346F), new Vector3(0F, 0F, 101.2838F), new Vector3(0.07407F, 0.07407F, 0.07407F)); AddDisplayRule("CrocoBody", "Neck", new Vector3(-0.44025F, 2.13047F, -1.0941F), new Vector3(11.69976F, 267.5576F, 69.92433F), new Vector3(0.78301F, 0.82242F, 0.76275F)); AddDisplayRule("CaptainBody", "Chest", new Vector3(0.11944F, 0.24645F, 0.02558F), new Vector3(0F, 0F, 56.89931F), new Vector3(0.11927F, 0.11927F, 0.09405F)); AddDisplayRule("BrotherBody", "chest", BrotherInfection.green, new Vector3(-0.02217F, 0.1268F, 0.00908F), new Vector3(38.70592F, 101.3755F, 273.0802F), new Vector3(0.29321F, 0.2044F, 0.2044F)); AddDisplayRule("ScavBody", "Chest", new Vector3(-0.60161F, 5.1633F, -0.70479F), new Vector3(8.51487F, 288.6277F, 143.041F), new Vector3(1.72129F, 2.93378F, 2.41413F)); if (SoftDependencies.SoftDependenciesCore.itemDisplaysSniper) { AddDisplayRule("SniperClassicBody", "Chest", new Vector3(0.04666F, 0.03688F, -0.20783F), new Vector3(20.30298F, 90F, 90F), new Vector3(0.03316F, 0.03316F, 0.03316F)); } AddDisplayRule("RailgunnerBody", "Backpack", new Vector3(0.00133F, -0.09389F, 0.00001F), new Vector3(359.581F, 90F, 90F), new Vector3(0.0655F, 0.0655F, 0.0655F)); AddDisplayRule("VoidSurvivorBody", "Stomach", new Vector3(0.01209F, -0.01038F, -0.0797F), new Vector3(0F, 90F, 0F), new Vector3(0.03917F, 0.07464F, 0.0609F)); }; On.RoR2.CharacterBody.OnInventoryChanged += CharacterBody_OnInventoryChanged; MysticsRisky2Utils.Utils.CopyChildren(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/SparkProjectile.prefab"), sparkProjectilePrefab); float sparkDuration = 4f; ProjectileController projectileController = sparkProjectilePrefab.AddComponent <ProjectileController>(); projectileController.ghostPrefab = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/SparkProjectileGhost.prefab"); projectileController.ghostPrefab.AddComponent <ProjectileGhostController>(); ObjectScaleCurve objectScaleCurve = projectileController.ghostPrefab.AddComponent <ObjectScaleCurve>(); objectScaleCurve.overallCurve = AnimationCurve.Linear(0f, 1f, 1f, 0f); objectScaleCurve.useOverallCurveOnly = true; objectScaleCurve.timeMax = sparkDuration; projectileController.allowPrediction = true; sparkProjectilePrefab.AddComponent <ProjectileNetworkTransform>(); sparkProjectilePrefab.AddComponent <TeamFilter>(); ProjectileDamage projectileDamage = sparkProjectilePrefab.AddComponent <ProjectileDamage>(); HitBoxGroup hitBoxGroup = sparkProjectilePrefab.AddComponent <HitBoxGroup>(); hitBoxGroup.groupName = "MysticsItems_DroneWiresSpark"; hitBoxGroup.hitBoxes = new HitBox[] { sparkProjectilePrefab.transform.Find("HitBox").gameObject.AddComponent <HitBox>() }; ProjectileSimple projectileSimple = sparkProjectilePrefab.AddComponent <ProjectileSimple>(); projectileSimple.desiredForwardSpeed = 14f; projectileSimple.lifetime = sparkDuration; ProjectileOverlapAttack projectileOverlapAttack = sparkProjectilePrefab.AddComponent <ProjectileOverlapAttack>(); projectileOverlapAttack.damageCoefficient = 1f; projectileOverlapAttack.overlapProcCoefficient = procCoefficient; projectileOverlapAttack.resetInterval = 0.5f; sparkProjectilePrefab.layer = LayerIndex.projectile.intVal; MysticsItemsContent.Resources.projectilePrefabs.Add(sparkProjectilePrefab); { hitVFX = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Wires/SparkHitVFX.prefab"); var effectComponent = hitVFX.AddComponent <EffectComponent>(); effectComponent.soundName = "MysticsItems_Play_item_proc_droneWires"; effectComponent.applyScale = true; var vfxAttributes = hitVFX.AddComponent <VFXAttributes>(); vfxAttributes.vfxIntensity = VFXAttributes.VFXIntensity.Low; vfxAttributes.vfxPriority = VFXAttributes.VFXPriority.Always; hitVFX.AddComponent <DestroyOnTimer>().duration = 1f; MysticsItemsContent.Resources.effectPrefabs.Add(hitVFX); projectileOverlapAttack.impactEffect = hitVFX; } }