UnitySerializedReferenceUI/Samples~/ExamplesAchievementSysemAssembly/Achievements/IUnlockCondition.cs
2022-12-28 14:56:13 +01:00

141 lines
3.1 KiB
C#

using System;
using UnityEngine;
public interface IUnlockCondition
{
public event Action OnUnlockEvent;
public bool IsUnlocked { get; }
public float Progress { get; }
public bool ResetOnFailedCheck { get; }
//public UnlockResetMode { get; }
//public IString ProgressString { get; }
//public IString UnlockString { get; }
public bool ShouldBePersistent { get; }
public string Data { get; set; }
public void Initialize();
public void Reset();
}
// Maybe make an IUnlockReset interface to have expandable unlock reset modes.
// The interface could then return a bool if it should reset or not.
public enum UnlockResetMode
{
NeverReset,
ResetOnFailedCheck,
ResetWithOthers,
}
public enum EnemyType
{
Skeleton,
Zombie,
Dragon,
Snek
}
public enum Difficulty
{
Easy,
Medium,
Hard
}
[System.Serializable]
public class KillEnemies : IUnlockCondition
{
// Serialized Parameters.
[SerializeField]
private EnemyType targetType = EnemyType.Skeleton;
[SerializeField]
private int targetKills = 100;
// Implementation.
public event Action OnUnlockEvent;
public bool IsUnlocked => kills >= targetKills;
public float Progress => kills / targetKills;
public bool ResetOnFailedCheck => false;
public bool ShouldBePersistent => true;
public string Data { get => kills.ToString(); set { kills = int.Parse(value); } }
private int kills = 0;
public void Initialize()
{
// Start listening to some events to collect data.
}
public void Reset()
{
kills = 0;
}
}
[System.Serializable]
public class LevelDifficulty : IUnlockCondition
{
[SerializeField]
private Difficulty difficulty = Difficulty.Easy;
public event Action OnUnlockEvent;
public bool IsUnlocked => false;
public float Progress => 0;
public bool ResetOnFailedCheck => true;
public bool ShouldBePersistent => false;
public string Data { get => ""; set { } }
public void Initialize()
{
// Start listening to some events to collect data.
}
public void Reset()
{
}
}
[System.Serializable]
public class Accuracy : IUnlockCondition
{
[SerializeField, Range(0, 1)]
private float targetAccuracy = 0.5f;
public event Action OnUnlockEvent;
public bool IsUnlocked => false;
public float Progress => 0;
public bool ResetOnFailedCheck => true;
public bool ShouldBePersistent => false;
public string Data { get => ""; set { } }
public void Initialize()
{
// Start listening to some events to collect data.
}
public void Reset()
{
}
}
[System.Serializable]
public class OwnDLC : IUnlockCondition
{
[SerializeField]
private string dlcName = "";
public event Action OnUnlockEvent;
public bool IsUnlocked => false;
public float Progress => 0;
public bool ResetOnFailedCheck => true;
public bool ShouldBePersistent => false;
public string Data { get => ""; set { } }
public void Initialize()
{
// Start listening to some events to collect data.
}
public void Reset()
{
}
}