Example #1
0
        private static void _server_Started()
        {
            var world           = new World();
            var commandRecorder = new EntityCommandRecorder();

            var scene = new Scene("Server", world, commandRecorder);

            var networkedEntities = new NetworkedEntities(world);
            var physicsSystem     = new PhysicsSystem();

            var editors = new List <IEditor>()
            {
                //new EditorConsole(_client.Scene),
                new SelectedEntitySystem(world),
                new EntityInspector(world),
                new EntityList(world),
                new SystemList(scene),
                new AverageMetricValue(),
                new MetricGraph()
            };

            _editorMenu.AddEditorSet("Server", editors);
            scene.AddSystems(editors);

            var parallelRunner = new DefaultParallelRunner(4);

            var serverSystem = new ServerSystem(world, _messageTargetMap);

            serverSystem.AddListener(new TransformMessageApplier(networkedEntities));
            serverSystem.AddListener(new InputForceApplier(physicsSystem, world));
            serverSystem.AddListener(new SimpleCameraMover(physicsSystem, networkedEntities));
            serverSystem.AddListener(new VoxelEditReceiver(physicsSystem));
            serverSystem.AddListener(new VoxelSpaceLoadReciever(world));

            scene.AddSystem(serverSystem);

            var voxelTypes = LoadVoxelTypes();

            var worldVoxelSpace = world.CreateEntity();

            worldVoxelSpace.Set(new NetworkedEntity()
            {
                Id = Guid.NewGuid()
            });
            worldVoxelSpace.Set(new Transform(worldVoxelSpace));
            worldVoxelSpace.Set(new VoxelSpace(32, 1, worldVoxelSpace));
            worldVoxelSpace.Set(new EntityMetaData()
            {
                Name = "Voxel Space"
            });

            scene.AddSystem(new WorldSpaceLoader((e) => { }, world, worldVoxelSpace, 4, 3, 32));
            scene.AddSystem(new ChunkGeneratorSystem(commandRecorder, parallelRunner, new ChunkGenerator(), world));

            scene.AddSystem(new VoxelSpaceExpanderSystem((e) => { }, world));

            scene.AddSystem(new PhysicsBlockFinder(world, parallelRunner));

            scene.AddSystem(new VoxelSpaceChangePropogator(world));
            scene.AddSystem(new VoxelStaticBodyGenerator(physicsSystem, world));
            scene.AddSystem(new VoxelSpaceDynamicBodyGenerator(physicsSystem, world));
            scene.AddSystem(physicsSystem);
            scene.AddSystem(new DynamicBodyPositionSync(world));

            scene.AddSystem(new CharacterInputSystem(physicsSystem, world));

            scene.AddSystem(new EntityRemovalSync(world));
            scene.AddSystem(new ClientEntityAssignmentSystem());
            scene.AddSystem(new TransformChangeServerSystem(world));
            scene.AddSystem(new VoxelSpaceAddedServerSystem(world));
            scene.AddSystem(new VoxelGridExistenceServerSystem(world));
            scene.AddSystem(new VoxelGridChangeServerSystem(world));
            scene.AddSystem(new ComponentSyncServerSystem <EntityMetaData>(world));

            scene.AddSystem(new FlagClearingSystem <NeighbourMemberChanged>(world));

            _server.SetScene(scene);
        }