public Vector4f vector4f() { return new Vector4f((float)x, (float)y, (float)z, 1); }
/** * Calculate the angle between two vectors, in radians * @param a A vector * @param b The other vector * @return the angle between the two vectors, in radians */ public static float angle(Vector4f a, Vector4f b) { float dls = dot(a, b) / (a.length() * b.length()); if (dls < -1f) dls = -1f; else if (dls > 1.0f) dls = 1.0f; return (float)Math.acos(dls); }
/** * Normalise this vector and place the result in another vector. * @param dest The destination vector, or null if a new vector is to be created * @return the normalised vector */ public Vector4f normalise(Vector4f dest) { float l = length(); if (dest == null) dest = new Vector4f(x / l, y / l, z / l, w / l); else dest.set(x / l, y / l, z / l, w / l); return dest; }
/** * Add a vector to another vector and place the result in a destination * vector. * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created * @return the sum of left and right in dest */ public static Vector4f add(Vector4f left, Vector4f right, Vector4f dest) { if (dest == null) return new Vector4f(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w); else { dest.set(left.x + right.x, left.y + right.y, left.z + right.z, left.w + right.w); return dest; } }
/** * Constructor */ public Vector4f(ReadableVector4f src) { set(src); }
/** * Subtract a vector from another vector and place the result in a destination * vector. * @param left The LHS vector * @param right The RHS vector * @param dest The destination vector, or null if a new vector is to be created * @return left minus right in dest */ public static Vector4f sub(Vector4f left, Vector4f right, Vector4f dest) { if (dest == null) return new Vector4f(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w); else { dest.set(left.x - right.x, left.y - right.y, left.z - right.z, left.w - right.w); return dest; } }
/** * Constructor */ public Vector4f(float x, float y, float z, float w) { set(x, y, z, w); }
public GuiTransform(ReadableVector4f anchor, GuiPadding padding, int depth) { this(new Vector4f(anchor), padding, depth); }
public ImmutableVec4f(float x, float y, float z, float w) { this.v4f = new Vector4f(x, y, z, w); }
/** * Negate a vector and place the result in a destination vector. * @param dest The destination vector or null if a new vector is to be created * @return the negated vector */ public Vector4f negate(Vector4f dest) { if (dest == null) dest = new Vector4f(); dest.x = -x; dest.y = -y; dest.z = -z; dest.w = -w; return dest; }
/** * Transform a Vector by a matrix and return the result in a destination * vector. * @param left The left matrix * @param right The right vector * @param dest The destination vector, or null if a new one is to be created * @return the destination vector */ public static Vector4f transform(Matrix4f left, Vector4f right, Vector4f dest) { if (dest == null) dest = new Vector4f(); float x = left.m00 * right.x + left.m10 * right.y + left.m20 * right.z + left.m30 * right.w; float y = left.m01 * right.x + left.m11 * right.y + left.m21 * right.z + left.m31 * right.w; float z = left.m02 * right.x + left.m12 * right.y + left.m22 * right.z + left.m32 * right.w; float w = left.m03 * right.x + left.m13 * right.y + left.m23 * right.z + left.m33 * right.w; dest.x = x; dest.y = y; dest.z = z; dest.w = w; return dest; }
@SideOnly(Side.CLIENT) public Vector4f vector4f() { return new Vector4f((float)x, (float)y, (float)z, 1); }
@SideOnly(Side.CLIENT) public Vector4f vector4f() { return new Vector4f((float) x, (float) y, (float) z, 1); }
/** * Takes two readable Vector4f points and merges them in a single Vector4f anchor region */ public static Vector4f quickAnchor(ReadableVector4f v1, ReadableVector4f v2) { float x1 = Math.min(v1.getX(), v2.getX()); float y1 = Math.min(v1.getY(), v2.getY()); float x2 = Math.max(v1.getZ(), v2.getZ()); float y2 = Math.max(v1.getW(), v2.getW()); return new Vector4f(x1, y1, x2, y2); }
@SideOnly(Side.CLIENT) private Vector4f getOuterColorByState(int state) { Triple<Float, Float, Float> baseColor = getBaseBeamColor(); float coolFactor = (getMaxCooldownTick() - tick) / (float) getMaxCooldownTick(); if (state == EnvironmentalAccumulator.STATE_PROCESSING_ITEM) return new Vector4f(baseColor.getLeft(), baseColor.getMiddle(), baseColor.getRight(), 0.05f); if (state == EnvironmentalAccumulator.STATE_IDLE) return new Vector4f(baseColor.getLeft(), baseColor.getMiddle(), baseColor.getRight(), 0.13f); else return new Vector4f(baseColor.getLeft() * coolFactor, baseColor.getMiddle() * coolFactor, baseColor.getRight() * coolFactor, 0.13f); }
public GuiTransform(ReadableVector4f anchor, int xOff, int yOff, int width, int height, int order) { this(new Vector4f(anchor.getX(), anchor.getY(), anchor.getX(), anchor.getY()), new GuiPadding(xOff, yOff, -xOff - width, -yOff - height), order); }
@SideOnly(Side.CLIENT) public static Vec3d mouseToWorldRay(int mouseX, int mouseY, int width, int height) { double aspectRatio = ((double) width / (double) height); double fov = ((Minecraft.getMinecraft().gameSettings.fovSetting / 2d) + 11) * (Math.PI / 180); Entity renderViewEntity = Minecraft.getMinecraft().getRenderViewEntity(); double a = -((double) mouseX / (double) width - 0.5) * 2; double b = -((double) mouseY / (double) height - 0.5) * 2; double tanf = Math.tan(fov); float yawn = renderViewEntity.rotationYaw; float pitch = renderViewEntity.rotationPitch; Matrix4f rot = new Matrix4f(); rot.rotate(yawn * (float) (Math.PI / 180), new Vector3f(0, -1, 0)); rot.rotate(pitch * (float) (Math.PI / 180), new Vector3f(1, 0, 0)); Vector4f foward = new Vector4f(0, 0, 1, 0); Vector4f up = new Vector4f(0, 1, 0, 0); Vector4f left = new Vector4f(1, 0, 0, 0); Matrix4f.transform(rot, foward, foward); Matrix4f.transform(rot, up, up); Matrix4f.transform(rot, left, left); return new Vec3d(foward.x, foward.y, foward.z) .addVector(left.x * tanf * aspectRatio * a, left.y * tanf * aspectRatio * a, left.z * tanf * aspectRatio * a) .addVector(up.x * tanf * b, up.y * tanf * b, up.z * tanf * b) .normalize(); }
btnQstLeft = new PanelButton(new GuiTransform(new Vector4f(0.5F, 0F, 0.5F, 0F), 8, 32, 16, 16, 0), -1, "") cvBackground.addPanel(btnQstLeft); btnQstRight = new PanelButton(new GuiTransform(new Vector4f(1F, 0F, 1F, 0F), -32, 32, 16, 16, 0), -1, "") cvBackground.addPanel(btnQstRight); btnTskLeft = new PanelButton(new GuiTransform(new Vector4f(0.5F, 0F, 0.5F, 0F), 8, 48, 16, 16, 0), -1, "") cvBackground.addPanel(btnTskLeft); btnTskRight = new PanelButton(new GuiTransform(new Vector4f(1F, 0F, 1F, 0F), -32, 48, 16, 16, 0), -1, "") cvBackground.addPanel(btnTskRight); btnSet = new PanelButton(new GuiTransform(new Vector4f(0.75F, 0F, 0.75F, 0F), -16, 64, 16, 16, 0), -1, "") btnRem = new PanelButton(new GuiTransform(new Vector4f(0.75F, 0F, 0.75F, 0F), 0, 64, 16, 16, 0), -1, "") txtQstTitle = new PanelTextBox(new GuiTransform(new Vector4f(0.5F, 0F, 1F, 0F), new GuiPadding(24, 36, 32, -48), 0), ""); txtQstTitle.setColor(PresetColor.TEXT_MAIN.getColor()).setAlignment(1); cvBackground.addPanel(txtQstTitle); txtTskTitle = new PanelTextBox(new GuiTransform(new Vector4f(0.5F, 0F, 1F, 0F), new GuiPadding(24, 52, 32, -64), 0), ""); txtTskTitle.setColor(PresetColor.TEXT_MAIN.getColor()).setAlignment(1); cvBackground.addPanel(txtTskTitle);
CanvasTextured splashTitle = new CanvasTextured(new GuiTransform(new Vector4f(ancX, ancY, ancX, ancY), new GuiPadding(offX, offY, -256 - offX, -128 - offY), 0), homeSplashTitle); splashCan.addPanel(splashTitle); PanelButton btnExit = new PanelButton(new GuiTransform(new Vector4f(0F, 1F, 0.25F, 1F), new GuiPadding(0, -32, 0, 0), 0), 0, QuestTranslation.translate("betterquesting.home.exit")); inCan.addPanel(btnExit); PanelButton btnQuests = new PanelButton(new GuiTransform(new Vector4f(0.25F, 1F, 0.5F, 1F), new GuiPadding(0, -32, 0, 0), 0), 1, QuestTranslation.translate("betterquesting.home.quests")); inCan.addPanel(btnQuests); PanelButton btnParty = new PanelButton(new GuiTransform(new Vector4f(0.5F, 1F, 0.75F, 1F), new GuiPadding(0, -32, 0, 0), 0), 2, QuestTranslation.translate("betterquesting.home.party")); btnParty.setActive(QuestSettings.INSTANCE.getProperty(NativeProps.PARTY_ENABLE)); inCan.addPanel(btnParty); PanelButton btnTheme = new PanelButton(new GuiTransform(new Vector4f(0.75F, 1F, 1F, 1F), new GuiPadding(0, -32, 0, 0), 0), 3, QuestTranslation.translate("betterquesting.home.theme")); inCan.addPanel(btnTheme);