40 lines
1.1 KiB
C#
40 lines
1.1 KiB
C#
using Mine2d.engine.system.annotations;
|
|
using Mine2d.game.backend.network.packets;
|
|
using Mine2d.game.core.data;
|
|
using Mine2d.game.core.world;
|
|
|
|
namespace Mine2d.game.backend.interactor;
|
|
|
|
[Interactor]
|
|
public class WorldGeneration
|
|
{
|
|
private static readonly Vector2[] Directions = {
|
|
new(0, 1),
|
|
new(1, 0),
|
|
new(0, -1),
|
|
new(-1, 0),
|
|
new(1, 1),
|
|
new(1, -1),
|
|
new(-1, -1),
|
|
new(-1, 1)
|
|
};
|
|
|
|
[Interaction(InteractorKind.Server, PacketType.PlayerMoved)]
|
|
public static void PlayerMovedServer(PlayerMovedPacket packet)
|
|
{
|
|
var ctx = Context.Get();
|
|
var world = ctx.GameState.World;
|
|
foreach (var direction in Directions)
|
|
{
|
|
var generationTarget = packet.Target + direction * 16 * 32;
|
|
var hasChunkGenerated = world.HasChunkAt(generationTarget);
|
|
|
|
if (!hasChunkGenerated)
|
|
{
|
|
var chunkPos = World.ToChunkPos(generationTarget);
|
|
world.AddChunk(ChunkGenerator.CreateChunk((int)chunkPos.X, (int)chunkPos.Y));
|
|
}
|
|
}
|
|
}
|
|
}
|