Пример #1
0
 public void BroadcastMessage <TId, TArg>(TId identifier, TArg argument, HierarchyScopes scope)
 {
     for (int i = Count - 1; i >= 0; i--)
     {
         entities[i].SendMessage(identifier, argument, scope);
     }
 }
Пример #2
0
        public IList <IComponent> GetAll(Type componentType, HierarchyScopes scope)
        {
            if (scope == HierarchyScopes.Self)
            {
                return(GetAll(componentType));
            }

            var components = new List <IComponent>();

            GetAll(components, componentType, scope);

            return(components);
        }
Пример #3
0
        public IList <T> GetAll <T>(HierarchyScopes scope) where T : class, IComponent
        {
            if (scope == HierarchyScopes.Self)
            {
                return(GetAll <T>());
            }

            var components = new List <T>();

            GetAll(components, scope);

            return(components);
        }
Пример #4
0
        public T Get <T>(HierarchyScopes scope) where T : class, IComponent
        {
            T component;

            // Must be before Hierarchy.
            if (scope.Contains(HierarchyScopes.Root) && Root.TryGet(out component))
            {
                return(component);
            }

            // Must return if scope is Hierarchy to prevent duplicated work.
            if (scope.Contains(HierarchyScopes.Hierarchy))
            {
                return(Root.Get <T>(HierarchyScopes.Descendants));
            }

            // Should be before Siblings, Children, Descendants, Parent and Ancestors for fastest resolution.
            if (scope.Contains(HierarchyScopes.Self) && TryGet(out component))
            {
                return(component);
            }

            if (scope.Contains(HierarchyScopes.Siblings) && parent != null && parent.Children.Count > 0)
            {
                for (int i = 0; i < parent.Children.Count; i++)
                {
                    var child = parent.Children[i];

                    if (child != this && child.TryGet(out component, HierarchyScopes.Self))
                    {
                        return(component);
                    }
                }
            }

            // Must be before Descendants.
            if (scope.Contains(HierarchyScopes.Children) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    if (children[i].TryGet(out component, HierarchyScopes.Self))
                    {
                        return(component);
                    }
                }
            }

            if (scope.Contains(HierarchyScopes.Descendants) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    if (children[i].TryGet(out component, HierarchyScopes.Descendants))
                    {
                        return(component);
                    }
                }
            }

            // Must be before Ancestors.
            if (scope.Contains(HierarchyScopes.Parent) && parent != null)
            {
                if (parent.TryGet(out component, HierarchyScopes.Self))
                {
                    return(component);
                }
            }

            if (scope.Contains(HierarchyScopes.Ancestors) && parent != null)
            {
                if (parent.TryGet(out component, HierarchyScopes.Ancestors))
                {
                    return(component);
                }
            }

            return(null);
        }
Пример #5
0
        public bool Has(IComponent component, HierarchyScopes scope)
        {
            Assert.IsNotNull(component);

            // Must be before Hierarchy.
            if (scope.Contains(HierarchyScopes.Root) && Root.Has(component))
            {
                return(true);
            }

            // Must return if scope is Hierarchy to prevent duplicated work.
            if (scope.Contains(HierarchyScopes.Hierarchy))
            {
                return(Root.Has(component, HierarchyScopes.Descendants));
            }

            // Should be before Siblings, Children, Descendants, Parent and Ancestors for fastest resolution.
            if (scope.Contains(HierarchyScopes.Self) && Has(component))
            {
                return(true);
            }

            if (scope.Contains(HierarchyScopes.Siblings) && parent != null && parent.Children.Count > 0)
            {
                for (int i = 0; i < parent.Children.Count; i++)
                {
                    var child = parent.Children[i];

                    if (child != this && child.Has(component, HierarchyScopes.Self))
                    {
                        return(true);
                    }
                }
            }

            // Must be before Descendants.
            if (scope.Contains(HierarchyScopes.Children) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    if (children[i].Has(component, HierarchyScopes.Self))
                    {
                        return(true);
                    }
                }
            }

            if (scope.Contains(HierarchyScopes.Descendants) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    if (children[i].Has(component, HierarchyScopes.Descendants))
                    {
                        return(true);
                    }
                }
            }

            // Must be before Ancestors.
            if (scope.Contains(HierarchyScopes.Parent) && parent != null && parent.Has(component, HierarchyScopes.Self))
            {
                return(true);
            }

            if (scope.Contains(HierarchyScopes.Ancestors) && parent != null && parent.Has(component, HierarchyScopes.Ancestors))
            {
                return(true);
            }

            return(false);
        }
Пример #6
0
        public bool Has(Type componentType, HierarchyScopes scope)
        {
            Assert.IsNotNull(componentType);

            return(Get(componentType, scope) != null);
        }
Пример #7
0
 public bool Has <T>(HierarchyScopes scope) where T : class, IComponent
 {
     return(Get <T>(scope) != null);
 }
Пример #8
0
 public bool TryGet(Type componentType, out IComponent component, HierarchyScopes scope)
 {
     return((component = Get(componentType, scope)) != null);
 }
Пример #9
0
 public EntityMessage(Enum message, HierarchyScopes scope = HierarchyScopes.Self)
     : this((MessageEnum)message, scope)
 {
 }
Пример #10
0
 public EntityMessage(Enum message, HierarchyScopes scope = HierarchyScopes.Self) : this((MessageEnum)message, scope)
 {
 }
Пример #11
0
        public void SendMessage <TId, TArg>(TId identifier, TArg argument, HierarchyScopes scope)
        {
            // Must be before Hierarchy.
            if (scope.Contains(HierarchyScopes.Root))
            {
                Root.SendMessage(identifier, argument);
            }

            // Must return if scope is Hierarchy to prevent duplicated work.
            if (scope.Contains(HierarchyScopes.Hierarchy))
            {
                Root.SendMessage(identifier, argument, HierarchyScopes.Descendants);
                return;
            }

            // Should be before Siblings, Children, Descendants, Parent and Ancestors for fastest resolution.
            if (scope.Contains(HierarchyScopes.Self))
            {
                SendMessage(identifier, argument);
            }

            if (scope.Contains(HierarchyScopes.Siblings) && parent != null && parent.Children.Count > 0)
            {
                for (int i = 0; i < parent.Children.Count; i++)
                {
                    var child = parent.Children[i];

                    if (child != this)
                    {
                        child.SendMessage(identifier, argument, HierarchyScopes.Self);
                    }
                }
            }

            // Must be before Descendants.
            if (scope.Contains(HierarchyScopes.Children) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    children[i].SendMessage(identifier, argument, HierarchyScopes.Self);
                }
            }

            if (scope.Contains(HierarchyScopes.Descendants) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    children[i].SendMessage(identifier, argument, HierarchyScopes.Descendants);
                }
            }

            // Must be before Ancestors.
            if (scope.Contains(HierarchyScopes.Parent) && parent != null)
            {
                parent.SendMessage(identifier, argument, HierarchyScopes.Self);
            }

            if (scope.Contains(HierarchyScopes.Ancestors) && parent != null)
            {
                parent.SendMessage(identifier, argument, HierarchyScopes.Ancestors);
            }
        }
Пример #12
0
 public void SendMessage <TId>(TId identifier, HierarchyScopes scope)
 {
     SendMessage(identifier, (object)null, scope);
 }
Пример #13
0
 public void BroadcastMessage <TId>(TId identifier, HierarchyScopes scope)
 {
     BroadcastMessage(identifier, (object)null, scope);
 }
Пример #14
0
 public static bool Contains(this HierarchyScopes scope, HierarchyScopes other)
 {
     return((scope & other) == other);
 }
Пример #15
0
        public void GetAll(List <IComponent> components, Type componentType, HierarchyScopes scope)
        {
            Assert.IsNotNull(components);
            Assert.IsNotNull(componentType);

            // Must be before Hierarchy.
            if (scope.Contains(HierarchyScopes.Root))
            {
                components.AddRange(Root.GetAll(componentType));
            }

            // Must return if scope is Hierarchy to prevent duplicated work.
            if (scope.Contains(HierarchyScopes.Hierarchy))
            {
                Root.GetAll(components, componentType, HierarchyScopes.Descendants);
                return;
            }

            // Should be before Siblings, Children, Descendants, Parent and Ancestors for fastest resolution.
            if (scope.Contains(HierarchyScopes.Self))
            {
                components.AddRange(GetAll(componentType));
            }

            if (scope.Contains(HierarchyScopes.Siblings) && parent != null && parent.Children.Count > 0)
            {
                for (int i = 0; i < parent.Children.Count; i++)
                {
                    var child = parent.Children[i];

                    if (child != this)
                    {
                        child.GetAll(components, componentType, HierarchyScopes.Self);
                    }
                }
            }

            // Must be before Descendants.
            if (scope.Contains(HierarchyScopes.Children) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    children[i].GetAll(components, componentType, HierarchyScopes.Self);
                }
            }

            if (scope.Contains(HierarchyScopes.Descendants) && children.Count > 0)
            {
                for (int i = 0; i < children.Count; i++)
                {
                    children[i].GetAll(components, componentType, HierarchyScopes.Descendants);
                }
            }

            // Must be before Ancestors.
            if (scope.Contains(HierarchyScopes.Parent) && parent != null)
            {
                parent.GetAll(components, componentType, HierarchyScopes.Self);
            }

            if (scope.Contains(HierarchyScopes.Ancestors) && parent != null)
            {
                parent.GetAll(components, componentType, HierarchyScopes.Ancestors);
            }
        }
Пример #16
0
 public EntityMessage(MessageEnum message, HierarchyScopes scope = HierarchyScopes.Self)
 {
     Message    = message;
     this.scope = (int)scope;
 }
Пример #17
0
 public bool TryGet <T>(out T component, HierarchyScopes scope) where T : class, IComponent
 {
     return((component = Get <T>(scope)) != null);
 }
 public static bool Contains(this HierarchyScopes scope, HierarchyScopes other)
 {
     return (scope & other) == other;
 }
Пример #19
0
 public EntityMessage(MessageEnum message, HierarchyScopes scope = HierarchyScopes.Self)
 {
     Message = message;
     this.scope = (int)scope;
 }