Visualize blocked/blocking research
This commit is contained in:
parent
435b8790b2
commit
65dd7cead9
@ -256,6 +256,13 @@ open class AndroidResearchType<R : AndroidResearch>(
|
|||||||
set.addAll(research.allUnlocks)
|
set.addAll(research.allUnlocks)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (research in allPrerequisites) {
|
||||||
|
for (research2 in research.flatBlocking) {
|
||||||
|
set.add(research2)
|
||||||
|
set.addAll(research2.allUnlocks)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
ListSet(set)
|
ListSet(set)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
package ru.dbotthepony.mc.otm.client.render
|
package ru.dbotthepony.mc.otm.client.render
|
||||||
|
|
||||||
import com.mojang.blaze3d.vertex.PoseStack
|
import com.mojang.blaze3d.vertex.PoseStack
|
||||||
|
import com.mojang.blaze3d.vertex.Tesselator
|
||||||
import com.mojang.blaze3d.vertex.VertexConsumer
|
import com.mojang.blaze3d.vertex.VertexConsumer
|
||||||
import com.mojang.math.Matrix4f
|
import com.mojang.math.Matrix4f
|
||||||
import com.mojang.math.Vector3f
|
import com.mojang.math.Vector3f
|
||||||
@ -10,6 +11,8 @@ import net.minecraft.network.chat.Component
|
|||||||
import net.minecraft.util.FormattedCharSequence
|
import net.minecraft.util.FormattedCharSequence
|
||||||
import ru.dbotthepony.mc.otm.core.*
|
import ru.dbotthepony.mc.otm.core.*
|
||||||
|
|
||||||
|
val tesselator: Tesselator get() = Tesselator.getInstance()
|
||||||
|
|
||||||
fun VertexConsumer.normal(vector: Vector): VertexConsumer = normal(vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
fun VertexConsumer.normal(vector: Vector): VertexConsumer = normal(vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
||||||
fun VertexConsumer.vertex(matrix4f: Matrix4f, vector: Vector): VertexConsumer = vertex(matrix4f, vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
fun VertexConsumer.vertex(matrix4f: Matrix4f, vector: Vector): VertexConsumer = vertex(matrix4f, vector.x.toFloat(), vector.y.toFloat(), vector.z.toFloat())
|
||||||
fun VertexConsumer.color(color: RGBAColor): VertexConsumer = color(color.red, color.green, color.blue, color.alpha)
|
fun VertexConsumer.color(color: RGBAColor): VertexConsumer = color(color.red, color.green, color.blue, color.alpha)
|
||||||
|
@ -40,7 +40,7 @@ fun drawTexturedRect(
|
|||||||
RenderSystem.defaultBlendFunc()
|
RenderSystem.defaultBlendFunc()
|
||||||
RenderSystem.depthFunc(GL11.GL_ALWAYS)
|
RenderSystem.depthFunc(GL11.GL_ALWAYS)
|
||||||
|
|
||||||
val builder = Tesselator.getInstance().builder
|
val builder = tesselator.builder
|
||||||
|
|
||||||
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX)
|
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_TEX)
|
||||||
builder.vertex(matrix, x, y + height, zLevel).uv(u0, v1).endVertex()
|
builder.vertex(matrix, x, y + height, zLevel).uv(u0, v1).endVertex()
|
||||||
@ -105,7 +105,7 @@ fun colorSphere(matrix: Matrix4f, radius: Float) {
|
|||||||
RenderSystem.enableBlend()
|
RenderSystem.enableBlend()
|
||||||
RenderSystem.defaultBlendFunc()
|
RenderSystem.defaultBlendFunc()
|
||||||
|
|
||||||
val builder = Tesselator.getInstance().builder
|
val builder = tesselator.builder
|
||||||
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR)
|
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR)
|
||||||
|
|
||||||
val turnStep = Math.PI * (1 / fragments.toDouble()) * 2
|
val turnStep = Math.PI * (1 / fragments.toDouble()) * 2
|
||||||
@ -299,7 +299,7 @@ fun drawRect(
|
|||||||
RenderSystem.setShader(GameRenderer::getPositionColorShader)
|
RenderSystem.setShader(GameRenderer::getPositionColorShader)
|
||||||
RenderSystem.depthFunc(GL11.GL_ALWAYS)
|
RenderSystem.depthFunc(GL11.GL_ALWAYS)
|
||||||
|
|
||||||
val tess = Tesselator.getInstance()
|
val tess = tesselator
|
||||||
val builder = tess.builder
|
val builder = tess.builder
|
||||||
|
|
||||||
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR)
|
builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR)
|
||||||
|
@ -20,6 +20,7 @@ import ru.dbotthepony.mc.otm.android.AndroidResearchType
|
|||||||
import ru.dbotthepony.mc.otm.capability.AndroidCapability
|
import ru.dbotthepony.mc.otm.capability.AndroidCapability
|
||||||
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
import ru.dbotthepony.mc.otm.capability.MatteryCapability
|
||||||
import ru.dbotthepony.mc.otm.client.minecraft
|
import ru.dbotthepony.mc.otm.client.minecraft
|
||||||
|
import ru.dbotthepony.mc.otm.client.render.Widgets18
|
||||||
import ru.dbotthepony.mc.otm.client.render.drawColor
|
import ru.dbotthepony.mc.otm.client.render.drawColor
|
||||||
import ru.dbotthepony.mc.otm.client.render.drawLine
|
import ru.dbotthepony.mc.otm.client.render.drawLine
|
||||||
import ru.dbotthepony.mc.otm.client.render.drawRect
|
import ru.dbotthepony.mc.otm.client.render.drawRect
|
||||||
@ -281,7 +282,16 @@ private open class AndroidResearchButton(
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
override fun innerRender(stack: PoseStack, mouse_x: Float, mouse_y: Float, flag: Float) {
|
||||||
minecraft.player?.getCapability(MatteryCapability.ANDROID)?.ifPresentK {
|
val hovered = (screen as AndroidStationScreen).hoveredResearch
|
||||||
|
|
||||||
|
val isBlockedByHovered = hovered != null && node.type in hovered.type.allBlocking
|
||||||
|
|
||||||
|
if (isBlockedByHovered) {
|
||||||
|
AndroidStationScreen.CAN_NOT_BE_RESEARCHED.setSystemColor()
|
||||||
|
|
||||||
|
drawRect(stack, 0f, 0f, width, height)
|
||||||
|
}
|
||||||
|
|
||||||
if (node.isResearched) {
|
if (node.isResearched) {
|
||||||
AndroidStationScreen.RESEARCHED.setSystemColor()
|
AndroidStationScreen.RESEARCHED.setSystemColor()
|
||||||
} else if (node.canResearch) {
|
} else if (node.canResearch) {
|
||||||
@ -298,12 +308,17 @@ private open class AndroidResearchButton(
|
|||||||
drawRect(stack, 0f, 0f, width, height)
|
drawRect(stack, 0f, 0f, width, height)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (isBlockedByHovered) {
|
||||||
|
RGBAColor.RED.setSystemColor()
|
||||||
|
|
||||||
|
Widgets18.CROSS.render(stack)
|
||||||
|
}
|
||||||
|
|
||||||
val text = node.iconText
|
val text = node.iconText
|
||||||
|
|
||||||
if (text != null) {
|
if (text != null) {
|
||||||
font.drawShadow(stack, text, width - font.width(text), height - font.lineHeight, -0x1)
|
font.drawShadow(stack, text, width - font.width(text), height - font.lineHeight, -0x1)
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
drawColor = RGBAColor.WHITE
|
drawColor = RGBAColor.WHITE
|
||||||
RGBAColor.WHITE.setShaderColor()
|
RGBAColor.WHITE.setShaderColor()
|
||||||
@ -316,7 +331,7 @@ private open class AndroidResearchButton(
|
|||||||
drawLine(stack, x1, y1, x2, y2, 0.5f)
|
drawLine(stack, x1, y1, x2, y2, 0.5f)
|
||||||
}
|
}
|
||||||
|
|
||||||
val hovered = (screen as AndroidStationScreen).hoveredResearch ?: return
|
hovered ?: return
|
||||||
val lines = highlightLines[hovered.type] ?: return
|
val lines = highlightLines[hovered.type] ?: return
|
||||||
|
|
||||||
drawColor = RGBAColor.LIGHT_GREEN
|
drawColor = RGBAColor.LIGHT_GREEN
|
||||||
|
@ -53,6 +53,7 @@ data class RGBAColor(val red: Float, val green: Float, val blue: Float, val alph
|
|||||||
companion object {
|
companion object {
|
||||||
val BLACK = RGBAColor(0f, 0f, 0f, 1f)
|
val BLACK = RGBAColor(0f, 0f, 0f, 1f)
|
||||||
val WHITE = RGBAColor(1f, 1f, 1f, 1f)
|
val WHITE = RGBAColor(1f, 1f, 1f, 1f)
|
||||||
|
val RED = RGBAColor(1f, 0f, 0f)
|
||||||
val GREEN = RGBAColor(0f, 1f, 0f, 1f)
|
val GREEN = RGBAColor(0f, 1f, 0f, 1f)
|
||||||
val LIGHT_GREEN = RGBAColor(136, 255, 124)
|
val LIGHT_GREEN = RGBAColor(136, 255, 124)
|
||||||
val SLATE_GRAY = RGBAColor(64, 64, 64)
|
val SLATE_GRAY = RGBAColor(64, 64, 64)
|
||||||
|
Binary file not shown.
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Loading…
Reference in New Issue
Block a user