From 1505314260e085169b2fcf38307a694fdaa6d4e0 Mon Sep 17 00:00:00 2001 From: 70000hp <105080577+70000hp@users.noreply.github.com> Date: Sun, 24 Dec 2023 14:14:35 -0500 Subject: [PATCH] caster o' strands, part deux --- src/main/java/com/hbm/blocks/ModBlocks.java | 3 + .../blocks/machine/MachineStrandCaster.java | 118 +- ...java => ContainerMachineStrandCaster.java} | 15 +- ...aster.java => GUIMachineStrandCaster.java} | 32 +- src/main/java/com/hbm/main/ClientProxy.java | 1 + .../java/com/hbm/main/ResourceManager.java | 10 +- .../render/tileentity/RenderStrandCaster.java | 63 + .../hbm/tileentity/TileEntityProxyCombo.java | 37 +- .../java/com/hbm/tileentity/TileMappings.java | 1 + .../machine/TileEntityFoundryBasin.java | 11 +- .../machine/TileEntityFoundryCastingBase.java | 9 +- .../machine/TileEntityFoundryMold.java | 11 +- .../TileEntityMachineStrandCaster.java | 210 ++- src/main/resources/assets/hbm/lang/en_US.lang | 2 + .../hbm/models/machines/strand_caster.obj | 1214 +++++++++++++++++ 15 files changed, 1602 insertions(+), 135 deletions(-) rename src/main/java/com/hbm/inventory/container/{ContainerStrandCaster.java => ContainerMachineStrandCaster.java} (81%) rename src/main/java/com/hbm/inventory/gui/{GUIStrandCaster.java => GUIMachineStrandCaster.java} (77%) create mode 100644 src/main/java/com/hbm/render/tileentity/RenderStrandCaster.java create mode 100644 src/main/resources/assets/hbm/models/machines/strand_caster.obj diff --git a/src/main/java/com/hbm/blocks/ModBlocks.java b/src/main/java/com/hbm/blocks/ModBlocks.java index 7c656c712..3261a803d 100644 --- a/src/main/java/com/hbm/blocks/ModBlocks.java +++ b/src/main/java/com/hbm/blocks/ModBlocks.java @@ -694,6 +694,7 @@ public class ModBlocks { public static Block foundry_channel; public static Block foundry_tank; public static Block foundry_outlet; + public static Block machine_strand_caster; public static Block foundry_slagtap; public static Block slag; @@ -1854,6 +1855,7 @@ public class ModBlocks { machine_stirling_steel = new MachineStirling().setBlockName("machine_stirling_steel").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_stirling_creative = new MachineStirling().setBlockName("machine_stirling_creative").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); machine_sawmill = new MachineSawmill().setBlockName("machine_sawmill").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); + machine_strand_caster = new MachineStrandCaster().setBlockName("machine_strand_caster").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); machine_crucible = new MachineCrucible().setBlockName("machine_crucible").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":brick_fire"); machine_boiler = new MachineHeatBoiler().setBlockName("machine_boiler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_copper"); machine_industrial_boiler = new MachineHeatBoilerIndustrial().setBlockName("machine_industrial_boiler").setHardness(5.0F).setResistance(10.0F).setCreativeTab(MainRegistry.machineTab).setBlockTextureName(RefStrings.MODID + ":block_steel"); @@ -3152,6 +3154,7 @@ public class ModBlocks { register(machine_stirling_creative); register(machine_sawmill); register(machine_crucible); + register(machine_strand_caster); register(machine_boiler); register(machine_industrial_boiler); register(foundry_mold); diff --git a/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java index 7d45b7911..f515325ee 100644 --- a/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java +++ b/src/main/java/com/hbm/blocks/machine/MachineStrandCaster.java @@ -63,11 +63,15 @@ public class MachineStrandCaster extends BlockDummyable implements ICrucibleAcce x += dir.offsetX * o; z += dir.offsetZ * o; - MultiblockHandlerXR.fillSpace(world, x, y, z, new int[]{1, 0, 1, 0, 1, 0}, this, dir); + ForgeDirection rot = dir.getRotation(ForgeDirection.UP); + + //up,down;forward,backward;left,right + MultiblockHandlerXR.fillSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, this, dir); + + this.makeExtra(world, x + rot.offsetX, y, z + rot.offsetZ); + this.makeExtra(world, x - dir.offsetX * 5, y, z - dir.offsetZ * 5); + this.makeExtra(world, x + rot.offsetX - dir.offsetX * 5, y, z + rot.offsetZ - dir.offsetZ * 5); - this.makeExtra(world, x - dir.offsetX, y, z); - this.makeExtra(world, x, y, z + dir.offsetX * 5); - this.makeExtra(world, x- dir.offsetX, y, z + dir.offsetX * 5); } @Override @@ -109,7 +113,6 @@ public class MachineStrandCaster extends BlockDummyable implements ICrucibleAcce public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { return null; } - ///entirety of foundry base code here, because dual inheritance is evil apparently @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) { @@ -117,73 +120,82 @@ public class MachineStrandCaster extends BlockDummyable implements ICrucibleAcce return true; } - TileEntityFoundryCastingBase cast = (TileEntityFoundryCastingBase) world.getTileEntity(x, y, z); - - //insert mold - if(player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.mold && cast.slots[0] == null) { - cast.slots[0] = player.getHeldItem().copy(); - cast.slots[0].stackSize = 1; - player.getHeldItem().stackSize--; - world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F); - cast.markDirty(); - world.markBlockForUpdate(x, y, z); - return true; - - } - - if(player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool && player.getHeldItem().getItem().getToolClasses(player.getHeldItem()).contains("shovel")) { - if(cast.amount > 0) { - ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount)); - if(!player.inventory.addItemStackToInventory(scrap)) { - EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap); - world.spawnEntityInWorld(item); - } else { - player.inventoryContainer.detectAndSendChanges(); - } - cast.amount = 0; - cast.type = null; + int[] coords = findCore(world, x, y, z); + TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]); + if(cast != null) { + //insert mold + if (player.getHeldItem() != null && player.getHeldItem().getItem() == ModItems.mold && cast.slots[0] == null) { + cast.slots[0] = player.getHeldItem().copy(); + cast.slots[0].stackSize = 1; + player.getHeldItem().stackSize--; + world.playSoundEffect(x + 0.5, y + 0.5, z + 0.5, "hbm:item.upgradePlug", 1.0F, 1.0F); cast.markDirty(); world.markBlockForUpdate(x, y, z); - } - return true; - } + return true; + } + + if (player.getHeldItem() != null && player.getHeldItem().getItem() instanceof ItemTool && player.getHeldItem().getItem().getToolClasses(player.getHeldItem()).contains("shovel")) { + if (cast.amount > 0) { + ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount)); + if (!player.inventory.addItemStackToInventory(scrap)) { + EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap); + world.spawnEntityInWorld(item); + } else { + player.inventoryContainer.detectAndSendChanges(); + } + cast.amount = 0; + cast.type = null; + cast.markDirty(); + world.markBlockForUpdate(x, y, z); + } + return true; + } + } return this.standardOpenBehavior(world, x, y, z, player, 0); } @Override public void breakBlock(World world, int x, int y, int z, Block b, int i) { - TileEntityFoundryCastingBase cast = (TileEntityFoundryCastingBase) world.getTileEntity(x, y, z); - if(cast.amount > 0) { - ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount)); - EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap); - world.spawnEntityInWorld(item); - cast.amount = 0; //just for safety - } + TileEntity te = world.getTileEntity(x, y, z); + if(te instanceof TileEntityMachineStrandCaster) { + TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) te; - for(ItemStack stack : cast.slots) { - if(stack != null) { - EntityItem drop = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, stack.copy()); - world.spawnEntityInWorld(drop); + if (cast.amount > 0) { + ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(cast.type, cast.amount)); + EntityItem item = new EntityItem(world, x + 0.5, y + this.maxY, z + 0.5, scrap); + world.spawnEntityInWorld(item); + cast.amount = 0; //just for safety } } - super.breakBlock(world, x, y, z, b, i); } public void printHook(RenderGameOverlayEvent.Pre event, World world, int x, int y, int z) { - TileEntityFoundryCastingBase cast = (TileEntityFoundryCastingBase) world.getTileEntity(x, y, z); + int[] coords = findCore(world, x, y, z); + if(coords == null) return; + + TileEntityMachineStrandCaster cast = (TileEntityMachineStrandCaster) world.getTileEntity(coords[0], coords[1], coords[2]); + List text = new ArrayList(); - - if(cast.slots[0] == null) { - text.add(EnumChatFormatting.RED + I18nUtil.resolveKey("foundry.noCast")); - } else if(cast.slots[0].getItem() == ModItems.mold){ - ItemMold.Mold mold = ((ItemMold) cast.slots[0].getItem()).getMold(cast.slots[0]); - text.add(EnumChatFormatting.BLUE + mold.getTitle()); + if(cast != null) { + if (cast.slots[0] == null) { + text.add(EnumChatFormatting.RED + I18nUtil.resolveKey("foundry.noCast")); + } else if (cast.slots[0].getItem() == ModItems.mold) { + ItemMold.Mold mold = ((ItemMold) cast.slots[0].getItem()).getMold(cast.slots[0]); + text.add(EnumChatFormatting.BLUE + mold.getTitle()); + } } - ILookOverlay.printGeneric(event, I18nUtil.resolveKey(this.getUnlocalizedName() + ".name"), 0xFF4000, 0x401000, text); } + @Override + protected boolean checkRequirement(World world, int x, int y, int z, ForgeDirection dir, int o) { + x += dir.offsetX * o; + z += dir.offsetZ * o; + + if(!MultiblockHandlerXR.checkSpace(world, x, y , z, getDimensions(), x, y, z, dir)) return false; + return MultiblockHandlerXR.checkSpace(world, x, y, z, new int[]{2, 0, 1, 0, 1, 0}, x, y, z, dir); + } } diff --git a/src/main/java/com/hbm/inventory/container/ContainerStrandCaster.java b/src/main/java/com/hbm/inventory/container/ContainerMachineStrandCaster.java similarity index 81% rename from src/main/java/com/hbm/inventory/container/ContainerStrandCaster.java rename to src/main/java/com/hbm/inventory/container/ContainerMachineStrandCaster.java index f87f592d0..1742c470c 100644 --- a/src/main/java/com/hbm/inventory/container/ContainerStrandCaster.java +++ b/src/main/java/com/hbm/inventory/container/ContainerMachineStrandCaster.java @@ -9,22 +9,23 @@ import net.minecraft.inventory.Container; import net.minecraft.inventory.Slot; import net.minecraft.item.ItemStack; -public class ContainerStrandCaster extends Container { +public class ContainerMachineStrandCaster extends Container { protected TileEntityMachineStrandCaster caster; - public ContainerStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster caster) { + public ContainerMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster caster) { this.caster = caster; //the wretched mold this.addSlotToContainer(new SlotNonRetarded(this.caster, 0, 57, 62)); - //input + //output for(int i = 0; i < 3; i++) { for(int j = 0; j < 2; j++) { - this.addSlotToContainer(new SlotNonRetarded(this.caster, j + i * 3 + 1, 125 + j * 18, 26 + i * 18)); + this.addSlotToContainer(new SlotNonRetarded(this.caster, j + i * 2 + 1, 125 + j * 18, 26 + i * 18)); } } + for(int i = 0; i < 3; i++) { for(int j = 0; j < 9; j++) { @@ -47,18 +48,18 @@ public class ContainerStrandCaster extends Container { stack = originalStack.copy(); if(index <= 6) { - if(!this.mergeItemStack(originalStack, 10, this.inventorySlots.size(), true)) { + if(!InventoryUtil.mergeItemStack(this.inventorySlots, originalStack, 7, this.inventorySlots.size(), true)) { return null; } slot.onSlotChange(originalStack, stack); - } else if(!InventoryUtil.mergeItemStack(this.inventorySlots, originalStack, 0, 10, false)) { + } else if(!InventoryUtil.mergeItemStack(this.inventorySlots, originalStack, 0, 7, false)) { return null; } if(originalStack.stackSize == 0) { - slot.putStack((ItemStack) null); + slot.putStack(null); } else { slot.onSlotChanged(); } diff --git a/src/main/java/com/hbm/inventory/gui/GUIStrandCaster.java b/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java similarity index 77% rename from src/main/java/com/hbm/inventory/gui/GUIStrandCaster.java rename to src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java index 9d31e4b1f..16a151207 100644 --- a/src/main/java/com/hbm/inventory/gui/GUIStrandCaster.java +++ b/src/main/java/com/hbm/inventory/gui/GUIMachineStrandCaster.java @@ -1,9 +1,7 @@ package com.hbm.inventory.gui; -import com.hbm.inventory.container.ContainerStrandCaster; +import com.hbm.inventory.container.ContainerMachineStrandCaster; import com.hbm.inventory.material.Mats; -import com.hbm.inventory.material.Mats.MaterialStack; -import com.hbm.inventory.material.NTMMaterial; import com.hbm.inventory.material.NTMMaterial.SmeltingBehavior; import com.hbm.lib.RefStrings; import com.hbm.tileentity.machine.TileEntityMachineStrandCaster; @@ -20,15 +18,14 @@ import org.lwjgl.opengl.GL11; import java.awt.*; import java.util.ArrayList; import java.util.List; -import java.util.Locale; -public class GUIStrandCaster extends GuiInfoContainer { +public class GUIMachineStrandCaster extends GuiInfoContainer { private static ResourceLocation texture = new ResourceLocation(RefStrings.MODID + ":textures/gui/processing/gui_strand_caster.png"); private TileEntityMachineStrandCaster caster; - public GUIStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster tedf) { - super(new ContainerStrandCaster(invPlayer, tedf)); + public GUIMachineStrandCaster(InventoryPlayer invPlayer, TileEntityMachineStrandCaster tedf) { + super(new ContainerMachineStrandCaster(invPlayer, tedf)); caster = tedf; this.xSize = 176; @@ -41,47 +38,48 @@ public class GUIStrandCaster extends GuiInfoContainer { drawStackInfo(x, y, 16, 17); - caster.water.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 38, 16, 24); - caster.steam.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 89, 16, 24); + caster.water.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 14, 16, 24); + caster.steam.renderTankInfo(this, x, y, guiLeft + 82, guiTop + 64, 16, 24); } @Override protected void drawGuiContainerForegroundLayer(int i, int j) { String name = this.caster.hasCustomInventoryName() ? this.caster.getInventoryName() : I18n.format(this.caster.getInventoryName()); - this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 6, 0xffffff); + this.fontRendererObj.drawString(name, this.xSize / 2 - this.fontRendererObj.getStringWidth(name) / 2, 4, 0xffffff); this.fontRendererObj.drawString(I18n.format("container.inventory"), 8, this.ySize - 96 + 2, 4210752); } @Override protected void drawGuiContainerBackgroundLayer(float p_146976_1_, int p_146976_2_, int p_146976_3_) { + GL11.glColor4f(1.0F, 1.0F, 1.0F, 1.0F); Minecraft.getMinecraft().getTextureManager().bindTexture(texture); drawTexturedModalRect(guiLeft, guiTop, 0, 0, xSize, ySize); - caster.water.renderTank(guiLeft + 82, guiTop + 38, this.zLevel, 16, 24); - caster.steam.renderTank(guiLeft + 82, guiTop + 89, this.zLevel, 16, 24); - if (caster.amount != 0) { GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE); int targetHeight = (caster.amount) * 79 / caster.getCapacity(); - int offset = caster.type.smeltable == SmeltingBehavior.ADDITIVE ? 34 : 0; //additives use a differnt texture int hex = caster.type.moltenColor; //hex = 0xC18336; Color color = new Color(hex); GL11.glColor3f(color.getRed() / 255F, color.getGreen() / 255F, color.getBlue() / 255F); - drawTexturedModalRect(guiLeft + 17, guiTop + 92 - targetHeight, 176 + offset, 89 - targetHeight, 34, targetHeight); + drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight); GL11.glEnable(GL11.GL_BLEND); GL11.glColor4f(1F, 1F, 1F, 0.3F); - drawTexturedModalRect(guiLeft + 17, guiTop + 92 - targetHeight, 176 + offset, 89 - targetHeight, 34, targetHeight); + drawTexturedModalRect(guiLeft + 17, guiTop + 93 - targetHeight, 176, 89 - targetHeight, 34, targetHeight); GL11.glDisable(GL11.GL_BLEND); - } + } OpenGlHelper.glBlendFunc(770, 771, 1, 0); GL11.glColor3f(255, 255, 255); + + caster.water.renderTank(guiLeft + 82, guiTop + 38, this.zLevel, 16, 24); + caster.steam.renderTank(guiLeft + 82, guiTop + 90, this.zLevel, 16, 24); + } diff --git a/src/main/java/com/hbm/main/ClientProxy.java b/src/main/java/com/hbm/main/ClientProxy.java index ab715f454..fa932c02a 100644 --- a/src/main/java/com/hbm/main/ClientProxy.java +++ b/src/main/java/com/hbm/main/ClientProxy.java @@ -307,6 +307,7 @@ public class ClientProxy extends ServerProxy { //Foundry ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryBasin.class, new RenderFoundry()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityFoundryMold.class, new RenderFoundry()); + ClientRegistry.bindTileEntitySpecialRenderer(TileEntityMachineStrandCaster.class, new RenderStrandCaster()); //AMS ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSBase.class, new RenderAMSBase()); ClientRegistry.bindTileEntitySpecialRenderer(TileEntityAMSEmitter.class, new RenderAMSEmitter()); diff --git a/src/main/java/com/hbm/main/ResourceManager.java b/src/main/java/com/hbm/main/ResourceManager.java index 38837f228..349d6da07 100644 --- a/src/main/java/com/hbm/main/ResourceManager.java +++ b/src/main/java/com/hbm/main/ResourceManager.java @@ -50,7 +50,10 @@ public class ResourceManager { public static final IModelCustom boiler_burst = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/boiler_burst.obj")); public static final IModelCustom boiler_industrial = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/industrial_boiler.obj")); public static final IModelCustom hephaestus = new HFRWavefrontObject(new ResourceLocation(RefStrings.MODID, "models/machines/hephaestus.obj")); - + + //Caster o' Strands + public static final IModelCustom strand_caster = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/strand_caster.obj")); + //Furnaces public static final IModelCustom furnace_iron = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_iron.obj")); public static final IModelCustom furnace_steel = AdvancedModelLoader.loadModel(new ResourceLocation(RefStrings.MODID, "models/machines/furnace_steel.obj")); @@ -447,7 +450,10 @@ public class ResourceManager { public static final ResourceLocation boiler_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/boiler.png"); public static final ResourceLocation boiler_industrial_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/industrial_boiler.png"); public static final ResourceLocation hephaestus_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/hephaestus.png"); - + + //Strand Caster + public static final ResourceLocation strand_caster_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/strand_caster.png"); + //Furnaces public static final ResourceLocation furnace_iron_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_iron.png"); public static final ResourceLocation furnace_steel_tex = new ResourceLocation(RefStrings.MODID, "textures/models/machines/furnace_steel.png"); diff --git a/src/main/java/com/hbm/render/tileentity/RenderStrandCaster.java b/src/main/java/com/hbm/render/tileentity/RenderStrandCaster.java new file mode 100644 index 000000000..cba933802 --- /dev/null +++ b/src/main/java/com/hbm/render/tileentity/RenderStrandCaster.java @@ -0,0 +1,63 @@ +package com.hbm.render.tileentity; + +import com.hbm.blocks.BlockDummyable; +import com.hbm.blocks.ModBlocks; +import com.hbm.main.ResourceManager; +import com.hbm.render.item.ItemRenderBase; +import net.minecraft.client.renderer.tileentity.TileEntitySpecialRenderer; +import net.minecraft.item.Item; +import net.minecraft.tileentity.TileEntity; +import net.minecraftforge.client.IItemRenderer; +import org.lwjgl.opengl.GL11; + +public class RenderStrandCaster extends TileEntitySpecialRenderer implements IItemRendererProvider { + + @Override + public void renderTileEntityAt(TileEntity te, double x, double y, double z, float interp) { + + GL11.glPushMatrix(); + + GL11.glTranslated(x, y, z); + switch(te.getBlockMetadata() - BlockDummyable.offset) { + case 4: GL11.glRotatef(90, 0F, 1F, 0F); break; + case 3: GL11.glRotatef(180, 0F, 1F, 0F); break; + case 5: GL11.glRotatef(270, 0F, 1F, 0F); break; + case 2: GL11.glRotatef(0, 0F, 1F, 0F); break; + } + + GL11.glRotated(180, 0, 1, 0); + GL11.glEnable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_CULL_FACE); + GL11.glShadeModel(GL11.GL_SMOOTH); + + bindTexture(ResourceManager.strand_caster_tex); + ResourceManager.strand_caster.renderAll(); + + GL11.glShadeModel(GL11.GL_FLAT); + + GL11.glPopMatrix(); + + } + + @Override + public Item getItemForRenderer() { + return Item.getItemFromBlock(ModBlocks.machine_strand_caster); + } + + @Override + public IItemRenderer getRenderer() { + return new ItemRenderBase( ) { + public void renderInventory() { + GL11.glTranslated(1, 1, 0); + GL11.glScaled(2.5, 2.5, 2.5); + } + public void renderCommon() { + GL11.glScaled(0.5, 0.5, 0.5); + GL11.glShadeModel(GL11.GL_SMOOTH); + bindTexture(ResourceManager.strand_caster_tex); ResourceManager.strand_caster.renderAll(); + GL11.glShadeModel(GL11.GL_FLAT); + } + }; + } + +} diff --git a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java index 593a33505..edf40ace1 100644 --- a/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java +++ b/src/main/java/com/hbm/tileentity/TileEntityProxyCombo.java @@ -1,6 +1,7 @@ package com.hbm.tileentity; +import api.hbm.block.ICrucibleAcceptor; import com.hbm.interfaces.IFluidAcceptor; import com.hbm.interfaces.IFluidContainer; import com.hbm.inventory.fluid.FluidType; @@ -9,14 +10,16 @@ import api.hbm.energy.IEnergyConnector; import api.hbm.energy.IEnergyUser; import api.hbm.fluid.IFluidConnector; import api.hbm.tile.IHeatSource; +import com.hbm.inventory.material.Mats; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; -public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource { +public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergyUser, IFluidAcceptor, ISidedInventory, IFluidConnector, IHeatSource, ICrucibleAcceptor { TileEntity tile; boolean inventory; @@ -501,4 +504,36 @@ public class TileEntityProxyCombo extends TileEntityProxyBase implements IEnergy ((IHeatSource)getTile()).useUpHeat(heat); } } + + @Override + public boolean canAcceptPartialPour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).canAcceptPartialPour(world, x, y, z, dX, dY, dZ, side, stack); + } + return false; + } + + @Override + public Mats.MaterialStack pour(World world, int x, int y, int z, double dX, double dY, double dZ, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).pour(world, x, y, z, dX, dY, dZ, side, stack); + } + return null; + } + + @Override + public boolean canAcceptPartialFlow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).canAcceptPartialFlow(world, x, y, z, side, stack); + } + return false; + } + + @Override + public Mats.MaterialStack flow(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + if(this.moltenMetal && getTile() instanceof ICrucibleAcceptor){ + return ((ICrucibleAcceptor)getTile()).flow(world, x, y, z, side, stack); + } + return null; + } } diff --git a/src/main/java/com/hbm/tileentity/TileMappings.java b/src/main/java/com/hbm/tileentity/TileMappings.java index d51bdab4b..807e3e8df 100644 --- a/src/main/java/com/hbm/tileentity/TileMappings.java +++ b/src/main/java/com/hbm/tileentity/TileMappings.java @@ -297,6 +297,7 @@ public class TileMappings { put(TileEntityFoundryOutlet.class, "tileentity_foundry_outlet"); put(TileEntityFoundrySlagtap.class, "tileentity_foundry_slagtap"); put(TileEntitySlag.class, "tileentity_foundry_slag"); + put(TileEntityMachineStrandCaster.class, "tileentity_strand_caster"); put(TileEntityMachineAutocrafter.class, "tileentity_autocrafter"); put(TileEntityDiFurnaceRTG.class, "tileentity_rtg_difurnace"); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java index 145c2159a..9003229c6 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryBasin.java @@ -7,7 +7,16 @@ import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; public class TileEntityFoundryBasin extends TileEntityFoundryCastingBase implements IRenderFoundry { - + + public TileEntityFoundryBasin() { + super(2); + } + + @Override + public String getName() { + return null; + } + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java index fd3916492..3267ac602 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryCastingBase.java @@ -7,6 +7,7 @@ import com.hbm.items.machine.ItemMold.Mold; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.ISidedInventory; +import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagList; @@ -19,11 +20,15 @@ import net.minecraftforge.common.util.ForgeDirection; * */ public abstract class TileEntityFoundryCastingBase extends TileEntityFoundryBase implements ISidedInventory { - - public ItemStack slots[] = new ItemStack[2]; + public ItemStack[] slots; + public TileEntityFoundryCastingBase(int slotCount) { + slots = new ItemStack[slotCount]; + } public int cooloff = 100; + public abstract String getName(); + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java index 607b1d13c..146e79b1b 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityFoundryMold.java @@ -3,7 +3,16 @@ package com.hbm.tileentity.machine; import com.hbm.inventory.material.NTMMaterial; public class TileEntityFoundryMold extends TileEntityFoundryCastingBase implements IRenderFoundry { - + + public TileEntityFoundryMold() { + super(2); + } + + @Override + public String getName() { + return null; + } + @Override public void updateEntity() { super.updateEntity(); diff --git a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java index cf09975e3..188dd6ab2 100644 --- a/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java +++ b/src/main/java/com/hbm/tileentity/machine/TileEntityMachineStrandCaster.java @@ -3,14 +3,15 @@ package com.hbm.tileentity.machine; import api.hbm.block.ICrucibleAcceptor; import api.hbm.fluid.IFluidStandardTransceiver; import com.hbm.blocks.BlockDummyable; -import com.hbm.inventory.container.ContainerAssemfac; -import com.hbm.inventory.container.ContainerStrandCaster; +import com.hbm.inventory.container.ContainerMachineStrandCaster; +import com.hbm.inventory.fluid.FluidType; import com.hbm.inventory.fluid.Fluids; import com.hbm.inventory.fluid.tank.FluidTank; -import com.hbm.inventory.gui.GUIAssemfac; -import com.hbm.inventory.gui.GUIStrandCaster; +import com.hbm.inventory.gui.GUIMachineStrandCaster; +import com.hbm.inventory.material.Mats; import com.hbm.items.ModItems; import com.hbm.items.machine.ItemMold; +import com.hbm.items.machine.ItemScraps; import com.hbm.packet.NBTPacket; import com.hbm.packet.PacketDispatcher; import com.hbm.tileentity.IGUIProvider; @@ -20,120 +21,169 @@ import cpw.mods.fml.common.network.NetworkRegistry; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.inventory.Container; +import net.minecraft.inventory.IInventory; import net.minecraft.inventory.ISidedInventory; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; //god thank you bob for this base class -public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase implements IGUIProvider, ICrucibleAcceptor,ISidedInventory, IFluidStandardTransceiver, INBTPacketReceiver { +public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase implements IGUIProvider, ICrucibleAcceptor,ISidedInventory, IFluidStandardTransceiver, INBTPacketReceiver, IInventory { + public FluidTank water; public FluidTank steam; - - public ItemStack[] slots = new ItemStack[6]; + @Override + public String getName() { + return "container.machineStrandCaster"; + } + @Override + public String getInventoryName() { + return getName(); + } public TileEntityMachineStrandCaster() { - + super(7); water = new FluidTank(Fluids.WATER, 64_000); steam = new FluidTank(Fluids.SPENTSTEAM, 64_000); } - int cooldown = 10; + + @Override public void updateEntity() { - super.updateEntity(); - if(!worldObj.isRemote) { + if (!worldObj.isRemote) { - if(this.amount > this.getCapacity()) { - this.amount = this.getCapacity(); + if (this.lastType != this.type || this.lastAmount != this.amount) { + worldObj.markBlockForUpdate(xCoord, yCoord, zCoord); + this.lastType = this.type; + this.lastAmount = this.amount; } - if(this.amount == 0) { + if (this.amount >= this.getCapacity()) { + if(amount > getCapacity()) { + ItemStack scrap = ItemScraps.create(new Mats.MaterialStack(type, amount)); + EntityItem item = new EntityItem(worldObj, xCoord + 0.5, yCoord, zCoord + 0.5, scrap); + worldObj.spawnEntityInWorld(item); + } + this.amount = this.getCapacity(); + + } + + if (this.amount == 0) { this.type = null; } - if(worldObj.getTotalWorldTime() % 20 == 0) { + if (worldObj.getTotalWorldTime() % 20 == 0) { this.updateConnections(); } - for(DirPos pos : getConPos()) { - this.sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); - } ItemMold.Mold mold = this.getInstalledMold(); - if(mold != null && this.amount >= this.getCapacity() && slots[1] == null && water.getFill() >= getWaterRequired() ) { - cooldown--; + if (canProcess()) { - if(cooldown <= 0) { - this.amount -= mold.getCost(); + int itemsCasted = Math.min(amount / mold.getCost(), 9); - ItemStack out = mold.getOutput(type); + for (int j = 0; j < itemsCasted; j++) { + this.amount -= mold.getCost(); - for(int i = 1; i < 7; i++) { - if(slots[i].isItemEqual(out) && slots[i].stackSize + out.stackSize <= out.getMaxStackSize()) { - continue; - } + ItemStack out = mold.getOutput(type); + + for (int i = 1; i < 7; i++) { + if (slots[i] == null){ + slots[i] = out.copy(); + break; + } + + if (slots[i].isItemEqual(out) && slots[i].stackSize + out.stackSize <= out.getMaxStackSize()) { + slots[i].stackSize += out.stackSize; + break; + } - if(slots[i] == null) { - slots[i] = out.copy(); - } else { - slots[i].stackSize += out.stackSize; } } + markChanged(); + + water.setFill(water.getFill() - getWaterRequired() * itemsCasted); + steam.setFill(steam.getFill() + getWaterRequired() * itemsCasted); } + } - water.setFill(water.getFill() - getWaterRequired()); - steam.setFill(steam.getFill() + getWaterRequired()); + NBTTagCompound data = new NBTTagCompound(); - cooldown = 20; - } - NBTTagCompound data = new NBTTagCompound(); + water.writeToNBT(data, "w"); + steam.writeToNBT(data, "s"); - water.writeToNBT(data, "w"); - steam.writeToNBT(data, "s"); + this.networkPack(data, 150); - this.networkPack(data, 150); + } + + public boolean canProcess() { + ItemMold.Mold mold = this.getInstalledMold(); + if(type != null && mold != null && this.amount >= mold.getCost() * 9 && mold.getOutput(type) != null) { + for (int i = 1; i < 7; i++) { + + if (slots[i] == null || slots[i].isItemEqual(mold.getOutput(type)) && slots[i].stackSize + mold.getOutput(type).stackSize <= mold.getOutput(type).getMaxStackSize()) + return water.getFill() >= getWaterRequired() && steam.getFill() < steam.getMaxFill();; - } else { - cooldown = 20; } } - + return false; + } public DirPos[] getConPos() { ForgeDirection dir = ForgeDirection.getOrientation(this.getBlockMetadata() - BlockDummyable.offset); ForgeDirection rot = dir.getRotation(ForgeDirection.UP); return new DirPos[] { - new DirPos(xCoord - dir.offsetX, yCoord, zCoord, rot), - new DirPos(xCoord, yCoord, zCoord + dir.offsetX, rot), - new DirPos(xCoord, yCoord, zCoord + dir.offsetX * 5, rot.getOpposite()), - new DirPos(xCoord- dir.offsetX, yCoord, zCoord + dir.offsetX * 5, rot.getOpposite()), + new DirPos(xCoord + rot.offsetX * 2, yCoord, zCoord + rot.offsetZ * 2, rot), + new DirPos(xCoord - rot.offsetX, yCoord, zCoord - rot.offsetZ, rot.getOpposite()), + new DirPos(xCoord + rot.offsetX * 2 - dir.offsetX * 5, yCoord, zCoord + rot.offsetZ * 2 - dir.offsetZ * 5, rot), + new DirPos(xCoord - rot.offsetX - dir.offsetX * 5, yCoord, zCoord - rot.offsetZ + dir.offsetZ * 5, rot.getOpposite()), }; } @Override + public ItemMold.Mold getInstalledMold() { + if(slots[0] == null) return null; + + if(slots[0].getItem() == ModItems.mold) { + return ((ItemMold) slots[0].getItem()).getMold(slots[0]); + } + + return null; + } + @Override public int getMoldSize() { return getInstalledMold().size; } - + @Override + public boolean standardCheck(World world, int x, int y, int z, ForgeDirection side, Mats.MaterialStack stack) { + if(this.type != null && this.type != stack.material) return false; + return this.amount >= this.getCapacity() && getInstalledMold() == null; + } @Override public int getCapacity() { ItemMold.Mold mold = this.getInstalledMold(); - return mold == null ? 0 : mold.getCost() * 10; + return mold == null ? 50000 : mold.getCost() * 50; } private int getWaterRequired() { - return getInstalledMold() != null ? 5 * getInstalledMold().getCost() : 10; + return getInstalledMold() != null ? 5 * getInstalledMold().getCost() : 50; } + private void updateConnections() { for(DirPos pos : getConPos()) { this.trySubscribe(water.getTankType(), worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); } + for(DirPos pos : getConPos()) { + sendFluid(steam, worldObj, pos.getX(), pos.getY(), pos.getZ(), pos.getDir()); + } } @Override @@ -153,14 +203,15 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase @Override public Container provideContainer(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new ContainerStrandCaster(player.inventory, this); + return new ContainerMachineStrandCaster(player.inventory, this); } @Override @SideOnly(Side.CLIENT) public GuiScreen provideGUI(int ID, EntityPlayer player, World world, int x, int y, int z) { - return new GUIStrandCaster(player.inventory, this); + return new GUIMachineStrandCaster(player.inventory, this); } + public void networkPack(NBTTagCompound nbt, int range) { if(!worldObj.isRemote) @@ -170,6 +221,20 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase public void networkUnpack(NBTTagCompound nbt) { water.readFromNBT(nbt, "w"); steam.readFromNBT(nbt, "s"); + + } + @Override + public void writeToNBT(NBTTagCompound nbt) { + super.writeToNBT(nbt); + water.writeToNBT(nbt, "w"); + steam.writeToNBT(nbt, "s"); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) { + super.readFromNBT(nbt); + water.readFromNBT(nbt, "w"); + steam.readFromNBT(nbt, "s"); } @Override public boolean isItemValidForSlot(int i, ItemStack stack) { @@ -192,4 +257,47 @@ public class TileEntityMachineStrandCaster extends TileEntityFoundryCastingBase return new int[] { 1, 2, 3, 4, 5, 6}; } + public void markChanged() { + this.worldObj.markTileEntityChunkModified(this.xCoord, this.yCoord, this.zCoord, this); + } + @Override + public boolean isUseableByPlayer(EntityPlayer player) { + if(worldObj.getTileEntity(xCoord, yCoord, zCoord) != this) { + return false; + } else { + return player.getDistanceSq(xCoord + 0.5D, yCoord + 0.5D, zCoord + 0.5D) <= 128; + } + } + + + @Override + public boolean canInsertItem(int slot, ItemStack itemStack, int side) { + return this.isItemValidForSlot(slot, itemStack); + } + + @Override + public boolean canExtractItem(int slot, ItemStack itemStack, int side) { + return !this.isItemValidForSlot(slot, itemStack); + } + AxisAlignedBB bb = null; + + @Override + public AxisAlignedBB getRenderBoundingBox() { + + if(bb == null) { + bb = AxisAlignedBB.getBoundingBox( + xCoord - 1, + yCoord, + zCoord - 1, + xCoord + 2, + yCoord + 3, + zCoord + 7 + ); + } + + return bb; + } + + + } diff --git a/src/main/resources/assets/hbm/lang/en_US.lang b/src/main/resources/assets/hbm/lang/en_US.lang index f9681a2c0..7e4307b2a 100644 --- a/src/main/resources/assets/hbm/lang/en_US.lang +++ b/src/main/resources/assets/hbm/lang/en_US.lang @@ -720,6 +720,7 @@ container.machineSelenium=Radial Performance Engine container.machineShredder=Shredder container.machineSILEX=SILEX container.machineSolidifier=Solidifier +container.machineStrandCaster=Strand Caster container.machineTurbine=Steam Turbine container.machineTurbofan=Turbofan container.machineWoodBurner=Wood-Burner @@ -5190,6 +5191,7 @@ tile.machine_stirling_creative.desc=Turns heat into energy. Requires external he tile.machine_stirling_steel.name=Heavy Stirling Engine tile.machine_stirling_steel.desc=Turns heat into energy. Requires external heat source.$Uses a much heavier gear to support higher temperatures.$Heat transfer rate: T*0.1 TU/t$Max intake: 1500 TU/t$Efficiency: 50%% tile.machine_storage_drum.name=Nuclear Waste Disposal Drum +tile.machine_strand_caster.name=Strand Caster tile.machine_telelinker.name=Turret Telemetry Linker tile.machine_teleporter.name=Teleporter tile.machine_tower_large.name=Cooling Tower diff --git a/src/main/resources/assets/hbm/models/machines/strand_caster.obj b/src/main/resources/assets/hbm/models/machines/strand_caster.obj new file mode 100644 index 000000000..2a3ac8b78 --- /dev/null +++ b/src/main/resources/assets/hbm/models/machines/strand_caster.obj @@ -0,0 +1,1214 @@ +# Blender v2.79 (sub 0) OBJ File: 'strand_caster.blend' +# www.blender.org +o Plane +v -1.000000 0.000000 1.000000 +v 1.000000 0.000000 1.000000 +v -1.000000 0.000000 -6.000000 +v 1.000000 0.000000 -6.000000 +v -1.000000 0.750000 -6.000000 +v -1.000000 0.750000 1.000000 +v 1.000000 0.750000 1.000000 +v 1.000000 0.750000 -6.000000 +v -1.000000 2.000000 1.000000 +v 1.000000 2.000000 1.000000 +v -1.000000 3.000000 1.000000 +v 1.000000 3.000000 1.000000 +v -1.000000 2.000000 -1.000000 +v 1.000000 2.000000 -1.000000 +v -1.000000 3.000000 -1.000000 +v 1.000000 3.000000 -1.000000 +v -0.875000 3.000000 0.875000 +v 0.875000 3.000000 0.875000 +v -0.875000 3.000000 -0.875000 +v 0.875000 3.000000 -0.875000 +v -0.875000 2.125000 0.875000 +v 0.875000 2.125000 0.875000 +v -0.875000 2.125000 -0.875000 +v 0.875000 2.125000 -0.875000 +v -0.750000 2.000000 0.750000 +v 0.750000 2.000000 0.750000 +v -0.750000 2.000000 -0.750000 +v 0.750000 2.000000 -0.750000 +v -0.750000 0.500000 -1.500000 +v -0.750000 0.500000 0.750000 +v 0.750000 0.500000 0.750000 +v 0.750000 0.500000 -1.500000 +v -0.750000 0.750000 -5.750000 +v -0.750000 0.750000 0.750000 +v 0.750000 0.750000 0.750000 +v 0.750000 0.750000 -5.750000 +v -0.750000 0.500000 -5.750000 +v -0.750000 0.500000 0.750000 +v 0.750000 0.500000 0.750000 +v 0.750000 0.500000 -5.750000 +v -0.500000 0.937500 -1.500000 +v 0.500000 0.937500 -1.500000 +v -0.500000 0.937500 -5.250000 +v 0.500000 0.937500 -5.250000 +v -0.500000 1.062500 -5.250000 +v -0.500000 1.062500 -1.500000 +v 0.500000 1.062500 -1.500000 +v 0.500000 1.062500 -5.250000 +v 0.750000 1.250000 -1.500000 +v -0.750000 1.250000 -1.500000 +v 0.750000 0.812500 -3.125000 +v -0.750000 0.812500 -3.125000 +v -0.750000 0.812500 -2.125000 +v 0.750000 0.812500 -2.125000 +v -0.750000 0.724112 -2.088388 +v 0.750000 0.724112 -2.088388 +v -0.750000 0.687500 -2.000000 +v 0.750000 0.687500 -2.000000 +v -0.750000 0.724112 -1.911612 +v 0.750000 0.724112 -1.911612 +v -0.750000 0.812500 -1.875000 +v 0.750000 0.812500 -1.875000 +v -0.750000 0.900888 -1.911612 +v 0.750000 0.900888 -1.911612 +v -0.750000 0.937500 -2.000000 +v 0.750000 0.937500 -2.000000 +v -0.750000 0.900888 -2.088388 +v 0.750000 0.900888 -2.088388 +v -0.750000 0.724112 -3.088388 +v 0.750000 0.724112 -3.088388 +v -0.750000 0.687500 -3.000000 +v 0.750000 0.687500 -3.000000 +v -0.750000 0.724112 -2.911612 +v 0.750000 0.724112 -2.911612 +v -0.750000 0.812500 -2.875000 +v 0.750000 0.812500 -2.875000 +v -0.750000 0.900888 -2.911612 +v 0.750000 0.900888 -2.911612 +v -0.750000 0.937500 -3.000000 +v 0.750000 0.937500 -3.000000 +v -0.750000 0.900888 -3.088388 +v 0.750000 0.900888 -3.088388 +v 0.750000 0.812500 -4.125000 +v -0.750000 0.812500 -4.125000 +v -0.750000 0.724112 -4.088388 +v 0.750000 0.724112 -4.088388 +v -0.750000 0.687500 -4.000000 +v 0.750000 0.687500 -4.000000 +v -0.750000 0.724112 -3.911612 +v 0.750000 0.724112 -3.911612 +v -0.750000 0.812500 -3.875000 +v 0.750000 0.812500 -3.875000 +v -0.750000 0.900888 -3.911612 +v 0.750000 0.900888 -3.911612 +v -0.750000 0.937500 -4.000000 +v 0.750000 0.937500 -4.000000 +v -0.750000 0.900888 -4.088388 +v 0.750000 0.900888 -4.088388 +v 0.750000 0.812500 -5.125000 +v -0.750000 0.812500 -5.125000 +v -0.750000 0.724112 -5.088388 +v 0.750000 0.724112 -5.088388 +v -0.750000 0.687500 -5.000000 +v 0.750000 0.687500 -5.000000 +v -0.750000 0.724112 -4.911612 +v 0.750000 0.724112 -4.911612 +v -0.750000 0.812500 -4.875000 +v 0.750000 0.812500 -4.875000 +v -0.750000 0.900888 -4.911612 +v 0.750000 0.900888 -4.911612 +v -0.750000 0.937500 -5.000000 +v 0.750000 0.937500 -5.000000 +v -0.750000 0.900888 -5.088388 +v 0.750000 0.900888 -5.088388 +v 0.750000 1.187500 -3.625000 +v -0.750000 1.187500 -3.625000 +v -0.750000 1.187500 -2.625000 +v 0.750000 1.187500 -2.625000 +v -0.750000 1.099112 -2.588388 +v 0.750000 1.099112 -2.588388 +v -0.750000 1.062500 -2.500000 +v 0.750000 1.062500 -2.500000 +v -0.750000 1.099112 -2.411612 +v 0.750000 1.099112 -2.411612 +v -0.750000 1.187500 -2.375000 +v 0.750000 1.187500 -2.375000 +v -0.750000 1.275888 -2.411612 +v 0.750000 1.275888 -2.411612 +v -0.750000 1.312500 -2.500000 +v 0.750000 1.312500 -2.500000 +v -0.750000 1.275888 -2.588388 +v 0.750000 1.275888 -2.588388 +v -0.750000 1.099112 -3.588388 +v 0.750000 1.099112 -3.588388 +v -0.750000 1.062500 -3.500000 +v 0.750000 1.062500 -3.500000 +v -0.750000 1.099112 -3.411612 +v 0.750000 1.099112 -3.411612 +v -0.750000 1.187500 -3.375000 +v 0.750000 1.187500 -3.375000 +v -0.750000 1.275888 -3.411612 +v 0.750000 1.275888 -3.411612 +v -0.750000 1.312500 -3.500000 +v 0.750000 1.312500 -3.500000 +v -0.750000 1.275888 -3.588388 +v 0.750000 1.275888 -3.588388 +v 0.750000 1.187500 -4.625000 +v -0.750000 1.187500 -4.625000 +v -0.750000 1.099112 -4.588388 +v 0.750000 1.099112 -4.588388 +v -0.750000 1.062500 -4.500000 +v 0.750000 1.062500 -4.500000 +v -0.750000 1.099112 -4.411612 +v 0.750000 1.099112 -4.411612 +v -0.750000 1.187500 -4.375000 +v 0.750000 1.187500 -4.375000 +v -0.750000 1.275888 -4.411612 +v 0.750000 1.275888 -4.411612 +v -0.750000 1.312500 -4.500000 +v 0.750000 1.312500 -4.500000 +v -0.750000 1.275888 -4.588388 +v 0.750000 1.275888 -4.588388 +v 0.750000 0.937500 -2.125000 +v 0.875000 0.937500 -2.125000 +v 0.750000 0.937500 -2.375000 +v 0.875000 0.937500 -2.375000 +v 0.750000 1.062500 -2.375000 +v -0.750000 1.312500 -2.125000 +v -0.875000 1.312500 -2.125000 +v 0.875000 1.062500 -2.375000 +v -0.750000 1.062500 -2.375000 +v 0.750000 1.312500 -2.125000 +v 0.875000 1.312500 -2.125000 +v -0.875000 1.062500 -2.375000 +v 0.875000 1.062500 -4.625000 +v 0.750000 1.062500 -4.625000 +v -0.750000 0.937500 -2.375000 +v -0.875000 0.937500 -2.375000 +v -0.750000 0.937500 -2.125000 +v -0.875000 0.937500 -2.125000 +v 0.875000 1.312500 -4.875000 +v 0.750000 1.312500 -4.875000 +v 0.875000 0.937500 -4.625000 +v 0.750000 0.937500 -4.625000 +v 0.875000 0.937500 -4.875000 +v 0.750000 0.937500 -4.875000 +v -0.750000 1.062500 -4.625000 +v -0.875000 1.062500 -4.625000 +v -0.750000 1.312500 -4.875000 +v -0.875000 1.312500 -4.875000 +v -0.750000 0.937500 -4.625000 +v -0.875000 0.937500 -4.625000 +v -0.750000 0.937500 -4.875000 +v -0.875000 0.937500 -4.875000 +v 0.750000 0.937500 -1.625000 +v 0.875000 0.937500 -1.625000 +v -0.750000 0.937500 -1.625000 +v -0.875000 0.937500 -1.625000 +v 0.750000 0.937500 -5.375000 +v 0.875000 0.937500 -5.375000 +v -0.750000 0.937500 -5.375000 +v -0.875000 0.937500 -5.375000 +v 0.750000 0.750000 -1.625000 +v 0.875000 0.750000 -1.625000 +v -0.875000 0.750000 -1.625000 +v -0.750000 0.750000 -1.625000 +v 0.750000 0.750000 -5.375000 +v 0.875000 0.750000 -5.375000 +v -0.875000 0.750000 -5.375000 +v -0.750000 0.750000 -5.375000 +v 0.250000 1.250000 -1.500000 +v 0.161612 1.275888 -1.474112 +v 0.125000 1.338388 -1.411612 +v 0.161612 1.400888 -1.349112 +v 0.250000 1.426777 -1.323223 +v 0.338388 1.400888 -1.349112 +v 0.375000 1.338388 -1.411612 +v 0.338388 1.275888 -1.474112 +v 0.250000 1.426777 -1.573223 +v 0.161612 1.426777 -1.536612 +v 0.125000 1.426777 -1.448223 +v 0.161612 1.426777 -1.359835 +v 0.338388 1.426777 -1.359835 +v 0.375000 1.426777 -1.448223 +v 0.338388 1.426777 -1.536612 +v 0.250000 1.603553 -1.500000 +v 0.161612 1.577665 -1.474112 +v 0.125000 1.515165 -1.411612 +v 0.161612 1.452665 -1.349112 +v 0.338388 1.452665 -1.349112 +v 0.375000 1.515165 -1.411612 +v 0.338388 1.577665 -1.474112 +v -0.161612 1.275888 -1.474112 +v -0.125000 1.338388 -1.411612 +v -0.161612 1.400888 -1.349112 +v -0.250000 1.426777 -1.323223 +v -0.338388 1.400888 -1.349112 +v -0.375000 1.338388 -1.411612 +v -0.338388 1.275888 -1.474112 +v -0.250000 1.250000 -1.500000 +v 0.161612 2.152189 -0.899587 +v 0.250000 2.178077 -0.925476 +v 0.125000 2.089689 -0.837087 +v 0.161612 2.027189 -0.774587 +v 0.375000 2.089689 -0.837087 +v 0.338388 2.027189 -0.774587 +v 0.338388 2.152189 -0.899587 +v 0.250000 2.001301 -0.748699 +v -0.250000 1.426777 -1.573223 +v -0.338388 1.426777 -1.536612 +v -0.375000 1.426777 -1.448223 +v -0.338388 1.426777 -1.359835 +v -0.161612 1.426777 -1.359835 +v -0.125000 1.426777 -1.448223 +v -0.161612 1.426777 -1.536612 +v -0.250000 1.603553 -1.500000 +v -0.338388 1.577665 -1.474112 +v -0.375000 1.515165 -1.411612 +v -0.338388 1.452665 -1.349112 +v -0.161612 1.452665 -1.349112 +v -0.125000 1.515165 -1.411612 +v -0.161612 1.577665 -1.474112 +v -0.338388 2.152189 -0.899587 +v -0.250000 2.178077 -0.925476 +v -0.375000 2.089689 -0.837087 +v -0.338388 2.027189 -0.774587 +v -0.125000 2.089689 -0.837087 +v -0.161612 2.027189 -0.774587 +v -0.161612 2.152189 -0.899587 +v -0.250000 2.001301 -0.748699 +v 0.750000 0.750000 -0.125000 +v 0.750000 2.000000 -0.125000 +v 0.838388 0.750000 -0.088388 +v 0.838388 2.000000 -0.088388 +v 0.875000 0.750000 0.000000 +v 0.875000 2.000000 0.000000 +v 0.838388 0.750000 0.088388 +v 0.838388 2.000000 0.088388 +v 0.750000 0.750000 0.125000 +v 0.750000 2.000000 0.125000 +v 0.750000 0.750000 0.375000 +v 0.750000 2.000000 0.375000 +v 0.838388 0.750000 0.411612 +v 0.838388 2.000000 0.411612 +v 0.875000 0.750000 0.500000 +v 0.875000 2.000000 0.500000 +v 0.838388 0.750000 0.588388 +v 0.838388 2.000000 0.588388 +v 0.750000 0.750000 0.625000 +v 0.750000 2.000000 0.625000 +v 0.750000 0.750000 -0.625000 +v 0.750000 2.000000 -0.625000 +v 0.838388 0.750000 -0.588388 +v 0.838388 2.000000 -0.588388 +v 0.875000 0.750000 -0.500000 +v 0.875000 2.000000 -0.500000 +v 0.838388 0.750000 -0.411612 +v 0.838388 2.000000 -0.411612 +v 0.750000 0.750000 -0.375000 +v 0.750000 2.000000 -0.375000 +v -0.750000 0.750000 -0.125000 +v -0.750000 2.000000 -0.125000 +v -0.750000 0.750000 0.125000 +v -0.750000 2.000000 0.125000 +v -0.838388 0.750000 0.088388 +v -0.838388 2.000000 0.088388 +v -0.875000 0.750000 0.000000 +v -0.875000 2.000000 0.000000 +v -0.838388 0.750000 -0.088388 +v -0.838388 2.000000 -0.088388 +v -0.750000 0.750000 0.375000 +v -0.750000 2.000000 0.375000 +v -0.750000 0.750000 0.625000 +v -0.750000 2.000000 0.625000 +v -0.838388 0.750000 0.588388 +v -0.838388 2.000000 0.588388 +v -0.875000 0.750000 0.500000 +v -0.875000 2.000000 0.500000 +v -0.838388 0.750000 0.411612 +v -0.838388 2.000000 0.411612 +v -0.750000 0.750000 -0.625000 +v -0.750000 2.000000 -0.625000 +v -0.750000 0.750000 -0.375000 +v -0.750000 2.000000 -0.375000 +v -0.838388 0.750000 -0.411612 +v -0.838388 2.000000 -0.411612 +v -0.875000 0.750000 -0.500000 +v -0.875000 2.000000 -0.500000 +v -0.838388 0.750000 -0.588388 +v -0.838388 2.000000 -0.588388 +vt 0.484375 0.100000 +vt 0.046875 0.366667 +vt 0.046875 0.100000 +vt 0.484375 0.733333 +vt 0.468750 0.500000 +vt 0.484375 0.466667 +vt 0.531250 0.366667 +vt 0.484375 0.366667 +vt -0.000000 0.100000 +vt 0.046875 0.466667 +vt 0.484375 -0.000000 +vt 0.656250 0.600000 +vt 0.531250 0.466667 +vt 0.656250 0.466667 +vt 0.656250 0.466667 +vt 0.531250 0.600000 +vt 0.531250 0.466667 +vt 0.531250 0.466667 +vt 0.656250 0.600000 +vt 0.531250 0.600000 +vt 0.531250 0.200000 +vt 0.656250 0.466667 +vt 0.656250 0.600000 +vt 0.531250 0.466667 +vt 0.656250 0.466667 +vt 0.539062 0.616667 +vt 0.531250 0.600000 +vt 0.648438 0.616667 +vt 0.539062 0.733333 +vt 0.539062 0.616667 +vt 0.656250 0.600000 +vt 0.539062 0.616667 +vt 0.539062 0.616667 +vt 0.531250 0.600000 +vt 0.539062 0.733333 +vt 0.648438 0.966667 +vt 0.539062 0.966667 +vt 0.648438 0.616667 +vt 0.539062 0.733333 +vt 0.648438 0.616667 +vt 0.648438 0.616667 +vt 0.539062 0.733333 +vt 0.468750 0.733333 +vt 0.062500 0.766667 +vt 0.062500 0.733333 +vt 0.062500 0.700000 +vt 0.046875 0.733333 +vt 0.531250 -0.000000 +vt 0.671875 -0.000000 +vt 0.671875 0.100000 +vt 0.812500 0.200000 +vt 0.765625 -0.000000 +vt 0.906250 -0.000000 +vt 0.765625 0.100000 +vt 0.906250 0.200000 +vt 1.000000 -0.000000 +vt 1.000000 0.200000 +vt 0.058594 0.500000 +vt 0.468750 0.700000 +vt 0.468750 0.966667 +vt 0.062500 0.966667 +vt 0.062500 1.000000 +vt 0.468750 1.000000 +vt 0.484375 0.966667 +vt 0.468750 0.766667 +vt 0.484375 0.766667 +vt 0.046875 0.766667 +vt 0.046875 0.966667 +vt 0.890625 0.566667 +vt 0.656250 0.700000 +vt 0.656250 0.566667 +vt 0.656250 0.566667 +vt 0.890625 0.700000 +vt 0.656250 0.700000 +vt 0.664062 0.700000 +vt 0.656250 0.566667 +vt 0.664062 0.566667 +vt 0.890625 0.683333 +vt 0.656250 0.700000 +vt 0.656250 0.683333 +vt 0.656250 0.583333 +vt 0.890625 0.566667 +vt 0.890625 0.583333 +vt 0.671875 0.200000 +vt 0.765625 0.200000 +vt 0.695312 0.550000 +vt 0.679688 0.566667 +vt 0.679688 0.516667 +vt 0.875000 0.500000 +vt 0.851562 0.516667 +vt 0.851562 0.500000 +vt 0.687500 0.433333 +vt 0.695312 0.450000 +vt 0.687500 0.450000 +vt 0.695312 0.466667 +vt 0.679688 0.450000 +vt 0.695312 0.450000 +vt 0.835938 0.550000 +vt 0.851562 0.566667 +vt 0.835938 0.566667 +vt 0.679688 0.500000 +vt 0.656250 0.516667 +vt 0.656250 0.500000 +vt 0.695312 0.433333 +vt 0.835938 0.450000 +vt 0.695312 0.450000 +vt 0.835938 0.433333 +vt 0.843750 0.450000 +vt 0.695312 0.466667 +vt 0.679688 0.500000 +vt 0.851562 0.500000 +vt 0.679688 0.450000 +vt 0.695312 0.450000 +vt 0.835938 0.466667 +vt 0.851562 0.450000 +vt 0.695312 0.433333 +vt 0.835938 0.450000 +vt 0.679688 0.516667 +vt 0.835938 0.550000 +vt 0.851562 0.566667 +vt 0.835938 0.566667 +vt 0.656250 0.516667 +vt 0.656250 0.500000 +vt 0.695312 0.550000 +vt 0.679688 0.566667 +vt 0.835938 0.466667 +vt 0.851562 0.450000 +vt 0.835938 0.433333 +vt 0.843750 0.450000 +vt 0.687500 0.433333 +vt 0.687500 0.450000 +vt 0.875000 0.500000 +vt 0.851562 0.516667 +vt 0.902344 0.391667 +vt 0.667969 0.408333 +vt 0.667969 0.391667 +vt 0.902344 0.391667 +vt 0.667969 0.408333 +vt 0.667969 0.391667 +vt 0.902344 0.366667 +vt 0.914062 0.408333 +vt 0.902344 0.408333 +vt 0.656250 0.391667 +vt 0.667969 0.433333 +vt 0.902344 0.408333 +vt 0.667969 0.433333 +vt 0.914062 0.408333 +vt 0.656250 0.391667 +vt 0.902344 0.366667 +vt 0.531250 0.100000 +vt 0.000000 0.366667 +vt 0.046875 -0.000000 +vt 0.656250 0.200000 +vt 0.648438 0.733333 +vt 0.648438 0.733333 +vt 0.648438 0.733333 +vt 0.648438 0.733333 +vt 0.621094 0.200000 +vt 0.531250 0.200000 +vt 0.890625 0.700000 +vt 0.890625 0.566667 +vt 0.656250 0.700000 +vt 0.890625 0.700000 +vt 0.656250 0.566667 +vt 0.695312 0.566667 +vt 0.875000 0.516667 +vt 0.843750 0.433333 +vt 0.835938 0.450000 +vt 0.695312 0.566667 +vt 0.835938 0.450000 +vt 0.843750 0.433333 +vt 0.875000 0.516667 +vt 0.667969 0.366667 +vt 0.914062 0.391667 +vt 0.656250 0.408333 +vt 0.902344 0.433333 +vt 0.902344 0.433333 +vt 0.914062 0.391667 +vt 0.656250 0.408333 +vt 0.667969 0.366667 +vt 0.921875 0.200000 +vt 0.929688 0.400000 +vt 0.921875 0.400000 +vt 0.960938 0.200000 +vt 0.968750 0.400000 +vt 0.960938 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.937500 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.937500 0.400000 +vt 0.929688 0.200000 +vt 0.929688 0.400000 +vt 0.914062 0.200000 +vt 0.921875 0.400000 +vt 0.914062 0.400000 +vt 0.921875 0.200000 +vt 0.921875 0.400000 +vt 0.921875 0.200000 +vt 0.929688 0.400000 +vt 0.914062 0.200000 +vt 0.914062 0.400000 +vt 0.929688 0.200000 +vt 0.937500 0.400000 +vt 0.953125 0.200000 +vt 0.960938 0.400000 +vt 0.953125 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.968750 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.960938 0.200000 +vt 0.945312 0.200000 +vt 0.953125 0.400000 +vt 0.929688 0.200000 +vt 0.945312 0.200000 +vt 0.953125 0.200000 +vt 0.914062 0.200000 +vt 0.914062 0.400000 +vt 0.953125 0.200000 +vt 0.960938 0.400000 +vt 0.953125 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.968750 0.400000 +vt 0.960938 0.200000 +vt 0.945312 0.200000 +vt 0.921875 0.200000 +vt 0.929688 0.400000 +vt 0.921875 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.937500 0.400000 +vt 0.929688 0.200000 +vt 0.914062 0.200000 +vt 0.914062 0.400000 +vt 0.953125 0.200000 +vt 0.960938 0.400000 +vt 0.953125 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.968750 0.400000 +vt 0.960938 0.200000 +vt 0.945312 0.200000 +vt 0.921875 0.200000 +vt 0.929688 0.400000 +vt 0.921875 0.400000 +vt 0.960938 0.200000 +vt 0.968750 0.400000 +vt 0.960938 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.937500 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.937500 0.400000 +vt 0.929688 0.200000 +vt 0.929688 0.400000 +vt 0.914062 0.200000 +vt 0.921875 0.400000 +vt 0.914062 0.400000 +vt 0.921875 0.200000 +vt 0.921875 0.400000 +vt 0.921875 0.200000 +vt 0.929688 0.400000 +vt 0.914062 0.200000 +vt 0.914062 0.400000 +vt 0.929688 0.200000 +vt 0.937500 0.400000 +vt 0.953125 0.200000 +vt 0.960938 0.400000 +vt 0.953125 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.968750 0.400000 +vt 0.937500 0.200000 +vt 0.945312 0.400000 +vt 0.960938 0.200000 +vt 0.945312 0.200000 +vt 0.953125 0.400000 +vt 0.929688 0.200000 +vt 0.945312 0.200000 +vt 0.953125 0.200000 +vt 0.914062 0.200000 +vt 0.914062 0.400000 +vt 0.953125 0.200000 +vt 0.960938 0.400000 +vt 0.953125 0.400000 +vt 0.968750 0.200000 +vt 0.976562 0.400000 +vt 0.968750 0.400000 +vt 0.960938 0.200000 +vt 0.945312 0.200000 +vt 0.695312 0.341667 +vt 0.703125 0.333333 +vt 0.703125 0.350000 +vt 0.710938 0.358333 +vt 0.718750 0.333333 +vt 0.718750 0.358333 +vt 0.726562 0.358333 +vt 0.734375 0.333333 +vt 0.742188 0.341667 +vt 0.734375 0.350000 +vt 0.710938 0.333333 +vt 0.726562 0.333333 +vt 0.726562 0.308333 +vt 0.734375 0.316667 +vt 0.742188 0.333333 +vt 0.703125 0.316667 +vt 0.695312 0.325000 +vt 0.695312 0.333333 +vt 0.710938 0.308333 +vt 0.687500 0.333333 +vt 0.750000 0.333333 +vt 0.742188 0.325000 +vt 0.742188 0.200000 +vt 0.750000 0.308333 +vt 0.742188 0.308333 +vt 0.718750 0.358333 +vt 0.726562 0.333333 +vt 0.726562 0.358333 +vt 0.734375 0.200000 +vt 0.734375 0.308333 +vt 0.695312 0.200000 +vt 0.703125 0.308333 +vt 0.695312 0.308333 +vt 0.718750 0.200000 +vt 0.718750 0.308333 +vt 0.703125 0.200000 +vt 0.695312 0.341667 +vt 0.703125 0.333333 +vt 0.703125 0.350000 +vt 0.687500 0.200000 +vt 0.687500 0.308333 +vt 0.710938 0.333333 +vt 0.710938 0.358333 +vt 0.718750 0.333333 +vt 0.726562 0.308333 +vt 0.703125 0.316667 +vt 0.734375 0.333333 +vt 0.742188 0.341667 +vt 0.734375 0.350000 +vt 0.734375 0.316667 +vt 0.742188 0.333333 +vt 0.710938 0.200000 +vt 0.695312 0.333333 +vt 0.710938 0.308333 +vt 0.687500 0.333333 +vt 0.695312 0.325000 +vt 0.750000 0.333333 +vt 0.742188 0.325000 +vt 0.742188 0.200000 +vt 0.750000 0.308333 +vt 0.742188 0.308333 +vt 0.734375 0.200000 +vt 0.734375 0.308333 +vt 0.695312 0.200000 +vt 0.703125 0.308333 +vt 0.695312 0.308333 +vt 0.718750 0.200000 +vt 0.718750 0.308333 +vt 0.703125 0.200000 +vt 0.687500 0.200000 +vt 0.687500 0.308333 +vt 0.710938 0.200000 +vt 0.687500 0.366667 +vt 0.679688 0.200000 +vt 0.687500 0.200000 +vt 0.679688 0.366667 +vt 0.671875 0.200000 +vt 0.671875 0.366667 +vt 0.664062 0.200000 +vt 0.664062 0.366667 +vt 0.656250 0.200000 +vt 0.679688 0.366667 +vt 0.671875 0.200000 +vt 0.679688 0.200000 +vt 0.687500 0.366667 +vt 0.687500 0.200000 +vt 0.671875 0.366667 +vt 0.664062 0.200000 +vt 0.664062 0.366667 +vt 0.656250 0.200000 +vt 0.679688 0.366667 +vt 0.671875 0.200000 +vt 0.679688 0.200000 +vt 0.687500 0.366667 +vt 0.687500 0.200000 +vt 0.671875 0.366667 +vt 0.664062 0.200000 +vt 0.664062 0.366667 +vt 0.656250 0.200000 +vt 0.687500 0.366667 +vt 0.679688 0.200000 +vt 0.687500 0.200000 +vt 0.679688 0.366667 +vt 0.671875 0.200000 +vt 0.671875 0.366667 +vt 0.664062 0.200000 +vt 0.664062 0.366667 +vt 0.656250 0.200000 +vt 0.687500 0.366667 +vt 0.679688 0.200000 +vt 0.687500 0.200000 +vt 0.679688 0.366667 +vt 0.671875 0.200000 +vt 0.671875 0.366667 +vt 0.664062 0.200000 +vt 0.664062 0.366667 +vt 0.656250 0.200000 +vt 0.687500 0.366667 +vt 0.679688 0.200000 +vt 0.687500 0.200000 +vt 0.679688 0.366667 +vt 0.671875 0.200000 +vt 0.671875 0.366667 +vt 0.664062 0.200000 +vt 0.664062 0.366667 +vt 0.656250 0.200000 +vt 0.976562 0.200000 +vt 0.976562 0.200000 +vt 0.976562 0.200000 +vt 0.976562 0.200000 +vt 0.976562 0.200000 +vt 0.976562 0.200000 +vt 0.976562 0.200000 +vt 0.750000 0.200000 +vt 0.726562 0.200000 +vt 0.750000 0.200000 +vt 0.726562 0.200000 +vt 0.656250 0.366667 +vt 0.656250 0.366667 +vt 0.656250 0.366667 +vt 0.656250 0.366667 +vt 0.656250 0.366667 +vt 0.656250 0.366667 +vn 0.0000 -1.0000 0.0000 +vn 0.0000 1.0000 0.0000 +vn 0.0000 0.0000 -1.0000 +vn 0.0000 0.0000 1.0000 +vn 1.0000 0.0000 0.0000 +vn -1.0000 0.0000 0.0000 +vn 0.0000 0.7071 -0.7071 +vn -0.0000 -0.7071 0.7071 +vn -0.0000 -0.7071 -0.7071 +vn -0.0000 0.7071 0.7071 +vn -0.7311 0.2611 0.6303 +vn -0.9955 -0.0000 -0.0949 +vn -0.9947 -0.0393 -0.0948 +vn -0.6333 -0.2962 -0.7150 +vn -0.0000 -0.3827 -0.9239 +vn 0.6333 -0.2962 -0.7150 +vn 0.9955 -0.0000 -0.0949 +vn 0.7311 0.2611 0.6303 +vn 0.9947 -0.0393 -0.0948 +vn -0.6630 -0.0000 -0.7486 +vn 0.6630 -0.0000 -0.7486 +vn 0.6794 0.4063 -0.6110 +vn 0.9987 0.0196 -0.0473 +vn 0.7574 -0.0000 0.6530 +vn -0.9987 0.0196 -0.0473 +vn -0.7263 -0.3800 0.5728 +vn -0.7574 -0.0000 0.6530 +vn -0.6794 0.4063 -0.6110 +vn 0.0000 -0.5562 0.8311 +vn 0.7263 -0.3800 0.5728 +vn 0.7071 -0.5000 0.5000 +vn -0.7071 -0.5000 0.5000 +vn 0.0000 0.5628 -0.8266 +vn -0.7071 0.5000 -0.5000 +vn 0.3827 0.0000 -0.9239 +vn 0.7071 0.0000 -0.7071 +vn 0.7071 0.0000 0.7071 +vn 0.3827 0.0000 0.9239 +vn -0.3827 0.0000 0.9239 +vn -0.7071 0.0000 0.7071 +vn -0.7071 0.0000 -0.7071 +vn -0.3827 0.0000 -0.9239 +vn 0.7071 0.5000 -0.5000 +s off +f 3/1/1 2/2/1 1/3/1 +f 5/4/2 36/5/2 8/6/2 +f 3/1/3 8/7/3 4/8/3 +f 2/2/4 6/9/4 1/3/4 +f 4/8/5 7/10/5 2/2/5 +f 1/3/6 5/11/6 3/1/6 +f 12/12/4 9/13/4 10/14/4 +f 13/15/3 16/16/3 14/17/3 +f 10/18/5 16/19/5 12/20/5 +f 9/21/1 14/22/1 10/18/1 +f 11/23/6 13/24/6 9/25/6 +f 11/23/2 19/26/2 15/27/2 +f 17/28/5 23/29/5 19/26/5 +f 16/19/2 18/30/2 12/20/2 +f 15/31/2 20/32/2 16/16/2 +f 12/12/2 17/33/2 11/34/2 +f 22/35/2 23/36/2 21/37/2 +f 19/38/4 24/39/4 20/32/4 +f 20/40/6 22/35/6 18/30/6 +f 18/41/3 21/42/3 17/33/3 +f 36/43/6 39/44/6 35/45/6 +f 7/10/2 34/46/2 6/47/2 +f 31/48/5 32/49/5 49/50/5 +f 27/51/6 29/52/6 30/53/6 +f 49/50/3 29/52/3 50/54/3 +f 25/55/4 31/56/4 26/57/4 +f 8/6/2 35/58/2 7/10/2 +f 6/47/2 33/59/2 5/4/2 +f 39/44/2 37/60/2 38/61/2 +f 34/62/5 37/60/5 33/63/5 +f 33/64/4 40/65/4 36/66/4 +f 35/67/3 38/61/3 34/68/3 +f 43/69/1 42/70/1 41/71/1 +f 47/72/2 45/73/2 46/74/2 +f 43/75/3 48/76/3 44/77/3 +f 44/78/5 47/79/5 42/80/5 +f 41/81/6 45/82/6 43/83/6 +f 28/84/7 50/54/7 27/85/7 +f 167/86/6 163/87/6 172/88/6 +f 193/89/3 190/90/3 189/91/3 +f 165/92/3 170/93/3 166/94/3 +f 170/95/5 164/96/5 166/97/5 +f 188/98/6 194/99/6 192/100/6 +f 173/101/4 163/102/4 164/103/4 +f 174/104/1 187/105/1 171/106/1 +f 188/107/4 191/108/4 187/105/4 +f 171/109/5 189/91/5 168/110/5 +f 181/111/2 172/88/2 173/101/2 +f 171/109/5 179/112/5 177/113/5 +f 187/114/5 193/115/5 189/91/5 +f 167/116/1 175/117/1 170/93/1 +f 189/91/2 169/118/2 168/110/2 +f 176/119/6 186/120/6 184/121/6 +f 170/95/5 181/111/5 173/101/5 +f 172/88/6 176/119/6 167/86/6 +f 168/110/4 180/122/4 179/123/4 +f 169/118/6 188/98/6 174/124/6 +f 174/124/6 180/125/6 169/118/6 +f 175/126/5 185/127/5 181/111/5 +f 176/128/4 183/129/4 175/117/4 +f 178/130/3 171/106/3 177/131/3 +f 185/132/3 182/133/3 181/111/3 +f 201/134/2 198/135/2 197/136/2 +f 200/137/2 195/138/2 196/139/2 +f 197/136/5 210/140/5 201/134/5 +f 200/137/3 207/141/3 199/142/3 +f 195/138/4 204/143/4 196/139/4 +f 199/142/6 203/144/6 195/138/6 +f 202/145/6 205/146/6 198/135/6 +f 201/134/3 209/147/3 202/145/3 +f 198/135/4 206/148/4 197/136/4 +f 196/139/5 208/149/5 200/137/5 +f 3/1/1 4/8/1 2/2/1 +f 5/4/2 33/59/2 36/5/2 +f 3/1/3 5/150/3 8/7/3 +f 2/2/4 7/151/4 6/9/4 +f 4/8/5 8/6/5 7/10/5 +f 1/3/6 6/152/6 5/11/6 +f 12/12/4 11/34/4 9/13/4 +f 13/15/3 15/31/3 16/16/3 +f 10/18/5 14/22/5 16/19/5 +f 9/21/1 13/153/1 14/22/1 +f 11/23/6 15/27/6 13/24/6 +f 11/23/2 17/28/2 19/26/2 +f 17/28/5 21/154/5 23/29/5 +f 16/19/2 20/40/2 18/30/2 +f 15/31/2 19/38/2 20/32/2 +f 12/12/2 18/41/2 17/33/2 +f 22/35/2 24/155/2 23/36/2 +f 19/38/4 23/156/4 24/39/4 +f 20/40/6 24/155/6 22/35/6 +f 18/41/3 22/157/3 21/42/3 +f 36/43/6 40/65/6 39/44/6 +f 7/10/2 35/58/2 34/46/2 +f 49/50/5 28/158/5 31/48/5 +f 28/158/5 26/159/5 31/48/5 +f 30/53/6 25/55/6 27/51/6 +f 27/51/6 50/54/6 29/52/6 +f 49/50/3 32/49/3 29/52/3 +f 25/55/4 30/53/4 31/56/4 +f 8/6/2 36/5/2 35/58/2 +f 6/47/2 34/46/2 33/59/2 +f 39/44/2 40/65/2 37/60/2 +f 34/62/5 38/61/5 37/60/5 +f 33/64/4 37/60/4 40/65/4 +f 35/67/3 39/44/3 38/61/3 +f 43/69/1 44/160/1 42/70/1 +f 47/72/2 48/161/2 45/73/2 +f 43/75/3 45/162/3 48/76/3 +f 44/78/5 48/163/5 47/79/5 +f 41/81/6 46/164/6 45/82/6 +f 28/84/7 49/50/7 50/54/7 +f 167/86/6 165/165/6 163/87/6 +f 193/89/3 194/166/3 190/90/3 +f 165/92/3 167/116/3 170/93/3 +f 170/95/5 173/101/5 164/96/5 +f 188/98/6 190/90/6 194/99/6 +f 173/101/4 172/88/4 163/102/4 +f 174/104/1 188/107/1 187/105/1 +f 188/107/4 192/167/4 191/108/4 +f 171/109/5 187/114/5 189/91/5 +f 181/111/2 182/133/2 172/88/2 +f 171/109/5 168/110/5 179/112/5 +f 187/114/5 191/168/5 193/115/5 +f 167/116/1 176/128/1 175/117/1 +f 189/91/2 190/90/2 169/118/2 +f 176/119/6 182/133/6 186/120/6 +f 170/95/5 175/126/5 181/111/5 +f 172/88/6 182/133/6 176/119/6 +f 168/110/4 169/118/4 180/122/4 +f 169/118/6 190/90/6 188/98/6 +f 174/124/6 178/169/6 180/125/6 +f 175/126/5 183/170/5 185/127/5 +f 176/128/4 184/171/4 183/129/4 +f 178/130/3 174/104/3 171/106/3 +f 185/132/3 186/172/3 182/133/3 +f 201/134/2 202/145/2 198/135/2 +f 200/137/2 199/142/2 195/138/2 +f 197/136/5 206/173/5 210/140/5 +f 200/137/3 208/174/3 207/141/3 +f 195/138/4 203/175/4 204/143/4 +f 199/142/6 207/176/6 203/144/6 +f 202/145/6 209/177/6 205/146/6 +f 201/134/3 210/178/3 209/147/3 +f 198/135/4 205/179/4 206/148/4 +f 196/139/5 204/180/5 208/149/5 +s 1 +f 90/181/8 91/182/4 89/183/8 +f 54/184/3 55/185/9 53/186/3 +f 78/187/10 79/188/2 77/189/10 +f 56/190/9 57/191/1 55/185/9 +f 94/192/10 95/193/2 93/194/10 +f 76/195/4 77/189/10 75/196/4 +f 58/197/1 59/198/8 57/199/1 +f 74/200/8 75/196/4 73/201/8 +f 60/202/8 61/203/4 59/198/8 +f 72/204/1 73/201/8 71/205/1 +f 62/206/4 63/207/10 61/203/4 +f 82/208/7 52/209/3 81/210/7 +f 70/211/9 71/212/1 69/213/9 +f 64/214/10 65/215/2 63/207/10 +f 51/216/3 69/213/9 52/209/3 +f 66/217/2 67/218/7 65/215/2 +f 92/219/4 93/194/10 91/182/4 +f 80/220/2 81/210/7 79/188/2 +f 68/221/7 53/186/3 67/218/7 +f 88/222/1 89/183/8 87/223/1 +f 98/224/7 84/225/3 97/226/7 +f 86/227/9 87/228/1 85/229/9 +f 83/230/3 85/229/9 84/225/3 +f 96/231/2 97/226/7 95/193/2 +f 106/232/8 107/233/4 105/234/8 +f 110/235/10 111/236/2 109/237/10 +f 108/238/4 109/237/10 107/233/4 +f 104/239/1 105/234/8 103/240/1 +f 114/241/7 100/242/3 113/243/7 +f 102/244/9 103/245/1 101/246/9 +f 99/247/3 101/246/9 100/242/3 +f 112/248/2 113/243/7 111/236/2 +f 154/249/8 155/250/4 153/251/8 +f 118/252/3 119/253/9 117/254/3 +f 142/255/10 143/256/2 141/257/10 +f 120/258/9 121/259/1 119/253/9 +f 158/260/10 159/261/2 157/262/10 +f 140/263/4 141/257/10 139/264/4 +f 122/265/1 123/266/8 121/267/1 +f 138/268/8 139/264/4 137/269/8 +f 124/270/8 125/271/4 123/266/8 +f 136/272/1 137/269/8 135/273/1 +f 126/274/4 127/275/10 125/271/4 +f 146/276/7 116/277/3 145/278/7 +f 134/279/9 135/280/1 133/281/9 +f 128/282/10 129/283/2 127/275/10 +f 115/284/3 133/281/9 116/277/3 +f 130/285/2 131/286/7 129/283/2 +f 156/287/4 157/262/10 155/250/4 +f 144/288/2 145/278/7 143/256/2 +f 132/289/7 117/254/3 131/286/7 +f 152/290/1 153/251/8 151/291/1 +f 162/292/7 148/293/3 161/294/7 +f 150/295/9 151/296/1 149/297/9 +f 147/298/3 149/297/9 148/293/3 +f 160/299/2 161/294/7 159/261/2 +f 214/300/11 221/301/12 213/302/13 +f 212/303/14 219/304/3 211/305/15 +f 219/304/3 218/306/16 211/305/15 +f 224/307/17 216/308/18 217/309/19 +f 213/302/13 220/310/20 212/303/14 +f 225/311/21 217/309/19 218/306/16 +f 219/304/3 232/312/22 225/311/21 +f 231/313/23 223/314/24 224/307/17 +f 228/315/25 220/310/20 221/301/12 +f 225/311/21 231/313/23 224/307/17 +f 229/316/26 221/301/12 222/317/27 +f 227/318/28 219/304/3 220/310/20 +f 214/300/11 215/319/29 222/317/27 +f 222/317/27 215/319/29 229/316/26 +f 215/320/29 216/308/18 223/314/24 +f 223/314/24 230/321/30 215/320/29 +f 246/322/31 215/323/29 230/324/30 +f 240/325/15 255/326/21 233/327/16 +f 232/312/22 245/328/5 231/329/23 +f 244/330/32 228/331/25 229/332/26 +f 242/333/7 232/312/22 226/334/33 +f 245/328/5 230/324/30 231/329/23 +f 243/335/6 227/318/28 228/331/25 +f 237/336/11 251/337/12 238/338/13 +f 248/339/8 229/332/26 215/340/29 +f 238/338/13 250/341/20 239/342/14 +f 249/343/3 262/344/22 255/326/21 +f 258/345/25 250/341/20 251/337/12 +f 250/341/20 240/325/15 239/342/14 +f 254/346/17 235/347/18 234/348/19 +f 255/326/21 234/348/19 233/327/16 +f 261/349/23 253/350/24 254/346/17 +f 241/351/34 226/334/33 227/318/28 +f 255/326/21 261/349/23 254/346/17 +f 252/352/27 258/345/25 251/337/12 +f 257/353/28 249/343/3 250/341/20 +f 237/336/11 236/354/29 252/352/27 +f 252/352/27 236/354/29 259/355/26 +f 236/356/29 235/347/18 253/350/24 +f 253/350/24 260/357/30 236/356/29 +f 268/358/31 236/359/29 260/360/30 +f 262/344/22 267/361/5 261/362/23 +f 266/363/32 258/364/25 259/365/26 +f 264/366/7 262/344/22 256/367/33 +f 267/361/5 260/360/30 261/362/23 +f 265/368/6 257/353/28 258/364/25 +f 270/369/8 259/365/26 236/370/29 +f 263/371/34 256/367/33 257/353/28 +f 272/372/35 273/373/36 271/374/35 +f 274/375/36 275/376/5 273/373/36 +f 276/377/5 277/378/37 275/376/5 +f 278/379/37 279/380/38 277/378/37 +f 284/381/36 285/382/5 283/383/36 +f 282/384/35 283/383/36 281/385/35 +f 286/386/5 287/387/37 285/382/5 +f 288/388/37 289/389/38 287/387/37 +f 294/390/36 295/391/5 293/392/36 +f 292/393/35 293/392/36 291/394/35 +f 296/395/5 297/396/37 295/391/5 +f 298/397/37 299/398/38 297/396/37 +f 304/399/39 305/400/40 303/401/39 +f 306/402/40 307/403/6 305/400/40 +f 308/404/6 309/405/41 307/403/6 +f 310/406/41 301/407/42 309/405/41 +f 314/408/39 315/409/40 313/410/39 +f 316/411/40 317/412/6 315/409/40 +f 318/413/6 319/414/41 317/412/6 +f 320/415/41 311/416/42 319/414/41 +f 324/417/39 325/418/40 323/419/39 +f 326/420/40 327/421/6 325/418/40 +f 328/422/6 329/423/41 327/421/6 +f 330/424/41 321/425/42 329/423/41 +f 90/181/8 92/219/4 91/182/4 +f 54/184/3 56/190/9 55/185/9 +f 78/187/10 80/220/2 79/188/2 +f 56/190/9 58/426/1 57/191/1 +f 94/192/10 96/231/2 95/193/2 +f 76/195/4 78/187/10 77/189/10 +f 58/197/1 60/202/8 59/198/8 +f 74/200/8 76/195/4 75/196/4 +f 60/202/8 62/206/4 61/203/4 +f 72/204/1 74/200/8 73/201/8 +f 62/206/4 64/214/10 63/207/10 +f 82/208/7 51/216/3 52/209/3 +f 70/211/9 72/427/1 71/212/1 +f 64/214/10 66/217/2 65/215/2 +f 51/216/3 70/211/9 69/213/9 +f 66/217/2 68/221/7 67/218/7 +f 92/219/4 94/192/10 93/194/10 +f 80/220/2 82/208/7 81/210/7 +f 68/221/7 54/184/3 53/186/3 +f 88/222/1 90/181/8 89/183/8 +f 98/224/7 83/230/3 84/225/3 +f 86/227/9 88/428/1 87/228/1 +f 83/230/3 86/227/9 85/229/9 +f 96/231/2 98/224/7 97/226/7 +f 106/232/8 108/238/4 107/233/4 +f 110/235/10 112/248/2 111/236/2 +f 108/238/4 110/235/10 109/237/10 +f 104/239/1 106/232/8 105/234/8 +f 114/241/7 99/247/3 100/242/3 +f 102/244/9 104/429/1 103/245/1 +f 99/247/3 102/244/9 101/246/9 +f 112/248/2 114/241/7 113/243/7 +f 154/249/8 156/287/4 155/250/4 +f 118/252/3 120/258/9 119/253/9 +f 142/255/10 144/288/2 143/256/2 +f 120/258/9 122/430/1 121/259/1 +f 158/260/10 160/299/2 159/261/2 +f 140/263/4 142/255/10 141/257/10 +f 122/265/1 124/270/8 123/266/8 +f 138/268/8 140/263/4 139/264/4 +f 124/270/8 126/274/4 125/271/4 +f 136/272/1 138/268/8 137/269/8 +f 126/274/4 128/282/10 127/275/10 +f 146/276/7 115/284/3 116/277/3 +f 134/279/9 136/431/1 135/280/1 +f 128/282/10 130/285/2 129/283/2 +f 115/284/3 134/279/9 133/281/9 +f 130/285/2 132/289/7 131/286/7 +f 156/287/4 158/260/10 157/262/10 +f 144/288/2 146/276/7 145/278/7 +f 132/289/7 118/252/3 117/254/3 +f 152/290/1 154/249/8 153/251/8 +f 162/292/7 147/298/3 148/293/3 +f 150/295/9 152/432/1 151/296/1 +f 147/298/3 150/295/9 149/297/9 +f 160/299/2 162/292/7 161/294/7 +f 214/300/11 222/317/27 221/301/12 +f 212/303/14 220/310/20 219/304/3 +f 219/304/3 225/311/21 218/306/16 +f 224/307/17 223/314/24 216/308/18 +f 213/302/13 221/301/12 220/310/20 +f 225/311/21 224/307/17 217/309/19 +f 219/304/3 226/334/33 232/312/22 +f 231/313/23 230/321/30 223/314/24 +f 228/315/25 227/318/28 220/310/20 +f 225/311/21 232/312/22 231/313/23 +f 229/316/26 228/315/25 221/301/12 +f 227/318/28 226/334/33 219/304/3 +f 246/322/31 248/433/8 215/323/29 +f 240/325/15 249/343/3 255/326/21 +f 232/312/22 247/434/43 245/328/5 +f 244/330/32 243/335/6 228/331/25 +f 242/333/7 247/434/43 232/312/22 +f 245/328/5 246/322/31 230/324/30 +f 243/335/6 241/351/34 227/318/28 +f 237/336/11 252/352/27 251/337/12 +f 248/339/8 244/330/32 229/332/26 +f 238/338/13 251/337/12 250/341/20 +f 249/343/3 256/367/33 262/344/22 +f 258/345/25 257/353/28 250/341/20 +f 250/341/20 249/343/3 240/325/15 +f 254/346/17 253/350/24 235/347/18 +f 255/326/21 254/346/17 234/348/19 +f 261/349/23 260/357/30 253/350/24 +f 241/351/34 242/333/7 226/334/33 +f 255/326/21 262/344/22 261/349/23 +f 252/352/27 259/355/26 258/345/25 +f 257/353/28 256/367/33 249/343/3 +f 268/358/31 270/435/8 236/359/29 +f 262/344/22 269/436/43 267/361/5 +f 266/363/32 265/368/6 258/364/25 +f 264/366/7 269/436/43 262/344/22 +f 267/361/5 268/358/31 260/360/30 +f 265/368/6 263/371/34 257/353/28 +f 270/369/8 266/363/32 259/365/26 +f 263/371/34 264/366/7 256/367/33 +f 272/372/35 274/375/36 273/373/36 +f 274/375/36 276/377/5 275/376/5 +f 276/377/5 278/379/37 277/378/37 +f 278/379/37 280/437/38 279/380/38 +f 284/381/36 286/386/5 285/382/5 +f 282/384/35 284/381/36 283/383/36 +f 286/386/5 288/388/37 287/387/37 +f 288/388/37 290/438/38 289/389/38 +f 294/390/36 296/395/5 295/391/5 +f 292/393/35 294/390/36 293/392/36 +f 296/395/5 298/397/37 297/396/37 +f 298/397/37 300/439/38 299/398/38 +f 304/399/39 306/402/40 305/400/40 +f 306/402/40 308/404/6 307/403/6 +f 308/404/6 310/406/41 309/405/41 +f 310/406/41 302/440/42 301/407/42 +f 314/408/39 316/411/40 315/409/40 +f 316/411/40 318/413/6 317/412/6 +f 318/413/6 320/415/41 319/414/41 +f 320/415/41 312/441/42 311/416/42 +f 324/417/39 326/420/40 325/418/40 +f 326/420/40 328/422/6 327/421/6 +f 328/422/6 330/424/41 329/423/41 +f 330/424/41 322/442/42 321/425/42