// ChunkIndex can be a negative number public override void LoadChunk(int chunkIndex) { if (IsRepeatRandom) { // Jump to a random chunk, if chunk not cool if (chunkIndex >= ChunkFilePositions.Length || chunkIndex < 0) { chunkIndex = GameEnvironment.Random.Next(ChunkFilePositions.Length); } } else { // Jump to repeat map if (chunkIndex >= ChunkFilePositions.Length || chunkIndex < 0) { chunkIndex = chunkIndex % ChunkFilePositions.Length; } if (chunkIndex < 0) { chunkIndex = (ChunkFilePositions.Length + chunkIndex); } } if (!ChunkTextures.ContainsKey(chunkIndex)) { base.LoadChunk(chunkIndex); } }
protected override bool EnsureChunkDrawable(ref int chunkIndex) { if (IsRepeatRandom) { // Ensure randomly loaded chunk is valid chunkIndex = Math.Abs(chunkIndex % (ChunkTextures.Count() - 1)); } else { // Ensure wrapped chunk is valid if (chunkIndex >= ChunkFilePositions.Length || chunkIndex < 0) { chunkIndex = chunkIndex % ChunkFilePositions.Length; } if (chunkIndex < 0) { chunkIndex = (ChunkFilePositions.Length + chunkIndex); } } return(true); // no matter the index, draw the chunks }