mine2d/Mine2d/game/backend/interactor/WorldGeneration.cs

40 lines
1.1 KiB
C#

using Mine2d.engine.system.annotations;
using Mine2d.game.backend.data;
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, "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));
}
}
}
}