using System;
<%IF TYPE_IS_ATOMBASEVARIABLE%>using UnityEngine;<%ENDIF%>
<%IF TYPE_IS_FSMTRANSITIONDATA%>using UnityEngine;<%ENDIF%>
<%IF TYPE_IS_VOID%>using UnityEngine;<%ENDIF%>
<%IF TYPE_HAS_NAMESPACE%>using {TYPE_NAMESPACE};<%ENDIF%>
<%IF HAS_SUB_UA_NAMESPACE%>
namespace UnityAtoms.{SUB_UA_NAMESPACE}
<%ELSE%>
namespace UnityAtoms
<%ENDIF%>
{
<%IF TYPE_IS_ATOMBASEVARIABLE%>
///
/// Different types of Event Reference usages.
///
public class AtomBaseVariableEventReferenceUsage
{
public const int EVENT = 0;
public const int EVENT_INSTANCER = 1;
public const int COLLECTION_ADDED_EVENT = 2;
public const int COLLECTION_REMOVED_EVENT = 3;
public const int LIST_ADDED_EVENT = 4;
public const int LIST_REMOVED_EVENT = 5;
public const int COLLECTION_INSTANCER_ADDED_EVENT = 6;
public const int COLLECTION_INSTANCER_REMOVED_EVENT = 7;
public const int LIST_INSTANCER_ADDED_EVENT = 8;
public const int LIST_INSTANCER_REMOVED_EVENT = 9;
}
<%ENDIF%>
<%IF TYPE_IS_VOID%>
public class VoidBaseEventReferenceUsage
{
public const int EVENT = 0;
public const int EVENT_INSTANCER = 1;
public const int COLLECTION_CLEARED_EVENT = 2;
public const int LIST_CLEARED_EVENT = 3;
public const int COLLECTION_INSTANCER_CLEARED_EVENT = 4;
public const int LIST_INSTANCER_CLEARED_EVENT = 5;
}
<%ENDIF%>
<%IF TYPE_IS_FSMTRANSITIONDATA%>
///
/// Different Event Reference usages.
///
public class FSMTransitionDataBaseEventReferenceUsage
{
public const int FSM = 2;
public const int FSM_INSTANCER = 3;
}
<%ENDIF%>
///
/// Event Reference of type `{VALUE_TYPE}`. Inherits from `AtomBaseEventReference<{VALUE_TYPE}, {VALUE_TYPE_NAME}Event, {VALUE_TYPE_NAME}EventInstancer>`.
///
[Serializable]
public sealed class {VALUE_TYPE_NAME}BaseEventReference : AtomBaseEventReference<
{VALUE_TYPE},
{VALUE_TYPE_NAME}Event,
{VALUE_TYPE_NAME}EventInstancer>, IGetEvent
{
<%IF TYPE_IS_FSMTRANSITIONDATA%>
///
/// Get the value for the Reference.
///
/// The value of type `FiniteStateMachine`.
public override FSMTransitionDataEvent Event
{
get
{
switch (_usage)
{
case (FSMTransitionDataBaseEventReferenceUsage.FSM_INSTANCER): return ((FiniteStateMachine)_fsmInstancer.Variable).TransitionStarted;
case (FSMTransitionDataBaseEventReferenceUsage.FSM): return _fsm.TransitionStarted;
default:
return base.Event;
}
}
set
{
switch (_usage)
{
case (FSMTransitionDataBaseEventReferenceUsage.FSM_INSTANCER):
((FiniteStateMachine)_fsmInstancer.Variable).TransitionStarted = value;
break;
case (FSMTransitionDataBaseEventReferenceUsage.FSM):
_fsm.TransitionStarted = value;
break;
default:
base.Event = value;
break;
}
}
}
///
/// Takes event from this FiniteStateMachine if `Usage` is set to `FSM`.
///
[SerializeField]
private FiniteStateMachine _fsm = default(FiniteStateMachine);
///
/// Takes event from this FiniteStateMachineInstancer if `Usage` is set to `FSM Instancer`.
///
[SerializeField]
private FiniteStateMachineInstancer _fsmInstancer = default(FiniteStateMachineInstancer);
<%ENDIF%>
<%IF TYPE_IS_ATOMBASEVARIABLE%>
///
/// Get or set the Event used by the Event Reference.
///
/// The event of type `E`.
public override AtomBaseVariableEvent Event
{
get
{
switch (_usage)
{
case (AtomBaseVariableEventReferenceUsage.COLLECTION_ADDED_EVENT): return _collection != null ? _collection.Added : null;
case (AtomBaseVariableEventReferenceUsage.COLLECTION_REMOVED_EVENT): return _collection != null ? _collection.Removed : null;
case (AtomBaseVariableEventReferenceUsage.LIST_ADDED_EVENT): return _list != null ? _list.Added : null;
case (AtomBaseVariableEventReferenceUsage.LIST_REMOVED_EVENT): return _list != null ? _list.Removed : null;
case (AtomBaseVariableEventReferenceUsage.COLLECTION_INSTANCER_ADDED_EVENT): return _collectionInstancer != null ? _collectionInstancer.Added : null;
case (AtomBaseVariableEventReferenceUsage.COLLECTION_INSTANCER_REMOVED_EVENT): return _collectionInstancer != null ? _collectionInstancer.Removed : null;
case (AtomBaseVariableEventReferenceUsage.LIST_INSTANCER_ADDED_EVENT): return _listInstancer != null ? _listInstancer.Added : null;
case (AtomBaseVariableEventReferenceUsage.LIST_INSTANCER_REMOVED_EVENT): return _listInstancer != null ? _listInstancer.Removed : null;
case (AtomBaseVariableEventReferenceUsage.EVENT_INSTANCER): return _eventInstancer != null ? _eventInstancer.Event : null;
case (AtomBaseVariableEventReferenceUsage.EVENT):
default:
return _event;
}
}
set
{
switch (_usage)
{
case (AtomBaseVariableEventReferenceUsage.COLLECTION_ADDED_EVENT):
{
_collection.Added = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.COLLECTION_REMOVED_EVENT):
{
_collection.Removed = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.LIST_ADDED_EVENT):
{
_list.Added = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.LIST_REMOVED_EVENT):
{
_list.Removed = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.COLLECTION_INSTANCER_ADDED_EVENT):
{
_collectionInstancer.Added = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.COLLECTION_INSTANCER_REMOVED_EVENT):
{
_collectionInstancer.Removed = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.LIST_INSTANCER_ADDED_EVENT):
{
_listInstancer.Added = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.LIST_INSTANCER_REMOVED_EVENT):
{
_listInstancer.Removed = value;
break;
}
case (AtomBaseVariableEventReferenceUsage.EVENT):
{
_event = value;
break;
}
default:
throw new NotSupportedException($"Event not reassignable for usage {_usage}.");
}
}
}
///
/// Collection used if `Usage` is set to `COLLECTION_ADDED_EVENT` or `COLLECTION_REMOVED_EVENT`.
///
[SerializeField]
private AtomCollection _collection = default(AtomCollection);
///
/// List used if `Usage` is set to `LIST_ADDED_EVENT` or `LIST_REMOVED_EVENT`.
///
[SerializeField]
private AtomList _list = default(AtomList);
///
/// Collection Instancer used if `Usage` is set to `COLLECTION_INSTANCER_ADDED_EVENT` or `COLLECTION_INSTANCER_REMOVED_EVENT`.
///
[SerializeField]
private AtomCollectionInstancer _collectionInstancer = default(AtomCollectionInstancer);
///
/// List Instancer used if `Usage` is set to `LIST_INSTANCER_ADDED_EVENT` or `LIST_INSTANCER_REMOVED_EVENT`.
///
[SerializeField]
private AtomListInstancer _listInstancer = default(AtomListInstancer);
<%ENDIF%>
<%IF TYPE_IS_VOID%>
///
/// Get or set the Event used by the Event Reference.
///
/// The event of type `E`.
public override VoidEvent Event
{
get
{
switch (_usage)
{
case (VoidBaseEventReferenceUsage.COLLECTION_CLEARED_EVENT): return _collection != null ? _collection.Cleared : null;
case (VoidBaseEventReferenceUsage.LIST_CLEARED_EVENT): return _list != null ? _list.Cleared : null;
case (VoidBaseEventReferenceUsage.COLLECTION_INSTANCER_CLEARED_EVENT): return _collectionInstancer != null ? _collectionInstancer.Cleared : null;
case (VoidBaseEventReferenceUsage.LIST_INSTANCER_CLEARED_EVENT): return _listInstancer != null ? _listInstancer.Cleared : null;
case (VoidBaseEventReferenceUsage.EVENT_INSTANCER): return _eventInstancer != null ? _eventInstancer.Event : null;
case (VoidBaseEventReferenceUsage.EVENT):
default:
return _event;
}
}
set
{
switch (_usage)
{
case (VoidBaseEventReferenceUsage.COLLECTION_CLEARED_EVENT):
{
_collection.Cleared = value;
break;
}
case (VoidBaseEventReferenceUsage.LIST_CLEARED_EVENT):
{
_list.Cleared = value;
break;
}
case (VoidBaseEventReferenceUsage.COLLECTION_INSTANCER_CLEARED_EVENT):
{
_collectionInstancer.Cleared = value;
break;
}
case (VoidBaseEventReferenceUsage.LIST_INSTANCER_CLEARED_EVENT):
{
_listInstancer.Cleared = value;
break;
}
case (VoidBaseEventReferenceUsage.EVENT):
{
_event = value;
break;
}
default:
throw new NotSupportedException($"Event not reassignable for usage {_usage}.");
}
}
}
///
/// Collection used if `Usage` is set to `COLLECTION_CLEARED_EVENT`.
///
[SerializeField]
private AtomCollection _collection = default(AtomCollection);
///
/// List used if `Usage` is set to `LIST_CLEARED_EVENT`.
///
[SerializeField]
private AtomList _list = default(AtomList);
///
/// Collection Instancer used if `Usage` is set to `COLLECTION_INSTANCER_CLEARED_EVENT`.
///
[SerializeField]
private AtomCollectionInstancer _collectionInstancer = default(AtomCollectionInstancer);
///
/// List Instancer used if `Usage` is set to `LIST_INSTANCER_CLEARED_EVENT`.
///
[SerializeField]
private AtomListInstancer _listInstancer = default(AtomListInstancer);
<%ENDIF%>
}
}