using System.Collections;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
namespace TowerDefense.Towers.Data
{
///
/// The asset which holds the list of different towers
///
[CreateAssetMenu(fileName = "TowerLibrary.asset", menuName = "TowerDefense/Tower Library", order = 1)]
public class TowerLibrary : ScriptableObject, IList, IDictionary
{
///
/// The list of all the towers
///
public List configurations;
///
/// The internal reference to the dictionary made from the list of towers
/// with the name of tower as the key
///
Dictionary m_ConfigurationDictionary;
///
/// The accessor to the towers by index
///
///
public Tower this[int index]
{
get { return configurations[index]; }
}
public void OnBeforeSerialize()
{
}
///
/// Convert the list (m_Configurations) to a dictionary for access via name
///
public void OnAfterDeserialize()
{
if (configurations == null)
{
return;
}
m_ConfigurationDictionary = configurations.ToDictionary(t => t.towerName);
}
public bool ContainsKey(string key)
{
return m_ConfigurationDictionary.ContainsKey(key);
}
public void Add(string key, Tower value)
{
m_ConfigurationDictionary.Add(key, value);
}
public bool Remove(string key)
{
return m_ConfigurationDictionary.Remove(key);
}
public bool TryGetValue(string key, out Tower value)
{
return m_ConfigurationDictionary.TryGetValue(key, out value);
}
Tower IDictionary.this[string key]
{
get { return m_ConfigurationDictionary[key]; }
set { m_ConfigurationDictionary[key] = value; }
}
public ICollection Keys
{
get { return ((IDictionary) m_ConfigurationDictionary).Keys; }
}
ICollection IDictionary.Values
{
get { return m_ConfigurationDictionary.Values; }
}
IEnumerator> IEnumerable>.GetEnumerator()
{
return m_ConfigurationDictionary.GetEnumerator();
}
public void Add(KeyValuePair item)
{
m_ConfigurationDictionary.Add(item.Key, item.Value);
}
public bool Remove(KeyValuePair item)
{
return m_ConfigurationDictionary.Remove(item.Key);
}
public bool Contains(KeyValuePair item)
{
return m_ConfigurationDictionary.Contains(item);
}
public void CopyTo(KeyValuePair[] array, int arrayIndex)
{
int count = array.Length;
for (int i = arrayIndex; i < count; i++)
{
Tower config = configurations[i - arrayIndex];
KeyValuePair current = new KeyValuePair(config.towerName, config);
array[i] = current;
}
}
public int IndexOf(Tower item)
{
return configurations.IndexOf(item);
}
public void Insert(int index, Tower item)
{
configurations.Insert(index, item);
}
public void RemoveAt(int index)
{
configurations.RemoveAt(index);
}
Tower IList.this[int index]
{
get { return configurations[index]; }
set { configurations[index] = value; }
}
public IEnumerator GetEnumerator()
{
return configurations.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return ((IEnumerable) configurations).GetEnumerator();
}
public void Add(Tower item)
{
configurations.Add(item);
}
public void Clear()
{
configurations.Clear();
}
public bool Contains(Tower item)
{
return configurations.Contains(item);
}
public void CopyTo(Tower[] array, int arrayIndex)
{
configurations.CopyTo(array, arrayIndex);
}
public bool Remove(Tower item)
{
return configurations.Remove(item);
}
public int Count
{
get { return configurations.Count; }
}
public bool IsReadOnly
{
get { return ((ICollection) configurations).IsReadOnly; }
}
}
}