|
|
|
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<ActiveModification> 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<Ball>().LastContactPlayer;
|
|
|
|
if (p != null) {
|
|
|
|
Destroy(gameObject);
|
|
|
|
ActiveModification mod = new() {Properties = Properties};
|
|
|
|
StartCoroutine(mod.Process(p.Panel, p.Modifications));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|