private CreateSpellCastResult(bool success, SpellState spellState, CastFailedReason reason, string reasonText = default) { Success = success; SpellState = spellState; Reason = reason; ReasonText = reasonText ?? reason.ToString(); }
public void CastSpell(SpellState spellState) { if (spellState == default) { OnCastFailed?.Invoke(null, CastFailedReason.SpellNotFound); return; } if (CurrentSpellCast != null) { if (CurrentSpellCast.Spell == spellState.Spell) { OnCastFailed?.Invoke(spellState.Spell, CastFailedReason.AlreadyCasting); return; } CurrentSpellCast.Cancel(CancelCastReason.CastReplaced); } var result = spellState.TryCreateSpellCast(out var newSpellCast, this); if (result.Success) { SetCurrentSpellCast(newSpellCast); OnNewSpellCast?.Invoke(CurrentSpellCast); CurrentSpellCast.Start(); if (result.SpellState.Spell.OnGlobalCooldown) { _globalCooldownRemaining = GlobalCooldown; OnGlobalCooldownStarted?.Invoke(_globalCooldownRemaining); } } else { OnCastFailed?.Invoke(result.SpellState.Spell, result.Reason.GetValueOrDefault()); } }
public static CreateSpellCastResult Succeeded(SpellState spellState) { return new CreateSpellCastResult(true, spellState); }
public static CreateSpellCastResult Failed(CastFailedReason reason, SpellState spellState, string reasonText = default) { return new CreateSpellCastResult(false, spellState, reason, reasonText); }
private CreateSpellCastResult(bool success, SpellState spellState) { Success = success; SpellState = spellState; Reason = default; }