/* * Copyright (c) CovertJaguar, 2014 http://railcraft.info * * This code is the property of CovertJaguar * and may only be used with explicit written * permission unless otherwise specified on the * license page at http://railcraft.info/wiki/info:license. */ package mods.railcraft.common.blocks.machine; import java.util.HashMap; import java.util.Map; import net.minecraft.util.AxisAlignedBB; import net.minecraft.world.World; /** * * @author CovertJaguar <http://www.railcraft.info/> */ public class BoundingBoxManager { private static final Map<IEnumMachine, BoundingBox> collisionBoxes = new HashMap<IEnumMachine, BoundingBox>(); private static final Map<IEnumMachine, BoundingBox> selectionBoxes = new HashMap<IEnumMachine, BoundingBox>(); public static final BoundingBox DEFAULT = new BoundingBox(); private BoundingBoxManager() { } public static AxisAlignedBB getCollisionBox(World world, int x, int y, int z, IEnumMachine machine) { BoundingBox box = collisionBoxes.get(machine); if (box == null) box = DEFAULT; return box.getBox(world, x, y, z); } public static AxisAlignedBB getSelectionBox(World world, int x, int y, int z, IEnumMachine machine) { BoundingBox box = selectionBoxes.get(machine); if (box == null) box = DEFAULT; return box.getBox(world, x, y, z); } public static void registerBoundingBox(IEnumMachine machine, BoundingBox box) { registerCollisionBoundingBox(machine, box); registerSelectionBoundingBox(machine, box); } public static void registerCollisionBoundingBox(IEnumMachine machine, BoundingBox box) { collisionBoxes.put(machine, box); } public static void registerSelectionBoundingBox(IEnumMachine machine, BoundingBox box) { selectionBoxes.put(machine, box); } public static class BoundingBox { private final double min, max; public BoundingBox() { this.min = 0; this.max = 1; } public BoundingBox(double min, double max) { this.min = min; this.max = max; } public AxisAlignedBB getBox(World world, int x, int y, int z) { return AxisAlignedBB.getBoundingBox(x + min, y + min, z + min, x + max, y + max, z + max); } } public static class ReducedBoundingBox extends ScaledBoundingBox { public ReducedBoundingBox(int pixels) { super(pixels * 2.0 / 16.0); } } public static class ScaledBoundingBox extends BoundingBox { public ScaledBoundingBox(double scale) { super((1.0 - scale) / 2.0, 1.0 - ((1.0 - scale) / 2.0)); } } }