Skip to content

Commit

Permalink
feat: pathing target render
Browse files Browse the repository at this point in the history
  • Loading branch information
HamaIndustries committed Nov 3, 2024
1 parent a9fde46 commit 6953471
Show file tree
Hide file tree
Showing 6 changed files with 90 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ private static void onRightClick(LocalPlayer player, MechaEntity mecha, int acti

HitResult raycast = Minecraft.getInstance().getCameraEntity().pick(200, 0, false);
if (raycast.getType() == HitResult.Type.MISS) return;

player.connection.send(new MechaMovementRequestC2SPayload(raycast.getLocation().toVector3f()));
mecha.core().setPathingTarget(raycast.getLocation().toVector3f());
System.out.println("sound");
player.playSound(ArmisticeSoundEventRegistrar.ENTITY$MECHA$ALERT, 0.3f, AudioUtil.randomizedPitch(player.getRandom(), 1, 0.4f));


}

}
Original file line number Diff line number Diff line change
Expand Up @@ -2,19 +2,25 @@

import com.mojang.blaze3d.platform.GlStateManager;
import com.mojang.blaze3d.systems.RenderSystem;
import net.minecraft.client.Camera;
import net.minecraft.client.Minecraft;
import net.minecraft.client.player.LocalPlayer;
import net.minecraft.client.renderer.GameRenderer;
import net.minecraft.resources.ResourceLocation;
import net.minecraft.util.Mth;
import net.minecraft.world.entity.Entity;
import net.minecraft.world.phys.Vec2;
import net.minecraft.world.phys.Vec3;
import net.neoforged.bus.api.SubscribeEvent;
import net.neoforged.neoforge.client.event.RegisterGuiLayersEvent;
import org.joml.Matrix4f;
import org.joml.Quaternionf;
import org.joml.Vector3f;
import org.joml.Vector4f;
import symbolics.division.armistice.Armistice;
import symbolics.division.armistice.client.ArmisticeClient;
import symbolics.division.armistice.mecha.MechaEntity;
import symbolics.division.armistice.mixin.GameRenderAccessor;

import java.util.ArrayList;
import java.util.List;
Expand Down Expand Up @@ -42,6 +48,7 @@ public final class MechaHudRenderer {
private static final ResourceLocation BIG_ELEV_TICK = Armistice.id("textures/hud/big_elev_tick.png");

private static final ResourceLocation CROSSHAIR = Armistice.id("textures/hud/crosshair.png");
private static final ResourceLocation PATHTARGET = Armistice.id("textures/hud/pathtarget.png");

@SubscribeEvent
private static void registerGuiLayers(RegisterGuiLayersEvent event) {
Expand Down Expand Up @@ -73,6 +80,7 @@ private static void registerGuiLayers(RegisterGuiLayersEvent event) {
renderCrosshair(drawHelper, mecha);
renderHeat(drawHelper, mecha);
renderElevation(drawHelper, mecha);
renderPathtarget(drawHelper, mecha);

RenderSystem.disableBlend();
RenderSystem.defaultBlendFunc();
Expand Down Expand Up @@ -325,6 +333,68 @@ private static void renderHeading(DrawHelper drawHelper, MechaEntity mecha) {
resetColor();
}

private static void renderPathtarget(DrawHelper drawHelper, Entity mecha) {
float gw = drawHelper.guiGraphics().guiWidth();
float gh = drawHelper.guiGraphics().guiHeight();
float ar = gw / gh;
if (mecha instanceof MechaEntity mechaEntity) {
var tgt = mechaEntity.core().getPathingTarget();
if (tgt != null) {
GameRenderer gr = Minecraft.getInstance().gameRenderer;
Entity cameraEntity = Minecraft.getInstance().getCameraEntity();
Camera cam = gr.getMainCamera();

double fov = Math.max(
Minecraft.getInstance().options.fov().get().intValue(),
((GameRenderAccessor) gr).invokeGetFov(cam, cam.getPartialTickTime(), false)
);

// camera to screen matrix
Matrix4f mat = gr.getProjectionMatrix(fov);

// world to camera matrix
Vec3 camPos = cameraEntity.getEyePosition(cam.getPartialTickTime());
mat.rotate(cam.rotation().conjugate(new Quaternionf()));
mat.translate((float) -camPos.x, (float) -camPos.y, (float) -camPos.z);

Vector3f p = mat.transformPosition(tgt.toVector3f());

if (p.z < 0) return; // not in frame

// perspective division!!!!!!
p.mul(1 / p.z);
float screenX = gw / 2 * (p.x + 1);
float screenY = gh / 2 * (-p.y + 1);

drawHelper.renderFlicker(
pos -> drawHelper.guiGraphics().blit(
PATHTARGET,
(int) pos.x, (int) pos.y,
15, 15,
0, 0,
15, 15,
15, 15
),
new Vec2(
screenX - 9,
screenY - 9
),
lightbulbColor()
);

drawHelper.renderCenteredNumber(
(int) camPos.distanceTo(tgt),
screenX,
screenY + 10,
1,
lightbulbColor()
);

resetColor();
}
}
}

private static void renderSpeedometer(DrawHelper drawHelper, Entity mecha) {
final float bottomOffset = drawHelper.guiGraphics().guiHeight() - drawHelper.guiGraphics().guiHeight() / 3f;
final float leftOffset = drawHelper.guiGraphics().guiWidth() / 4.6f;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -239,4 +239,9 @@ public void setHeat(int heat) {
public void setPathingTarget(Vector3f pos) {
chassis.setPathingTarget(new Vec3(pos));
}

@Nullable
public Vec3 getPathingTarget() {
return chassis.pathingTarget;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package symbolics.division.armistice.mixin;

import net.minecraft.client.Camera;
import net.minecraft.client.renderer.GameRenderer;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.gen.Invoker;

@Mixin(GameRenderer.class)
public interface GameRenderAccessor {
@Invoker
double invokeGetFov(Camera activeRenderInfo, float partialTicks, boolean useFOVSetting);
}
1 change: 1 addition & 0 deletions src/main/resources/armistice.mixins.json
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
"defaultRequire": 1
},
"client": [
"GameRenderAccessor",
"GameRendererMixin",
"GuiMixin"
]
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.

0 comments on commit 6953471

Please sign in to comment.