* WIP laser pointer
This commit is contained in:
parent
c6d0f4f183
commit
7184286be7
|
|
@ -65,6 +65,7 @@ public class WebDisplays {
|
|||
public SoundEvent soundTyping;
|
||||
public SoundEvent soundUpgradeAdd;
|
||||
public SoundEvent soundUpgradeDel;
|
||||
public SoundEvent soundScreenCfg;
|
||||
|
||||
//Config
|
||||
public static final double PAD_RATIO = 59.0 / 30.0;
|
||||
|
|
@ -150,7 +151,10 @@ public class WebDisplays {
|
|||
soundUpgradeDel = new SoundEvent(new ResourceLocation("webdisplays", "upgradeDel"));
|
||||
soundUpgradeDel.setRegistryName(soundUpgradeDel.getSoundName());
|
||||
|
||||
ev.getRegistry().registerAll(soundTyping, soundUpgradeAdd, soundUpgradeDel);
|
||||
soundScreenCfg = new SoundEvent(new ResourceLocation("webdisplays", "screencfgOpen"));
|
||||
soundScreenCfg.setRegistryName(soundScreenCfg.getSoundName());
|
||||
|
||||
ev.getRegistry().registerAll(soundTyping, soundUpgradeAdd, soundUpgradeDel, soundScreenCfg);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
|
|
|
|||
|
|
@ -20,11 +20,10 @@ import net.minecraft.nbt.NBTTagCompound;
|
|||
import net.minecraft.util.EnumHand;
|
||||
import net.minecraft.util.EnumHandSide;
|
||||
import net.minecraft.util.NonNullList;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.event.ModelBakeEvent;
|
||||
import net.minecraftforge.client.event.ModelRegistryEvent;
|
||||
import net.minecraftforge.client.event.RenderSpecificHandEvent;
|
||||
import net.minecraftforge.client.event.TextureStitchEvent;
|
||||
import net.minecraftforge.client.event.*;
|
||||
import net.minecraftforge.client.model.ModelLoader;
|
||||
import net.minecraftforge.common.MinecraftForge;
|
||||
import net.minecraftforge.fml.client.registry.ClientRegistry;
|
||||
|
|
@ -40,15 +39,13 @@ import net.montoyo.wd.client.gui.GuiScreenConfig;
|
|||
import net.montoyo.wd.client.gui.GuiSetURL2;
|
||||
import net.montoyo.wd.client.gui.WDScreen;
|
||||
import net.montoyo.wd.client.gui.loading.GuiLoader;
|
||||
import net.montoyo.wd.client.renderers.IModelBaker;
|
||||
import net.montoyo.wd.client.renderers.MinePadRenderer;
|
||||
import net.montoyo.wd.client.renderers.ScreenBaker;
|
||||
import net.montoyo.wd.client.renderers.ScreenRenderer;
|
||||
import net.montoyo.wd.client.renderers.*;
|
||||
import net.montoyo.wd.core.DefaultUpgrade;
|
||||
import net.montoyo.wd.data.GuiData;
|
||||
import net.montoyo.wd.entity.TileEntityScreen;
|
||||
import net.montoyo.wd.net.SMessagePadCtrl;
|
||||
import net.montoyo.wd.utilities.*;
|
||||
import org.lwjgl.input.Mouse;
|
||||
import scala.tools.nsc.doc.model.Def;
|
||||
|
||||
import java.util.ArrayList;
|
||||
|
|
@ -76,6 +73,7 @@ public class ClientProxy extends SharedProxy implements IResourceManagerReloadLi
|
|||
private ArrayList<ResourceModelPair> modelBakers = new ArrayList<>();
|
||||
private net.montoyo.mcef.api.API mcef;
|
||||
private MinePadRenderer minePadRenderer;
|
||||
private LaserPointerRenderer laserPointerRenderer;
|
||||
|
||||
//Tracking
|
||||
private ArrayList<TileEntityScreen> screenTracking = new ArrayList<>();
|
||||
|
|
@ -102,6 +100,7 @@ public class ClientProxy extends SharedProxy implements IResourceManagerReloadLi
|
|||
ClientRegistry.bindTileEntitySpecialRenderer(TileEntityScreen.class, new ScreenRenderer());
|
||||
mcef = MCEFApi.getAPI();
|
||||
minePadRenderer = new MinePadRenderer();
|
||||
laserPointerRenderer = new LaserPointerRenderer();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -321,13 +320,31 @@ public class ClientProxy extends SharedProxy implements IResourceManagerReloadLi
|
|||
|
||||
@SubscribeEvent
|
||||
public void onRenderPlayerHand(RenderSpecificHandEvent ev) {
|
||||
if(ev.getItemStack().getItem() == WebDisplays.INSTANCE.itemMinePad) {
|
||||
EnumHandSide handSide = mc.player.getPrimaryHand();
|
||||
if(ev.getHand() == EnumHand.OFF_HAND)
|
||||
handSide = handSide.opposite();
|
||||
Item item = ev.getItemStack().getItem();
|
||||
IItemRenderer renderer;
|
||||
|
||||
minePadRenderer.render(ev.getItemStack(), (handSide == EnumHandSide.RIGHT) ? 1.0f : -1.0f, ev.getSwingProgress(), ev.getEquipProgress());
|
||||
ev.setCanceled(true);
|
||||
if(item == WebDisplays.INSTANCE.itemMinePad)
|
||||
renderer = minePadRenderer;
|
||||
else if(item == WebDisplays.INSTANCE.itemLaserPointer)
|
||||
renderer = laserPointerRenderer;
|
||||
else
|
||||
return;
|
||||
|
||||
EnumHandSide handSide = mc.player.getPrimaryHand();
|
||||
if(ev.getHand() == EnumHand.OFF_HAND)
|
||||
handSide = handSide.opposite();
|
||||
|
||||
renderer.render(ev.getItemStack(), (handSide == EnumHandSide.RIGHT) ? 1.0f : -1.0f, ev.getSwingProgress(), ev.getEquipProgress());
|
||||
ev.setCanceled(true);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public void onMouseButton(MouseEvent ev) {
|
||||
if(mc.player != null && mc.player.getHeldItem(EnumHand.MAIN_HAND).getItem() == WebDisplays.INSTANCE.itemLaserPointer) {
|
||||
if(ev.getButton() == 1) {
|
||||
//Right button
|
||||
laserPointerRenderer.isOn = ev.isButtonstate();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
package net.montoyo.wd.client.gui;
|
||||
|
||||
import net.minecraft.client.audio.PositionedSoundRecord;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.montoyo.wd.WebDisplays;
|
||||
import net.montoyo.wd.client.gui.controls.*;
|
||||
|
|
@ -142,6 +143,8 @@ public class GuiScreenConfig extends WDScreen {
|
|||
updateRights(friendRights, friendRights, friendBoxes, true);
|
||||
updateRights(otherRights, otherRights, otherBoxes, true);
|
||||
updateMyRights();
|
||||
|
||||
mc.getSoundHandler().playSound(PositionedSoundRecord.getRecord(WebDisplays.INSTANCE.soundScreenCfg, 1.0f, 1.0f));
|
||||
}
|
||||
|
||||
private void addFriend(String name) {
|
||||
|
|
|
|||
|
|
@ -0,0 +1,13 @@
|
|||
/*
|
||||
* Copyright (C) 2018 BARBOTIN Nicolas
|
||||
*/
|
||||
|
||||
package net.montoyo.wd.client.renderers;
|
||||
|
||||
import net.minecraft.item.ItemStack;
|
||||
|
||||
public interface IItemRenderer {
|
||||
|
||||
void render(ItemStack is, float handSideSign, float swingProgress, float equipProgress);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
/*
|
||||
* Copyright (C) 2018 BARBOTIN Nicolas
|
||||
*/
|
||||
|
||||
package net.montoyo.wd.client.renderers;
|
||||
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.*;
|
||||
import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
|
||||
import net.minecraft.item.ItemStack;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.RayTraceResult;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraftforge.fml.relauncher.Side;
|
||||
import net.minecraftforge.fml.relauncher.SideOnly;
|
||||
import org.lwjgl.BufferUtils;
|
||||
|
||||
import java.nio.FloatBuffer;
|
||||
|
||||
import static org.lwjgl.opengl.GL11.*;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public final class LaserPointerRenderer implements IItemRenderer {
|
||||
|
||||
private static final float PI = (float) Math.PI;
|
||||
private final Tessellator t = Tessellator.getInstance();
|
||||
private final BufferBuilder bb = t.getBuffer();
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
private final FloatBuffer matrix1 = BufferUtils.createFloatBuffer(16);
|
||||
private final FloatBuffer renderBuffer = BufferUtils.createFloatBuffer(8);
|
||||
|
||||
public boolean isOn = false;
|
||||
|
||||
public LaserPointerRenderer() {
|
||||
for(int i = 0; i < 8; i++)
|
||||
renderBuffer.put(0.0f);
|
||||
|
||||
renderBuffer.position(0);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void render(ItemStack is, float handSideSign, float swingProgress, float equipProgress) {
|
||||
//This whole method is a fucking hack
|
||||
float sqrtSwingProg = (float) Math.sqrt((double) swingProgress);
|
||||
float sinSqrtSwingProg1 = MathHelper.sin(sqrtSwingProg * PI);
|
||||
|
||||
GlStateManager.disableCull();
|
||||
GlStateManager.disableTexture2D();
|
||||
GlStateManager.enableRescaleNormal();
|
||||
|
||||
//Laser pointer
|
||||
glPushMatrix();
|
||||
glTranslatef(handSideSign * -0.4f * sinSqrtSwingProg1, 0.2f * MathHelper.sin(sqrtSwingProg * PI * 2.0f), -0.2f * MathHelper.sin(swingProgress * PI));
|
||||
glTranslatef(handSideSign * 0.56f, -0.52f - equipProgress * 0.6f, -0.72f);
|
||||
glRotatef(handSideSign * (45.0f - MathHelper.sin(swingProgress * swingProgress * PI) * 20.0f), 0.0f, 1.0f, 0.0f);
|
||||
glRotatef(handSideSign * sinSqrtSwingProg1 * -20.0f, 0.0f, 0.0f, 1.0f);
|
||||
glRotatef(sinSqrtSwingProg1 * -80.0f, 1.0f, 0.0f, 0.0f);
|
||||
glRotatef(handSideSign * -30.0f, 0.0f, 1.0f, 0.0f);
|
||||
glTranslatef(0.0f, 0.2f, 0.0f);
|
||||
glRotatef(10.0f, 1.0f, 0.0f, 0.0f);
|
||||
glScalef(1.0f / 16.0f, 1.0f / 16.0f, 1.0f / 16.0f);
|
||||
|
||||
glColor4f(0.5f, 0.5f, 0.5f, 1.0f);
|
||||
bb.begin(GL_QUADS, DefaultVertexFormats.POSITION_NORMAL);
|
||||
bb.pos(0.0, 0.0, 0.0).normal(0.0f, 1.0f, 0.0f).endVertex();
|
||||
bb.pos(1.0, 0.0, 0.0).normal(0.0f, 1.0f, 0.0f).endVertex();
|
||||
bb.pos(1.0, 0.0, 4.0).normal(0.0f, 1.0f, 0.0f).endVertex();
|
||||
bb.pos(0.0, 0.0, 4.0).normal(0.0f, 1.0f, 0.0f).endVertex();
|
||||
|
||||
bb.pos(0.0, 0.0, 0.0).normal(-1.0f, 0.0f, 0.0f).endVertex();
|
||||
bb.pos(0.0, -1.0, 0.0).normal(-1.0f, 0.0f, 0.0f).endVertex();
|
||||
bb.pos(0.0, -1.0, 4.0).normal(-1.0f, 0.0f, 0.0f).endVertex();
|
||||
bb.pos(0.0, 0.0, 4.0).normal(-1.0f, 0.0f, 0.0f).endVertex();
|
||||
|
||||
bb.pos(1.0, 0.0, 0.0).normal(1.0f, 0.0f, 0.0f).endVertex();
|
||||
bb.pos(1.0, -1.0, 0.0).normal(1.0f, 0.0f, 0.0f).endVertex();
|
||||
bb.pos(1.0, -1.0, 4.0).normal(1.0f, 0.0f, 0.0f).endVertex();
|
||||
bb.pos(1.0, 0.0, 4.0).normal(1.0f, 0.0f, 0.0f).endVertex();
|
||||
|
||||
bb.pos(0.0, -1.0, 4.0).normal(0.0f, 0.0f, 1.0f).endVertex();
|
||||
bb.pos(1.0, -1.0, 4.0).normal(0.0f, 0.0f, 1.0f).endVertex();
|
||||
bb.pos(1.0, 0.0, 4.0).normal(0.0f, 0.0f, 1.0f).endVertex();
|
||||
bb.pos(0.0, 0.0, 4.0).normal(0.0f, 0.0f, 1.0f).endVertex();
|
||||
t.draw();
|
||||
|
||||
if(isOn) {
|
||||
glTranslatef(0.5f, -0.5f, 0.0f);
|
||||
matrix1.position(0);
|
||||
glGetFloat(GL_MODELVIEW_MATRIX, matrix1); //Hax to get that damn position
|
||||
}
|
||||
|
||||
glPopMatrix();
|
||||
|
||||
if(isOn) {
|
||||
RenderHelper.disableStandardItemLighting();
|
||||
GlStateManager.setActiveTexture(OpenGlHelper.lightmapTexUnit);
|
||||
GlStateManager.disableTexture2D();
|
||||
GlStateManager.setActiveTexture(OpenGlHelper.defaultTexUnit);
|
||||
|
||||
//Actual laser
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.DST_ALPHA);
|
||||
glColor4f(1.0f, 0.0f, 0.0f, 0.5f);
|
||||
GlStateManager.glLineWidth(3.0f);
|
||||
|
||||
matrix1.position(12);
|
||||
renderBuffer.put(matrix1.get());
|
||||
renderBuffer.put(matrix1.get());
|
||||
renderBuffer.put(matrix1.get() - 0.02f); //I know this is stupid, but it's the only thing that worked...
|
||||
renderBuffer.put(matrix1.get());
|
||||
renderBuffer.position(0);
|
||||
glVertexPointer(4, 0, renderBuffer);
|
||||
glEnableClientState(GL_VERTEX_ARRAY);
|
||||
glDrawArrays(GL_LINES, 0, 2);
|
||||
glDisableClientState(GL_VERTEX_ARRAY);
|
||||
glPopMatrix();
|
||||
}
|
||||
|
||||
GlStateManager.enableTexture2D(); //Fix for shitty minecraft fire
|
||||
}
|
||||
|
||||
private void raycast(float ptt, double dist) {
|
||||
Vec3d start = mc.player.getPositionEyes(ptt);
|
||||
Vec3d lookVec = mc.player.getLook(ptt);
|
||||
Vec3d end = start.addVector(lookVec.x * dist, lookVec.y * dist, lookVec.z * dist);
|
||||
|
||||
RayTraceResult rtr = mc.world.rayTraceBlocks(start, end, true, true, false);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -21,7 +21,7 @@ import static org.lwjgl.opengl.GL11.*;
|
|||
import static org.lwjgl.opengl.GL12.GL_RESCALE_NORMAL;
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
public final class MinePadRenderer {
|
||||
public final class MinePadRenderer implements IItemRenderer {
|
||||
|
||||
private static final float PI = (float) Math.PI;
|
||||
private final Minecraft mc = Minecraft.getMinecraft();
|
||||
|
|
@ -34,7 +34,7 @@ public final class MinePadRenderer {
|
|||
private float sinSwingProg1;
|
||||
private float sinSwingProg2;
|
||||
|
||||
private static void drawAxis() {
|
||||
public static void drawAxis() {
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glBegin(GL_LINES);
|
||||
glColor4f(1.f, 0.f, 0.f, 1.f); glVertex3d(0.0, 0.0, 0.0);
|
||||
|
|
@ -47,6 +47,7 @@ public final class MinePadRenderer {
|
|||
glEnable(GL_TEXTURE_2D);
|
||||
}
|
||||
|
||||
@Override
|
||||
public final void render(ItemStack is, float handSideSign, float swingProgress, float equipProgress) {
|
||||
//Pre-compute values
|
||||
float sqrtSwingProg = (float) Math.sqrt((double) swingProgress);
|
||||
|
|
|
|||
|
|
@ -15,6 +15,7 @@ item.webdisplays.upgrade.name=Screen Upgrade
|
|||
item.webdisplays.upgrade.lasermouse.name=Laser Sensor
|
||||
item.webdisplays.upgrade.redinput.name=Redstone Input Port
|
||||
item.webdisplays.upgrade.redoutput.name=Redstone Output Port
|
||||
item.webdisplays.laserpointer.name=Laser Pointer
|
||||
webdisplays.message.tooSmall=Too small! Minimum size is 2x2.
|
||||
webdisplays.message.invalid=Structure is invalid; look at %s.
|
||||
webdisplays.message.turnOn=You need to turn the screen on first!
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
{
|
||||
"keyboardType": {
|
||||
"category": "block",
|
||||
"subtitle": "block.webdisplays.keyboard",
|
||||
"sounds": [
|
||||
"webdisplays:keyboard1",
|
||||
"webdisplays:keyboard2",
|
||||
|
|
@ -15,16 +14,20 @@
|
|||
},
|
||||
"upgradeAdd": {
|
||||
"category": "block",
|
||||
"subtitle": "block.webdisplays.upgradeAdd",
|
||||
"sounds": [
|
||||
"webdisplays:upgrade_add"
|
||||
]
|
||||
},
|
||||
"upgradeDel": {
|
||||
"category": "block",
|
||||
"subtitle": "block.webdisplays.upgradeDel",
|
||||
"sounds": [
|
||||
"webdisplays:upgrade_del"
|
||||
]
|
||||
},
|
||||
"screencfgOpen": {
|
||||
"category": "master",
|
||||
"sounds": [
|
||||
"webdisplays:screencfg_open"
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
BIN
src/main/resources/assets/webdisplays/sounds/screencfg_open.ogg
Normal file
BIN
src/main/resources/assets/webdisplays/sounds/screencfg_open.ogg
Normal file
Binary file not shown.
Loading…
Reference in New Issue
Block a user