Browse Source

EntitySystem folder renamed to ECS

Ticker and Observer become part of the ECS framework
Add support for Unity 4
tags/Rel1
SEB-NEW-PC\SEB-NEW 9 years ago
parent
commit
39555624c3
37 changed files with 386 additions and 42 deletions
  1. +0
    -9
      Context/Legacy.meta
  2. +5
    -0
      ECS.meta
  3. +5
    -0
      ECS/Engine.meta
  4. +0
    -0
      ECS/Engine/IEngine.cs
  5. +8
    -0
      ECS/Engine/IEngine.cs.meta
  6. +0
    -0
      ECS/EnginesRoot.cs
  7. +8
    -0
      ECS/EnginesRoot.cs.meta
  8. +0
    -0
      ECS/IEnginesRoot.cs
  9. +1
    -1
      ECS/IEnginesRoot.cs.meta
  10. +0
    -4
      ECS/Node.meta
  11. +0
    -0
      ECS/Node/INode.cs
  12. +8
    -0
      ECS/Node/INode.cs.meta
  13. +0
    -0
      ECS/Node/INodeHolder.cs
  14. +8
    -0
      ECS/Node/INodeHolder.cs.meta
  15. +0
    -4
      ECS/Unity.meta
  16. +0
    -0
      ECS/Unity/UnityNodeHolder.cs
  17. +0
    -4
      ECS/Unity/UnityNodeHolder.cs.meta
  18. +26
    -1
      ECS/UnityEnginesRoot.cs
  19. +8
    -0
      ECS/UnityEnginesRoot.cs.meta
  20. +0
    -9
      EntitySystem.meta
  21. +0
    -2
      EntitySystem/Engine.meta
  22. +5
    -0
      Observer.meta
  23. +21
    -0
      Observer/Observable.cs
  24. +2
    -2
      Observer/Observable.cs.meta
  25. +58
    -0
      Observer/Observer.cs
  26. +2
    -2
      Observer/Observer.cs.meta
  27. +5
    -0
      Ticker.meta
  28. +26
    -0
      Ticker/ITickable.cs
  29. +1
    -1
      Ticker/ITickable.cs.meta
  30. +12
    -0
      Ticker/ITicker.cs
  31. +1
    -1
      Ticker/ITicker.cs.meta
  32. +15
    -0
      Ticker/IntervaledTickAttribute.cs
  33. +2
    -2
      Ticker/IntervaledTickAttribute.cs.meta
  34. +89
    -0
      Ticker/TickBehaviour.cs
  35. +7
    -0
      Ticker/TickBehaviour.cs.meta
  36. +56
    -0
      Ticker/UnityTicker.cs
  37. +7
    -0
      Ticker/UnityTicker.cs.meta

+ 0
- 9
Context/Legacy.meta View File

@@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 026077faae4dc884ebe1eb4b427ed1e4
folderAsset: yes
timeCreated: 1434754873
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

+ 5
- 0
ECS.meta View File

@@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 5015ea56c030d6542bd4daa46f59e549
folderAsset: yes
DefaultImporter:
userData:

+ 5
- 0
ECS/Engine.meta View File

@@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: b1f3314cac8b8484f965651234415ca8
folderAsset: yes
DefaultImporter:
userData:

EntitySystem/Engine/IEngine.cs → ECS/Engine/IEngine.cs View File


+ 8
- 0
ECS/Engine/IEngine.cs.meta View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 26f6a5fa5638d86448dd3f2d11d62f5c
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

EntitySystem/EnginesRoot.cs → ECS/EnginesRoot.cs View File


+ 8
- 0
ECS/EnginesRoot.cs.meta View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 89361a8514a38544ebb87df0bd766dc5
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

EntitySystem/IEnginesRoot.cs → ECS/IEnginesRoot.cs View File


EntitySystem/IEnginesRoot.cs.meta → ECS/IEnginesRoot.cs.meta View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 2253f20f6b4d9b14eb0e79fbd135eff1
guid: b0078c1edf75425478b89366d5fe3bae
MonoImporter:
serializedVersion: 2
defaultReferences: []

EntitySystem/Node.meta → ECS/Node.meta View File

@@ -1,9 +1,5 @@
fileFormatVersion: 2
guid: 8e3c19ee9185a664aa837e567c4db122
folderAsset: yes
timeCreated: 1434900315
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

EntitySystem/Node/INode.cs → ECS/Node/INode.cs View File


+ 8
- 0
ECS/Node/INode.cs.meta View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: fc6bea8c56bd7284693db26502c6b65b
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

EntitySystem/Node/INodeHolder.cs → ECS/Node/INodeHolder.cs View File


+ 8
- 0
ECS/Node/INodeHolder.cs.meta View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: a4c0061442f32644cb1e434b6544d56c
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

EntitySystem/Unity.meta → ECS/Unity.meta View File

@@ -1,9 +1,5 @@
fileFormatVersion: 2
guid: e369cc976007e884d92f906e4d1054d7
folderAsset: yes
timeCreated: 1438460466
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

EntitySystem/Unity/UnityNodeHolder.cs → ECS/Unity/UnityNodeHolder.cs View File


EntitySystem/Unity/UnityNodeHolder.cs.meta → ECS/Unity/UnityNodeHolder.cs.meta View File

@@ -1,12 +1,8 @@
fileFormatVersion: 2
guid: 50ed7d1adb836dd4786fef832cb4e808
timeCreated: 1438011258
licenseType: Pro
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:
assetBundleName:
assetBundleVariant:

EntitySystem/UnityEnginesRoot.cs → ECS/UnityEnginesRoot.cs View File

@@ -21,18 +21,43 @@ namespace Svelto.ES

public void AddGameObjectEntity(GameObject entity)
{
#if UNITY_5_0
INodeHolder[] nodeHolders = entity.GetComponents<INodeHolder>();
for (int i = 0; i < nodeHolders.Length; i++)
nodeHolders[i].engineRoot = this;
#else
MonoBehaviour[] nodeHolders = entity.GetComponents<MonoBehaviour>();

for (int i = 0; i < nodeHolders.Length; i++)
{
var nodeHolder = nodeHolders[i];
if (nodeHolder is INodeHolder)
(nodeHolders[i] as INodeHolder).engineRoot = this;
}
#endif
}

public void RemoveGameObjectEntity(GameObject entity)
{
#if UNITY_5_0
INodeHolder[] nodeHolders = entity.GetComponents<INodeHolder>();

for (int i = 0; i < nodeHolders.Length; i++)
Remove(nodeHolders[i].node);
#else
MonoBehaviour[] nodeHolders = entity.GetComponents<MonoBehaviour>();

for (int i = 0; i < nodeHolders.Length; i++)
{
var nodeHolder = nodeHolders[i];
if (nodeHolder is INodeHolder)
Remove((nodeHolder as INodeHolder).node);
}
#endif
}

EnginesRoot _engineRoot = new EnginesRoot();

+ 8
- 0
ECS/UnityEnginesRoot.cs.meta View File

@@ -0,0 +1,8 @@
fileFormatVersion: 2
guid: 6e4e1cde52e768148a0aaf8effbb9ba3
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
userData:

+ 0
- 9
EntitySystem.meta View File

@@ -1,9 +0,0 @@
fileFormatVersion: 2
guid: 8c3236edfa0d4cb43afb277ef6aea664
folderAsset: yes
timeCreated: 1431201025
licenseType: Free
DefaultImporter:
userData:
assetBundleName:
assetBundleVariant:

+ 0
- 2
EntitySystem/Engine.meta View File

@@ -1,2 +0,0 @@
fileFormatVersion: 2
guid: 89495a852d57f3d4893d89a74065ee39

+ 5
- 0
Observer.meta View File

@@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 48e872bc336b396409c9316cdbfc045a
folderAsset: yes
DefaultImporter:
userData:

+ 21
- 0
Observer/Observable.cs View File

@@ -0,0 +1,21 @@
using System;

namespace Svelto.Observer
{
public interface IObservable<DispatchType>
{
event Action<DispatchType> Notify;

void Dispatch(DispatchType parameter);
}

public class Observable<DispatchType>:IObservable<DispatchType>
{
public event Action<DispatchType> Notify;

public void Dispatch(DispatchType parameter)
{
Notify(parameter);
}
}
}

EntitySystem/UnityEnginesRoot.cs.meta → Observer/Observable.cs.meta View File

@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: 6e4e1cde52e768148a0aaf8effbb9ba3
timeCreated: 1439726868
guid: c2a9f8efc13196f40bdc41e36e9f78fb
timeCreated: 1440356670
licenseType: Free
MonoImporter:
serializedVersion: 2

+ 58
- 0
Observer/Observer.cs View File

@@ -0,0 +1,58 @@
using System;

namespace Svelto.Observer
{
public abstract class Observer<DispatchType, ActionType>: IObserver<ActionType>
{
public Observer(Observable<DispatchType> observable)
{
observable.Notify += OnObservableDispatched;

_unsubscribe = () => observable.Notify -= OnObservableDispatched;
}

public void AddAction(Action<ActionType> action)
{
_actions += action;
}

public void RemoveAction(Action<ActionType> action)
{
_actions += action;
}

public void Unsubscribe()
{
_unsubscribe();
}

private void OnObservableDispatched(DispatchType dispatchNotification)
{
_actions(TypeMap(dispatchNotification));
}

abstract protected ActionType TypeMap(DispatchType dispatchNotification);

Action<ActionType> _actions;
Action _unsubscribe;
}

public class Observer<DispatchType>: Observer<DispatchType, DispatchType>
{
public Observer(Observable<DispatchType> observable):base(observable)
{}

protected override DispatchType TypeMap(DispatchType dispatchNotification)
{
return dispatchNotification;
}
}

public interface IObserver<WatchingType>
{
void AddAction(Action<WatchingType> action);
void RemoveAction(Action<WatchingType> action);

void Unsubscribe();
}
}

EntitySystem/Node/INode.cs.meta → Observer/Observer.cs.meta View File

@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: fc6bea8c56bd7284693db26502c6b65b
timeCreated: 1434900316
guid: 632ffa30ee5cc9d40af433bd31a2f57a
timeCreated: 1440352946
licenseType: Free
MonoImporter:
serializedVersion: 2

+ 5
- 0
Ticker.meta View File

@@ -0,0 +1,5 @@
fileFormatVersion: 2
guid: 86d00787627f3e643bfb37812067fbc5
folderAsset: yes
DefaultImporter:
userData:

+ 26
- 0
Ticker/ITickable.cs View File

@@ -0,0 +1,26 @@
namespace Svelto.Ticker
{
public interface ITickableBase
{
}

public interface ITickable: ITickableBase
{
void Tick(float deltaSec);
}

public interface ILateTickable : ITickableBase
{
void LateTick(float deltaSec);
}

public interface IPhysicallyTickable : ITickableBase
{
void PhysicsTick(float deltaSec);
}

public interface IIntervaledTickable : ITickableBase
{
void IntervaledTick();
}
}

EntitySystem/Engine/IEngine.cs.meta → Ticker/ITickable.cs.meta View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 0b5d886dff6d02148ab73bdb3f0ca4f7
guid: b9ebca86eb6d1f64ba93813b675c4f88
MonoImporter:
serializedVersion: 2
defaultReferences: []

+ 12
- 0
Ticker/ITicker.cs View File

@@ -0,0 +1,12 @@
using System;

namespace Svelto.Ticker
{
public interface ITicker
{
void Add(ITickableBase tickable);
void Remove(ITickableBase tickable);
}
}



EntitySystem/EnginesRoot.cs.meta → Ticker/ITicker.cs.meta View File

@@ -1,5 +1,5 @@
fileFormatVersion: 2
guid: 93350fd2ba4f60f4f88599169e8d31cb
guid: 5a726e8ced6bca340b272e7bd64ebcad
MonoImporter:
serializedVersion: 2
defaultReferences: []

+ 15
- 0
Ticker/IntervaledTickAttribute.cs View File

@@ -0,0 +1,15 @@
using System;

namespace Svelto.Ticker
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
internal class IntervaledTickAttribute : Attribute
{
public float interval;

public IntervaledTickAttribute(float intervalTime)
{
interval = intervalTime;
}
}
}

EntitySystem/Node/INodeHolder.cs.meta → Ticker/IntervaledTickAttribute.cs.meta View File

@@ -1,6 +1,6 @@
fileFormatVersion: 2
guid: a4c0061442f32644cb1e434b6544d56c
timeCreated: 1434900315
guid: fe6689309725deb4f975fb62e1e061e4
timeCreated: 1435431616
licenseType: Free
MonoImporter:
serializedVersion: 2

+ 89
- 0
Ticker/TickBehaviour.cs View File

@@ -0,0 +1,89 @@
using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;

namespace Svelto.Ticker
{
public class TickBehaviour:MonoBehaviour
{
internal void Add(ITickable tickable)
{
_ticked.Add(tickable);
}
internal void Remove(ITickable tickable)
{
_ticked.Remove(tickable);
}

internal void AddPhysic(IPhysicallyTickable tickable)
{
_physicallyTicked.Add(tickable);
}

internal void RemovePhysic(IPhysicallyTickable tickable)
{
_physicallyTicked.Remove(tickable);
}

internal void AddLate(ILateTickable tickable)
{
_lateTicked.Add(tickable);
}

internal void RemoveLate(ILateTickable tickable)
{
_lateTicked.Remove(tickable);
}

internal void AddIntervaled(IIntervaledTickable tickable)
{
var methodInfo = ((Action)tickable.IntervaledTick).Method;
object[] attrs = methodInfo.GetCustomAttributes(typeof(IntervaledTickAttribute), true);

IEnumerator intervaledTick = IntervaledUpdate(tickable, (attrs[0] as IntervaledTickAttribute).interval);

_intervalledTicked[tickable] = intervaledTick;

StartCoroutine(intervaledTick);
}

internal void RemoveIntervaled(IIntervaledTickable tickable)
{
IEnumerator enumerator;

if (_intervalledTicked.TryGetValue(tickable, out enumerator))
{
StopCoroutine(enumerator);
_intervalledTicked.Remove(tickable);
}
}

void Update()
{
for (int i = _ticked.Count - 1; i >= 0; --i)
_ticked[i].Tick(Time.deltaTime);
}
void LateUpdate()
{
for (int i = _lateTicked.Count - 1; i >= 0; --i)
_lateTicked[i].LateTick(Time.deltaTime);
}
void FixedUpdate()
{
for (int i = _physicallyTicked.Count - 1; i >= 0; --i)
_physicallyTicked[i].PhysicsTick(Time.deltaTime);
}
IEnumerator IntervaledUpdate(IIntervaledTickable tickable, float seconds)
{
while (true) { DateTime next = DateTime.UtcNow.AddSeconds(seconds); while (DateTime.UtcNow < next) yield return null; tickable.IntervaledTick(); }
}

private List<ITickable> _ticked = new List<ITickable>();
private List<ILateTickable> _lateTicked = new List<ILateTickable>();
private List<IPhysicallyTickable> _physicallyTicked = new List<IPhysicallyTickable>();
private Dictionary<IIntervaledTickable, IEnumerator> _intervalledTicked = new Dictionary<IIntervaledTickable, IEnumerator>();
}
}

+ 7
- 0
Ticker/TickBehaviour.cs.meta View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: b522dd9c9c9c5a941a49ff6a52222824
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}

+ 56
- 0
Ticker/UnityTicker.cs View File

@@ -0,0 +1,56 @@
using UnityEngine;

namespace Svelto.Ticker
{
internal class UnityTicker: ITicker
{
public UnityTicker()
{
_ticker = GameObject.FindObjectOfType<TickBehaviour>();

if (_ticker == null)
{
GameObject go = new GameObject("SveltoTicker");
_ticker = go.AddComponent<TickBehaviour>();
}
}
public void Add(ITickableBase tickable)
{
if (tickable is ITickable)
_ticker.Add(tickable as ITickable);

if (tickable is IPhysicallyTickable)
_ticker.AddPhysic(tickable as IPhysicallyTickable);

if (tickable is ILateTickable)
_ticker.AddLate(tickable as ILateTickable);

if (tickable is IIntervaledTickable)
_ticker.AddIntervaled(tickable as IIntervaledTickable);
}
public void Remove(ITickableBase tickable)
{
if (tickable is ITickable)
_ticker.Remove(tickable as ITickable);

if (tickable is IPhysicallyTickable)
_ticker.RemovePhysic(tickable as IPhysicallyTickable);

if (tickable is ILateTickable)
_ticker.RemoveLate(tickable as ILateTickable);

if (tickable is IIntervaledTickable)
_ticker.RemoveIntervaled(tickable as IIntervaledTickable);
}

private TickBehaviour _ticker;
}
}




+ 7
- 0
Ticker/UnityTicker.cs.meta View File

@@ -0,0 +1,7 @@
fileFormatVersion: 2
guid: 8972f22f09349484b8537133b3905062
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}

Loading…
Cancel
Save