private void Awake() { _material = new Material(HailstormAssets.DarknessShader); Distance = new AnimatedFloat(); Distance.Accel = 20; Distance.MaxSpeed = 50; Distance.Setpoint = 80; Distance.Position = 80; _breathTimeRef = Time.time; }
public DarkElitesManager() { _rng = new Xoroshiro128Plus((ulong)DateTime.Now.Ticks); var eliteDef = new EliteDef { modifierToken = EliteName, color = new Color32(0, 0, 0, 255), }; var equipDef = new EquipmentDef { cooldown = 10f, pickupModelPath = "", pickupIconPath = HailstormAssets.IconDarkElite, nameToken = EquipName, pickupToken = "Darkness", descriptionToken = "Night-bringer", canDrop = false, enigmaCompatible = false }; var buffDef = new BuffDef { buffColor = new Color32(255, 255, 255, 255), iconPath = HailstormAssets.IconDarkElite, canStack = false }; var equip = new CustomEquipment(equipDef, new ItemDisplayRule[0]); var buff = new CustomBuff(BuffName, buffDef); var elite = new CustomElite(EliteName, eliteDef, equip, buff, 1); _eliteIndex = (EliteIndex)ItemAPI.AddCustomElite(elite); _buffIndex = (BuffIndex)ItemAPI.AddCustomBuff(buff); _equipIndex = (EquipmentIndex)ItemAPI.AddCustomEquipment(equip); eliteDef.eliteEquipmentIndex = _equipIndex; equipDef.passiveBuff = _buffIndex; buffDef.eliteIndex = _eliteIndex; //When the camera starts up, hook in our darkness effect On.RoR2.CameraRigController.Start += CameraRigControllerOnStart; //Update elite materials On.RoR2.CharacterModel.InstanceUpdate += CharacterModelOnInstanceUpdate; //Dark elites spawn much less frequently, but are only slightly stronger/costlier than tier 1s var card = new EliteAffixCard { spawnWeight = 0.3f, costMultiplier = 10.0f, damageBoostCoeff = 2.0f, healthBoostCoeff = 6.0f, eliteType = _eliteIndex }; //Register the card for spawning if ESO is enabled EsoLib.Cards.Add(card); Card = card; //Create random walk trackers for dark elite material texture animation _walkerU = new AnimatedFloat { Accel = 0.3f, MaxSpeed = 0.6f }; _walkerV = new AnimatedFloat { Accel = 0.3f, MaxSpeed = 0.6f }; //Whenever scene changes, stop the breathing sound SceneManager.sceneUnloaded += s => AkSoundEngine.PostEvent(SoundEvents.StopLargeBreathing, null); }