mirror of
https://gitgud.io/AbstractConcept/rimworld-animation-studio.git
synced 2024-08-15 00:43:27 +00:00
Initial commit
This commit is contained in:
commit
3c7cc0c973
8391 changed files with 704313 additions and 0 deletions
|
@ -0,0 +1,125 @@
|
|||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
|
||||
namespace UnityEditor.U2D.Animation
|
||||
{
|
||||
[Serializable]
|
||||
internal class SerializableDictionary<TKey, TValue> : IDictionary<TKey, TValue>, ISerializationCallbackReceiver
|
||||
{
|
||||
[SerializeField]
|
||||
private List<TKey> m_Keys;
|
||||
[SerializeField]
|
||||
private List<TValue> m_Values;
|
||||
private Dictionary<TKey, TValue> m_Dictionary = new Dictionary<TKey, TValue>();
|
||||
|
||||
public TValue this[TKey key]
|
||||
{
|
||||
get { return m_Dictionary[key]; }
|
||||
set { m_Dictionary[key] = value; }
|
||||
}
|
||||
|
||||
public TKey this[TValue value]
|
||||
{
|
||||
get
|
||||
{
|
||||
m_Keys = new List<TKey>(m_Dictionary.Keys);
|
||||
m_Values = new List<TValue>(m_Dictionary.Values);
|
||||
var index = m_Values.FindIndex(x => x.Equals(value));
|
||||
if (index < 0)
|
||||
throw new KeyNotFoundException();
|
||||
return m_Keys[index];
|
||||
}
|
||||
}
|
||||
|
||||
public ICollection<TKey> Keys
|
||||
{
|
||||
get { return m_Dictionary.Keys; }
|
||||
}
|
||||
|
||||
public ICollection<TValue> Values
|
||||
{
|
||||
get { return m_Dictionary.Values; }
|
||||
}
|
||||
|
||||
public void Add(TKey key, TValue value)
|
||||
{
|
||||
m_Dictionary.Add(key, value);
|
||||
}
|
||||
|
||||
public bool ContainsKey(TKey key)
|
||||
{
|
||||
return m_Dictionary.ContainsKey(key);
|
||||
}
|
||||
|
||||
public bool Remove(TKey key)
|
||||
{
|
||||
return m_Dictionary.Remove(key);
|
||||
}
|
||||
|
||||
public bool TryGetValue(TKey key, out TValue value)
|
||||
{
|
||||
return m_Dictionary.TryGetValue(key, out value);
|
||||
}
|
||||
|
||||
public void Clear()
|
||||
{
|
||||
m_Dictionary.Clear();
|
||||
}
|
||||
|
||||
public int Count
|
||||
{
|
||||
get { return m_Dictionary.Count; }
|
||||
}
|
||||
|
||||
bool ICollection<KeyValuePair<TKey, TValue>>.IsReadOnly
|
||||
{
|
||||
get { return (m_Dictionary as ICollection<KeyValuePair<TKey, TValue>>).IsReadOnly; }
|
||||
}
|
||||
|
||||
void ICollection<KeyValuePair<TKey, TValue>>.Add(KeyValuePair<TKey, TValue> item)
|
||||
{
|
||||
(m_Dictionary as ICollection<KeyValuePair<TKey, TValue>>).Add(item);
|
||||
}
|
||||
|
||||
bool ICollection<KeyValuePair<TKey, TValue>>.Contains(KeyValuePair<TKey, TValue> item)
|
||||
{
|
||||
return (m_Dictionary as ICollection<KeyValuePair<TKey, TValue>>).Contains(item);
|
||||
}
|
||||
|
||||
void ICollection<KeyValuePair<TKey, TValue>>.CopyTo(KeyValuePair<TKey, TValue>[] array, int arrayIndex)
|
||||
{
|
||||
(m_Dictionary as ICollection<KeyValuePair<TKey, TValue>>).CopyTo(array, arrayIndex);
|
||||
}
|
||||
|
||||
bool ICollection<KeyValuePair<TKey, TValue>>.Remove(KeyValuePair<TKey, TValue> item)
|
||||
{
|
||||
return (m_Dictionary as ICollection<KeyValuePair<TKey, TValue>>).Remove(item);
|
||||
}
|
||||
|
||||
IEnumerator<KeyValuePair<TKey, TValue>> IEnumerable<KeyValuePair<TKey, TValue>>.GetEnumerator()
|
||||
{
|
||||
return (m_Dictionary as IEnumerable<KeyValuePair<TKey, TValue>>).GetEnumerator();
|
||||
}
|
||||
|
||||
public IEnumerator GetEnumerator()
|
||||
{
|
||||
return m_Dictionary.GetEnumerator();
|
||||
}
|
||||
|
||||
void ISerializationCallbackReceiver.OnBeforeSerialize()
|
||||
{
|
||||
m_Keys = new List<TKey>(m_Dictionary.Keys);
|
||||
m_Values = new List<TValue>(m_Dictionary.Values);
|
||||
}
|
||||
|
||||
void ISerializationCallbackReceiver.OnAfterDeserialize()
|
||||
{
|
||||
Debug.Assert(m_Keys.Count == m_Values.Count);
|
||||
Clear();
|
||||
for (var i = 0; i < m_Keys.Count; ++i)
|
||||
Add(m_Keys[i], m_Values[i]);
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue