public MultiplayerServer() { var reader = new PacketReader(); PacketReader = reader; Clients = new List<IRemoteClient>(); EnvironmentWorker = new Timer(DoEnvironment); PacketHandlers = new PacketHandler[0x100]; Worlds = new List<IWorld>(); EntityManagers = new List<IEntityManager>(); LogProviders = new List<ILogProvider>(); Scheduler = new EventScheduler(this); var blockRepository = new BlockRepository(); blockRepository.DiscoverBlockProviders(); BlockRepository = blockRepository; var itemRepository = new ItemRepository(); itemRepository.DiscoverItemProviders(); ItemRepository = itemRepository; BlockProvider.ItemRepository = ItemRepository; BlockProvider.BlockRepository = BlockRepository; var craftingRepository = new CraftingRepository(); craftingRepository.DiscoverRecipes(); CraftingRepository = craftingRepository; PendingBlockUpdates = new Queue<BlockUpdate>(); EnableClientLogging = false; QueryProtocol = new TrueCraft.QueryProtocol(this); WorldLighters = new List<WorldLighting>(); AccessConfiguration = Configuration.LoadConfiguration<AccessConfiguration>("access.yaml"); reader.RegisterCorePackets(); Handlers.PacketHandlers.RegisterHandlers(this); }
public void TestShortPropegation() { var repository = new BlockRepository(); repository.RegisterBlockProvider(new GrassBlock()); repository.RegisterBlockProvider(new DirtBlock()); repository.RegisterBlockProvider(new AirBlock()); repository.RegisterBlockProvider(new BedrockBlock()); var world = new TrueCraft.Core.World.World("TEST", new FlatlandGenerator()); world.BlockRepository = repository; var lighter = new WorldLighting(world, repository); world.GetBlockID(Coordinates3D.Zero); // Generate a chunk lighter.InitialLighting(world.GetChunk(Coordinates2D.Zero)); world.SetBlockID(new Coordinates3D(5, 3, 5), 0); // Create area that looks like so: world.SetBlockID(new Coordinates3D(5, 2, 5), 0); // x x Light goes like so: | world.SetBlockID(new Coordinates3D(5, 1, 5), 0); // x x | world.SetBlockID(new Coordinates3D(4, 1, 5), 0); // x -/ lighter.EnqueueOperation(new BoundingBox(new Vector3(5, 2, 5), new Vector3(6, 4, 6)), true); while (lighter.TryLightNext()) // Test lighting { } Console.WriteLine("Testing {0}", new Coordinates3D(5, 3, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 3, 5))); Console.WriteLine("Testing {0}", new Coordinates3D(5, 2, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 2, 5))); Console.WriteLine("Testing {0}", new Coordinates3D(5, 1, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 1, 5))); Console.WriteLine("Testing {0}", new Coordinates3D(4, 1, 5)); Assert.AreEqual(14, world.GetSkyLight(new Coordinates3D(4, 1, 5))); }
private IBlockPhysicsProvider GetBlockRepository() { var repository = new BlockRepository(); repository.RegisterBlockProvider(new AirBlock()); repository.RegisterBlockProvider(new StoneBlock()); repository.RegisterBlockProvider(new GrassBlock()); repository.RegisterBlockProvider(new DirtBlock()); repository.RegisterBlockProvider(new BedrockBlock()); return repository; }
public void TestFarPropegation() { var repository = new BlockRepository(); repository.RegisterBlockProvider(new GrassBlock()); repository.RegisterBlockProvider(new DirtBlock()); repository.RegisterBlockProvider(new AirBlock()); repository.RegisterBlockProvider(new BedrockBlock()); var world = new TrueCraft.Core.World.World("TEST", new FlatlandGenerator()); world.BlockRepository = repository; var lighter = new WorldLighting(world, repository); world.GetBlockID(Coordinates3D.Zero); // Generate a chunk lighter.EnqueueOperation(new BoundingBox( new Vector3(0, 0, 0), new Vector3(16, 128, 16)), true, true); while (lighter.TryLightNext()) // Initial lighting { } world.SetBlockID(new Coordinates3D(5, 3, 5), 0); // Create area that looks like so: world.SetBlockID(new Coordinates3D(5, 2, 5), 0); // x x Light goes like so: | world.SetBlockID(new Coordinates3D(5, 1, 5), 0); // x x | world.SetBlockID(new Coordinates3D(4, 1, 5), 0); // x -/ for (int x = 0; x < 4; x++) { world.SetBlockID(new Coordinates3D(x, 1, 5), 0); // Dig a tunnel // xxxxx x ish // x x // xxxxxxx } lighter.EnqueueOperation(new BoundingBox(new Vector3(5, 2, 5), new Vector3(6, 4, 6)), true); while (lighter.TryLightNext()) // Test lighting { } Console.WriteLine("Testing {0}", new Coordinates3D(5, 3, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 3, 5))); Console.WriteLine("Testing {0}", new Coordinates3D(5, 2, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 2, 5))); Console.WriteLine("Testing {0}", new Coordinates3D(5, 1, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 1, 5))); byte expected = 15; for (int x = 5; x >= 0; x--) { Console.WriteLine("Testing {0}", new Coordinates3D(x, 1, 5)); Assert.AreEqual(expected, world.GetSkyLight(new Coordinates3D(x, 1, 5))); expected--; } }
public MultiplayerClient(TrueCraftUser user) { User = user; Client = new TcpClient(); PacketReader = new PacketReader(); PacketReader.RegisterCorePackets(); PacketHandlers = new PacketHandler[0x100]; Handlers.PacketHandlers.RegisterHandlers(this); World = new ReadOnlyWorld(); var repo = new BlockRepository(); repo.DiscoverBlockProviders(); World.World.BlockRepository = repo; World.World.ChunkProvider = new EmptyGenerator(); Physics = new PhysicsEngine(World, repo); SocketPool = new SocketAsyncEventArgsPool(100, 200, 65536); connected = 0; cancel = new CancellationTokenSource(); }
public void TestBasicLighting() { var repository = new BlockRepository(); repository.RegisterBlockProvider(new GrassBlock()); repository.RegisterBlockProvider(new DirtBlock()); repository.RegisterBlockProvider(new AirBlock()); repository.RegisterBlockProvider(new BedrockBlock()); var world = new TrueCraft.Core.World.World("TEST", new FlatlandGenerator()); world.BlockRepository = repository; var lighter = new WorldLighting(world, repository); world.GetBlockID(Coordinates3D.Zero); // Generate a chunk lighter.EnqueueOperation(new BoundingBox( new Vector3(0, 0, 0), new Vector3(16, 128, 16)), true, true); while (lighter.TryLightNext()) { } for (int y = 5; y >= 0; y--) { Console.Write(world.GetBlockID(new Coordinates3D(0, y, 0))); Console.Write(" "); Console.WriteLine(world.GetSkyLight(new Coordinates3D(0, y, 0))); } // Validate behavior for (int y = 0; y < Chunk.Height; y++) { for (int x = 0; x < Chunk.Width; x++) { for (int z = 0; z < Chunk.Depth; z++) { var coords = new Coordinates3D(x, y, z); var sky = world.GetSkyLight(coords); if (y < 4) Assert.AreEqual(0, sky); else Assert.AreEqual(15, sky); } } } }
public void TestBasicLighting() { var repository = new BlockRepository(); repository.RegisterBlockProvider(new GrassBlock()); repository.RegisterBlockProvider(new DirtBlock()); repository.RegisterBlockProvider(new AirBlock()); repository.RegisterBlockProvider(new BedrockBlock()); var world = new TrueCraft.Core.World.World("TEST", new FlatlandGenerator()); world.BlockRepository = repository; var lighter = new WorldLighting(world, repository); world.GetBlockID(Coordinates3D.Zero); // Generate a chunk lighter.InitialLighting(world.GetChunk(Coordinates2D.Zero)); for (int y = 5; y >= 0; y--) { Console.Write("Y: {0} ", y); Console.Write(world.GetBlockID(new Coordinates3D(0, y, 0))); Console.Write(" -> "); Console.WriteLine(world.GetSkyLight(new Coordinates3D(0, y, 0))); } // Validate behavior for (int y = 0; y < Chunk.Height; y++) { for (int x = 0; x < Chunk.Width; x++) { for (int z = 0; z < Chunk.Depth; z++) { var coords = new Coordinates3D(x, y, z); var sky = world.GetSkyLight(coords); if (y < 4) Assert.AreEqual(0, sky, coords.ToString()); else Assert.AreEqual(15, sky, coords.ToString()); } } } }
public void Load() { if (!Directory.Exists(WorldsPath)) Directory.CreateDirectory(WorldsPath); BlockRepository = new BlockRepository(); BlockRepository.DiscoverBlockProviders(); var directories = Directory.GetDirectories(WorldsPath); var saves = new List<World>(); foreach (var d in directories) { try { var w = World.LoadWorld(d); saves.Add(w); } catch (Exception e) { Console.WriteLine(e); /* Who cares */ } } Saves = saves.ToArray(); }
public void TestLeavesAndEtc() { var repository = new BlockRepository(); repository.RegisterBlockProvider(new GrassBlock()); repository.RegisterBlockProvider(new DirtBlock()); repository.RegisterBlockProvider(new AirBlock()); repository.RegisterBlockProvider(new BedrockBlock()); repository.RegisterBlockProvider(new LeavesBlock()); var world = new TrueCraft.Core.World.World("TEST", new FlatlandGenerator()); world.BlockRepository = repository; var lighter = new WorldLighting(world, repository); world.GetBlockID(Coordinates3D.Zero); // Generate a chunk for (int y = 1; y <= 16; y++) { var coords = new Coordinates3D(5, y, 5); world.SetBlockID(coords, 0); world.SetBlockID(coords + Coordinates3D.East, DirtBlock.BlockID); world.SetBlockID(coords + Coordinates3D.West, DirtBlock.BlockID); world.SetBlockID(coords + Coordinates3D.North, DirtBlock.BlockID); world.SetBlockID(coords + Coordinates3D.South, DirtBlock.BlockID); } world.GetChunk(Coordinates2D.Zero).UpdateHeightMap(); lighter.InitialLighting(world.GetChunk(Coordinates2D.Zero)); // Test this layout: // xox o == leaves // x x // xox // x x // xox ... for (int y = 1; y <= 16; y++) { if (y % 2 == 1) world.SetBlockID(new Coordinates3D(5, y, 5), LeavesBlock.BlockID); } world.GetChunk(Coordinates2D.Zero).UpdateHeightMap(); lighter.EnqueueOperation(new BoundingBox(new Vector3(5, 0, 5), new Vector3(6, 16, 6)), true); while (lighter.TryLightNext()) // Test lighting { } // Output lighting for (int y = 16; y >= 0; y--) { Console.Write(world.GetBlockID(new Coordinates3D(5, y, 5)).ToString("D2")); Console.Write(" " + world.GetSkyLight(new Coordinates3D(5, y, 5)).ToString("D2")); Console.WriteLine(" Y={0}", y); } var expected = new byte[] { 15, // air 13, // leaves 12, // air 10, // leaves 9, // air 7, // leaves 6, // air 4, // leaves 3, // air 1, // leaves 0, // air 0, // leaves }; for (int y = 16, i = 0; y >= 0; y--, i++) { byte ex; if (i < expected.Length) ex = expected[i]; else ex = 0; Assert.AreEqual(ex, world.GetSkyLight(new Coordinates3D(5, y, 5))); } }
public void TestFarPropegationx2() { var repository = new BlockRepository(); repository.RegisterBlockProvider(new GrassBlock()); repository.RegisterBlockProvider(new DirtBlock()); repository.RegisterBlockProvider(new AirBlock()); repository.RegisterBlockProvider(new BedrockBlock()); var world = new TrueCraft.Core.World.World("TEST", new FlatlandGenerator()); world.BlockRepository = repository; var lighter = new WorldLighting(world, repository); world.GetBlockID(Coordinates3D.Zero); // Generate a chunk lighter.InitialLighting(world.GetChunk(Coordinates2D.Zero)); // Test this layout: // xxx x y=3 // x x y=2 // x x y=1 // xxxxx y=0 // // ^ x,z = 5 for (int y = 1; y <= 3; y++) // Dig hole { world.SetBlockID(new Coordinates3D(5, y, 5), 0); } for (int x = 0; x <= 4; x++) // Dig outwards { world.SetBlockID(new Coordinates3D(x, 2, 5), 0); // Dig a tunnel world.SetBlockID(new Coordinates3D(x, 1, 5), 0); // Dig a tunnel } var watch = new Stopwatch(); watch.Start(); lighter.EnqueueOperation(new BoundingBox(new Vector3(5, 2, 5), new Vector3(6, 4, 6)), true); while (lighter.TryLightNext()) // Test lighting { } watch.Stop(); // Output lighting for (int y = 3; y >= 0; y--) { for (int x = 0; x <= 5; x++) { Console.Write(world.GetBlockID(new Coordinates3D(x, y, 5)).ToString("D2") + " "); } Console.WriteLine(); } Console.WriteLine(); for (int y = 3; y >= 0; y--) { for (int x = 0; x <= 5; x++) { Console.Write(world.GetSkyLight(new Coordinates3D(x, y, 5)).ToString("D2") + " "); } Console.WriteLine(); } Console.WriteLine("Testing {0}", new Coordinates3D(5, 3, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 3, 5))); Console.WriteLine("Testing {0}", new Coordinates3D(5, 2, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 2, 5))); Console.WriteLine("Testing {0}", new Coordinates3D(5, 1, 5)); Assert.AreEqual(15, world.GetSkyLight(new Coordinates3D(5, 1, 5))); byte expected = 15; for (int x = 5; x >= 0; x--) { Console.WriteLine("Testing {0}", new Coordinates3D(x, 2, 5)); Assert.AreEqual(expected, world.GetSkyLight(new Coordinates3D(x, 2, 5))); expected--; } expected = 15; for (int x = 5; x >= 0; x--) { Console.WriteLine("Testing {0}", new Coordinates3D(x, 1, 5)); Assert.AreEqual(expected, world.GetSkyLight(new Coordinates3D(x, 1, 5))); expected--; } Console.WriteLine("{0}ms", watch.ElapsedMilliseconds); }