Added Variable Instancer, Event Reference, Atom Collection and Atom List (old Atom List renamed to Atom Value List) (#110)
AtomVariableInstancer
- Added AtomVariableInstancer as an option to AtomReference.
- Added AtomVariableInstancer to generator.
- Added editor icon for AtomVariableInstancer.
AtomEventReference
- Added an AtomEventReference class (and AtomEventX2Reference). It’s similar to an AtomReference, but for Events. Let’s you pick between an Event, Variable (will select the Changed event) and a VariableInstancer (see above).
- Added AtomEventReference and AtomEventX2Reference to generator.
- Added a drawer for AtomEventReference.
- Listeners are now using AtomEventReference instead of AtomEvent.
- Refactoring of VoidHooks since Listeners are now using AtomEventReference.
AtomCollection
- Created an AtomCollection - a collection of Atoms associated with key strings (AtomReferences).
- Added new editor icon for collections.
- Created a SerializableDictionary class, which AtomCollection is using.
- Custom property drawer for SerializableDictionary.
- SerializableDictionary supports nested structures meaning that a AtomCollection can have a KVP that is pointing to another AtomCollection.
- AtomCollections have 3 events: Added, Removed, Cleared.
- Added an option to sync an InstanceVariable to collection - adding it to the collection when created (using gameObject’s instance id as key) and removing it from the collection when destroyed.
AtomList
- Renamed old AtomList to AtomValueList
- Added AtomList, like Collection, but a list
- Added new icon for AtomList
- Created a AtomBaseVariableList class, which AtomList is using.
- Custom property drawer for AtomBaseVariableList.
- AtomLists have 3 events: Added, Removed, Cleared.
- Added an option to sync an InstanceVariable to list - adding it to the list when created and removing it from the list when destroyed.
2020-02-22 20:39:43 -05:00
|
|
|
using System;
|
|
|
|
using System.Collections.Generic;
|
|
|
|
using UnityEngine;
|
|
|
|
|
2020-03-01 20:26:06 -05:00
|
|
|
namespace UnityAtoms.BaseAtoms
|
Added Variable Instancer, Event Reference, Atom Collection and Atom List (old Atom List renamed to Atom Value List) (#110)
AtomVariableInstancer
- Added AtomVariableInstancer as an option to AtomReference.
- Added AtomVariableInstancer to generator.
- Added editor icon for AtomVariableInstancer.
AtomEventReference
- Added an AtomEventReference class (and AtomEventX2Reference). It’s similar to an AtomReference, but for Events. Let’s you pick between an Event, Variable (will select the Changed event) and a VariableInstancer (see above).
- Added AtomEventReference and AtomEventX2Reference to generator.
- Added a drawer for AtomEventReference.
- Listeners are now using AtomEventReference instead of AtomEvent.
- Refactoring of VoidHooks since Listeners are now using AtomEventReference.
AtomCollection
- Created an AtomCollection - a collection of Atoms associated with key strings (AtomReferences).
- Added new editor icon for collections.
- Created a SerializableDictionary class, which AtomCollection is using.
- Custom property drawer for SerializableDictionary.
- SerializableDictionary supports nested structures meaning that a AtomCollection can have a KVP that is pointing to another AtomCollection.
- AtomCollections have 3 events: Added, Removed, Cleared.
- Added an option to sync an InstanceVariable to collection - adding it to the collection when created (using gameObject’s instance id as key) and removing it from the collection when destroyed.
AtomList
- Renamed old AtomList to AtomValueList
- Added AtomList, like Collection, but a list
- Added new icon for AtomList
- Created a AtomBaseVariableList class, which AtomList is using.
- Custom property drawer for AtomBaseVariableList.
- AtomLists have 3 events: Added, Removed, Cleared.
- Added an option to sync an InstanceVariable to list - adding it to the list when created and removing it from the list when destroyed.
2020-02-22 20:39:43 -05:00
|
|
|
{
|
|
|
|
/// <summary>
|
|
|
|
/// A List of type AtomBaseVariable. Used by AtomList.
|
|
|
|
/// </summary>
|
|
|
|
[Serializable]
|
2020-03-01 20:26:06 -05:00
|
|
|
public class AtomBaseVariableList : List<AtomBaseVariable>, ISerializationCallbackReceiver, IAtomList
|
Added Variable Instancer, Event Reference, Atom Collection and Atom List (old Atom List renamed to Atom Value List) (#110)
AtomVariableInstancer
- Added AtomVariableInstancer as an option to AtomReference.
- Added AtomVariableInstancer to generator.
- Added editor icon for AtomVariableInstancer.
AtomEventReference
- Added an AtomEventReference class (and AtomEventX2Reference). It’s similar to an AtomReference, but for Events. Let’s you pick between an Event, Variable (will select the Changed event) and a VariableInstancer (see above).
- Added AtomEventReference and AtomEventX2Reference to generator.
- Added a drawer for AtomEventReference.
- Listeners are now using AtomEventReference instead of AtomEvent.
- Refactoring of VoidHooks since Listeners are now using AtomEventReference.
AtomCollection
- Created an AtomCollection - a collection of Atoms associated with key strings (AtomReferences).
- Added new editor icon for collections.
- Created a SerializableDictionary class, which AtomCollection is using.
- Custom property drawer for SerializableDictionary.
- SerializableDictionary supports nested structures meaning that a AtomCollection can have a KVP that is pointing to another AtomCollection.
- AtomCollections have 3 events: Added, Removed, Cleared.
- Added an option to sync an InstanceVariable to collection - adding it to the collection when created (using gameObject’s instance id as key) and removing it from the collection when destroyed.
AtomList
- Renamed old AtomList to AtomValueList
- Added AtomList, like Collection, but a list
- Added new icon for AtomList
- Created a AtomBaseVariableList class, which AtomList is using.
- Custom property drawer for AtomBaseVariableList.
- AtomLists have 3 events: Added, Removed, Cleared.
- Added an option to sync an InstanceVariable to list - adding it to the list when created and removing it from the list when destroyed.
2020-02-22 20:39:43 -05:00
|
|
|
{
|
|
|
|
public Action<AtomBaseVariable> Added { get => _added; set => _added = value; }
|
|
|
|
public Action<AtomBaseVariable> Removed { get => _removed; set => _removed = value; }
|
|
|
|
public Action Cleared { get => _cleared; set => _cleared = value; }
|
|
|
|
|
|
|
|
private event Action<AtomBaseVariable> _added;
|
|
|
|
private event Action<AtomBaseVariable> _removed;
|
|
|
|
private event Action _cleared;
|
|
|
|
|
|
|
|
[SerializeField]
|
|
|
|
private List<AtomBaseVariable> _serializedList = new List<AtomBaseVariable>();
|
|
|
|
|
|
|
|
public void OnAfterDeserialize()
|
|
|
|
{
|
|
|
|
if (_serializedList != null)
|
|
|
|
{
|
|
|
|
base.Clear();
|
|
|
|
for (var i = 0; i < _serializedList.Count; ++i)
|
|
|
|
{
|
|
|
|
base.Add(_serializedList[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public void OnBeforeSerialize()
|
|
|
|
{
|
|
|
|
_serializedList.Clear();
|
|
|
|
for (var i = 0; i < this.Count; ++i)
|
|
|
|
{
|
|
|
|
_serializedList.Add(this[i]);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Generic getter.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="index">The index you want to retrieve.</param>
|
|
|
|
/// <typeparam name="T">The expected type of the value you want to retrieve.</typeparam>
|
|
|
|
/// <returns>The value of type T at specified index.</returns>
|
|
|
|
public T Get<T>(int index) where T : AtomBaseVariable
|
|
|
|
{
|
|
|
|
return (T)this[index];
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Generic getter.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="index">The index you want to retrieve.</param>
|
|
|
|
/// <typeparam name="T">The expected type of the value you want to retrieve.</typeparam>
|
|
|
|
/// <returns>The value of type T at specified index.</returns>
|
|
|
|
public T Get<T>(AtomBaseVariable<int> index) where T : AtomBaseVariable
|
|
|
|
{
|
|
|
|
if (index == null) throw new ArgumentNullException("index");
|
|
|
|
return (T)this[index.Value];
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Add an item to the list.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="item">The item to add.</param>
|
|
|
|
public new void Add(AtomBaseVariable item)
|
|
|
|
{
|
|
|
|
base.Add(item);
|
|
|
|
_serializedList.Add(item);
|
|
|
|
Added?.Invoke(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Remove an item from the list.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="item">The item to remove.</param>
|
|
|
|
/// <returns>True if it was removed, otherwise false..</returns>
|
|
|
|
public new bool Remove(AtomBaseVariable item)
|
|
|
|
{
|
|
|
|
var removed = base.Remove(item);
|
|
|
|
_serializedList.Remove(item);
|
|
|
|
if (!removed) return false;
|
|
|
|
Removed?.Invoke(item);
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Remove an item at provided index.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="index">The index to remove item at.</param>
|
|
|
|
public new void RemoveAt(int index)
|
|
|
|
{
|
|
|
|
var item = this[index];
|
|
|
|
base.RemoveAt(index);
|
|
|
|
_serializedList.RemoveAt(index);
|
|
|
|
Removed?.Invoke(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Insert item at index.
|
|
|
|
/// </summary>
|
|
|
|
/// <param name="index">Index to insert item at.</param>
|
|
|
|
/// <param name="item">Item to insert.</param>
|
|
|
|
public new void Insert(int index, AtomBaseVariable item)
|
|
|
|
{
|
|
|
|
this.Insert(index, item);
|
|
|
|
_serializedList.Insert(index, item);
|
|
|
|
Added?.Invoke(item);
|
|
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
/// Ckear list.
|
|
|
|
/// </summary>
|
|
|
|
public new void Clear()
|
|
|
|
{
|
|
|
|
base.Clear();
|
|
|
|
_serializedList.Clear();
|
|
|
|
_cleared?.Invoke();
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|