public void FlattenOrbEffect(GameObject inOrb) { OrbEffect orbEffect = inOrb.GetComponent <OrbEffect>(); orbEffect.startVelocity1 = new Vector3(0f, 0f, 0f); orbEffect.startVelocity2 = new Vector3(0f, 0f, 0f); orbEffect.endVelocity1 = new Vector3(0f, 0f, 0f); orbEffect.endVelocity2 = new Vector3(0f, 0f, 0f); }
public static void ConvertOrbSettings(GameObject g) { OrbEffect orb = g.GetComponent <OrbEffect>(); WispOrbEffect newOrb = g.AddComponent <WispOrbEffect>(); FieldInfo f2; foreach (FieldInfo f in typeof(OrbEffect).GetFields(BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic)) { f2 = typeof(WispOrbEffect).GetField(f.Name, BindingFlags.Public | BindingFlags.Instance | BindingFlags.Static | BindingFlags.NonPublic); f2.SetValue(newOrb, f.GetValue(orb)); } MonoBehaviour.Destroy(orb); }
public override void OnLoad() { base.OnLoad(); itemDef.name = "MysticsItems_DeathCeremony"; SetItemTierWhenAvailable(ItemTier.Tier2); itemDef.tags = new ItemTag[] { ItemTag.Damage }; itemDef.pickupModelPrefab = PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Death Ceremony/Model.prefab")); HopooShaderToMaterial.Standard.Apply(itemDef.pickupModelPrefab.GetComponentInChildren <Renderer>().sharedMaterial); HopooShaderToMaterial.Standard.Emission(itemDef.pickupModelPrefab.GetComponentInChildren <Renderer>().sharedMaterial, 1f); itemDef.pickupIconSprite = Main.AssetBundle.LoadAsset <Sprite>("Assets/Items/Death Ceremony/Icon.png"); itemDisplayPrefab = PrepareItemDisplayModel(PrefabAPI.InstantiateClone(itemDef.pickupModelPrefab, itemDef.pickupModelPrefab.name + "Display", false)); onSetupIDRS += () => { AddDisplayRule("CommandoBody", "CalfL", new Vector3(0.07748F, 0.19394F, -0.03508F), new Vector3(351.2407F, 38.31051F, 271.2653F), new Vector3(0.08418F, 0.08418F, 0.08418F)); AddDisplayRule("HuntressBody", "CalfL", new Vector3(0.01081F, 0.33039F, -0.04676F), new Vector3(271.8222F, -0.00021F, 329.7724F), new Vector3(0.07837F, 0.07837F, 0.07837F)); AddDisplayRule("Bandit2Body", "CalfL", new Vector3(0.03402F, 0.33989F, -0.05447F), new Vector3(275.6507F, 198.2068F, 136.1487F), new Vector3(0.07333F, 0.07333F, 0.07333F)); AddDisplayRule("ToolbotBody", "CalfL", new Vector3(-0.76507F, 2.13588F, -0.16809F), new Vector3(0F, 0F, 92.59356F), new Vector3(0.6665F, 0.6665F, 0.6665F)); AddDisplayRule("EngiBody", "CalfL", new Vector3(0.06642F, 0.07521F, -0.07491F), new Vector3(2.18099F, 54.26896F, 272.251F), new Vector3(0.07373F, 0.07373F, 0.07373F)); AddDisplayRule("EngiTurretBody", "LegBar2", new Vector3(-0.00001F, 0.25339F, 0.2332F), new Vector3(87.51187F, 180F, 180F), new Vector3(0.31299F, 0.31299F, 0.31299F)); AddDisplayRule("EngiWalkerTurretBody", "LegBar2", new Vector3(-0.00001F, 0.32614F, 0.3331F), new Vector3(80.43612F, 180F, 180F), new Vector3(0.35353F, 0.35353F, 0.35353F)); AddDisplayRule("MageBody", "CalfL", new Vector3(-0.05753F, 0.055F, -0.00398F), new Vector3(283.2863F, 250.2234F, 182.1714F), new Vector3(0.08759F, 0.08759F, 0.08759F)); AddDisplayRule("MercBody", "CalfL", new Vector3(0F, 0.06378F, -0.0637F), new Vector3(275.3986F, 0F, 0F), new Vector3(0.0835F, 0.0835F, 0.0835F)); AddDisplayRule("TreebotBody", "FootFrontL", new Vector3(-0.00003F, 0.2441F, -0.14866F), new Vector3(270.8983F, 0F, 0F), new Vector3(0.20205F, 0.20205F, 0.20205F)); AddDisplayRule("LoaderBody", "CalfL", new Vector3(0.10101F, 0.10896F, -0.05009F), new Vector3(286.7617F, 305.9382F, 3.19435F), new Vector3(0.10456F, 0.10456F, 0.10456F)); AddDisplayRule("CrocoBody", "CalfL", new Vector3(-0.72054F, 1.36348F, -0.3729F), new Vector3(355.4709F, 323.8942F, 83.82096F), new Vector3(0.78694F, 0.78694F, 0.78694F)); AddDisplayRule("CaptainBody", "CalfL", new Vector3(0F, 0.05716F, -0.09369F), new Vector3(287.3015F, 0F, 0F), new Vector3(0.10502F, 0.10502F, 0.10502F)); AddDisplayRule("BrotherBody", "CalfL", BrotherInfection.green, new Vector3(0.00384F, 0.00536F, -0.03235F), new Vector3(14.82572F, 260.7474F, 350.3363F), new Vector3(0.04861F, 0.10534F, 0.10724F)); AddDisplayRule("ScavBody", "CalfL", new Vector3(0.33272F, -0.17368F, -1.09799F), new Vector3(277.8127F, 180F, 165.8016F), new Vector3(1.08614F, 1.08614F, 1.08614F)); if (SoftDependencies.SoftDependenciesCore.itemDisplaysSniper) { AddDisplayRule("SniperClassicBody", "CalfL", new Vector3(-0.04687F, 0.03461F, 0.08856F), new Vector3(80.03226F, 0F, 32.95736F), new Vector3(0.07694F, 0.07694F, 0.07694F)); } AddDisplayRule("RailgunnerBody", "CalfL", new Vector3(0.07292F, 0.00507F, 0.09758F), new Vector3(65.51882F, 247.9167F, 209.6704F), new Vector3(0.10736F, 0.10736F, 0.10736F)); AddDisplayRule("VoidSurvivorBody", "ThighL", new Vector3(0.08283F, 0.31418F, 0.06681F), new Vector3(11.83692F, 314.669F, 281.4625F), new Vector3(0.09226F, 0.09226F, 0.09226F)); }; GameObject debuffedVFX = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Death Ceremony/MarkedVFX.prefab"); GameObject vfxOrigin = debuffedVFX.transform.Find("Origin").gameObject; vfxOrigin.transform.localScale *= 3f; CustomTempVFXManagement.MysticsRisky2UtilsTempVFX tempVFX = debuffedVFX.AddComponent <CustomTempVFXManagement.MysticsRisky2UtilsTempVFX>(); RotateAroundAxis rotateAroundAxis = vfxOrigin.gameObject.AddComponent <RotateAroundAxis>(); rotateAroundAxis.relativeTo = Space.Self; rotateAroundAxis.rotateAroundAxis = RotateAroundAxis.RotationAxis.X; rotateAroundAxis.fastRotationSpeed = 17f; rotateAroundAxis.speed = RotateAroundAxis.Speed.Fast; rotateAroundAxis = vfxOrigin.gameObject.AddComponent <RotateAroundAxis>(); rotateAroundAxis.relativeTo = Space.Self; rotateAroundAxis.rotateAroundAxis = RotateAroundAxis.RotationAxis.Z; rotateAroundAxis.fastRotationSpeed = 34f; rotateAroundAxis.speed = RotateAroundAxis.Speed.Fast; ObjectScaleCurve fadeOut = vfxOrigin.AddComponent <ObjectScaleCurve>(); fadeOut.overallCurve = new AnimationCurve { keys = new Keyframe[] { new Keyframe(0f, 1f, Mathf.Tan(180f * Mathf.Deg2Rad), Mathf.Tan(-20f * Mathf.Deg2Rad)), new Keyframe(1f, 0f, Mathf.Tan(160f * Mathf.Deg2Rad), 0f) } }; fadeOut.useOverallCurveOnly = true; fadeOut.enabled = false; fadeOut.timeMax = 0.2f; tempVFX.exitBehaviours = new MonoBehaviour[] { fadeOut }; ObjectScaleCurve fadeIn = vfxOrigin.AddComponent <ObjectScaleCurve>(); fadeIn.overallCurve = new AnimationCurve { keys = new Keyframe[] { new Keyframe(0f, 0f, Mathf.Tan(180f * Mathf.Deg2Rad), Mathf.Tan(70f * Mathf.Deg2Rad)), new Keyframe(1f, 1f, Mathf.Tan(-160f * Mathf.Deg2Rad), 0f) } }; fadeIn.useOverallCurveOnly = true; fadeIn.enabled = false; fadeIn.timeMax = 0.2f; tempVFX.enterBehaviours = new MonoBehaviour[] { fadeIn }; CustomTempVFXManagement.allVFX.Add(new CustomTempVFXManagement.VFXInfo { prefab = debuffedVFX, condition = (x) => { var component = x.GetComponent <MysticsItemsDeathCeremonyMark>(); if (component) { return(component.markTimer > 0f); } return(false); }, radius = CustomTempVFXManagement.DefaultRadiusCall }); damageShareOrbEffect = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Death Ceremony/DeathCeremonyOrbEffect.prefab"); EffectComponent effectComponent = damageShareOrbEffect.AddComponent <EffectComponent>(); effectComponent.positionAtReferencedTransform = false; effectComponent.parentToReferencedTransform = false; effectComponent.applyScale = true; VFXAttributes vfxAttributes = damageShareOrbEffect.AddComponent <VFXAttributes>(); vfxAttributes.vfxPriority = VFXAttributes.VFXPriority.Low; vfxAttributes.vfxIntensity = VFXAttributes.VFXIntensity.Low; OrbEffect orbEffect = damageShareOrbEffect.AddComponent <OrbEffect>(); orbEffect.startVelocity1 = new Vector3(-10f, 0f, -10f); orbEffect.startVelocity2 = new Vector3(-10f, 10f, 10f); orbEffect.endVelocity1 = new Vector3(-10f, 0f, -10f); orbEffect.endVelocity2 = new Vector3(10f, 10f, 10f); orbEffect.movementCurve = new AnimationCurve { keys = new Keyframe[] { new Keyframe(0f, 0f), new Keyframe(1f, 1f) }, preWrapMode = WrapMode.Clamp, postWrapMode = WrapMode.Clamp }; orbEffect.faceMovement = true; orbEffect.callArrivalIfTargetIsGone = false; DestroyOnTimer destroyOnTimer = damageShareOrbEffect.transform.Find("Trail").gameObject.AddComponent <DestroyOnTimer>(); destroyOnTimer.duration = 0.5f; destroyOnTimer.enabled = false; MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsOrbEffectOnArrivalDefaults onArrivalDefaults = damageShareOrbEffect.AddComponent <MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsOrbEffectOnArrivalDefaults>(); onArrivalDefaults.orbEffect = orbEffect; onArrivalDefaults.transformsToUnparentChildren = new Transform[] { damageShareOrbEffect.transform }; onArrivalDefaults.componentsToEnable = new MonoBehaviour[] { destroyOnTimer }; MysticsItemsContent.Resources.effectPrefabs.Add(damageShareOrbEffect); CharacterBody.onBodyStartGlobal += CharacterBody_onBodyStartGlobal; GenericGameEvents.OnHitEnemy += GenericGameEvents_OnHitEnemy; R2API.RecalculateStatsAPI.GetStatCoefficients += RecalculateStatsAPI_GetStatCoefficients; }
public override void OnLoad() { base.OnLoad(); itemDef.name = "MysticsItems_MysticSword"; SetItemTierWhenAvailable(ItemTier.Tier2); itemDef.tags = new ItemTag[] { ItemTag.Damage, ItemTag.OnKillEffect, ItemTag.AIBlacklist }; itemDef.pickupModelPrefab = PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/Model.prefab")); itemDef.pickupIconSprite = Main.AssetBundle.LoadAsset <Sprite>("Assets/Items/Mystic Sword/Icon.png"); var mat = itemDef.pickupModelPrefab.GetComponentInChildren <Renderer>().sharedMaterial; HopooShaderToMaterial.Standard.Apply(mat); HopooShaderToMaterial.Standard.Emission(mat, 1f, new Color32(0, 250, 255, 255)); itemDef.pickupModelPrefab.transform.Find("GameObject").localScale *= 0.1f; var swordFollowerPrefab = PrefabAPI.InstantiateClone(PrepareItemDisplayModel(PrepareModel(Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/DisplayModel.prefab"))), "MysticsItems_MysticSwordItemFollowerPrefab", false); swordFollowerPrefab.transform.Find("TranslatePivot").transform.localScale *= 0.02f; ObjectTransformCurve objectTransformCurve = swordFollowerPrefab.transform.Find("TranslatePivot").gameObject.AddComponent <ObjectTransformCurve>(); objectTransformCurve.translationCurveX = AnimationCurve.Constant(0f, 1f, 0f); var floatY = 0.1f; objectTransformCurve.translationCurveY = new AnimationCurve { keys = new Keyframe[] { new Keyframe(0.25f, floatY), new Keyframe(0.75f, -floatY) }, preWrapMode = WrapMode.PingPong, postWrapMode = WrapMode.PingPong }; objectTransformCurve.translationCurveZ = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.useTranslationCurves = true; objectTransformCurve.timeMax = 10f; objectTransformCurve.rotationCurveX = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.rotationCurveY = AnimationCurve.Linear(0f, 0f, 1f, 360f); objectTransformCurve.rotationCurveY.preWrapMode = WrapMode.Loop; objectTransformCurve.rotationCurveY.postWrapMode = WrapMode.Loop; objectTransformCurve.rotationCurveZ = AnimationCurve.Constant(0f, 1f, 0f); objectTransformCurve.useRotationCurves = true; objectTransformCurve.gameObject.AddComponent <MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsObjectTransformCurveLoop>(); itemDisplayPrefab = PrefabAPI.InstantiateClone(new GameObject("MysticsItems_MysticSwordFollower"), "MysticsItems_MysticSwordFollower", false); itemDisplayPrefab.AddComponent <ItemDisplay>(); ItemFollower itemFollower = itemDisplayPrefab.AddComponent <ItemFollower>(); itemFollower.followerPrefab = swordFollowerPrefab; itemFollower.distanceDampTime = 0.1f; itemFollower.distanceMaxSpeed = 20f; itemFollower.targetObject = itemDisplayPrefab; var itemDisplayHelper = itemDisplayPrefab.AddComponent <MysticsItemsMysticSwordItemDisplayHelper>(); itemDisplayHelper.itemFollower = itemFollower; onSetupIDRS += () => { AddDisplayRule("CommandoBody", "Base", new Vector3(0.17794F, -0.28733F, -0.73752F), new Vector3(3.15473F, 89.99998F, 270.0002F), Vector3.one); AddDisplayRule("HuntressBody", "Base", new Vector3(0.17816F, -0.23663F, -0.52846F), new Vector3(2.42504F, 269.9999F, 90.0001F), Vector3.one); AddDisplayRule("Bandit2Body", "Base", new Vector3(0.4537F, 0.29041F, -0.57258F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("ToolbotBody", "Base", new Vector3(-1.04879F, -4.19278F, 5.42458F), new Vector3(0F, 90F, 90F), Vector3.one); AddDisplayRule("EngiBody", "Base", new Vector3(0.0113F, -0.52335F, -0.69199F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("EngiTurretBody", "Base", new Vector3(1.03266F, 3.98892F, -2.18302F), new Vector3(0F, 90F, 0F), Vector3.one); AddDisplayRule("EngiWalkerTurretBody", "Base", new Vector3(1.53037F, 3.79942F, -2.10391F), new Vector3(0F, 90F, 0F), Vector3.one); AddDisplayRule("MageBody", "Base", new Vector3(0.38669F, -0.43447F, -0.48611F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("MercBody", "Base", new Vector3(0.38005F, -0.35752F, -0.53391F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("TreebotBody", "Base", new Vector3(0.69145F, -1.39195F, -1.94014F), new Vector3(270F, 0F, 0F), Vector3.one * 1f); AddDisplayRule("LoaderBody", "Base", new Vector3(0.26563F, -0.57799F, -0.60309F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("CrocoBody", "Base", new Vector3(2.43278F, 4.85691F, 4.92643F), new Vector3(90F, 0F, 0F), Vector3.one * 1f); AddDisplayRule("CaptainBody", "Base", new Vector3(0.52281F, -0.26508F, -0.8575F), new Vector3(270F, 0F, 0F), Vector3.one); AddDisplayRule("BrotherBody", "HandR", BrotherInfection.green, new Vector3(-0.00915F, 0.08592F, 0.02786F), new Vector3(77.05167F, 128.9087F, 289.6218F), new Vector3(0.06672F, 0.02927F, 0.06676F)); AddDisplayRule("ScavBody", "Base", new Vector3(4.53188F, 14.35975F, 10.88982F), new Vector3(90F, 0F, 0F), Vector3.one * 2f); if (SoftDependencies.SoftDependenciesCore.itemDisplaysSniper) { AddDisplayRule("SniperClassicBody", "Base", new Vector3(-0.74382F, 1.77236F, -0.52436F), new Vector3(0F, 0F, 0F), new Vector3(1F, 1F, 1F)); } AddDisplayRule("RailgunnerBody", "Base", new Vector3(0.25904F, -0.39171F, -0.30991F), new Vector3(270F, 0F, 0F), new Vector3(1F, 1F, 1F)); AddDisplayRule("VoidSurvivorBody", "Base", new Vector3(0.4739F, 0.74488F, 0.37712F), new Vector3(68.90421F, 0F, 0F), new Vector3(1F, 1F, 1F) * 0.8f); }; { onKillVFX = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/SwordPowerUpKillEffect.prefab"); EffectComponent effectComponent = onKillVFX.AddComponent <EffectComponent>(); effectComponent.applyScale = true; VFXAttributes vfxAttributes = onKillVFX.AddComponent <VFXAttributes>(); vfxAttributes.vfxPriority = VFXAttributes.VFXPriority.Medium; vfxAttributes.vfxIntensity = VFXAttributes.VFXIntensity.Medium; onKillVFX.AddComponent <DestroyOnTimer>().duration = 1f; MysticsItemsContent.Resources.effectPrefabs.Add(onKillVFX); } { onKillOrbEffect = Main.AssetBundle.LoadAsset <GameObject>("Assets/Items/Mystic Sword/SwordPowerUpOrbEffect.prefab"); EffectComponent effectComponent = onKillOrbEffect.AddComponent <EffectComponent>(); effectComponent.positionAtReferencedTransform = false; effectComponent.parentToReferencedTransform = false; effectComponent.applyScale = true; VFXAttributes vfxAttributes = onKillOrbEffect.AddComponent <VFXAttributes>(); vfxAttributes.vfxPriority = VFXAttributes.VFXPriority.Always; vfxAttributes.vfxIntensity = VFXAttributes.VFXIntensity.Medium; OrbEffect orbEffect = onKillOrbEffect.AddComponent <OrbEffect>(); orbEffect.startVelocity1 = new Vector3(-25f, 5f, -25f); orbEffect.startVelocity2 = new Vector3(25f, 50f, 25f); orbEffect.endVelocity1 = new Vector3(0f, 0f, 0f); orbEffect.endVelocity2 = new Vector3(0f, 0f, 0f); var curveHolder = onKillVFX.transform.Find("Origin/Particle System").GetComponent <ParticleSystem>().sizeOverLifetime; orbEffect.movementCurve = curveHolder.size.curve; orbEffect.faceMovement = true; orbEffect.callArrivalIfTargetIsGone = false; DestroyOnTimer destroyOnTimer = onKillOrbEffect.transform.Find("Origin/Unparent").gameObject.AddComponent <DestroyOnTimer>(); destroyOnTimer.duration = 0.5f; destroyOnTimer.enabled = false; MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsOrbEffectOnArrivalDefaults onArrivalDefaults = onKillOrbEffect.AddComponent <MysticsRisky2Utils.MonoBehaviours.MysticsRisky2UtilsOrbEffectOnArrivalDefaults>(); onArrivalDefaults.orbEffect = orbEffect; onArrivalDefaults.transformsToUnparentChildren = new Transform[] { onKillOrbEffect.transform.Find("Origin/Unparent") }; onArrivalDefaults.componentsToEnable = new MonoBehaviour[] { destroyOnTimer }; MysticsItemsContent.Resources.effectPrefabs.Add(onKillOrbEffect); } onKillSFX = ScriptableObject.CreateInstance <NetworkSoundEventDef>(); onKillSFX.eventName = "MysticsItems_Play_item_proc_MysticSword"; MysticsItemsContent.Resources.networkSoundEventDefs.Add(onKillSFX); CharacterMaster.onStartGlobal += CharacterMaster_onStartGlobal; GlobalEventManager.onCharacterDeathGlobal += GlobalEventManager_onCharacterDeathGlobal; RecalculateStatsAPI.GetStatCoefficients += RecalculateStatsAPI_GetStatCoefficients; if (!SoftDependencies.SoftDependenciesCore.itemStatsEnabled) { On.RoR2.UI.ItemIcon.SetItemIndex += ItemIcon_SetItemIndex; } GenericGameEvents.BeforeTakeDamage += GenericGameEvents_BeforeTakeDamage; MysticsItemsMysticSwordItemDisplayHelper.materialFlash = LegacyResourcesAPI.Load <Material>("Materials/matHuntressFlashBright"); MysticsItemsMysticSwordItemDisplayHelper.blinkEffect = Addressables.LoadAssetAsync <GameObject>("RoR2/Base/Huntress/HuntressBlinkEffect.prefab").WaitForCompletion(); }