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 struct ModificationProperties { public ModType Type { get; set; } public ModEffect Effect { get; set; } public float PickupDuration { get; set; } public float ActiveDuration { get; set; } } public class ActiveModification { public ModificationProperties Properties { get; set; } public IEnumerator Process(VisualElement panel, List modifications) { modifications.Add(this); VisualElement element = GameUI.AddModification(panel, this); yield return new WaitForSeconds(Properties.ActiveDuration); element.RemoveFromHierarchy(); modifications.Remove(this); } } public class Modification : NetworkBehaviour { public ModificationProperties Properties { get; set; } private IEnumerator Start() { 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}; StartCoroutine(mod.Process(p.Panel, p.Modifications)); } } } }