|
@@ -1,6 +1,4 @@
|
|
|
using System;
|
|
using System;
|
|
|
-using System.Collections.Generic;
|
|
|
|
|
-using System.Runtime.InteropServices;
|
|
|
|
|
|
|
|
|
|
namespace AtomicEngine
|
|
namespace AtomicEngine
|
|
|
{
|
|
{
|
|
@@ -15,51 +13,114 @@ namespace AtomicEngine
|
|
|
if (type.IsSubclassOf(typeof(CSComponent)))
|
|
if (type.IsSubclassOf(typeof(CSComponent)))
|
|
|
{
|
|
{
|
|
|
Component component = (Component)Activator.CreateInstance(type);
|
|
Component component = (Component)Activator.CreateInstance(type);
|
|
|
- CSComponentCore.RegisterInstance((CSComponent) component);
|
|
|
|
|
|
|
+ CSComponentCore.RegisterInstance((CSComponent)component);
|
|
|
AddComponent(component, id, mode);
|
|
AddComponent(component, id, mode);
|
|
|
- return (T) component;
|
|
|
|
|
|
|
+ return (T)component;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- return (T) CreateComponent(type.Name, mode, id);
|
|
|
|
|
|
|
+ return (T)CreateComponent(type.Name, mode, id);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- public void GetChildrenWithComponent<T>(Vector<Node> dest, bool recursive = false)
|
|
|
|
|
- {
|
|
|
|
|
- var type = typeof(T);
|
|
|
|
|
|
|
+ public void GetChildrenWithComponent<T>(Vector<Node> dest, bool recursive = false)
|
|
|
|
|
+ {
|
|
|
|
|
+ var type = typeof(T);
|
|
|
|
|
+
|
|
|
|
|
+ // If we're a CSComponent, get "CSComponents" native side and filter here
|
|
|
|
|
+ if (type.IsSubclassOf(typeof(CSComponent)))
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector<Node> temp = new Vector<Node>();
|
|
|
|
|
|
|
|
- // If we're a CSComponent, get "CSComponents" native side and filter here
|
|
|
|
|
- if (type.IsSubclassOf(typeof(CSComponent)))
|
|
|
|
|
- {
|
|
|
|
|
- Vector<Node> temp = new Vector<Node>();
|
|
|
|
|
|
|
+ GetChildrenWithComponent(temp, "CSComponent", recursive);
|
|
|
|
|
|
|
|
- GetChildrenWithComponent(temp, "CSComponent", recursive);
|
|
|
|
|
|
|
+ // filter based on actual type
|
|
|
|
|
|
|
|
- // filter based on actual type
|
|
|
|
|
|
|
+ for (uint i = 0; i < temp.Size; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ var node = temp[i];
|
|
|
|
|
|
|
|
- for (uint i = 0; i < temp.Size; i++)
|
|
|
|
|
- {
|
|
|
|
|
- var node = temp[i];
|
|
|
|
|
|
|
+ Vector<Component> components = new Vector<Component>();
|
|
|
|
|
+
|
|
|
|
|
+ node.GetComponents(components, "Component", false);
|
|
|
|
|
+
|
|
|
|
|
+ for (uint j = 0; j < components.Size; j++)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (components[j].GetType() == type)
|
|
|
|
|
+ {
|
|
|
|
|
+ dest.Push(node);
|
|
|
|
|
+ break;
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ return;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- Vector<Component> components = new Vector<Component>();
|
|
|
|
|
|
|
+ GetChildrenWithComponent(dest, type.Name, recursive);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public T GetComponent<T>(bool recursive = false) where T : Component
|
|
|
|
|
+ {
|
|
|
|
|
+ return (T)GetComponent(typeof(T).Name, recursive);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public void GetComponents<T>(Vector<T> dest, bool recursive = false) where T : Component
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector<Component> components = new Vector<Component>();
|
|
|
|
|
+ GetComponents(components, typeof(T).Name, recursive);
|
|
|
|
|
+ for (int i = 0; i < components.Size; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ dest.Push((T)components[i]);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- node.GetComponents(components, "Component", false);
|
|
|
|
|
|
|
+ public void GetDerivedComponents<T>(Vector<T> dest, bool recursive = false) where T : Component
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector<Component> components = new Vector<Component>();
|
|
|
|
|
+ GetComponents(components, recursive);
|
|
|
|
|
+ for (int i = 0; i < components.Size; ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ T t = components[i] as T;
|
|
|
|
|
+ if (t != null)
|
|
|
|
|
+ dest.Push(t);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- for (uint j = 0; j < components.Size; j++)
|
|
|
|
|
- {
|
|
|
|
|
- if (components[j].GetType() == type)
|
|
|
|
|
- {
|
|
|
|
|
- dest.Push(node);
|
|
|
|
|
- break;
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ public T GetCSComponent<T>(bool recursive = false) where T : CSComponent
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector<Component> components = new Vector<Component>();
|
|
|
|
|
+ GetComponents(components, nameof(CSComponent), recursive);
|
|
|
|
|
+ for (int i = 0; i < components.Size; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (components[i].GetType() == typeof(T))
|
|
|
|
|
+ return (T) components[i];
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- return;
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ return null;
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
- GetChildrenWithComponent(dest, type.Name, recursive);
|
|
|
|
|
- }
|
|
|
|
|
|
|
+ public void GetCSComponents<T>(Vector<T> dest, bool recursive = false) where T : CSComponent
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector<Component> components = new Vector<Component>();
|
|
|
|
|
+ GetComponents(components, nameof(CSComponent), recursive);
|
|
|
|
|
+ for (int i = 0; i < components.Size; i++)
|
|
|
|
|
+ {
|
|
|
|
|
+ Component component = components[i];
|
|
|
|
|
+ if (component.GetType() == typeof(T))
|
|
|
|
|
+ dest.Push((T)component);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
|
|
|
|
|
|
|
+ public void GetDerivedCSComponents<T>(Vector<T> dest, bool recursive = false) where T : CSComponent
|
|
|
|
|
+ {
|
|
|
|
|
+ Vector<Component> components = new Vector<Component>();
|
|
|
|
|
+ GetComponents(components, nameof(CSComponent), recursive);
|
|
|
|
|
+ for (int i = 0; i < components.Size; ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ T t = components[i] as T;
|
|
|
|
|
+ if (t != null)
|
|
|
|
|
+ dest.Push(t);
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
}
|
|
}
|