aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/kr/syeyoung/dungeonsguide/roomprocessor')
-rwxr-xr-xsrc/main/java/kr/syeyoung/dungeonsguide/roomprocessor/ProcessorFactory.java2
-rw-r--r--src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRedRoom.java109
2 files changed, 111 insertions, 0 deletions
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/ProcessorFactory.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/ProcessorFactory.java
index 6415eb6f..e0541bc8 100755
--- a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/ProcessorFactory.java
+++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/ProcessorFactory.java
@@ -41,5 +41,7 @@ public class ProcessorFactory {
registerRoomProcessor("puzzle_box", new RoomProcessorBoxSolver.Generator());
registerRoomProcessor("puzzle_trivia", new RoomProcessorTrivia.Generator());;
registerRoomProcessor("puzzle_bombdefuse", new RoomProcessorBombDefuseSolver.Generator());
+
+ registerRoomProcessor("bossroom", new RoomProcessorRedRoom.Generator());
}
}
diff --git a/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRedRoom.java b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRedRoom.java
new file mode 100644
index 00000000..1f26392f
--- /dev/null
+++ b/src/main/java/kr/syeyoung/dungeonsguide/roomprocessor/RoomProcessorRedRoom.java
@@ -0,0 +1,109 @@
+package kr.syeyoung.dungeonsguide.roomprocessor;
+
+import kr.syeyoung.dungeonsguide.dungeon.data.OffsetPoint;
+import kr.syeyoung.dungeonsguide.dungeon.doorfinder.DungeonDoor;
+import kr.syeyoung.dungeonsguide.dungeon.roomfinder.DungeonRoom;
+import kr.syeyoung.dungeonsguide.features.FeatureRegistry;
+import kr.syeyoung.dungeonsguide.features.impl.boss.FeatureWarningOnPortal;
+import kr.syeyoung.dungeonsguide.features.text.StyledTextRenderer;
+import kr.syeyoung.dungeonsguide.utils.RenderUtils;
+import net.minecraft.client.Minecraft;
+import net.minecraft.client.gui.FontRenderer;
+import net.minecraft.client.renderer.GlStateManager;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.WorldRenderer;
+import net.minecraft.client.renderer.entity.RenderManager;
+import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
+import net.minecraft.util.BlockPos;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.Vec3;
+import org.lwjgl.opengl.GL11;
+
+import javax.vecmath.Vector3f;
+
+public class RoomProcessorRedRoom extends GeneralRoomProcessor {
+ public RoomProcessorRedRoom(DungeonRoom dungeonRoom) {
+ super(dungeonRoom);
+ BlockPos basePt = dungeonRoom.getMin().add(dungeonRoom.getMax());
+ this.basePt = new Vec3(basePt.getX() / 2.0f, basePt.getY() / 2.0f, basePt.getZ() / 2.0f);
+ }
+
+ Vec3 basePt;
+ int dir = 0;
+
+ @Override
+ public void tick() {
+ BlockPos basePt = getDungeonRoom().getMin().add(getDungeonRoom().getMax());
+ this.basePt = new Vec3(basePt.getX() / 2.0f, basePt.getY() / 2.0f + 4, basePt.getZ() / 2.0f);
+ DungeonDoor real = null;
+ for (DungeonDoor door : getDungeonRoom().getDoors()) {
+ if (door.isExist()) {
+ real = door;break;
+ }
+ }
+ if (real != null) {
+ OffsetPoint offsetPoint = new OffsetPoint(getDungeonRoom(), real.getPosition());
+ offsetPoint = new OffsetPoint(33- offsetPoint.getX(), offsetPoint.getY(), 33 - offsetPoint.getZ());
+ BlockPos opposite =offsetPoint.getBlockPos(getDungeonRoom());
+ BlockPos dir = new BlockPos(real.getPosition().subtract(opposite));
+ dir = new BlockPos(MathHelper.clamp_int(dir.getX() / 10, -1, 1), 0, MathHelper.clamp_int(dir.getZ() / 10, -1, 1));
+
+ this.basePt = new Vec3(opposite.add(dir.getX() * 6 + dir.getZ(), 3, dir.getZ() * 6 - dir.getX()));
+
+ if (dir.getX() > 0) this.dir = 270;
+ else if (dir.getX() < 0) this.dir = 90;
+ else if (dir.getZ() < 0) this.dir = 0;
+ else if (dir.getZ() > 0) this.dir = 360;
+ else this.dir = Integer.MIN_VALUE;
+ } else {
+ dir = Integer.MIN_VALUE;
+ }
+ }
+
+ @Override
+ public void drawWorld(float partialTicks) {
+ super.drawWorld(partialTicks);
+ if (!FeatureRegistry.BOSSFIGHT_WARNING_ON_PORTAL.isEnabled()) return;
+
+
+ FeatureWarningOnPortal featureWarningOnPortal = FeatureRegistry.BOSSFIGHT_WARNING_ON_PORTAL;
+ {
+ RenderManager renderManager = Minecraft.getMinecraft().getRenderManager();
+
+ Vector3f renderPos = RenderUtils.getRenderPos((float)basePt.xCoord,(float) basePt.yCoord, (float)basePt.zCoord, partialTicks);
+
+ GlStateManager.color(1f, 1f, 1f, 0.5f);
+ GlStateManager.pushMatrix();
+ GlStateManager.translate(renderPos.x, renderPos.y, renderPos.z);
+ if (dir == Integer.MIN_VALUE)
+ GlStateManager.rotate(-renderManager.playerViewY, 0.0f, 1.0f, 0.0f);
+ else
+ GlStateManager.rotate(dir, 0.0f, 1.0f, 0.0f);
+ GlStateManager.scale(-0.05f, -0.05f, 0.05f);
+ GlStateManager.disableLighting();
+ GlStateManager.disableCull();
+ GlStateManager.depthMask(false); GL11.glDisable(GL11.GL_DEPTH_TEST);
+ GlStateManager.disableDepth();
+ GlStateManager.enableBlend();
+ GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
+
+
+ StyledTextRenderer.drawTextWithStylesAssociated(featureWarningOnPortal.getText(), 0, 0, featureWarningOnPortal.getStylesMap());
+
+ GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f);
+ GlStateManager.depthMask(true);
+ GlStateManager.enableDepth();
+ GlStateManager.enableCull();
+ GlStateManager.popMatrix();
+ }
+ }
+
+
+ public static class Generator implements RoomProcessorGenerator<RoomProcessorRedRoom> {
+ @Override
+ public RoomProcessorRedRoom createNew(DungeonRoom dungeonRoom) {
+ RoomProcessorRedRoom defaultRoomProcessor = new RoomProcessorRedRoom(dungeonRoom);
+ return defaultRoomProcessor;
+ }
+ }
+}