Пример #1
0
        private Graph CreateGraph(IWorldBase world)
        {
            if (world == null)
            {
                return(null);
            }

            var systems = WorldHelper.GetSystems(world);
            var modules = WorldHelper.GetModules(world);

            var graph = new Graph(this.checkpointCollector);

            graph.worldGraph = this;

            var rootNode = graph.AddNode(new WorldNode(world));
            var modulesVisualContainer = graph.AddNode(rootNode, new ModulesVisualContainer(this.CreateSubGraph <ModuleVisualNode>(modules, "Update", WorldStep.VisualTick)), modules);

            var beginTick             = graph.AddNode(modulesVisualContainer, new BeginTickNode(null), "Simulate");
            var modulesLogicContainer = graph.AddNode(beginTick, new ModulesLogicContainer(this.CreateSubGraph <ModuleLogicNode>(modules, "AdvanceTick", WorldStep.LogicTick)), modules);
            var pluginsLogicContainer = graph.AddNode(modulesLogicContainer, new PluginsLogicContainer(null), "PlayPluginsForTick");
            var systemsLogicContainer = graph.AddNode(pluginsLogicContainer, new SystemsLogicContainer(this.CreateSubGraph <SystemLogicNode>(systems, "AdvanceTick", WorldStep.LogicTick)), systems);
            var removeOnceComponents  = graph.AddNode(systemsLogicContainer, new RemoveOnceComponentsNode(null), "RemoveComponentsOnce");
            var endTick = graph.AddNode(removeOnceComponents, new EndTickNode(null));

            var pluginsLogicSimulateContainer = graph.AddNode(endTick, new PluginsLogicSimulateContainer(null), "SimulatePluginsForTicks");
            var systemsVisualContainer        = graph.AddNode(pluginsLogicSimulateContainer, new SystemsVisualContainer(this.CreateSubGraph <SystemVisualNode>(systems, "Update", WorldStep.VisualTick)), systems);

            graph.AddNode(systemsVisualContainer, new RemoveMarkersNode(null), "RemoveMarkers");

            return(graph);
        }
Пример #2
0
        private Graph CreateGraph(World world)
        {
            if (world == null)
            {
                return(null);
            }

            var systems = WorldHelper.GetSystems(world);
            var modules = WorldHelper.GetModules(world);

            var graph = new Graph(this.checkpointCollector);

            graph.worldGraph = this;

            var rootNode = graph.AddNode(new WorldNode(world));
            var modulesVisualContainer = graph.AddNode(rootNode, new ModulesVisualContainer(this.CreateSubGraph <ModuleVisualNode>(modules, "Update", WorldStep.VisualTick)), modules);

            var beginTick             = graph.AddNode(modulesVisualContainer, new BeginTickNode(null), "Simulate");
            var modulesLogicContainer = graph.AddNode(beginTick, new ModulesLogicContainer(this.CreateSubGraph <ModuleLogicNode>(modules, "AdvanceTick", WorldStep.LogicTick)), modules);
            var pluginsLogicContainer = graph.AddNode(modulesLogicContainer, new PluginsLogicContainer(null), "PlayPluginsForTick");

            Node systemsLogicContainer = pluginsLogicContainer;

            for (int i = 0; i < systems.Length; ++i)
            {
                var group = systems.arr[i];
                if (group.runtimeSystem.allSystems == null || group.runtimeSystem.allSystems.Count == 0)
                {
                    continue;
                }
                systemsLogicContainer = graph.AddNode(systemsLogicContainer, new SystemsLogicContainer(group.name, this.CreateSubGraph <SystemLogicNode>(group.runtimeSystem.allSystems, "AdvanceTick", WorldStep.LogicTick)), group.runtimeSystem.allSystems);
            }
            var endTick = graph.AddNode(systemsLogicContainer, new EndTickNode(null));

            var  pluginsLogicSimulateContainer = graph.AddNode(endTick, new PluginsLogicSimulateContainer(null), "SimulatePluginsForTicks");
            Node systemsVisualContainer        = pluginsLogicSimulateContainer;

            for (int i = 0; i < systems.Length; ++i)
            {
                var group = systems.arr[i];
                if (group.runtimeSystem.allSystems == null || group.runtimeSystem.allSystems.Count == 0)
                {
                    continue;
                }
                systemsVisualContainer = graph.AddNode(systemsVisualContainer, new SystemsVisualContainer(group.name, this.CreateSubGraph <SystemVisualNode>(group.runtimeSystem.allSystems, "Update", WorldStep.VisualTick)), group.runtimeSystem.allSystems);
            }

            graph.AddNode(systemsVisualContainer, new RemoveMarkersNode(null), "RemoveMarkers");

            return(graph);
        }
Пример #3
0
        private Graph CreateSubGraph <T>(IEnumerable list, string methodName, WorldStep step) where T : Node
        {
            var innerGraph = new Graph(this.checkpointCollector);

            innerGraph.worldGraph = this;
            innerGraph.vertical   = true;
            var enter    = innerGraph.AddNode(new SubmoduleEnterNode(null));
            var lastNode = enter;

            foreach (var item in list)
            {
                if (WorldHelper.HasMethod(item, methodName) == true)
                {
                    lastNode = innerGraph.AddNode(lastNode, (T)System.Activator.CreateInstance(typeof(T), item), item, step);
                }
            }
            innerGraph.AddNode(lastNode, new SubmoduleExitNode(lastNode));
            return(innerGraph);
        }
Пример #4
0
        private Graph CreateSubGraph <T>(ME.ECS.Collections.IBufferArray list, string methodName, WorldStep step) where T : Node
        {
            var innerGraph = new Graph(this.checkpointCollector);

            innerGraph.worldGraph = this;
            innerGraph.vertical   = true;
            var enter    = innerGraph.AddNode(new SubmoduleEnterNode(null));
            var lastNode = enter;
            var arr      = list.GetArray();

            for (int i = 0; i < list.Count; ++i)
            {
                var item = arr.GetValue(i);
                if (WorldHelper.HasMethod(item, methodName) == true)
                {
                    lastNode = innerGraph.AddNode(lastNode, (T)System.Activator.CreateInstance(typeof(T), item), item, step);
                }
            }
            innerGraph.AddNode(lastNode, new SubmoduleExitNode(lastNode));
            return(innerGraph);
        }
Пример #5
0
 public bool HasMethod(object instance, string methodName)
 {
     return(WorldHelper.HasMethod(instance, methodName));
 }
Пример #6
0
 public IList <ME.ECS.IModuleBase> GetModules()
 {
     return(WorldHelper.GetModules(this.world));
 }
Пример #7
0
 public IList <ME.ECS.ISystemBase> GetSystems()
 {
     return(WorldHelper.GetSystems(this.world));
 }
Пример #8
0
            /*public Dictionary<int, ME.ECS.IComponentsBase> GetComponentsStorage() {
             *
             *  return WorldHelper.GetComponentsStorage(this.world);
             *
             * }*/

            public IList[] GetEntitiesStorage()
            {
                return(WorldHelper.GetEntitiesStorage(this.world));
            }
Пример #9
0
 public FiltersStorage GetFilters()
 {
     return(WorldHelper.GetFilters(this.world));
 }
Пример #10
0
 public ME.ECS.Collections.ListCopyable <ME.ECS.IModuleBase> GetModules()
 {
     return(WorldHelper.GetModules(this.world));
 }
Пример #11
0
 public ME.ECS.Collections.BufferArray <SystemGroup> GetSystems()
 {
     return(WorldHelper.GetSystems(this.world));
 }
Пример #12
0
 public IStructComponentsContainer GetStructComponentsStorage()
 {
     return(WorldHelper.GetStructComponentsStorage(this.world));
 }
Пример #13
0
 public ME.ECS.FiltersArchetype.FiltersArchetypeStorage GetEntitiesStorage()
 {
     return(WorldHelper.GetEntitiesStorage(this.world));
 }