|
public class Player |
|
{ |
|
public Dictionary<string, int> manas = new Dictionary<string, int>(); |
|
public Dictionary<string, int> manas_max = new Dictionary<string, int>(); |
|
public List<Mana> deck_manas = new List<Mana>(); |
|
|
|
public virtual bool CanPayMana(Card card) |
|
{ |
|
foreach (var mana in card.manas) |
|
{ |
|
if (mana.id == "") |
|
{ |
|
var mana_left = card.GetGenericMana(); |
|
foreach (var pmana in manas) |
|
{ |
|
int mana_to_pay = Mathf.Min(mana_left, pmana.Value); |
|
mana_left -= mana_to_pay; |
|
} |
|
|
|
if (mana_left > 0) |
|
return false; |
|
} |
|
else |
|
{ |
|
var mana_key = MainMana(mana.id); |
|
if (manas[mana_key] < card.GetMana(mana_key)) |
|
return false; |
|
} |
|
} |
|
|
|
return true; |
|
} |
|
|
|
public virtual void PayMana(Card card) |
|
{ |
|
foreach (var mana in card.manas) |
|
{ |
|
if (mana.id == "") |
|
{ |
|
var mana_left = card.GetGenericMana(); |
|
foreach (var pmana in manas.ToList()) |
|
{ |
|
int mana_to_pay = Mathf.Min(mana_left, pmana.Value); |
|
manas[pmana.Key] -= mana_to_pay; |
|
mana_left -= mana_to_pay; |
|
} |
|
} else |
|
{ |
|
var mana_key = MainMana(mana.id); |
|
manas[mana_key] -= card.GetMana(mana_key); |
|
} |
|
} |
|
} |
|
|
|
public virtual bool CanPayAbility(Card card, AbilityData ability) |
|
{ |
|
bool exhaust = !card.exhausted || !ability.exhaust; |
|
|
|
foreach (var mana in ability.manas) |
|
{ |
|
if (mana.mana == null) |
|
{ |
|
var mana_left = mana.quantity; |
|
foreach (var pmana in manas) |
|
{ |
|
int mana_to_pay = Mathf.Min(mana_left, pmana.Value); |
|
mana_left -= mana_to_pay; |
|
} |
|
|
|
if (mana_left > 0) |
|
return false; |
|
} |
|
else |
|
{ |
|
var mana_key = MainMana(mana.mana.id); |
|
if (manas[mana_key] < mana.quantity) |
|
return false; |
|
} |
|
} |
|
|
|
return exhaust; |
|
} |
|
|
|
public string MainMana(ManaData mana_data) |
|
{ |
|
return mana_data != null ? mana_data.id : deck_manas.First(dmana => dmana.in_deck).mana_id; |
|
} |
|
|
|
public string MainMana() |
|
{ |
|
return deck_manas.First(dmana => dmana.in_deck).mana_id; |
|
} |
|
|
|
public string MainMana(string mana_id) |
|
{ |
|
if (mana_id == "") return MainMana(); |
|
|
|
return deck_manas.First(dmana => dmana.in_deck && dmana.mana_id == mana_id).mana_id; |
|
} |
|
|
|
public void AddMana(ManaData mana_data, int amount, bool add = true) |
|
{ |
|
var mana_key = MainMana(mana_data); |
|
if (add) |
|
manas[mana_key] += amount; |
|
else |
|
manas[mana_key] = amount; |
|
manas[mana_key] = Mathf.Max(manas[mana_key], 0); |
|
} |
|
|
|
public int Mana() |
|
{ |
|
int total = 0; |
|
foreach (var mana in manas) |
|
{ |
|
total += mana.Value; |
|
} |
|
|
|
return total; |
|
} |
|
|
|
public int ManaMax() |
|
{ |
|
int total = 0; |
|
foreach (var mana in manas_max) |
|
{ |
|
total += mana.Value; |
|
} |
|
|
|
return total; |
|
} |
|
|
|
public int ManaMax(ManaData mana_data) |
|
{ |
|
var mana_key = MainMana(mana_data); |
|
var dmana = deck_manas.FirstOrDefault(dmana => dmana.mana_id == mana_key); |
|
return GameplayData.Get().mana_max * dmana.quantity; |
|
} |
|
|
|
public void AddManaMax(ManaData mana_data, int amount, bool add = true, bool current = true) |
|
{ |
|
var mana_key = MainMana(mana_data); |
|
var dmana = deck_manas.FirstOrDefault(dmana => dmana.mana_id == mana_key); |
|
if (current) |
|
{ |
|
if (add) |
|
manas[mana_key] += amount; |
|
else |
|
manas[mana_key] = amount; |
|
manas[mana_key] = Mathf.Clamp(manas[mana_key], 0, GameplayData.Get().mana_max * dmana.quantity); |
|
} |
|
|
|
if (add) |
|
manas_max[mana_key] += amount; |
|
else |
|
manas_max[mana_key] = amount; |
|
manas_max[mana_key] = Mathf.Clamp(manas_max[mana_key], 0, GameplayData.Get().mana_max * dmana.quantity); |
|
} |
|
|
|
public static void Clone(Player source, Player dest) |
|
{ |
|
// ... |
|
CloneDict(source.manas_max, dest.manas_max); |
|
CloneDict(source.manas, dest.manas); |
|
} |
|
|
|
public static void CloneDict(Dictionary<string, int> source, Dictionary<string, int> dest) |
|
{ |
|
foreach (KeyValuePair<string, int> pair in source) |
|
{ |
|
dest[pair.Key] = pair.Value; |
|
} |
|
} |
|
|
|
// ... |
|
} |