using System; using System.Collections; using System.Collections.Generic; using Unity.Netcode; using UnityEngine; using UnityEngine.UIElements; namespace Game { public enum ModType { Nerf, Buff } public enum ModEffect { Speed, Border } public class ActiveModification { public ModificationProperties Properties { get; set; } public IEnumerator Process(VisualElement panel, List modifications) { modifications.Add(this); VisualElement element = GameUI.AddModification(panel, this); float doNothingTime = Properties.activeDuration * 0.7f; float animateTime = Properties.activeDuration * 0.3f; yield return new WaitForSeconds(doNothingTime); float current = 0; while (current < animateTime) { current += Time.deltaTime; element.style.opacity = new StyleFloat(1 - current / animateTime); yield return null; } element.RemoveFromHierarchy(); modifications.Remove(this); } } public class Modification : NetworkBehaviour { public ModificationProperties Properties { get; set; } private IEnumerator Start() { gameObject.AddComponent().sprite = Properties.image; yield return new WaitForSeconds(Properties.pickupDuration); Destroy(gameObject); } private void OnTriggerEnter2D(Collider2D other) { Player p = other.GetComponent().LastContactPlayer; if (p != null) { Destroy(gameObject); ActiveModification mod = new() {Properties = Properties}; p.StartCoroutine(mod.Process(p.Panel, p.Modifications)); } } } }