128 lines
3.3 KiB
C#
128 lines
3.3 KiB
C#
namespace IdleSpectator;
|
|
|
|
/// <summary>
|
|
/// Short-lived apply-site context for happiness hooks that do not retain related units in history.
|
|
/// </summary>
|
|
internal static class HappinessContextBag
|
|
{
|
|
private static Actor _deceased;
|
|
private static Actor _relatedA;
|
|
private static Actor _relatedB;
|
|
private static HappinessRelationRole _role;
|
|
private static string _effectHint;
|
|
|
|
public static void BeginDeathEvent(Actor deceased)
|
|
{
|
|
_deceased = deceased;
|
|
_relatedA = deceased;
|
|
_relatedB = null;
|
|
_role = HappinessRelationRole.None;
|
|
_effectHint = "death";
|
|
}
|
|
|
|
public static void EndDeathEvent()
|
|
{
|
|
_deceased = null;
|
|
_relatedA = null;
|
|
_relatedB = null;
|
|
_role = HappinessRelationRole.None;
|
|
_effectHint = null;
|
|
}
|
|
|
|
public static void SetRelated(Actor related, HappinessRelationRole role, string effectHint = null)
|
|
{
|
|
_relatedA = related;
|
|
_relatedB = null;
|
|
_role = role;
|
|
if (!string.IsNullOrEmpty(effectHint))
|
|
{
|
|
_effectHint = effectHint;
|
|
}
|
|
}
|
|
|
|
public static void SetPair(Actor a, Actor b, HappinessRelationRole role, string effectHint = null)
|
|
{
|
|
_relatedA = a;
|
|
_relatedB = b;
|
|
_role = role;
|
|
if (!string.IsNullOrEmpty(effectHint))
|
|
{
|
|
_effectHint = effectHint;
|
|
}
|
|
}
|
|
|
|
public static void ClearRelated()
|
|
{
|
|
_relatedA = null;
|
|
_relatedB = null;
|
|
_role = HappinessRelationRole.None;
|
|
_effectHint = null;
|
|
}
|
|
|
|
public static Actor CurrentDeceased => _deceased;
|
|
|
|
public static bool TryGetRelated(Actor subject, out Actor related, out HappinessRelationRole role)
|
|
{
|
|
related = null;
|
|
role = _role;
|
|
if (subject == null)
|
|
{
|
|
related = _relatedA ?? _deceased;
|
|
return related != null;
|
|
}
|
|
|
|
if (_deceased != null)
|
|
{
|
|
related = _deceased;
|
|
role = role != HappinessRelationRole.None
|
|
? role
|
|
: HappinessRelationRole.None;
|
|
return related != null && related != subject;
|
|
}
|
|
|
|
if (_relatedA != null && _relatedB != null)
|
|
{
|
|
if (subject == _relatedA)
|
|
{
|
|
related = _relatedB;
|
|
return true;
|
|
}
|
|
|
|
if (subject == _relatedB)
|
|
{
|
|
related = _relatedA;
|
|
return true;
|
|
}
|
|
}
|
|
|
|
if (_relatedA != null && _relatedA != subject)
|
|
{
|
|
related = _relatedA;
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
public static HappinessRelationRole RoleForDeathEffect(string effectId)
|
|
{
|
|
if (string.IsNullOrEmpty(effectId))
|
|
{
|
|
return HappinessRelationRole.None;
|
|
}
|
|
|
|
switch (effectId)
|
|
{
|
|
case "death_child":
|
|
return HappinessRelationRole.DeceasedChild;
|
|
case "death_lover":
|
|
return HappinessRelationRole.DeceasedLover;
|
|
case "death_best_friend":
|
|
return HappinessRelationRole.DeceasedBestFriend;
|
|
case "death_family_member":
|
|
return HappinessRelationRole.DeceasedFamily;
|
|
default:
|
|
return HappinessRelationRole.None;
|
|
}
|
|
}
|
|
}
|