package mods.eln.transparentnode.teleporter;
import mods.eln.ghost.GhostGroup;
import mods.eln.misc.*;
import mods.eln.misc.Obj3D.Obj3DPart;
import mods.eln.node.transparent.TransparentNodeDescriptor;
import mods.eln.sixnode.electricalcable.ElectricalCableDescriptor;
import mods.eln.wiki.Data;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.world.World;
public class TeleporterDescriptor extends TransparentNodeDescriptor {
private Obj3D obj;
public Obj3DPart main, ext_control, ext_power;
public Obj3DPart door_out, door_in, door_in_charge;
public Obj3DPart indoor_open, indoor_closed;
public Obj3DPart outlampline0_alpha, outlampline0;
public Obj3DPart[] leds = new Obj3DPart[10];
public Obj3DPart scr0_electrictity, scr1_cables, scr2_transporter, scr3_userin, scr5_dooropen, src4_doorclosed;
public Obj3DPart gyro_alpha, gyro, whiteblur;
public TeleporterDescriptor(
String name, Obj3D obj,
ElectricalCableDescriptor cable,
Coordonate areaCoordonate, Coordonate lightCoordonate,
int areaH,
Coordonate[] powerCoordonate,
GhostGroup ghostDoorOpen, GhostGroup ghostDoorClose
) {
super(name, TeleporterElement.class, TeleporterRender.class);
this.cable = cable;
this.obj = obj;
this.powerCoordonate = powerCoordonate;
if (obj != null) {
main = obj.getPart("main");
ext_control = obj.getPart("ext_control");
ext_power = obj.getPart("ext_power");
door_out = obj.getPart("door_out");
door_in_charge = obj.getPart("door_in_charge");
door_in = obj.getPart("door_in");
indoor_closed = obj.getPart("indoor_closed");
indoor_open = obj.getPart("indoor_open");
outlampline0_alpha = obj.getPart("outlampline0_alpha");
outlampline0 = obj.getPart("outlampline0");
scr0_electrictity = obj.getPart("scr0_electrictity");
scr1_cables = obj.getPart("scr1_cables");
scr2_transporter = obj.getPart("scr2_transporter");
scr3_userin = obj.getPart("scr3_userin");
scr5_dooropen = obj.getPart("scr5_dooropen");
src4_doorclosed = obj.getPart("src4_doorclosed");
gyro_alpha = obj.getPart("gyro_alpha");
gyro = obj.getPart("gyro");
whiteblur = obj.getPart("whiteblur");
for (int idx = 0; idx < 10; idx++) {
leds[idx] = obj.getPart("led" + idx);
}
}
this.areaCoordonate = areaCoordonate;
this.areaH = areaH;
this.ghostDoorClose = ghostDoorClose;
this.ghostDoorOpen = ghostDoorOpen;
this.lightCoordonate = lightCoordonate;
voltageLevelColor = VoltageLevelColor.HighVoltage;
}
public GhostGroup ghostDoorOpen, ghostDoorClose;
int areaH;
public Coordonate areaCoordonate, lightCoordonate;
public AxisAlignedBB getBB(Coordonate c, Direction front) {
Coordonate temp = new Coordonate(areaCoordonate);
temp.setDimention(c.dimention);
temp.applyTransformation(front, c);
AxisAlignedBB bb = AxisAlignedBB.getBoundingBox(temp.x, temp.y, temp.z, temp.x + 1, temp.y + areaH, temp.z + 1);
return bb;
}
public Coordonate getTeleportCoordonate(Direction front, Coordonate c) {
Coordonate temp = new Coordonate(areaCoordonate);
temp.setDimention(c.dimention);
temp.applyTransformation(front, c);
return temp;
}
@Override
public void setParent(Item item, int damage) {
super.setParent(item, damage);
Data.addMachine(newItemStack());
}
public ElectricalCableDescriptor cable;
public void draw() {
if (main != null) main.draw();
if (ext_control != null) ext_control.draw();
if (ext_power != null) ext_power.draw();
if (door_out != null) door_out.draw();
}
Coordonate[] powerCoordonate;
public Coordonate[] getPowerCoordonate(World w) {
Coordonate[] temp = new Coordonate[powerCoordonate.length];
for (int idx = 0; idx < temp.length; idx++) {
temp[idx] = new Coordonate(powerCoordonate[idx]);
temp[idx].setDimention(w.provider.dimensionId);
}
return temp;
}
@Override
public int getSpawnDeltaX() {
return 4;
}
String chargeSound = null;
float chargeVolume = 0;
public TeleporterDescriptor setChargeSound(String sound, float volume) {
chargeSound = sound;
chargeVolume = volume;
return this;
}
@Override
public boolean handleRenderType(ItemStack item, ItemRenderType type) {
return true;
}
@Override
public boolean shouldUseRenderHelper(ItemRenderType type, ItemStack item,
ItemRendererHelper helper) {
return type != ItemRenderType.INVENTORY;
}
@Override
public void renderItem(ItemRenderType type, ItemStack item, Object... data) {
if (type == ItemRenderType.INVENTORY) {
super.renderItem(type, item, data);
} else {
objItemScale(obj);
main.draw();
ext_control.draw();
ext_power.draw();
UtilsClient.disableCulling();
door_out.draw();
UtilsClient.enableCulling();
indoor_open.draw();
}
}
}