コード例 #1
0
        public IManagerHandler Find(Type behaviourType, IBehaviourManager manager = null)
        {
            var behaviour = typeof(Behaviour);

            while (behaviour.IsAssignableFrom(behaviourType))
            {
                IManagerHandler handler = null;
                if (TryGetByBehaviour(behaviourType, out handler) && (manager == null || handler.Manager == manager))
                {
                    return(handler);
                }

                behaviourType = behaviourType.BaseType;
            }

            return(null);
        }
コード例 #2
0
        public void Add(IBehaviourManager manager)
        {
            var managerType = manager.GetType();

            managers.Add(manager);
            byType[managerType] = manager;

            foreach (var type in manager.GetManagedTypes())
            {
                IManagerHandler handler = null;
                if (!byBehaviour.TryGetValue(type, out handler))
                {
                    var handlerType = typeof(ManagerHandler <>).MakeGenericType(type);
                    handler           = Activator.CreateInstance(handlerType) as IManagerHandler;
                    byBehaviour[type] = handler;
                }

                handler.Manager = manager;
            }

            CatagoriseManager(manager);
        }
コード例 #3
0
ファイル: Behaviour.cs プロジェクト: martindevans/Myre
            public ManagerBinding(IManagerHandler handler, Type managedAs)
            {
                Contract.Requires(handler != null);
                Contract.Requires(managedAs != null);

                _handler = handler;
                _managedAs = managedAs;
            }
コード例 #4
0
 public bool TryGetByBehaviour(Type behaviourType, out IManagerHandler manager)
 {
     return(byBehaviour.TryGetValue(behaviourType, out manager));
 }