Skip to content
This repository has been archived by the owner on Jun 26, 2022. It is now read-only.

Commit

Permalink
Swap between subchunks.
Browse files Browse the repository at this point in the history
  • Loading branch information
Luminoso-256 committed Jan 17, 2021
1 parent 26cb7f6 commit 4a2e6a6
Show file tree
Hide file tree
Showing 7 changed files with 67 additions and 27 deletions.
Binary file modified .vs/EarthBuildplateEditor/v16/.suo
Binary file not shown.
94 changes: 67 additions & 27 deletions Program.cs
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ class Program
public static String textureBasePath = @"C:\Workspace\Programming\c#\EarthBuildplateEditor\earth_res\textures\blocks\";
static void Main(string[] args)
{
Console.WriteLine("Minecraft Earth Buildplate File Format Editor \n Version " + version +"\n Enter path to input file:");

Console.WriteLine("Minecraft Earth Buildplate File Format Editor \n Version " + version + "\n Enter path to input file:");
// String targetFilePath = Console.ReadLine();
String targetFilePath = @"C:\Workspace\Programming\c#\EarthBuildplateEditor\plates\test.plate";
if (!File.Exists(targetFilePath))
Expand All @@ -29,8 +29,10 @@ static void Main(string[] args)
String fileData = File.ReadAllText(targetFilePath);
//Deserialize
Buildplate plate = JsonConvert.DeserializeObject<Buildplate>(fileData);
Console.WriteLine("Version: "+plate.format_version+" Subchunk Count: "+plate.sub_chunks.Count+" Entity Count: "+plate.entities.Count);
Console.WriteLine("Version: " + plate.format_version + " Subchunk Count: " + plate.sub_chunks.Count + " Entity Count: " + plate.entities.Count);
Console.WriteLine("Opening Editor");

//Prepare editor
Camera3D camera = new Camera3D();
camera.position = new Vector3(4.0f, 2.0f, 4.0f);
camera.target = new Vector3(0.0f, 1.8f, 0.0f);
Expand All @@ -42,10 +44,34 @@ static void Main(string[] args)
Raylib.InitWindow(800, 600, "Earth Buildplate Editor");
SetCameraMode(camera, CAMERA_FIRST_PERSON);
SetTargetFPS(60);


//Render Data
List<Texture2D> textures = new List<Texture2D> { };
Dictionary<int, int> airVals = new Dictionary<int, int>();
for (int subchunk = 0; subchunk < plate.sub_chunks.Count; subchunk++) {
for(int paletteIndex = 0; paletteIndex < plate.sub_chunks[subchunk].block_palette.Count; paletteIndex++)
Dictionary<int, int> chunkTextureOffsets = new Dictionary<int, int>();

//editor data
int currentSubchunk = 0;
int maxSubChunk = plate.sub_chunks.Count - 1;


//Texture itr loop
for (int subchunk = 0; subchunk < plate.sub_chunks.Count; subchunk++)
{

//Generate offsets for grabbing each subchunk's textures. An offset tells us how many textures we have to go before we find a given subchunk's.

int offset = 0;
for (int earlierChunk = 0; earlierChunk < subchunk; earlierChunk++)
{
offset += plate.sub_chunks[earlierChunk].block_palette.Count - 2;
}
//add our offset to the table
chunkTextureOffsets.Add(subchunk, offset);

//Create the textures
for (int paletteIndex = 0; paletteIndex < plate.sub_chunks[subchunk].block_palette.Count; paletteIndex++)
{
Buildplate.PaletteBlock paletteBlock = plate.sub_chunks[subchunk].block_palette[paletteIndex];
String blockName = paletteBlock.name.Split(":")[1]; //gives us a clean texture name like dirt or grass_block
Expand All @@ -70,38 +96,42 @@ static void Main(string[] args)
ClearBackground(WHITE);
BeginMode3D(camera);

for (int subchunk = 0; subchunk < plate.sub_chunks.Count; subchunk++)
{

int xOffset = plate.sub_chunks[subchunk].position.x;
int yOffset = plate.sub_chunks[subchunk].position.y;
int zOffset = plate.sub_chunks[subchunk].position.z;

//Positioning offsets for this plate's blocks.
//int xOffset = plate.sub_chunks[currentSubchunk].position.x;
//int yOffset = plate.sub_chunks[currentSubchunk].position.y;
//int zOffset = plate.sub_chunks[currentSubchunk].position.z;


int x = 0;
int y = 0;
int z = 0;
int x = 0;
int y = 0;
int z = 0;

for (int currentBlock = 0; currentBlock < 4096; currentBlock++)
{
x++;
if (x == 16) { x = 0; y += 1; }
if (y == 16) { y = 0; z += 1; }

for (int currentBlock = 0; currentBlock < 4096; currentBlock++)
if (plate.sub_chunks[currentSubchunk].blocks[currentBlock] != airVals[currentSubchunk])
{
x++;
if (x == 16) { x = 0; y += 1; }
if (y == 16) { y = 0; z += 1; }

if (plate.sub_chunks[subchunk].blocks[currentBlock] != airVals[subchunk])
{
DrawCubeTexture(textures[plate.sub_chunks[0].blocks[currentBlock]], new Vector3(x + xOffset, y + yOffset, z + zOffset), 1.0f, 1.0f, 1.0f, WHITE);
//DrawCube(new Vector3(x, y, z), 1.0f, 1.0f, 1.0f, GREEN);
//DrawCubeWires(new Vector3(x, y, z), 1.0f, 1.0f, 1.0f, BLACK);
}
int textureIndex = plate.sub_chunks[currentSubchunk].blocks[currentBlock]; //index

DrawCubeTexture(textures[textureIndex], new Vector3(x, y, z), 1.0f, 1.0f, 1.0f, WHITE);
}
}


EndMode3D();

DrawText("Current Subchunk: " + currentSubchunk, 10, 10, 10, BLACK);
DrawText("Left/Right arrow to change subchunk", 10, 30, 10, BLACK);
DrawText("Current air val: " + airVals[currentSubchunk], 10, 50, 10, BLACK);

EndDrawing();


//Movement for player in file
//Player up/down movement
if (IsKeyDown(KeyboardKey.KEY_SPACE))
{
camY += 0.1f;
Expand All @@ -110,8 +140,18 @@ static void Main(string[] args)
{
camY -= 0.1f;
}

//Other controls
if (IsKeyPressed(KeyboardKey.KEY_LEFT))
{
currentSubchunk -= 1;
if (currentSubchunk < 0) { currentSubchunk = 0; }
}
if (IsKeyPressed(KeyboardKey.KEY_RIGHT))
{
currentSubchunk += 1;
if (currentSubchunk > maxSubChunk) { currentSubchunk = maxSubChunk; }
}

}
CloseWindow();
Expand Down
Binary file modified bin/Debug/netcoreapp3.1/EarthBuildplateEditor.dll
Binary file not shown.
Binary file modified bin/Debug/netcoreapp3.1/EarthBuildplateEditor.pdb
Binary file not shown.
Binary file not shown.
Binary file modified obj/Debug/netcoreapp3.1/EarthBuildplateEditor.dll
Binary file not shown.
Binary file modified obj/Debug/netcoreapp3.1/EarthBuildplateEditor.pdb
Binary file not shown.

0 comments on commit 4a2e6a6

Please sign in to comment.