Change the structure of the Marx generator to not include IC2 blocks

Finish up the texture/model
Fix some bugs where the energy storage goes negative and starts charging the marx to -Infinity V
This commit is contained in:
malte0811 2017-08-13 18:46:46 +02:00
parent 5667768420
commit c18d94899a
21 changed files with 2178 additions and 945 deletions

View file

@ -30,7 +30,7 @@ sourceCompatibility = 1.8
targetCompatibility = 1.8
minecraft {
version = "14.21.1.2404"
version = "14.21.1.2443"
runDir = "run"
replace '${version}', project.version

View file

@ -22,6 +22,7 @@ import net.minecraft.client.Minecraft;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.potion.Potion;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.common.registry.ForgeRegistries;
import javax.annotation.Nonnull;
@ -33,7 +34,8 @@ public class IWPotions {
static class PotionTinnitus extends Potion {
protected PotionTinnitus() {
super(true, 0xffff0000);
REGISTRY.register(-1, new ResourceLocation(IndustrialWires.MODID, "tinnitus"), this);
this.setRegistryName(new ResourceLocation(IndustrialWires.MODID, "tinnitus"));
ForgeRegistries.POTIONS.register(this);
}
@Override

View file

@ -37,9 +37,14 @@ public class IWSaveData extends WorldSavedData {
super(IndustrialWires.MODID);
}
public IWSaveData(String name) {
super(name);
}
@Override
public void readFromNBT(@Nonnull NBTTagCompound nbt) {
NBTTagCompound ores = nbt.getCompoundTag(MARX_ORES);
MarxOreHandler.reset();
MarxOreHandler.load(ores);
}
@ -54,12 +59,13 @@ public class IWSaveData extends WorldSavedData {
public static void onWorldLoad(WorldEvent.Load event) {
World w = event.getWorld();
if (!w.isRemote) {
MarxOreHandler.reset();
INSTANCE = (IWSaveData) w.loadData(IWSaveData.class, IndustrialWires.MODID);
if (INSTANCE==null) {
INSTANCE = new IWSaveData();
w.setData(IndustrialWires.MODID, INSTANCE);
MarxOreHandler.reset();
MarxOreHandler.load(new NBTTagCompound());
w.setData(IndustrialWires.MODID, INSTANCE);
INSTANCE.setDirty(true);
}
}
}

View file

@ -40,6 +40,7 @@ import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.IRecipe;
import net.minecraft.potion.Potion;
import net.minecraftforge.event.RegistryEvent;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
@ -162,6 +163,7 @@ public class IndustrialWires {
packetHandler.registerMessage(MessageItemSync.HandlerServer.class, MessageItemSync.class, 3, Side.SERVER);
NetworkRegistry.INSTANCE.registerGuiHandler(instance, proxy);
IWPotions.init();
}
@EventHandler

View file

@ -18,10 +18,17 @@
package malte0811.industrialWires.blocks;
import malte0811.industrialWires.util.MiscUtils;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.NonNullList;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.RayTraceResult;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import javax.annotation.Nonnull;
@ -33,11 +40,16 @@ public abstract class BlockIWMultiblock extends BlockIWBase {
@Override
public void breakBlock(@Nonnull World world, @Nonnull BlockPos pos, @Nonnull IBlockState state) {
TileEntity te = world.getTileEntity(pos);
if(te instanceof TileEntityIWMultiblock)
if(te instanceof TileEntityIWMultiblock) {
((TileEntityIWMultiblock)te).disassemble();
}
super.breakBlock(world, pos, state);
}
@Override
public void getDrops(@Nonnull NonNullList<ItemStack> drops, IBlockAccess world, BlockPos pos, @Nonnull IBlockState state, int fortune) {
//NOP
}
@Override
public boolean isTopSolid(IBlockState state) {
@ -58,4 +70,14 @@ public abstract class BlockIWMultiblock extends BlockIWBase {
public boolean isFullCube(IBlockState state) {
return false;
}
@Nonnull
@Override
public ItemStack getPickBlock(@Nonnull IBlockState state, RayTraceResult target, @Nonnull World world, @Nonnull BlockPos pos, EntityPlayer player) {
TileEntity te = world.getTileEntity(pos);
if (te instanceof TileEntityIWMultiblock) {
return MiscUtils.getItemStack(((TileEntityIWMultiblock) te).getOriginalBlock(), world, pos);
}
return ItemStack.EMPTY;
}
}

View file

@ -20,6 +20,8 @@ package malte0811.industrialWires.blocks;
import malte0811.industrialWires.util.MiscUtils;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
@ -65,31 +67,33 @@ public abstract class TileEntityIWMultiblock extends TileEntityIWBase {
T master = master(here);
return master!=null?master:def;
}
public void disassemble()
{
if(formed && !world.isRemote)
{
public void disassemble() {
if (formed && !world.isRemote) {
BlockPos startPos = getOrigin();
BlockPos masterPos = getPos().subtract(offset);
long time = world.getTotalWorldTime();
Vec3i size = getSize();
for(int up=0;up<size.getX();up++)
for(int forward=0;forward<size.getY();forward++)
for(int right=0;right<size.getZ();right++)
{
for (int up = 0; up < size.getX(); up++) {
for (int forward = 0; forward < size.getY(); forward++) {
for (int right = 0; right < size.getZ(); right++) {
BlockPos pos = MiscUtils.offset(startPos, facing, mirrored, right, forward, up);
TileEntity te = world.getTileEntity(pos);
if(te instanceof TileEntityIWMultiblock)
{
if (te instanceof TileEntityIWMultiblock) {
TileEntityIWMultiblock part = (TileEntityIWMultiblock) te;
Vec3i diff = pos.subtract(masterPos);
if (part.offset.equals(diff)&&time!=part.onlyLocalDissassembly)
{
if (part.offset.equals(diff) && time != part.onlyLocalDissassembly) {
part.formed = false;
part.getOriginalBlockPlacer().accept(world, pos);
if (!pos.equals(this.pos)) {
part.getOriginalBlockPlacer().accept(world, pos);
} else if (part.getOriginalBlock()!=null) {
ItemStack drop = MiscUtils.getItemStack(part.getOriginalBlock(), world, pos);
world.spawnEntity(new EntityItem(world, pos.getX()+.5,pos.getY()+.5,pos.getZ()+.5, drop));
}
}
}
}
}
}
}
}

View file

@ -27,8 +27,8 @@ import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler.Conn
import blusunrize.immersiveengineering.common.IEContent;
import blusunrize.immersiveengineering.common.blocks.metal.BlockTypes_Connector;
import blusunrize.immersiveengineering.common.blocks.metal.BlockTypes_MetalDecoration0;
import blusunrize.immersiveengineering.common.blocks.metal.BlockTypes_MetalDecoration2;
import blusunrize.immersiveengineering.common.blocks.metal.BlockTypes_MetalDevice0;
import ic2.api.item.IC2Items;
import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.IWProperties;
import net.minecraft.block.state.IBlockState;
@ -68,7 +68,6 @@ public class MultiblockMarx implements IMultiblock {
@Override
public boolean createStructure(World world, BlockPos pos, EnumFacing side, EntityPlayer player) {
facing = side.rotateY();
ItemStack hvCableStack = IC2Items.getItem("cable", "type:iron,insulation:0");
boolean mirrored = false;
Predicate<BlockPos> hvCap = (local) -> {
IBlockState b = world.getBlockState(local);
@ -85,9 +84,22 @@ public class MultiblockMarx implements IMultiblock {
ItemStack stack = new ItemStack(b.getBlock(), 1, b.getBlock().getMetaFromState(b));
return ApiUtils.compareToOreName(stack, "blockSteel");
};
Predicate<BlockPos> uninsHCCable = (local) -> {
BiPredicate<BlockPos, Boolean> wallmount = (local, up) -> {
IBlockState b = world.getBlockState(local);
return ItemStack.areItemStacksEqual(b.getBlock().getPickBlock(b, null, world, local, player), hvCableStack);
if (b.getBlock()==IEContent.blockMetalDecoration2) {
b = b.getBlock().getActualState(b, world, local);
if (b.getValue(IEContent.blockMetalDecoration2.property)== BlockTypes_MetalDecoration2.STEEL_WALLMOUNT) {
int int_4_wanted = up ? 0 : 1;
return b.getValue(IEProperties.INT_4)==int_4_wanted;
}
}
return false;
};
Predicate<BlockPos> steelFence = (local) -> {
IBlockState b = world.getBlockState(local);
b = b.getBlock().getActualState(b, world, local);
ItemStack stack = new ItemStack(b.getBlock(), 1, b.getBlock().getMetaFromState(b));
return ApiUtils.compareToOreName(stack, "fenceSteel");
};
Function<BlockPos, Byte> hvRelayWith = (local) -> {
IBlockState state = world.getBlockState(local);
@ -148,8 +160,8 @@ public class MultiblockMarx implements IMultiblock {
}
}
//Ground discharge electrode
for (int i = 0;i<3;i++) {
if (!uninsHCCable.test(offset(pos, facing, mirrored, 0, i+2, 0))) {
for (int i = 0;i<4;i++) {
if (!steelFence.test(offset(pos, facing, mirrored, 0, i+1, 0))) {
continue mirrorLoop;
}
}
@ -161,15 +173,21 @@ public class MultiblockMarx implements IMultiblock {
while (pos.getY()+stages<=255) {
boolean end = false;
byte other = -1;
for (int i = 0;i<2;i++) {
if (!hvCap.test(offset(pos, facing, mirrored, i, 0, stages))) {
for (int right = 0;right<2;right++) {
if (!hvCap.test(offset(pos, facing, mirrored, right, 0, stages))) {
continue mirrorLoop;
}
if (!uninsHCCable.test(offset(pos, facing, mirrored, i, 1, stages))) {
continue mirrorLoop;
if (!wallmount.test(offset(pos, facing, mirrored, right, 1, stages), right!=0)) {
if (right==0) {
if (stages!=0) {
continue mirrorLoop;
}
} else {
end = true;
}
}
byte here = hvRelayWith.apply(offset(pos, facing, mirrored, i, -1, stages));
if (i==1&&here!=other) {
byte here = hvRelayWith.apply(offset(pos, facing, mirrored, right, -1, stages));
if (right==1&&here!=other) {
continue mirrorLoop;
}
if (stages!=0&&(here&2)==0) {
@ -193,8 +211,8 @@ public class MultiblockMarx implements IMultiblock {
}
}
// Top electrode
for (int i = 0;i<3;i++) {
if (!uninsHCCable.test(offset(pos, facing, mirrored, 1, i+2, stages-1))) {
for (int i = 0;i<4;i++) {
if (!steelFence.test(offset(pos, facing, mirrored, 1, i+1, stages-1))) {
continue mirrorLoop;
}
}
@ -223,7 +241,7 @@ public class MultiblockMarx implements IMultiblock {
}
}
//conns
for (int i = 0;i<2;i++) {
for (int i = 0; i < 2; i++) {
set(world, offset(pos, facing, mirrored, i, -3, 0), connModel, stages, pos);
}
//bottom electrode
@ -253,9 +271,9 @@ public class MultiblockMarx implements IMultiblock {
TileEntity te = world.getTileEntity(p);
if (te instanceof TileEntityMarx) {
TileEntityMarx marx = (TileEntityMarx) te;
marx.setStageCount(stages);
marx.offset = p.subtract(origin);
marx.formed = true;
marx.setStageCount(stages);
marx.markDirty();
}
}

View file

@ -27,7 +27,11 @@ import blusunrize.immersiveengineering.api.energy.wires.redstone.IRedstoneConnec
import blusunrize.immersiveengineering.api.energy.wires.redstone.RedstoneWireNetwork;
import blusunrize.immersiveengineering.common.IEContent;
import blusunrize.immersiveengineering.common.blocks.BlockTypes_MetalsIE;
import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces;
import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces.IDirectionalTile;
import blusunrize.immersiveengineering.common.blocks.metal.*;
import blusunrize.immersiveengineering.common.blocks.wooden.TileEntityWallmount;
import blusunrize.immersiveengineering.common.util.Utils;
import blusunrize.immersiveengineering.common.util.chickenbones.Matrix4;
import ic2.api.item.IC2Items;
import malte0811.industrialWires.*;
@ -46,7 +50,6 @@ import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.Entity;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.nbt.NBTTagDouble;
@ -56,19 +59,19 @@ import net.minecraft.potion.PotionEffect;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.ITickable;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.util.math.Vec3i;
import net.minecraft.util.math.*;
import net.minecraft.world.World;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import java.util.List;
import java.util.*;
import java.util.function.BiConsumer;
import static malte0811.industrialWires.util.MiscUtils.getOffset;
import static malte0811.industrialWires.util.MiscUtils.offset;
public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable, ISyncReceiver, IBlockBoundsIW, IImmersiveConnectable, IIC2Connector,
IRedstoneConnector{
@ -79,8 +82,8 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
private double rcTimeConst;
private double timeFactor;
private double timeFactorBottom;
private double cReciproke = 1_000_000;
private double maxVoltage = 250_000;
private final static double CAPACITANCE = 0.00_000_5;
private final static double MAX_VOLTAGE = 250_000;
private boolean allowSlowDischarge = true;
public IWProperties.MarxType type = IWProperties.MarxType.NO_MODEL;
@ -89,12 +92,13 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
@SideOnly(Side.CLIENT)
public TileRenderMarx.Discharge dischargeData;
// Voltage=100*storedEU
private DualEnergyStorage storage = new DualEnergyStorage(50_000, 50_000);
private DualEnergyStorage storage = new DualEnergyStorage(50_000, 32_000);
private boolean hasConnection;
private double[] capVoltages;
//RS channel 1/white
private int voltageControl = 0;
private boolean loaded = false;
private double leftover;
public TileEntityMarx(EnumFacing facing, IWProperties.MarxType type, boolean mirrored) {
this.facing = facing;
@ -131,7 +135,7 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
}
storage.readFromNBT(in.getCompoundTag(ENERGY_TAG));
hasConnection = in.getBoolean(HAS_CONN);
boundingAabb = null;
collisionAabb = null;
renderAabb = null;
}
@ -156,7 +160,12 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
} else if (forward==4&&up==0&&right==1) {
return IEContent.blockStorage.getDefaultState().withProperty(IEContent.blockStorage.property, BlockTypes_MetalsIE.STEEL);
} else if (forward>0) {
//NOP. handled by getOriginalBlockPlacer
if ((right==0&&up==0)||(right==1&&up==stageCount-1)) {
return IEContent.blockMetalDecoration1.getDefaultState().withProperty(IEContent.blockMetalDecoration1.property, BlockTypes_MetalDecoration1.STEEL_FENCE);
} else {
return IEContent.blockMetalDecoration2.getDefaultState().withProperty(IEContent.blockMetalDecoration2.property, BlockTypes_MetalDecoration2.STEEL_WALLMOUNT)
.withProperty(IEProperties.INT_4, 1-right).withProperty(IEProperties.FACING_ALL, facing.getOpposite());
}
} else if (forward==-2) {
return IEContent.blockMetalDecoration0.getDefaultState().withProperty(IEContent.blockMetalDecoration0.property, BlockTypes_MetalDecoration0.HEAVY_ENGINEERING);
} else if (right==0) {
@ -166,36 +175,25 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
return IEContent.blockConnectors.getDefaultState().withProperty(IEContent.blockConnectors.property, BlockTypes_Connector.CONNECTOR_HV)
.withProperty(IEProperties.FACING_ALL, facing);
}
return null;
}
@Override
public BiConsumer<World, BlockPos> getOriginalBlockPlacer() {
IBlockState original = getOriginalBlock();
if (original!=null) {
if (original.getBlock()==IEContent.blockConnectors) {
return (w, p)->{
w.setBlockState(p, original);
TileEntity te = w.getTileEntity(p);
if (te instanceof TileEntityConnectorLV) {
((TileEntityConnectorLV) te).facing = original.getValue(IEProperties.FACING_ALL);
te.markDirty();
} else if (te instanceof TileEntityConnectorRedstone) {
((TileEntityConnectorRedstone) te).facing = original.getValue(IEProperties.FACING_ALL);
te.markDirty();
}
};
} else {
return (w, p)->w.setBlockState(p, original);
}
} else {
ItemStack hv = IC2Items.getItem("cable", "type:iron,insulation:0");
return (w, p)->{
w.setBlockToAir(p);
EntityItem item = new EntityItem(w, p.getX(), p.getY(), p.getZ(), hv.copy());
w.spawnEntity(item);
return (w, p) -> {
w.setBlockState(p, original);
TileEntity te = w.getTileEntity(p);
if (te instanceof IDirectionalTile&&original.getProperties().containsKey(IEProperties.FACING_ALL)) {
((IDirectionalTile) te).setFacing(original.getValue(IEProperties.FACING_ALL));
te.markDirty();
}
if (te instanceof TileEntityWallmount) {
((TileEntityWallmount) te).orientation = original.getValue(IEProperties.INT_4);
}
};
}
return (a, b)->IndustrialWires.logger.warn(a+", "+b+" wasn't found");//NOP
}
@Override
@ -205,16 +203,17 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
} else if (state==FiringState.NEXT_TICK) {
state = FiringState.FIRE;
if (world.isRemote) {
IndustrialWires.proxy.playMarxBang(this, getMiddle(), dischargeData.energy/(stageCount*250*250));
IndustrialWires.proxy.playMarxBang(this, getMiddle(), (float) getNormedEnergy(dischargeData.energy));
} else {
fire();
}
}
if (!world.isRemote&&type== IWProperties.MarxType.BOTTOM) {
if (capVoltages==null||capVoltages.length!=stageCount) {
capVoltages = new double[stageCount];//TODO save to NBT
capVoltages = new double[stageCount];
}
double oldTopVoltage = capVoltages[stageCount-1];
double oldBottomVoltage = capVoltages[0];
for (int i = stageCount-1;i>0;i--) {
double oldVoltage = capVoltages[i];
double u0 = capVoltages[i-1];
@ -222,93 +221,154 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
capVoltages[i-1] -= capVoltages[i]-oldVoltage;
}
//charge bottom cap from storage
double setVoltage = 250_000 * voltageControl / 15D;
double setVoltage = MAX_VOLTAGE * voltageControl / 15D;
double u0 = Math.min(setVoltage, 100 * storage.getEnergyStoredEU());
if (u0<0) {
u0 = 0;
}
if (u0 < capVoltages[0] && setVoltage > capVoltages[0]) {
u0 = capVoltages[0];
}
if (u0 > 0 && (allowSlowDischarge || setVoltage > capVoltages[0])) {
double oldVoltage = capVoltages[0];
capVoltages[0] = u0 - (u0 - oldVoltage) * timeFactor / 2;
double energyUsed = (capVoltages[0] * capVoltages[0] - oldVoltage * oldVoltage)/cReciproke;
if (energyUsed > 0) {// energyUsed can be negative when discharging the caps
storage.extractEURaw(energyUsed);
if (allowSlowDischarge || u0 > capVoltages[0]) {
if (u0<0) {
IndustrialWires.logger.info("VOLTAGE: "+u0+", "+voltageControl);
}
double vMax = 250_000;
if (Math.round(15*oldVoltage/vMax)!=Math.round(15*capVoltages[0]/vMax)) {
double tmp = u0 - (u0 - oldBottomVoltage) * timeFactorBottom;
double energyUsed = .5*(tmp * tmp - oldBottomVoltage * oldBottomVoltage)*CAPACITANCE;
if (energyUsed > 0 && storage.extractEU(energyUsed, false)==energyUsed) {// energyUsed can be negative when discharging the caps
storage.extractEU(energyUsed, true);
capVoltages[0] = tmp;
}
if (Math.round(15*oldBottomVoltage/MAX_VOLTAGE)!=Math.round(15*capVoltages[0]/MAX_VOLTAGE)) {
net.updateValues();
} else if (Math.round(15*oldTopVoltage/vMax)!=Math.round(15*capVoltages[stageCount-1]/vMax)) {
} else if (Math.round(15*oldTopVoltage/MAX_VOLTAGE)!=Math.round(15*capVoltages[stageCount-1]/MAX_VOLTAGE)) {
net.updateValues();
}
if (capVoltages[0] > 250_000 * 14 / 15) {
if (capVoltages[0] > MAX_VOLTAGE * 14 / 15) {
state = FiringState.NEXT_TICK;
}
}
}
leftover = storage.getMaxInputIF();
}
private void fire() {
IndustrialWires.logger.info(MarxOreHandler.getYield(new ItemStack(Blocks.IRON_ORE), 37_500));
if (!world.isRemote) {
//calculate energy
double energyStored = 0;
for (int i = 0;i<stageCount;i++) {
energyStored += capVoltages[i]*capVoltages[i]/cReciproke;
energyStored += .5*capVoltages[i]*capVoltages[i]*CAPACITANCE;
capVoltages[i] = 0;
}
net.updateValues();
NBTTagCompound data = new NBTTagCompound();
data.setDouble("energy", energyStored);
IndustrialWires.packetHandler.sendToDimension(new MessageTileSyncIW(this, data), world.provider.getDimension());
Vec3d v0 = getMiddle();
AxisAlignedBB aabb = new AxisAlignedBB(v0, v0);
aabb = aabb.expand(0, stageCount/2-1,0);
final double sqrtStages = Math.sqrt(stageCount);
aabb = aabb.grow(5*sqrtStages);
List<Entity> fools = world.getEntitiesWithinAABB(Entity.class, aabb);
double energyNormed = energyStored/(stageCount*250*250);
double damageDistSqu = energyNormed * sqrtStages;
double tinnitusDistSqu = 5 * energyNormed * sqrtStages;
damageDistSqu *= damageDistSqu;
tinnitusDistSqu *= tinnitusDistSqu;
if (IWConfig.HVStuff.marxSoundDamage == 2) {
damageDistSqu = tinnitusDistSqu;
tinnitusDistSqu = -1;
handleEntities(energyStored);
handleOreProcessing(energyStored);//After entities to prevent killing the newly dropped items
}
}
public void handleOreProcessing(double energyStored) {
BlockPos bottom = getBottomElectrode();
List<BlockPos> toBreak = new ArrayList<>(2*stageCount-2);
int ores = 0;
for (int i = 1;i<stageCount-1;i++) {
BlockPos here = bottom.up(i);
if (!world.isAirBlock(here)) {
toBreak.add(here);
ores++;
}
for (Entity entity : fools) {
double y;
if (entity.posY<pos.getY()+1) {
y = pos.getY()+1;
} else if (entity.posY>pos.getY()+stageCount-2) {
y = pos.getY()+stageCount-2;
} else {
y = entity.posY;
double radius = Utils.RAND.nextDouble()*Math.abs(.5-i/(double)stageCount)*Math.sqrt(stageCount)*.5;
double angle = Utils.RAND.nextDouble()*Math.PI*2;
Vec3d offset = new Vec3d(Math.cos(angle)*radius, 0, Math.sin(angle)*radius);
BlockPos outside = here.add(new BlockPos(offset));
if (!outside.equals(here)&&canBreak(outside)) {
toBreak.add(outside);
}
}
if (ores>0) {
double energyPerOre = energyStored / ores;
for (BlockPos here:toBreak) {
IBlockState state = world.getBlockState(here);
if (state.getBlockHardness(world, here) < 0) {
continue;
}
double distSqu = entity.getDistanceSq(v0.x, y, v0.z);
if (distSqu<=damageDistSqu) {
float dmg = (float) (10*stageCount*(1-distSqu/damageDistSqu));
entity.attackEntityFrom(IWDamageSources.dmg_marx, dmg);
}
if (distSqu<=tinnitusDistSqu && entity instanceof EntityPlayer) {
ItemStack helmet = ((EntityPlayer) entity).inventory.armorInventory.get(3);
boolean earMuff = helmet.getItem()==IEContent.itemEarmuffs;
if (!earMuff&&helmet.hasTagCompound()) {
earMuff = helmet.getTagCompound().hasKey("IE:Earmuffs");
}
if (!earMuff) {
double multipl = Math.min(5, Math.sqrt(stageCount));
int duration = (int) (20*20*(1+multipl*(1-distSqu/tinnitusDistSqu)));
if (IWConfig.HVStuff.marxSoundDamage == 0) {
((EntityPlayer) entity).addPotionEffect(new PotionEffect(IWPotions.tinnitus, duration));
} else {
((EntityPlayer) entity).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("nausea"), duration));
if (!world.isAirBlock(here)) {
ItemStack input = state.getBlock().getPickBlock(state, null, world, here, null);
if (!input.isEmpty()) {
ItemStack[] out = MarxOreHandler.getYield(input, energyPerOre);
for (ItemStack stack : out) {
EntityItem item = new EntityItem(world, here.getX() + .5, here.getY() + .5, here.getZ() + .5, stack);
final double maxMotion = .3;
item.motionX = 2*maxMotion*(Utils.RAND.nextDouble()-.5);
item.motionY = 2*maxMotion*(Utils.RAND.nextDouble()-.5);
item.motionZ = 2*maxMotion*(Utils.RAND.nextDouble()-.5);
world.spawnEntity(item);
}
}
world.setBlockToAir(here);
}
}
}
}
public void handleEntities(double energyStored) {
Vec3d v0 = getMiddle();
AxisAlignedBB aabb = new AxisAlignedBB(v0, v0);
aabb = aabb.expand(0, stageCount/2-1,0);
final double sqrtStages = Math.sqrt(stageCount);
aabb = aabb.grow(5*sqrtStages);
List<Entity> fools = world.getEntitiesWithinAABB(Entity.class, aabb);
double energyNormed = getNormedEnergy(energyStored);
double damageDistSqu = energyNormed * sqrtStages;
double tinnitusDistSqu = 5 * energyNormed * sqrtStages;
damageDistSqu *= damageDistSqu;
tinnitusDistSqu *= tinnitusDistSqu;
if (IWConfig.HVStuff.marxSoundDamage == 2) {
damageDistSqu = tinnitusDistSqu;
tinnitusDistSqu = -1;
}
for (Entity entity : fools) {
double y;
if (entity.posY<pos.getY()+1) {
y = pos.getY()+1;
} else if (entity.posY>pos.getY()+stageCount-2) {
y = pos.getY()+stageCount-2;
} else {
y = entity.posY;
}
double distSqu = entity.getDistanceSq(v0.x, y, v0.z);
if (distSqu<=damageDistSqu) {
float dmg = (float) (10*stageCount*(1-distSqu/damageDistSqu));
entity.attackEntityFrom(IWDamageSources.dmg_marx, dmg);
}
if (distSqu<=tinnitusDistSqu && entity instanceof EntityPlayer) {
ItemStack helmet = ((EntityPlayer) entity).inventory.armorInventory.get(3);
boolean earMuff = helmet.getItem()==IEContent.itemEarmuffs;
if (!earMuff&&helmet.hasTagCompound()) {
earMuff = helmet.getTagCompound().hasKey("IE:Earmuffs");
}
if (!earMuff) {
double multipl = Math.min(5, Math.sqrt(stageCount));
int duration = (int) (20*20*(1+multipl*(1-distSqu/tinnitusDistSqu)));
if (IWConfig.HVStuff.marxSoundDamage == 0) {
((EntityPlayer) entity).addPotionEffect(new PotionEffect(IWPotions.tinnitus, duration));
} else {
((EntityPlayer) entity).addPotionEffect(new PotionEffect(Potion.getPotionFromResourceLocation("nausea"), duration));
}
}
}
}
}
//checks whether the given pos can't be broken because it is part of the generator
public boolean canBreak(BlockPos pos) {
BlockPos dischargePos = offset(pos, facing, mirrored, 1, 3, 0);
Vec3i offset = getOffset(dischargePos, facing, mirrored, pos);
return Math.abs(offset.getX())>Math.abs(offset.getY());
}
@Override
public Vec3i getSize() {
return new Vec3i(stageCount, 8, 2);
@ -321,28 +381,32 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
dischargeData = new TileRenderMarx.Discharge(stageCount);
}
dischargeData.energy = nbt.getFloat("energy");
dischargeData.diameter = dischargeData.energy/(stageCount*250*250);
dischargeData.diameter = (float) getNormedEnergy(dischargeData.energy);
dischargeData.genMarxPoint(0, dischargeData.vertices.length-1);
}
private AxisAlignedBB renderAabb = null;
public double getNormedEnergy(double total) {
return total*2/(stageCount*MAX_VOLTAGE*MAX_VOLTAGE*CAPACITANCE);
}
AxisAlignedBB renderAabb = null;
@Nonnull
@Override
public AxisAlignedBB getRenderBoundingBox() {
if (renderAabb ==null) {
if (type== IWProperties.MarxType.BOTTOM) {
renderAabb = new AxisAlignedBB(pos,
MiscUtils.offset(pos, facing, mirrored, 2, 4, stageCount));
offset(pos, facing, mirrored, 2, 4, stageCount));
} else {
renderAabb = new AxisAlignedBB(pos, pos);
}
}
return renderAabb;
}
private AxisAlignedBB boundingAabb = null;
AxisAlignedBB collisionAabb = null;
@Override
public AxisAlignedBB getBoundingBox() {
if (boundingAabb==null) {
if (collisionAabb ==null) {
int forward = getForward();
int right = getRight();
int up = offset.getY();
@ -403,9 +467,9 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
}
}
}
boundingAabb = MiscUtils.apply(getBaseTransform(), ret);
collisionAabb = MiscUtils.apply(getBaseTransform(), ret);
}
return boundingAabb;
return collisionAabb;
}
private Matrix4 getBaseTransform() {
@ -432,8 +496,10 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
@Override
public int outputEnergy(int amount, boolean simulate, int energyType) {
TileEntityMarx master = master(this);
if (master!=null) {
return (int) master.storage.insertIF(amount, !simulate);
if (master!=null && amount>0) {
double ret = master.storage.insertIF(amount, leftover, !simulate);
leftover -= ret;
return (int) ret;
} else {
return 0;
}
@ -443,7 +509,9 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
public double insertEnergy(double eu, boolean simulate) {
TileEntityMarx master = master(this);
if (master!=null) {
return eu-master.storage.insertEU(eu, !simulate);
double ret = master.storage.insertEU(eu, leftover, !simulate);
leftover -= ret;
return eu-ret;
} else {
return 0;
}
@ -533,7 +601,7 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
master.allowSlowDischarge = master.net.channelValues[4] == 0;
}
public void tryTriggeredDischarge() {
if (capVoltages[0]>=8/15D*maxVoltage) {
if (capVoltages[0]>=8/15D* MAX_VOLTAGE) {
state = FiringState.NEXT_TICK;
} else {
for (int i = 0;i<stageCount;i++) {
@ -554,8 +622,10 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
if (master.capVoltages!=null&&master.capVoltages.length==stageCount) {
//1/orange is voltage measurement from the top cap
//2/magenta is for the bottom one
signals[1] = (byte)(Math.round(15*master.capVoltages[stageCount-1]/maxVoltage));
signals[2] = (byte)(Math.round(15*master.capVoltages[0]/maxVoltage));
byte signal1 = (byte)(Math.round(15*master.capVoltages[stageCount-1]/ MAX_VOLTAGE));
byte signal2 = (byte)(Math.round(15*master.capVoltages[0]/ MAX_VOLTAGE));
signals[1] = (byte) Math.max(signals[1], signal1);
signals[2] = (byte) Math.max(signals[2], signal2);
}
}
@ -564,6 +634,8 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
rcTimeConst = 5D/stageCount;
timeFactor = Math.exp(-1/(20*rcTimeConst));
timeFactorBottom = Math.exp(-1 / (20 * rcTimeConst * 2 / 3));
collisionAabb = null;
renderAabb = null;
}
public int getStageCount() {
@ -572,10 +644,14 @@ public class TileEntityMarx extends TileEntityIWMultiblock implements ITickable,
public Vec3d getMiddle() {
double middleY = pos.getY()+(stageCount)/2D;
Vec3i electrodXZ = MiscUtils.offset(pos, facing, mirrored, 1, 4, 0);
Vec3i electrodXZ = getBottomElectrode();
return new Vec3d(electrodXZ.getX()+.5, middleY, electrodXZ.getZ()+.5);
}
public BlockPos getBottomElectrode() {
return offset(pos, facing, mirrored, 1, 4, 0);
}
public enum FiringState {
CHARGING,
NEXT_TICK,

View file

@ -30,7 +30,6 @@ import malte0811.industrialWires.CommonProxy;
import malte0811.industrialWires.IWConfig;
import malte0811.industrialWires.IWPotions;
import malte0811.industrialWires.IndustrialWires;
import malte0811.industrialWires.blocks.IMetaEnum;
import malte0811.industrialWires.blocks.controlpanel.BlockTypes_Panel;
import malte0811.industrialWires.blocks.controlpanel.TileEntityPanelCreator;
import malte0811.industrialWires.blocks.controlpanel.TileEntityRSPanelConn;
@ -45,18 +44,13 @@ import malte0811.industrialWires.client.render.TileRenderJacobsLadder;
import malte0811.industrialWires.client.render.TileRenderMarx;
import malte0811.industrialWires.controlpanel.PanelComponent;
import malte0811.industrialWires.items.ItemIC2Coil;
import malte0811.industrialWires.items.ItemKey;
import malte0811.industrialWires.items.ItemPanelComponent;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.ISound;
import net.minecraft.client.audio.MovingSound;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.gui.Gui;
import net.minecraft.client.renderer.block.model.ModelBakery;
import net.minecraft.client.renderer.block.model.ModelResourceLocation;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumHand;
@ -66,16 +60,11 @@ import net.minecraft.util.SoundEvent;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d;
import net.minecraft.world.World;
import net.minecraftforge.client.model.ModelLoader;
import net.minecraftforge.client.model.ModelLoaderRegistry;
import net.minecraftforge.client.model.obj.OBJLoader;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.relauncher.Side;
import java.util.Arrays;
import java.util.Locale;
import java.util.Random;
import java.util.WeakHashMap;
@ -117,6 +106,9 @@ public class ClientProxy extends CommonProxy {
IndustrialWires.MODID + ":blocks/ic2_relay_glass"));
ConnLoader.baseModels.put("rs_panel_conn", new ResourceLocation("industrialwires:block/rs_panel_conn.obj"));
ConnLoader.baseModels.put("empty", new ResourceLocation("builtin/generated"));
OBJLoader.INSTANCE.addDomain(IndustrialWires.MODID);
ModelLoaderRegistry.registerLoader(new PanelModelLoader());
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityJacobsLadder.class, new TileRenderJacobsLadder());
@ -172,6 +164,11 @@ public class ClientProxy extends CommonProxy {
return ~0;
}, IndustrialWires.panelComponent);
int oldLength = Config.IEConfig.Tools.earDefenders_SoundBlacklist.length;
Config.IEConfig.Tools.earDefenders_SoundBlacklist =
Arrays.copyOf(Config.IEConfig.Tools.earDefenders_SoundBlacklist, oldLength+1);
Config.IEConfig.Tools.earDefenders_SoundBlacklist[oldLength] = TINNITUS_LOC.toString();
m.addEntry("industrialwires.wires", "industrialwires",
new ManualPages.CraftingMulti(m, "industrialwires.wires0", new ItemStack(IndustrialWires.ic2conn, 1, 0), new ItemStack(IndustrialWires.ic2conn, 1, 1), new ItemStack(IndustrialWires.ic2conn, 1, 2), new ItemStack(IndustrialWires.ic2conn, 1, 3),
new ItemStack(IndustrialWires.ic2conn, 1, 4), new ItemStack(IndustrialWires.ic2conn, 1, 5), new ItemStack(IndustrialWires.ic2conn, 1, 6), new ItemStack(IndustrialWires.ic2conn, 1, 7)),
@ -224,54 +221,55 @@ public class ClientProxy extends CommonProxy {
);
}
private static ISound tinnitus;
private static final ResourceLocation TINNITUS_LOC = new ResourceLocation(IndustrialWires.MODID, "tinnitus");
private static ISound playingTinnitus = null;
@Override
public void startTinnitus() {
final Minecraft mc = Minecraft.getMinecraft();
if (tinnitus==null) {
tinnitus = new MovingSound(new SoundEvent(new ResourceLocation(IndustrialWires.MODID, "tinnitus")), SoundCategory.PLAYERS) {
@Override
public void update() {
if (mc.player.getActivePotionEffect(IWPotions.tinnitus)==null) {
donePlaying = true;
}
}
@Override
public float getVolume() {
return .25F;
}
@Override
public float getXPosF() {
return (float) mc.player.posX;
}
@Override
public float getYPosF() {
return (float) mc.player.posY;
}
@Override
public float getZPosF() {
return (float) mc.player.posZ;
}
@Override
public boolean canRepeat() {
return true;
}
};
int oldLength = Config.IEConfig.Tools.earDefenders_SoundBlacklist.length;
Config.IEConfig.Tools.earDefenders_SoundBlacklist =
Arrays.copyOf(Config.IEConfig.Tools.earDefenders_SoundBlacklist, oldLength+1);
Config.IEConfig.Tools.earDefenders_SoundBlacklist[oldLength] = tinnitus.getSoundLocation().toString();
}
if (!mc.getSoundHandler().isSoundPlaying(tinnitus)) {
mc.getSoundHandler().playSound(tinnitus);
if (playingTinnitus==null) {
playingTinnitus = getTinnitus();
mc.getSoundHandler().playSound(playingTinnitus);
}
}
private ISound getTinnitus() {
final Minecraft mc = Minecraft.getMinecraft();
return new MovingSound(new SoundEvent(TINNITUS_LOC), SoundCategory.PLAYERS) {
@Override
public void update() {
if (mc.player.getActivePotionEffect(IWPotions.tinnitus)==null) {
donePlaying = true;
playingTinnitus = null;
}
}
@Override
public float getVolume() {
return .25F;
}
@Override
public float getXPosF() {
return (float) mc.player.posX;
}
@Override
public float getYPosF() {
return (float) mc.player.posY;
}
@Override
public float getZPosF() {
return (float) mc.player.posZ;
}
@Override
public boolean canRepeat() {
return true;
}
};
}
@Override
public World getClientWorld() {
return Minecraft.getMinecraft().world;

View file

@ -18,7 +18,9 @@
package malte0811.industrialWires.hv;
import blusunrize.immersiveengineering.api.ApiUtils;
import blusunrize.immersiveengineering.api.crafting.IngredientStack;
import malte0811.industrialWires.IndustrialWires;
import net.minecraft.init.Items;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
@ -35,16 +37,16 @@ import java.util.Random;
public class MarxOreHandler {
private static final Map<String, Double> oreEnergies = new HashMap<>();
private static final Map<String, OreInfo> defaultOreData = new HashMap<>();
private static double defaultEnergy = 75_000;
private static double defaultEnergy = 100_000;
private static void init() {
// Vanilla ores
defaultOreData.put("oreIron", new OreInfo(.5, 5, "dustIron", "nuggetIron"));
defaultOreData.put("oreGold", new OreInfo(1, 5, "dustGold", "nuggetGold"));
defaultOreData.put("oreDiamond", new OreInfo(3, 6, "gemDiamond"));
defaultOreData.put("oreEmerald", new OreInfo(3, 6, "gemEmerald"));
defaultOreData.put("oreDiamond", new OreInfo(2, 5, "gemDiamond"));
defaultOreData.put("oreEmerald", new OreInfo(3, 5, "gemEmerald"));
defaultOreData.put("oreLapis", new OreInfo(.75, 10, "gemLapis"));
defaultOreData.put("oreCoal", new OreInfo(.75, 10, Items.COAL, 0));
defaultOreData.put("oreCoal", new OreInfo(.75, 6, Items.COAL, 0));
defaultOreData.put("oreRedstone", new OreInfo(1, 10, "dustRedstone"));
defaultOreData.put("oreQuartz", new OreInfo(1, 5, "gemQuartz"));
// IE ores
@ -78,7 +80,7 @@ public class MarxOreHandler {
}
//TODO auto-add other ores?
if (energy > 0) {
double sigma = defaultEnergy * energy / 4;
double sigma = defaultEnergy * energy / 20;
double mu = defaultEnergy * energy;
double avg = new Random().nextGaussian();
avg *= sigma;
@ -89,34 +91,50 @@ public class MarxOreHandler {
}
}
public static ItemStack getYield(ItemStack in, double energy) {
public static ItemStack[] getYield(ItemStack in, double energy) {
if (oreEnergies.isEmpty()) {
IndustrialWires.logger.error("The energy-ore map for Marx generators wasn't loaded correctly. The energy values will be reset.");
load(new NBTTagCompound());
}
int[] ores = OreDictionary.getOreIDs(in);
for (int id : ores) {
String name = OreDictionary.getOreName(id);
if (oreEnergies.containsKey(name) && energy <= .75 * oreEnergies.get(name)) {
if (oreEnergies.containsKey(name) && energy >= .75 * oreEnergies.get(name)) {
OreInfo info = defaultOreData.get(name);
double idealE = oreEnergies.get(name);
double ln = Math.log(energy);
double sigma = idealE / 6;
double dist = getNormalizedNormalDist(ln, sigma, idealE);
int yield = (int) Math.round(dist * info.maxYield);
//TODO
double sigma = idealE / 18;
double dist = getNormalizedNormalDist(energy, sigma, idealE);
double out = dist * info.maxYield;
int yield = (int) Math.floor(out);
out -= yield;
int yieldNuggets = (int) Math.round(out*9);
if (yieldNuggets>=9||(info.outputSmall==null&&yieldNuggets>=5)) {
yield++;
yieldNuggets = 0;
}
if (yield>0&&yieldNuggets>0&&info.outputSmall!=null) {
return new ItemStack[] {
ApiUtils.copyStackWithAmount(info.output.getExampleStack(), yield),
ApiUtils.copyStackWithAmount(info.outputSmall.getExampleStack(), yieldNuggets)
};
} else if (yield>0) {
return new ItemStack[] {
ApiUtils.copyStackWithAmount(info.output.getExampleStack(), yield)
};
} else if (yieldNuggets>0&&info.outputSmall!=null) {
return new ItemStack[] {
ApiUtils.copyStackWithAmount(info.outputSmall.getExampleStack(), yieldNuggets)
};
}
}
}
return ItemStack.EMPTY;
return new ItemStack[0];
}
private static double getNormalizedNormalDist(double x, double sigma, double mu) {
return Math.exp(-(x - mu) * (x - mu) / (2 * sigma * sigma));
}
/*
for (String ore : nbt.getKeySet()) {
if (defaultOreData.containsKey(ore)) {
oreEnergies.put(ore, nbt.getDouble(ore));
}
}
*/
public static NBTBase save() {
NBTTagCompound ret = new NBTTagCompound();
if (oreEnergies.isEmpty()) {

View file

@ -75,7 +75,10 @@ public class DualEnergyStorage {
}
public double insertEU(double insertMax, boolean doInsert) {
double ins = Math.min(insertMax, maxEU - storedEU);
return insertEU(insertMax, maxInEU, doInsert);
}
public double insertEU(double insertMax, double leftover, boolean doInsert) {
double ins = Math.min(Math.min(insertMax, maxEU - storedEU), leftover);
if (doInsert) {
storedEU += ins;
}
@ -83,8 +86,12 @@ public class DualEnergyStorage {
}
public double insertIF(int insertMax, boolean doInsert) {
return insertIF(insertMax, ConversionUtil.ifPerEuIdeal()*maxInEU, doInsert);
}
public double insertIF(int insertMax, double leftover, boolean doInsert) {
double eu = insertMax * ConversionUtil.euPerIfIdeal();
return ConversionUtil.ifPerEuIdeal() * insertEU(eu, doInsert);
double euMax = leftover* ConversionUtil.euPerIfIdeal();
return ConversionUtil.ifPerEuIdeal() * insertEU(eu, euMax, doInsert);
}
public double getEnergyStoredEU() {
@ -121,4 +128,8 @@ public class DualEnergyStorage {
public void readFromNBT(NBTTagCompound nbt) {
storedEU = nbt.getDouble("stored");
}
public double getMaxInputIF() {
return maxInEU*ConversionUtil.ifPerEuIdeal();
}
}

View file

@ -21,8 +21,13 @@ package malte0811.industrialWires.util;
import blusunrize.immersiveengineering.api.ApiUtils;
import blusunrize.immersiveengineering.api.energy.wires.IImmersiveConnectable;
import blusunrize.immersiveengineering.api.energy.wires.ImmersiveNetHandler;
import blusunrize.immersiveengineering.common.blocks.IEBlockInterfaces;
import blusunrize.immersiveengineering.common.util.chickenbones.Matrix4;
import com.google.common.collect.ImmutableSet;
import malte0811.industrialWires.blocks.TileEntityIWMultiblock;
import net.minecraft.block.state.IBlockState;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.AxisAlignedBB;
import net.minecraft.util.math.BlockPos;
@ -98,6 +103,40 @@ public final class MiscUtils {
}
return p.offset(f, forward).offset(f.rotateY(), right).add(0, up, 0);
}
/**
* Calculates the parameters for offset to generate here from origin
* @return right, forward, up
*/
public static BlockPos getOffset(BlockPos origin, EnumFacing f, boolean mirror, BlockPos here) {
int dX = origin.getZ()-here.getZ();
int dZ = origin.getX()-here.getX();
int forward = 0;
int right = 0;
int up = here.getY()-origin.getY();
switch (f) {
case NORTH:
forward = dZ;
right = -dX;
break;
case SOUTH:
forward = -dZ;
right = dX;
break;
case WEST:
right = dZ;
forward = dX;
break;
case EAST:
right = -dZ;
forward = -dX;
break;
}
if (mirror) {
right *= -1;
}
return new BlockPos(right, forward, up);
}
@Nonnull
public static AxisAlignedBB apply(@Nonnull Matrix4 mat, @Nonnull AxisAlignedBB in) {
Vec3d min = new Vec3d(in.minX, in.minY, in.minZ);
@ -106,4 +145,12 @@ public final class MiscUtils {
max = mat.apply(max);
return new AxisAlignedBB(min.x, min.y, min.z, max.x, max.y, max.z);
}
public static ItemStack getItemStack(IBlockState origState, World w, BlockPos pos) {
if (origState.getBlock() instanceof IEBlockInterfaces.IIEMetaBlock) {
int meta = origState.getBlock().getMetaFromState(origState);
return new ItemStack(origState.getBlock(), 1, meta);
}
return origState.getBlock().getPickBlock(origState, null, w, pos, null);
}
}

View file

@ -15,23 +15,6 @@
}
},
"marx_type": {
"bottom": {
"model": "industrialwires:marx_bottom.obj"
},
"stage": {
"model": "industrialwires:marx_stage.obj"
},
"top": {
"model": "industrialwires:marx_top.obj"
},
"no_model": {
"model": "builtin/generated"
},
"connector": {
"model": "immersiveengineering:smartmodel/conn_empty"
}
},
"facing": {
"north": {
"transform": {
@ -62,6 +45,23 @@
}
}
},
"marx_type": {
"bottom": {
"model": "industrialwires:marx_bottom.obj"
},
"stage": {
"model": "industrialwires:marx_stage.obj"
},
"top": {
"model": "industrialwires:marx_top.obj"
},
"no_model": {
"model": "builtin/generated"
},
"connector": {
"model": "immersiveengineering:smartmodel/conn_empty"
}
},
"boolean0": //Mirror
{
"false": {},

View file

@ -43,6 +43,10 @@ item.industrialwires.key.key_named.name=Key for
item.industrialwires.key.blank_key.name=Blank Key
item.industrialwires.key.key_ring.name=Key Ring
industrialwires.subtitle.tinnitus=You have a tinnitus
industrialwires.subtitle.jacobs_ladder=Jacob's ladder hums
industrialwires.subtitle.marx_bang=Marx generator discharges
industrialwires.desc.wireLength=Wire length: %1s block(s)
industrialwires.desc.recipe=Please check the Engineer's manual for recipe details

View file

@ -1,20 +1,8 @@
# Blender MTL File: 'NewMarx.blend'
# Material Count: 2
newmtl marx
map_Ka industrialwires:blocks/marx
newmtl Material.003
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl connectorHV
map_Ka immersiveengineering:blocks/connector_connector_hv
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
newmtl connectorRedstone
map_Ka immersiveengineering:blocks/connector_connector_redstone

View file

@ -1,20 +1,5 @@
# Blender MTL File: 'NewMarx.blend'
# Material Count: 2
# Material Count: 3
newmtl Material.007
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
newmtl marx
map_Kd industrialwires:blocks/marx

View file

@ -1,7 +1,47 @@
# Blender v2.78 (sub 0) OBJ File: 'NewMarx.blend'
# www.blender.org
mtllib marx_stage.mtl
o Cube.003_Cube.085
o Cube.021_Cube.003
v 0.437498 0.187500 1.375000
v 0.437498 0.312500 1.375000
v 0.437498 0.187500 1.000000
v 0.437498 0.312500 1.000000
v 0.562498 0.187500 1.375000
v 0.562498 0.312500 1.375000
v 0.562498 0.187500 1.000000
v 0.562498 0.312500 1.000000
vt 0.4219 0.2031
vt 0.4062 0.2031
vt 0.4062 0.1562
vt 0.4219 0.1562
vt 0.3906 0.1562
vt 0.4062 0.1562
vt 0.4062 0.2031
vt 0.3906 0.2031
vt 0.4297 0.2031
vt 0.4297 0.2188
vt 0.4141 0.2188
vt 0.4141 0.2031
vt 0.4531 0.2031
vt 0.4375 0.2031
vt 0.4375 0.1562
vt 0.4531 0.1562
vt 0.4219 0.1562
vt 0.4375 0.1562
vt 0.4375 0.2031
vt 0.4219 0.2031
vn -1.0000 0.0000 0.0000
vn 1.0000 -0.0000 0.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl marx
f 1/1/1 2/2/1 4/3/1 3/4/1
f 7/5/2 8/6/2 6/7/2 5/8/2
f 5/9/3 6/10/3 2/11/3 1/12/3
f 3/13/4 7/14/4 5/15/4 1/16/4
f 8/17/5 4/18/5 2/19/5 6/20/5
o Cube.003_Cube.013
v 1.999999 -0.000001 0.000001
v 1.999999 -0.000001 1.000000
v 0.000000 0.000000 1.000000
@ -10,44 +50,44 @@ v 2.000000 0.499999 0.000001
v 1.999999 0.499999 1.000000
v -0.000000 0.500000 1.000000
v 0.000000 0.500000 0.000001
vt 0.1250 0.5000
vt 0.0000 0.5000
vt 0.0000 0.2500
vt 0.1250 0.2500
vt 0.0000 0.2500
vt 0.0000 -0.0000
vt 0.1250 -0.0000
vt 0.1250 0.2500
vt -0.0000 0.5000
vt 0.0625 0.5000
vt 0.0625 0.6250
vt -0.0000 0.6250
vt 0.1250 0.1250
vt 0.1250 0.0625
vt 0.3750 0.0625
vt 0.3750 0.1250
vt 0.1250 0.6250
vt 0.0625 0.6250
vt 0.0625 0.5000
vt 0.1250 0.5000
vt 0.3750 -0.0000
vt 0.3750 0.0625
vt 0.1250 0.0625
vt 0.1250 -0.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 -0.0000
vn 1.0000 -0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material.007
s off
f 1//1 2//1 3//1 4//1
f 5//2 8//2 7//2 6//2
f 1//3 5//3 6//3 2//3
f 2//4 6//4 7//4 3//4
f 3//5 7//5 8//5 4//5
f 5//6 1//6 4//6 8//6
o Cube.013_Cube.086
v 0.374998 0.500000 0.625000
v 0.374998 1.000000 0.625000
v 0.374998 0.500000 0.375000
v 0.374998 1.000000 0.375000
v 0.624998 0.500000 0.625000
v 0.624998 1.000000 0.625000
v 0.624998 0.500000 0.375000
v 0.624998 1.000000 0.375000
vn -1.0000 0.0000 0.0000
vn -0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 9//7 10//7 12//7 11//7
f 11//8 12//8 16//8 15//8
f 15//9 16//9 14//9 13//9
f 13//10 14//10 10//10 9//10
f 11//11 15//11 13//11 9//11
f 16//12 12//12 10//12 14//12
o Cube.014_Cube.087
usemtl marx
f 9/21/6 10/22/6 11/23/6 12/24/6
f 13/25/7 16/26/7 15/27/7 14/28/7
f 9/29/8 13/30/8 14/31/8 10/32/8
f 10/33/9 14/34/9 15/35/9 11/36/9
f 11/37/10 15/38/10 16/39/10 12/40/10
f 13/41/11 9/42/11 12/43/11 16/44/11
o Cube.011_Cube.026
v 1.374998 0.500000 0.625000
v 1.374998 1.000000 0.625000
v 1.374998 0.500000 0.375000
@ -56,44 +96,6 @@ v 1.624998 0.500000 0.625000
v 1.624998 1.000000 0.625000
v 1.624998 0.500000 0.375000
v 1.624998 1.000000 0.375000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 17//13 18//13 20//13 19//13
f 19//14 20//14 24//14 23//14
f 23//15 24//15 22//15 21//15
f 21//16 22//16 18//16 17//16
f 19//17 23//17 21//17 17//17
f 24//18 20//18 18//18 22//18
o Cube.016_Cube.088
v 0.250000 0.687500 0.750000
v 0.250000 0.812500 0.750000
v 0.250000 0.687500 0.250000
v 0.250000 0.812500 0.250000
v 0.750000 0.687500 0.750000
v 0.750000 0.812500 0.750000
v 0.750000 0.687500 0.250000
v 0.750000 0.812500 0.250000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 25//19 26//19 28//19 27//19
f 27//20 28//20 32//20 31//20
f 31//21 32//21 30//21 29//21
f 29//22 30//22 26//22 25//22
f 27//23 31//23 29//23 25//23
f 32//24 28//24 26//24 30//24
o Cube.017_Cube.089
v 1.250000 0.687500 0.750000
v 1.250000 0.812500 0.750000
v 1.250000 0.687500 0.250000
@ -102,90 +104,57 @@ v 1.750000 0.687500 0.750000
v 1.750000 0.812500 0.750000
v 1.750000 0.687500 0.250000
v 1.750000 0.812500 0.250000
vt 0.2266 0.4609
vt 0.2266 0.3984
vt 0.2578 0.3984
vt 0.2578 0.4609
vt 0.2578 0.3359
vt 0.2266 0.3984
vt 0.2266 0.3359
vt 0.1953 0.3984
vt 0.1953 0.3359
vt 0.2266 0.3984
vt 0.2266 0.4609
vt 0.1953 0.4609
vt 0.1953 0.3984
vt 0.2578 0.3984
vt 0.2734 0.3984
vt 0.2734 0.4609
vt 0.2578 0.4609
vt 0.2734 0.3359
vt 0.2891 0.3359
vt 0.2891 0.3984
vt 0.2734 0.3984
vt 0.2891 0.4609
vt 0.2734 0.4609
vt 0.2578 0.3359
vt 0.2734 0.3359
vt 0.1328 0.3984
vt 0.1953 0.3984
vt 0.1953 0.4609
vt 0.1328 0.4609
vt 0.1328 0.3359
vt 0.1953 0.3359
vt 0.1953 0.3984
vt 0.1328 0.3984
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 33//25 34//25 36//25 35//25
f 35//26 36//26 40//26 39//26
f 39//27 40//27 38//27 37//27
f 37//28 38//28 34//28 33//28
f 35//29 39//29 37//29 33//29
f 40//30 36//30 34//30 38//30
o Cube.018_Cube.090
v 1.437498 0.312500 1.375000
v 1.437498 1.187500 1.375000
v 1.437498 0.312500 1.250000
v 1.437498 1.187500 1.250000
v 1.562498 0.312500 1.375000
v 1.562498 1.187500 1.375000
v 1.562498 0.312500 1.250000
v 1.562498 1.187500 1.250000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 41//31 42//31 44//31 43//31
f 43//32 44//32 48//32 47//32
f 47//33 48//33 46//33 45//33
f 45//34 46//34 42//34 41//34
f 43//35 47//35 45//35 41//35
f 48//36 44//36 42//36 46//36
o Cube.019_Cube.091
v 1.437498 0.187500 1.375000
v 1.437498 0.312500 1.375000
v 1.437498 0.187500 1.000000
v 1.437498 0.312500 1.000000
v 1.562498 0.187500 1.375000
v 1.562498 0.312500 1.375000
v 1.562498 0.187500 1.000000
v 1.562498 0.312500 1.000000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 49//37 50//37 52//37 51//37
f 51//38 52//38 56//38 55//38
f 55//39 56//39 54//39 53//39
f 53//40 54//40 50//40 49//40
f 51//41 55//41 53//41 49//41
f 56//42 52//42 50//42 54//42
o Cube.020_Cube.092
v 1.374998 0.375000 1.437500
v 1.374998 1.125000 1.437500
v 1.374998 0.375000 1.187500
v 1.374998 1.125000 1.187500
v 1.624998 0.375000 1.437500
v 1.624998 1.125000 1.437500
v 1.624998 0.375000 1.187500
v 1.624998 1.125000 1.187500
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 57//43 58//43 60//43 59//43
f 59//44 60//44 64//44 63//44
f 63//45 64//45 62//45 61//45
f 61//46 62//46 58//46 57//46
f 59//47 63//47 61//47 57//47
f 64//48 60//48 58//48 62//48
o Cube.021_Cube.093
usemtl marx
f 17/45/12 18/46/12 20/47/12 19/48/12
f 19/49/13 20/47/13 24/50/13 23/51/13
f 23/51/14 24/50/14 22/52/14 21/53/14
f 21/54/15 22/55/15 18/56/15 17/57/15
f 25/58/12 26/59/12 28/60/12 27/61/12
f 27/62/13 28/63/13 32/64/13 31/65/13
f 31/65/14 32/64/14 30/66/14 29/67/14
f 29/68/15 30/69/15 26/59/15 25/58/15
f 27/70/16 31/71/16 29/72/16 25/73/16
f 32/74/17 28/75/17 26/76/17 30/77/17
o Cube.014_Cube.027
v 1.187498 0.385723 -0.187500
v 1.010721 0.562500 -0.187500
v 1.187498 0.385723 -0.437500
@ -196,12 +165,12 @@ v 1.364275 0.562500 -0.437500
v 1.187498 0.739277 -0.437500
v 1.455804 0.205806 -0.250000
v 1.102251 0.559359 -0.250000
v 1.455804 0.205806 -0.375000
v 1.102250 0.559359 -0.375000
v 1.455804 0.205806 -0.373125
v 1.102251 0.559359 -0.373125
v 1.544192 0.294194 -0.250000
v 1.190639 0.647748 -0.250000
v 1.544192 0.294194 -0.375000
v 1.190639 0.647748 -0.375000
v 1.544192 0.294194 -0.373125
v 1.190639 0.647748 -0.373125
v 1.562498 0.312500 -0.375000
v 1.437498 0.312500 -0.375000
v 1.562498 0.312500 -0.000000
@ -210,9 +179,64 @@ v 1.562498 0.187500 -0.375000
v 1.437498 0.187500 -0.375000
v 1.562498 0.187500 -0.000000
v 1.437498 0.187500 0.000000
vn -0.7071 -0.7071 0.0000
vt 0.3750 0.0938
vt 0.3750 0.0625
vt 0.4062 0.0625
vt 0.4062 0.0938
vt 0.4062 0.1250
vt 0.4062 0.1562
vt 0.3750 0.1562
vt 0.3750 0.1250
vt 0.4688 0.1562
vt 0.4375 0.1562
vt 0.4375 0.1250
vt 0.4688 0.1250
vt 0.4375 0.0938
vt 0.4062 0.1250
vt 0.4062 0.0938
vt 0.3750 0.0938
vt 0.3438 0.1562
vt 0.3438 0.1250
vt 0.3750 0.1250
vt 0.4844 0.0625
vt 0.4844 0.1250
vt 0.4688 0.1250
vt 0.4688 0.0625
vt 0.4531 0.0625
vt 0.4531 0.1250
vt 0.4375 0.1250
vt 0.4375 0.0625
vt 0.4844 0.1250
vt 0.4844 0.0625
vt 0.5000 0.0625
vt 0.5000 0.1250
vt 0.4531 0.1250
vt 0.4531 0.0625
vt 0.4688 0.0625
vt 0.4688 0.1250
vt 0.4844 0.1719
vt 0.4688 0.1719
vt 0.4688 0.1250
vt 0.4844 0.1250
vt 0.4375 0.1719
vt 0.4219 0.1719
vt 0.4219 0.1250
vt 0.4375 0.1250
vt 0.3906 0.1719
vt 0.3750 0.1719
vt 0.3750 0.1562
vt 0.3906 0.1562
vt 0.4062 0.1250
vt 0.4219 0.1250
vt 0.4219 0.1719
vt 0.4062 0.1719
vt 0.5000 0.1719
vt 0.4844 0.1719
vt 0.4844 0.1250
vt 0.5000 0.1250
vn -0.7071 -0.7071 -0.0000
vn -0.0000 0.0000 -1.0000
vn 0.7071 0.7071 -0.0000
vn 0.7071 0.7071 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.7071 -0.7071 -0.0000
vn -0.7071 0.7071 0.0000
@ -220,27 +244,170 @@ vn 0.0000 1.0000 0.0000
vn 0.0000 -1.0000 0.0000
vn 1.0000 0.0000 -0.0000
vn -1.0000 0.0000 0.0000
usemtl None
s off
f 65//49 66//49 68//49 67//49
f 67//50 68//50 72//50 71//50
f 71//51 72//51 70//51 69//51
f 69//52 70//52 66//52 65//52
f 67//53 71//53 69//53 65//53
f 72//54 68//54 66//54 70//54
f 73//49 74//49 76//49 75//49
f 75//50 76//50 80//50 79//50
f 79//51 80//51 78//51 77//51
f 77//52 78//52 74//52 73//52
f 75//53 79//53 77//53 73//53
f 80//54 76//54 74//54 78//54
f 81//55 82//55 84//55 83//55
f 83//52 84//52 88//52 87//52
f 87//56 88//56 86//56 85//56
f 85//50 86//50 82//50 81//50
f 83//57 87//57 85//57 81//57
f 88//58 84//58 82//58 86//58
o Cube.022_Cube.094
usemtl marx
f 33/78/18 34/79/18 36/80/18 35/81/18
f 35/82/19 36/83/19 40/84/19 39/85/19
f 39/86/20 40/87/20 38/88/20 37/89/20
f 37/90/21 38/88/21 34/91/21 33/92/21
f 35/82/22 39/85/22 37/93/22 33/92/22
f 40/84/23 36/94/23 34/95/23 38/96/23
f 41/97/18 42/98/18 44/99/18 43/100/18
f 43/101/19 44/102/19 48/103/19 47/104/19
f 47/105/20 48/106/20 46/107/20 45/108/20
f 45/109/21 46/110/21 42/111/21 41/112/21
f 49/113/24 50/114/24 52/115/24 51/116/24
f 55/117/25 56/118/25 54/119/25 53/120/25
f 53/121/19 54/122/19 50/123/19 49/124/19
f 51/125/26 55/126/26 53/127/26 49/128/26
f 56/129/27 52/130/27 50/131/27 54/132/27
o Cube.015_Cube.028
v 0.374998 0.500000 0.625000
v 0.374998 1.000000 0.625000
v 0.374998 0.500000 0.375000
v 0.374998 1.000000 0.375000
v 0.624998 0.500000 0.625000
v 0.624998 1.000000 0.625000
v 0.624998 0.500000 0.375000
v 0.624998 1.000000 0.375000
v 0.250000 0.687500 0.750000
v 0.250000 0.812500 0.750000
v 0.250000 0.687500 0.250000
v 0.250000 0.812500 0.250000
v 0.750000 0.687500 0.750000
v 0.750000 0.812500 0.750000
v 0.750000 0.687500 0.250000
v 0.750000 0.812500 0.250000
vt 0.2266 0.4609
vt 0.2266 0.3984
vt 0.2578 0.3984
vt 0.2578 0.4609
vt 0.2578 0.3359
vt 0.2266 0.3984
vt 0.2266 0.3359
vt 0.1953 0.3984
vt 0.1953 0.3359
vt 0.2266 0.3984
vt 0.2266 0.4609
vt 0.1953 0.4609
vt 0.1953 0.3984
vt 0.2578 0.3984
vt 0.2734 0.3984
vt 0.2734 0.4609
vt 0.2578 0.4609
vt 0.2734 0.3359
vt 0.2891 0.3359
vt 0.2891 0.3984
vt 0.2734 0.3984
vt 0.2891 0.4609
vt 0.2734 0.4609
vt 0.2578 0.3359
vt 0.2734 0.3359
vt 0.1328 0.3984
vt 0.1953 0.3984
vt 0.1953 0.4609
vt 0.1328 0.4609
vt 0.1328 0.3359
vt 0.1953 0.3359
vt 0.1953 0.3984
vt 0.1328 0.3984
vn -1.0000 0.0000 0.0000
vn -0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl marx
f 57/133/28 58/134/28 60/135/28 59/136/28
f 59/137/29 60/135/29 64/138/29 63/139/29
f 63/139/30 64/138/30 62/140/30 61/141/30
f 61/142/31 62/143/31 58/144/31 57/145/31
f 65/146/28 66/147/28 68/148/28 67/149/28
f 67/150/29 68/151/29 72/152/29 71/153/29
f 71/153/30 72/152/30 70/154/30 69/155/30
f 69/156/31 70/157/31 66/147/31 65/146/31
f 67/158/32 71/159/32 69/160/32 65/161/32
f 72/162/33 68/163/33 66/164/33 70/165/33
o Cube.016_Cube.029
v 1.437498 0.312500 1.375000
v 1.437498 1.187500 1.375000
v 1.437498 0.312500 1.250000
v 1.437498 1.187500 1.250000
v 1.562498 0.312500 1.375000
v 1.562498 1.187500 1.375000
v 1.562498 0.312500 1.250000
v 1.562498 1.187500 1.250000
vt 0.4219 0.1172
vt 0.4219 0.0078
vt 0.4375 0.0078
vt 0.4375 0.1172
vt 0.3906 0.3984
vt 0.3906 0.2891
vt 0.4062 0.2891
vt 0.4062 0.3984
vt 0.4688 0.0703
vt 0.4688 0.1797
vt 0.4531 0.1797
vt 0.4531 0.0703
vt 0.4141 0.0938
vt 0.4141 0.2031
vt 0.3984 0.2031
vt 0.3984 0.0938
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
usemtl marx
f 73/166/34 74/167/34 76/168/34 75/169/34
f 75/170/35 76/171/35 80/172/35 79/173/35
f 79/174/36 80/175/36 78/176/36 77/177/36
f 77/178/37 78/179/37 74/180/37 73/181/37
o Cube.017_Cube.030
v 1.374998 0.375000 1.437500
v 1.374998 1.125000 1.437500
v 1.374998 0.375000 1.187500
v 1.374998 1.125000 1.187500
v 1.624998 0.375000 1.437500
v 1.624998 1.125000 1.437500
v 1.624998 0.375000 1.187500
v 1.624998 1.125000 1.187500
vt 0.1953 0.2266
vt 0.1953 0.1328
vt 0.2266 0.1328
vt 0.2266 0.2266
vt 0.1641 0.1328
vt 0.1641 0.2266
vt 0.1328 0.2266
vt 0.1328 0.1328
vt 0.1641 0.2266
vt 0.1641 0.3203
vt 0.1328 0.3203
vt 0.1328 0.2266
vt 0.1953 0.1328
vt 0.1953 0.2266
vt 0.1641 0.2266
vt 0.1641 0.1328
vt 0.1953 0.2266
vt 0.1953 0.2578
vt 0.1641 0.2578
vt 0.1641 0.2266
vt 0.2266 0.2578
vt 0.1953 0.2578
vt 0.1953 0.2266
vt 0.2266 0.2266
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl marx
f 81/182/38 82/183/38 84/184/38 83/185/38
f 83/186/39 84/187/39 88/188/39 87/189/39
f 87/190/40 88/191/40 86/192/40 85/193/40
f 85/194/41 86/195/41 82/196/41 81/197/41
f 83/198/42 87/199/42 85/200/42 81/201/42
f 88/202/43 84/203/43 82/204/43 86/205/43
o Cube.018_Cube.031
v 0.437498 0.312500 1.375000
v 0.437499 1.187500 1.375000
v 0.437498 0.312500 1.250000
@ -249,44 +416,32 @@ v 0.562498 0.312500 1.375000
v 0.562499 1.187500 1.375000
v 0.562498 0.312500 1.250000
v 0.562499 1.187500 1.250000
vt 0.4219 0.1172
vt 0.4219 0.0078
vt 0.4375 0.0078
vt 0.4375 0.1172
vt 0.3906 0.3984
vt 0.3906 0.2891
vt 0.4062 0.2891
vt 0.4062 0.3984
vt 0.4688 0.0703
vt 0.4688 0.1797
vt 0.4531 0.1797
vt 0.4531 0.0703
vt 0.4141 0.0938
vt 0.4141 0.2031
vt 0.3984 0.2031
vt 0.3984 0.0938
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 89//59 90//59 92//59 91//59
f 91//60 92//60 96//60 95//60
f 95//61 96//61 94//61 93//61
f 93//62 94//62 90//62 89//62
f 91//63 95//63 93//63 89//63
f 96//64 92//64 90//64 94//64
o Cube.023_Cube.095
v 0.437498 0.187500 1.375000
v 0.437498 0.312500 1.375000
v 0.437498 0.187500 1.000000
v 0.437498 0.312500 1.000000
v 0.562498 0.187500 1.375000
v 0.562498 0.312500 1.375000
v 0.562498 0.187500 1.000000
v 0.562498 0.312500 1.000000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 97//65 98//65 100//65 99//65
f 99//66 100//66 104//66 103//66
f 103//67 104//67 102//67 101//67
f 101//68 102//68 98//68 97//68
f 99//69 103//69 101//69 97//69
f 104//70 100//70 98//70 102//70
o Cube.024_Cube.096
usemtl marx
f 89/206/44 90/207/44 92/208/44 91/209/44
f 91/210/45 92/211/45 96/212/45 95/213/45
f 95/214/46 96/215/46 94/216/46 93/217/46
f 93/218/47 94/219/47 90/220/47 89/221/47
o Cube.020_Cube.032
v 0.374998 0.375000 1.437500
v 0.374998 1.125000 1.437500
v 0.374998 0.375000 1.187500
@ -295,37 +450,60 @@ v 0.624998 0.375000 1.437500
v 0.624998 1.125000 1.437500
v 0.624998 0.375000 1.187500
v 0.624998 1.125000 1.187500
vt 0.1953 0.2266
vt 0.1953 0.1328
vt 0.2266 0.1328
vt 0.2266 0.2266
vt 0.1641 0.1328
vt 0.1641 0.2266
vt 0.1328 0.2266
vt 0.1328 0.1328
vt 0.1641 0.2266
vt 0.1641 0.3203
vt 0.1328 0.3203
vt 0.1328 0.2266
vt 0.1953 0.1328
vt 0.1953 0.2266
vt 0.1641 0.2266
vt 0.1641 0.1328
vt 0.1953 0.2266
vt 0.1953 0.2578
vt 0.1641 0.2578
vt 0.1641 0.2266
vt 0.2266 0.2578
vt 0.1953 0.2578
vt 0.1953 0.2266
vt 0.2266 0.2266
vn -1.0000 0.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 0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 105//71 106//71 108//71 107//71
f 107//72 108//72 112//72 111//72
f 111//73 112//73 110//73 109//73
f 109//74 110//74 106//74 105//74
f 107//75 111//75 109//75 105//75
f 112//76 108//76 106//76 110//76
o Cube.025_Cube.097
usemtl marx
f 97/222/48 98/223/48 100/224/48 99/225/48
f 99/226/49 100/227/49 104/228/49 103/229/49
f 103/230/50 104/231/50 102/232/50 101/233/50
f 101/234/51 102/235/51 98/236/51 97/237/51
f 99/238/52 103/239/52 101/240/52 97/241/52
f 104/242/53 100/243/53 98/244/53 102/245/53
o Cube.022_Cube.033
v 0.812498 0.114277 -0.187500
v 0.989275 -0.062500 -0.187500
v 0.812498 0.114277 -0.437500
v 0.812498 0.114276 -0.437500
v 0.989275 -0.062500 -0.437500
v 0.635722 -0.062500 -0.187500
v 0.635721 -0.062500 -0.187500
v 0.812498 -0.239277 -0.187500
v 0.635722 -0.062500 -0.437500
v 0.812498 -0.239277 -0.437500
v 0.544192 0.294194 -0.250000
v 0.897746 -0.059359 -0.250000
v 0.544193 0.294194 -0.375000
v 0.897746 -0.059359 -0.375000
v 0.544193 0.294194 -0.373125
v 0.897746 -0.059359 -0.373125
v 0.455804 0.205806 -0.250000
v 0.809358 -0.147748 -0.250000
v 0.455804 0.205806 -0.375000
v 0.809358 -0.147748 -0.375000
v 0.809357 -0.147748 -0.250000
v 0.455804 0.205806 -0.373125
v 0.809357 -0.147748 -0.373125
v 0.437498 0.187500 -0.375000
v 0.562498 0.187500 -0.375000
v 0.437498 0.187500 -0.000000
@ -334,33 +512,124 @@ v 0.437498 0.312500 -0.375000
v 0.562498 0.312500 -0.375000
v 0.437498 0.312500 -0.000000
v 0.562498 0.312500 0.000000
vt 0.3750 0.0938
vt 0.3750 0.0625
vt 0.4062 0.0625
vt 0.4062 0.0938
vt 0.4062 0.1250
vt 0.4062 0.1562
vt 0.3750 0.1562
vt 0.3750 0.1250
vt 0.4688 0.1562
vt 0.4375 0.1562
vt 0.4375 0.1250
vt 0.4688 0.1250
vt 0.4375 0.0938
vt 0.4062 0.1250
vt 0.4062 0.0938
vt 0.3750 0.0938
vt 0.3438 0.1562
vt 0.3438 0.1250
vt 0.3750 0.1250
vt 0.4844 0.0625
vt 0.4844 0.1250
vt 0.4688 0.1250
vt 0.4688 0.0625
vt 0.4531 0.0625
vt 0.4531 0.1250
vt 0.4375 0.1250
vt 0.4375 0.0625
vt 0.4844 0.1250
vt 0.4844 0.0625
vt 0.5000 0.0625
vt 0.5000 0.1250
vt 0.4531 0.1250
vt 0.4531 0.0625
vt 0.4688 0.0625
vt 0.4688 0.1250
vt 0.4844 0.1719
vt 0.4688 0.1719
vt 0.4688 0.1250
vt 0.4844 0.1250
vt 0.4375 0.1719
vt 0.4219 0.1719
vt 0.4219 0.1250
vt 0.4375 0.1250
vt 0.3906 0.1719
vt 0.3750 0.1719
vt 0.3750 0.1562
vt 0.3906 0.1562
vt 0.4062 0.1250
vt 0.4219 0.1250
vt 0.4219 0.1719
vt 0.4062 0.1719
vt 0.5000 0.1719
vt 0.4844 0.1719
vt 0.4844 0.1250
vt 0.5000 0.1250
vn 0.7071 0.7071 0.0000
vn 0.0000 -0.0000 -1.0000
vn -0.7071 -0.7071 -0.0000
vn -0.0000 0.0000 1.0000
vn -0.7071 0.7071 -0.0000
vn 0.7071 -0.7071 0.0000
vn 0.0000 -1.0000 0.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn -1.0000 0.0000 -0.0000
vn 1.0000 -0.0000 0.0000
usemtl marx
f 105/246/54 106/247/54 108/248/54 107/249/54
f 107/250/55 108/251/55 112/252/55 111/253/55
f 111/254/56 112/255/56 110/256/56 109/257/56
f 109/258/57 110/256/57 106/259/57 105/260/57
f 107/250/58 111/253/58 109/261/58 105/260/58
f 112/252/59 108/262/59 106/263/59 110/264/59
f 113/265/54 114/266/54 116/267/54 115/268/54
f 115/269/55 116/270/55 120/271/55 119/272/55
f 119/273/56 120/274/56 118/275/56 117/276/56
f 117/277/57 118/278/57 114/279/57 113/280/57
f 121/281/60 122/282/60 124/283/60 123/284/60
f 127/285/61 128/286/61 126/287/61 125/288/61
f 125/289/55 126/290/55 122/291/55 121/292/55
f 123/293/62 127/294/62 125/295/62 121/296/62
f 128/297/63 124/298/63 122/299/63 126/300/63
o Cube.012_Cube.034
v 1.437498 0.187500 1.375000
v 1.437498 0.312500 1.375000
v 1.437498 0.187500 1.000000
v 1.437498 0.312500 1.000000
v 1.562498 0.187500 1.375000
v 1.562498 0.312500 1.375000
v 1.562498 0.187500 1.000000
v 1.562498 0.312500 1.000000
vt 0.4219 0.2031
vt 0.4062 0.2031
vt 0.4062 0.1562
vt 0.4219 0.1562
vt 0.3906 0.1562
vt 0.4062 0.1562
vt 0.4062 0.2031
vt 0.3906 0.2031
vt 0.4297 0.2031
vt 0.4297 0.2188
vt 0.4141 0.2188
vt 0.4141 0.2031
vt 0.4531 0.2031
vt 0.4375 0.2031
vt 0.4375 0.1562
vt 0.4531 0.1562
vt 0.4219 0.1562
vt 0.4375 0.1562
vt 0.4375 0.2031
vt 0.4219 0.2031
vn -1.0000 0.0000 0.0000
vn 1.0000 0.0000 0.0000
usemtl None
s off
f 113//77 114//77 116//77 115//77
f 115//78 116//78 120//78 119//78
f 119//79 120//79 118//79 117//79
f 117//80 118//80 114//80 113//80
f 115//81 119//81 117//81 113//81
f 120//82 116//82 114//82 118//82
f 121//77 122//77 124//77 123//77
f 123//78 124//78 128//78 127//78
f 127//79 128//79 126//79 125//79
f 125//80 126//80 122//80 121//80
f 123//81 127//81 125//81 121//81
f 128//82 124//82 122//82 126//82
f 129//83 130//83 132//83 131//83
f 131//80 132//80 136//80 135//80
f 135//84 136//84 134//84 133//84
f 133//78 134//78 130//78 129//78
f 131//85 135//85 133//85 129//85
f 136//86 132//86 130//86 134//86
vn -0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl marx
f 129/301/64 130/302/64 132/303/64 131/304/64
f 135/305/65 136/306/65 134/307/65 133/308/65
f 133/309/66 134/310/66 130/311/66 129/312/66
f 131/313/67 135/314/67 133/315/67 129/316/67
f 136/317/68 132/318/68 130/319/68 134/320/68

View file

@ -1,20 +1,2 @@
# Blender MTL File: 'NewMarx.blend'
# Material Count: 2
newmtl Material.004
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
newmtl None
Ns 0
Ka 0.000000 0.000000 0.000000
Kd 0.8 0.8 0.8
Ks 0.8 0.8 0.8
d 1
illum 2
newmtl marx
map_Ka industrialwires:blocks/marx

View file

@ -10,20 +10,38 @@ v 1.593750 0.062500 -3.406250
v 1.593750 0.187500 -3.406250
v 1.593750 0.062500 -3.593750
v 1.593750 0.187500 -3.593750
vt 0.4531 0.1641
vt 0.4375 0.1641
vt 0.4375 0.1406
vt 0.4531 0.1406
vt 0.4375 0.1172
vt 0.4531 0.1172
vt 0.4375 0.1406
vt 0.4219 0.1406
vt 0.4219 0.1172
vt 0.4375 0.1172
vt 0.4219 0.1406
vt 0.4375 0.1406
vt 0.4219 0.1641
vt 0.3984 0.1641
vt 0.3984 0.1406
vt 0.4219 0.1172
vt 0.4219 0.1406
vt 0.3984 0.1406
vt 0.3984 0.1172
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 1//1 2//1 4//1 3//1
f 3//2 4//2 8//2 7//2
f 7//3 8//3 6//3 5//3
f 5//4 6//4 2//4 1//4
f 3//5 7//5 5//5 1//5
f 8//6 4//6 2//6 6//6
usemtl marx
f 1/1/1 2/2/1 4/3/1 3/4/1
f 3/4/2 4/3/2 8/5/2 7/6/2
f 7/7/3 8/8/3 6/9/3 5/10/3
f 5/11/4 6/12/4 2/2/4 1/13/4
f 3/14/5 7/15/5 5/11/5 1/13/5
f 8/16/6 4/17/6 2/18/6 6/19/6
o Cube.027_Cube.115
v 1.437500 0.187500 0.000000
v 1.437500 0.312500 0.000000
@ -33,21 +51,38 @@ v 1.562500 0.187500 0.000000
v 1.562500 0.312500 0.000000
v 1.562500 0.187500 -3.562500
v 1.562500 0.312500 -3.562500
vt 0.4219 0.4453
vt 0.4062 0.4453
vt 0.4062 -0.0000
vt 0.4219 -0.0000
vt 0.4375 0.0156
vt 0.4375 -0.0000
vt 0.4531 -0.0000
vt 0.4531 0.0156
vt 0.3906 0.4453
vt 0.3750 0.4453
vt 0.3750 -0.0000
vt 0.3906 -0.0000
vt 0.3906 -0.0000
vt 0.4062 -0.0000
vt 0.4062 0.4453
vt 0.3906 0.4453
vt 0.4375 0.4453
vt 0.4219 0.4453
vt 0.4219 -0.0000
vt 0.4375 -0.0000
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 9//7 10//7 12//7 11//7
f 11//8 12//8 16//8 15//8
f 15//9 16//9 14//9 13//9
f 13//10 14//10 10//10 9//10
f 11//11 15//11 13//11 9//11
f 16//12 12//12 10//12 14//12
o Cube.015_Cube.058
usemtl marx
f 9/20/7 10/21/7 12/22/7 11/23/7
f 11/24/8 12/25/8 16/26/8 15/27/8
f 15/28/9 16/29/9 14/30/9 13/31/9
f 11/32/10 15/33/10 13/34/10 9/35/10
f 16/36/11 12/37/11 10/38/11 14/39/11
o Cube.013_Cube.035
v 1.999999 -0.000001 0.000001
v 1.999999 -0.000001 1.000000
v 0.000000 0.000000 1.000000
@ -56,21 +91,44 @@ v 2.000000 0.499999 0.000001
v 1.999999 0.499999 1.000000
v -0.000000 0.500000 1.000000
v 0.000000 0.500000 0.000001
vt 0.1250 0.5000
vt 0.0000 0.5000
vt 0.0000 0.2500
vt 0.1250 0.2500
vt 0.0000 0.2500
vt 0.0000 -0.0000
vt 0.1250 -0.0000
vt 0.1250 0.2500
vt -0.0000 0.5000
vt 0.0625 0.5000
vt 0.0625 0.6250
vt -0.0000 0.6250
vt 0.1250 0.1250
vt 0.1250 0.0625
vt 0.3750 0.0625
vt 0.3750 0.1250
vt 0.1250 0.6250
vt 0.0625 0.6250
vt 0.0625 0.5000
vt 0.1250 0.5000
vt 0.3750 -0.0000
vt 0.3750 0.0625
vt 0.1250 0.0625
vt 0.1250 -0.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 -0.0000
vn 1.0000 -0.0000 0.0000
vn -0.0000 -0.0000 1.0000
vn -1.0000 -0.0000 -0.0000
vn 0.0000 0.0000 -1.0000
usemtl Material.004
s off
f 17//13 18//13 19//13 20//13
f 21//14 24//14 23//14 22//14
f 17//15 21//15 22//15 18//15
f 18//16 22//16 23//16 19//16
f 19//17 23//17 24//17 20//17
f 21//18 17//18 20//18 24//18
o Cube.026_Cube.059
usemtl marx
f 17/40/12 18/41/12 19/42/12 20/43/12
f 21/44/13 24/45/13 23/46/13 22/47/13
f 17/48/14 21/49/14 22/50/14 18/51/14
f 18/52/15 22/53/15 23/54/15 19/55/15
f 19/56/16 23/57/16 24/58/16 20/59/16
f 21/60/17 17/61/17 20/62/17 24/63/17
o Cube.019_Cube.036
v 1.437498 0.187500 1.375000
v 1.437498 0.312500 1.375000
v 1.437498 0.187500 1.000000
@ -79,21 +137,38 @@ v 1.562498 0.187500 1.375000
v 1.562498 0.312500 1.375000
v 1.562498 0.187500 1.000000
v 1.562498 0.312500 1.000000
vt 0.4219 0.2031
vt 0.4062 0.2031
vt 0.4062 0.1562
vt 0.4219 0.1562
vt 0.3906 0.1562
vt 0.4062 0.1562
vt 0.4062 0.2031
vt 0.3906 0.2031
vt 0.4297 0.2031
vt 0.4297 0.2188
vt 0.4141 0.2188
vt 0.4141 0.2031
vt 0.4531 0.2031
vt 0.4375 0.2031
vt 0.4375 0.1562
vt 0.4531 0.1562
vt 0.4219 0.1562
vt 0.4375 0.1562
vt 0.4375 0.2031
vt 0.4219 0.2031
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 0.0000 0.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 25//19 26//19 28//19 27//19
f 27//20 28//20 32//20 31//20
f 31//21 32//21 30//21 29//21
f 29//22 30//22 26//22 25//22
f 27//23 31//23 29//23 25//23
f 32//24 28//24 26//24 30//24
o Cube.034_Cube.060
usemtl marx
f 25/64/18 26/65/18 28/66/18 27/67/18
f 31/68/19 32/69/19 30/70/19 29/71/19
f 29/72/20 30/73/20 26/74/20 25/75/20
f 27/76/21 31/77/21 29/78/21 25/79/21
f 32/80/22 28/81/22 26/82/22 30/83/22
o Cube.023_Cube.037
v 0.437498 0.187500 1.375000
v 0.437498 0.312500 1.375000
v 0.437498 0.187500 1.000000
@ -102,37 +177,54 @@ v 0.562498 0.187500 1.375000
v 0.562498 0.312500 1.375000
v 0.562498 0.187500 1.000000
v 0.562498 0.312500 1.000000
vt 0.4219 0.2031
vt 0.4062 0.2031
vt 0.4062 0.1562
vt 0.4219 0.1562
vt 0.3906 0.1562
vt 0.4062 0.1562
vt 0.4062 0.2031
vt 0.3906 0.2031
vt 0.4297 0.2031
vt 0.4297 0.2188
vt 0.4141 0.2188
vt 0.4141 0.2031
vt 0.4531 0.2031
vt 0.4375 0.2031
vt 0.4375 0.1562
vt 0.4531 0.1562
vt 0.4219 0.1562
vt 0.4375 0.1562
vt 0.4375 0.2031
vt 0.4219 0.2031
vn -1.0000 0.0000 0.0000
vn 0.0000 0.0000 -1.0000
vn 1.0000 -0.0000 0.0000
vn -0.0000 0.0000 1.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
usemtl None
s off
f 33//25 34//25 36//25 35//25
f 35//26 36//26 40//26 39//26
f 39//27 40//27 38//27 37//27
f 37//28 38//28 34//28 33//28
f 35//29 39//29 37//29 33//29
f 40//30 36//30 34//30 38//30
o Cube.038_Cube.061
usemtl marx
f 33/84/23 34/85/23 36/86/23 35/87/23
f 39/88/24 40/89/24 38/90/24 37/91/24
f 37/92/25 38/93/25 34/94/25 33/95/25
f 35/96/26 39/97/26 37/98/26 33/99/26
f 40/100/27 36/101/27 34/102/27 38/103/27
o Cube.024_Cube.038
v 0.812498 0.114277 -0.187500
v 0.989275 -0.062500 -0.187500
v 0.812498 0.114277 -0.437500
v 0.812498 0.114276 -0.437500
v 0.989275 -0.062500 -0.437500
v 0.635722 -0.062500 -0.187500
v 0.635721 -0.062500 -0.187500
v 0.812498 -0.239277 -0.187500
v 0.635722 -0.062500 -0.437500
v 0.812498 -0.239277 -0.437500
v 0.544192 0.294194 -0.250000
v 0.897746 -0.059359 -0.250000
v 0.544193 0.294194 -0.375000
v 0.897746 -0.059359 -0.375000
v 0.544193 0.294194 -0.373125
v 0.897746 -0.059359 -0.373125
v 0.455804 0.205806 -0.250000
v 0.809358 -0.147748 -0.250000
v 0.455804 0.205806 -0.375000
v 0.809358 -0.147748 -0.375000
v 0.809357 -0.147748 -0.250000
v 0.455804 0.205806 -0.373125
v 0.809357 -0.147748 -0.373125
v 0.437498 0.187500 -0.375000
v 0.562498 0.187500 -0.375000
v 0.437498 0.187500 -0.000000
@ -141,33 +233,84 @@ v 0.437498 0.312500 -0.375000
v 0.562498 0.312500 -0.375000
v 0.437498 0.312500 -0.000000
v 0.562498 0.312500 0.000000
vt 0.3750 0.0938
vt 0.3750 0.0625
vt 0.4062 0.0625
vt 0.4062 0.0938
vt 0.4062 0.1250
vt 0.4062 0.1562
vt 0.3750 0.1562
vt 0.3750 0.1250
vt 0.4688 0.1562
vt 0.4375 0.1562
vt 0.4375 0.1250
vt 0.4688 0.1250
vt 0.4375 0.0938
vt 0.4062 0.1250
vt 0.4062 0.0938
vt 0.3750 0.0938
vt 0.3438 0.1562
vt 0.3438 0.1250
vt 0.3750 0.1250
vt 0.4844 0.0625
vt 0.4844 0.1250
vt 0.4688 0.1250
vt 0.4688 0.0625
vt 0.4531 0.0625
vt 0.4531 0.1250
vt 0.4375 0.1250
vt 0.4375 0.0625
vt 0.4844 0.1250
vt 0.4844 0.0625
vt 0.5000 0.0625
vt 0.5000 0.1250
vt 0.4531 0.1250
vt 0.4531 0.0625
vt 0.4688 0.0625
vt 0.4688 0.1250
vt 0.4844 0.1719
vt 0.4688 0.1719
vt 0.4688 0.1250
vt 0.4844 0.1250
vt 0.4375 0.1719
vt 0.4219 0.1719
vt 0.4219 0.1250
vt 0.4375 0.1250
vt 0.3906 0.1719
vt 0.3750 0.1719
vt 0.3750 0.1562
vt 0.3906 0.1562
vt 0.4062 0.1250
vt 0.4219 0.1250
vt 0.4219 0.1719
vt 0.4062 0.1719
vt 0.5000 0.1719
vt 0.4844 0.1719
vt 0.4844 0.1250
vt 0.5000 0.1250
vn 0.7071 0.7071 0.0000
vn 0.0000 -0.0000 -1.0000
vn -0.7071 -0.7071 -0.0000
vn -0.0000 0.0000 1.0000
vn -0.7071 0.7071 -0.0000
vn 0.7071 -0.7071 0.0000
vn 0.0000 -1.0000 0.0000
vn -0.0000 -1.0000 0.0000
vn 0.0000 1.0000 0.0000
vn -1.0000 0.0000 -0.0000
vn 1.0000 0.0000 0.0000
usemtl None
s off
f 41//31 42//31 44//31 43//31
f 43//32 44//32 48//32 47//32
f 47//33 48//33 46//33 45//33
f 45//34 46//34 42//34 41//34
f 43//35 47//35 45//35 41//35
f 48//36 44//36 42//36 46//36
f 49//31 50//31 52//31 51//31
f 51//32 52//32 56//32 55//32
f 55//33 56//33 54//33 53//33
f 53//34 54//34 50//34 49//34
f 51//35 55//35 53//35 49//35
f 56//36 52//36 50//36 54//36
f 57//37 58//37 60//37 59//37
f 59//34 60//34 64//34 63//34
f 63//38 64//38 62//38 61//38
f 61//32 62//32 58//32 57//32
f 59//39 63//39 61//39 57//39
f 64//40 60//40 58//40 62//40
vn 1.0000 -0.0000 0.0000
usemtl marx
f 41/104/28 42/105/28 44/106/28 43/107/28
f 43/108/29 44/109/29 48/110/29 47/111/29
f 47/112/30 48/113/30 46/114/30 45/115/30
f 45/116/31 46/114/31 42/117/31 41/118/31
f 43/108/32 47/111/32 45/119/32 41/118/32
f 48/110/33 44/120/33 42/121/33 46/122/33
f 49/123/28 50/124/28 52/125/28 51/126/28
f 51/127/29 52/128/29 56/129/29 55/130/29
f 55/131/30 56/132/30 54/133/30 53/134/30
f 53/135/31 54/136/31 50/137/31 49/138/31
f 57/139/34 58/140/34 60/141/34 59/142/34
f 63/143/35 64/144/35 62/145/35 61/146/35
f 61/147/29 62/148/29 58/149/29 57/150/29
f 59/151/36 63/152/36 61/153/36 57/154/36
f 64/155/37 60/156/37 58/157/37 62/158/37

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB