using System; using System.Collections.Generic; using System.Linq; using Adventurer.Runtime; using Core.Runtime; using Newtonsoft.Json; using UnityEngine; namespace Quests.Runtime { [Serializable] public class QuestEvent { #region Parameters Guid _id; [SerializeField] string _descriptionKey; [SerializeField] QuestEventType _type; [SerializeField] List _environments; [SerializeField] List _enemyTags; [SerializeField] int _minLevel; [SerializeField] int _minTimeTrigger; [SerializeField] int _maxTimeTrigger; [SerializeField] float _percentTrigger; [SerializeField] List _effects; [SerializeField] TargetingType _targetingTypes; int _time; #endregion // Optionnel : getters publics si tu veux exposer ça sans accès direct à la modif public Guid Id => _id; [JsonIgnore] public string DescriptionKey => _descriptionKey; [JsonIgnore] public QuestEventType Type => _type; [JsonIgnore] public List Environments => _environments; [JsonIgnore] public List EnemyTags => _enemyTags; [JsonIgnore]public int MinLevel => _minLevel; [JsonIgnore]public int MinTimeTrigger => _minTimeTrigger; [JsonIgnore]public int MaxTimeTrigger => _maxTimeTrigger; [JsonIgnore]public float PercentTrigger => _percentTrigger; [JsonIgnore] public List Effects => _effects; [JsonIgnore] public TargetingType TargetingTypes => _targetingTypes; public int Time { get { return _time; } set { _time = value; } } public QuestEvent(Guid id, QuestEventSO data, int time) { _id = id; _descriptionKey = data.m_data.DescriptionKey; _environments = data.m_data.Environments; _enemyTags = data.m_data.EnemyTags; _minLevel = data.m_data.MinLevel; _minTimeTrigger = data.m_data.MinTimeTrigger; _maxTimeTrigger = data.m_data.MaxTimeTrigger; _percentTrigger = data.m_data.PercentTrigger; _effects = data.m_data.Effects; _targetingTypes = data.m_data.TargetingTypes; _time = time; } public List GetTargets(List assignedAdventurersById) { List assignedAdventurers = QuestClass.GetAdventurersFromId(assignedAdventurersById); switch (_targetingTypes) { case TargetingType.AllHeroes: return assignedAdventurers; case TargetingType.RandomHero: return new List { assignedAdventurers[UnityEngine.Random.Range(0, assignedAdventurers.Count)] }; case TargetingType.LowestHp: return assignedAdventurers .OrderBy(adventurer => adventurer.Health) .Take(1) .ToList(); case TargetingType.None: default: return new List(); } } } }