1using System.Runtime.CompilerServices;
15 [MethodImpl(MethodImplOptions.AggressiveInlining)]
21 if (terrainChunk ==
null) {
25 && terrainChunk.
Coords.
Y == y) {
33 [MethodImpl(MethodImplOptions.AggressiveInlining)]
36 [MethodImpl(MethodImplOptions.AggressiveInlining)]
47 public virtual void Remove(
int x,
int y) {
51 if (terrainChunk ==
null) {
55 && terrainChunk.
Coords.
Y == y) {
127 if (!skipStartChunk) {
129 if (terrainChunk !=
null) {
134 for (
int i = 0; i < allocatedChunks.Length; i++) {
136 && (terrainChunk ==
null ||
ComparePoints(allocatedChunks[i].Coords, terrainChunk.
Coords) < 0)) {
137 terrainChunk = allocatedChunks[i];
140 if (terrainChunk ==
null) {
141 for (
int j = 0; j < allocatedChunks.Length; j++) {
142 if (terrainChunk ==
null
144 terrainChunk = allocatedChunks[j];
153 LoopChunks(startChunkX, startChunkZ, skipStartChunk, out
bool _);
178 throw new InvalidOperationException(
"Chunk already allocated.");
189 throw new InvalidOperationException(
"Chunk not allocated.");
198 return c1.Y <= c2.Y ? -1 : 1;
201 return c1.X <= c2.X ? -1 : 1;
210 public static int ToCell(
float x) => (int)MathF.Floor(x);
212 public static Point2 ToCell(
float x,
float y) =>
new((int)MathF.Floor(x), (
int)MathF.Floor(y));
216 public static Point3 ToCell(
float x,
float y,
float z) =>
new((int)MathF.Floor(x), (
int)MathF.Floor(y), (
int)MathF.Floor(z));
virtual TerrainChunk Get(Point2 p)
virtual TerrainChunk Get(int x, int y)
const int CapacityMinusOne
virtual void Add(int x, int y, TerrainChunk chunk)
virtual void Remove(int x, int y)
virtual TerrainChunk Get(Point3 p)
virtual void SetShaftValueFast(int x, int z, int value)
virtual int GetCellValueFast(int index)
virtual void SetCellValueFast(int x, int y, int z, int value)
virtual int GetShaftValueFast(int x, int z)
virtual int CalculateTopmostCellHeight(int x, int z)
virtual TerrainChunk AllocateChunk(int chunkX, int chunkZ)
HashSet< TerrainChunk > m_allocatedChunks
static int MakeBlockValue(int contents, int light, int data)
static int ReplaceTopHeight(int value, int topHeight)
virtual int GetCellValueFast(Point3 p)
static Point3 ToCell(Vector3 p)
static Point2 ToCell(Vector2 p)
const int SunlightHeightShift
virtual int GetCellLight(Point3 p)
static Point2 ToChunk(Vector2 p)
static int ExtractTemperature(int value)
virtual void SetShaftValue(int x, int z, int value)
static int ExtractContents(int value)
static int ReplaceHumidity(int value, int humidity)
virtual int GetSeasonalHumidity(int shaftValue)
virtual int GetCellValueFastChunkExists(int x, int y, int z)
virtual int GetCellLight(int x, int y, int z)
virtual void SetSunlightHeight(int x, int z, int sunlightHeight)
const int BottomHeightShift
static int ReplaceData(int value, int data)
virtual int GetCellValueFast(int x, int y, int z)
virtual TerrainChunk GetChunkAtCoords(int chunkX, int chunkY, int chunkZ)
const int TemperatureMask
static int ReplaceContents(int contents)
方块值的最低10位,替换为目标Content(value始终为0时)
virtual void SetTemperature(int x, int z, int temperature)
virtual void FreeChunk(TerrainChunk chunk)
virtual int GetSunlightHeight(int x, int z)
virtual void SetSunlightHeight(Point2 p, int sunlightHeight)
virtual int GetHumidity(int x, int z)
virtual TerrainChunk GetChunkAtCoords(Point3 chunkP)
virtual TerrainChunk LoopChunks(int startChunkX, int startChunkZ, bool skipStartChunk)
virtual void SetCellValueFast(int x, int y, int z, int value)
virtual int GetCellValueFastChunkExists(Point3 p)
virtual int GetTemperature(Point2 p)
virtual int GetBottomHeight(int x, int z)
const int SunlightHeightMask
virtual int GetCellValue(int x, int y, int z)
virtual int GetCellContentsFast(Point3 p)
virtual int GetCellContents(Point3 p)
virtual int GetCellLightFast(int x, int y, int z)
virtual bool IsCellValid(Point3 p)
virtual TerrainChunk GetChunkAtCell(Point2 p)
virtual TerrainChunk GetChunkAtCell(Point3 p)
static int ReplaceBottomHeight(int value, int bottomHeight)
static Point2 ToCell(float x, float y)
static int ComparePoints(Point2 c1, Point2 c2)
static int ToCell(float x)
static int ExtractBottomHeight(int value)
static Point2 ToChunk(int x, int z)
static int ReplaceSunlightHeight(int value, int sunlightHeight)
virtual void SetHumidity(int x, int z, int humidity)
virtual int GetCellContents(int x, int y, int z)
static int ExtractLight(int value)
TerrainChunk[] m_allocatedChunksArray
virtual int GetSeasonalHumidity(int x, int z)
virtual int GetCellValue(Point3 p)
virtual int GetCellContentsFast(int x, int y, int z)
virtual bool IsCellValid(int x, int y, int z)
virtual int GetTopHeight(int x, int z)
virtual TerrainChunk LoopChunks(int startChunkX, int startChunkZ, bool skipStartChunk, out bool hasLooped)
virtual int CalculateTopmostCellHeight(Point2 p)
virtual TerrainChunk GetChunkAtCell(int x, int z)
const int BottomHeightMask
virtual int GetSeasonalTemperature(int shaftValue)
static int ExtractHumidity(int value)
static int ExtractTopHeight(int value)
virtual int GetShaftValue(Point2 p)
virtual TerrainChunk GetChunkAtCell(int x, int y, int z)
const int TemperatureShift
virtual int GetSunlightHeight(Point2 p)
virtual TerrainChunk GetChunkAtCoords(int chunkX, int chunkZ)
virtual TerrainChunk[] AllocatedChunks
virtual void SetShaftValue(Point2 p, int value)
virtual int GetHumidity(Point2 p)
virtual int GetShaftValue(int x, int z)
static int ReplaceTemperature(int value, int temperature)
virtual void SetCellValueFast(Point3 p, int value)
static int ReplaceLight(int value, int light)
virtual int GetSeasonalTemperature(int x, int z)
static int ExtractSunlightHeight(int value)
static int ReplaceContents(int value, int contents)
方块值的最低10位,替换为目标Content
virtual TerrainChunk GetChunkAtCoords(Point2 p)
virtual void SetTopHeight(int x, int z, int topHeight)
virtual int GetCellLightFast(Point3 p)
static int MakeBlockValue(int contents)
static int ExtractData(int value)
virtual int CalculateTopmostCellHeight(int x, int z)
virtual void SetTemperature(Point2 p, int temperature)
virtual void SetBottomHeight(int x, int z, int bottomHeight)
virtual int GetTemperature(int x, int z)
ChunksStorage m_allChunks
static Point3 ToCell(float x, float y, float z)