dockGravity
This commit is contained in:
parent
56e2e70a5c
commit
868cd753d5
@ -213,7 +213,7 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
|
|||||||
if (menu.playerInventorySlots.isNotEmpty() && menu.autoCreateInventoryFrame) {
|
if (menu.playerInventorySlots.isNotEmpty() && menu.autoCreateInventoryFrame) {
|
||||||
val deviceControls: DeviceControls<MatteryScreen<*>>
|
val deviceControls: DeviceControls<MatteryScreen<*>>
|
||||||
|
|
||||||
if (menu.player.matteryPlayer?.hasExopack != true) {
|
if (!menu.player.matteryPlayer.hasExopack) {
|
||||||
inventoryFrame = FramePanel<MatteryScreen<*>>(this, null, 0f, 0f, INVENTORY_FRAME_WIDTH, INVENTORY_FRAME_HEIGHT, inventory.displayName).also(this::addPanel)
|
inventoryFrame = FramePanel<MatteryScreen<*>>(this, null, 0f, 0f, INVENTORY_FRAME_WIDTH, INVENTORY_FRAME_HEIGHT, inventory.displayName).also(this::addPanel)
|
||||||
inventoryFrame!!.makeHelpButton().addSlotFiltersHelp()
|
inventoryFrame!!.makeHelpButton().addSlotFiltersHelp()
|
||||||
|
|
||||||
@ -669,6 +669,13 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
|
|||||||
panels.forEach { it.tickHovered1() }
|
panels.forEach { it.tickHovered1() }
|
||||||
panels.forEach { it.tickHovered2() }
|
panels.forEach { it.tickHovered2() }
|
||||||
|
|
||||||
|
// EMI workaround for not rendering itself properly, the way JEI does
|
||||||
|
graphics.pose().pushPose()
|
||||||
|
graphics.pose().translate(guiLeft.toFloat(), guiTop.toFloat(), 0f)
|
||||||
|
NeoForge.EVENT_BUS.post(ContainerScreenEvent.Render.Background(this, graphics, mouseX, mouseY))
|
||||||
|
graphics.pose().popPose()
|
||||||
|
RenderSystem.disableDepthTest()
|
||||||
|
|
||||||
RenderSystem.defaultBlendFunc()
|
RenderSystem.defaultBlendFunc()
|
||||||
RenderSystem.enableBlend()
|
RenderSystem.enableBlend()
|
||||||
RenderSystem.enableDepthTest()
|
RenderSystem.enableDepthTest()
|
||||||
@ -683,11 +690,6 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
|
|||||||
panelsReversed.any { it.updateCursor1() }
|
panelsReversed.any { it.updateCursor1() }
|
||||||
|
|
||||||
RenderSystem.depthFunc(GL11.GL_LESS)
|
RenderSystem.depthFunc(GL11.GL_LESS)
|
||||||
graphics.pose().pushPose()
|
|
||||||
graphics.pose().translate(guiLeft.toFloat(), guiTop.toFloat(), 0f)
|
|
||||||
NeoForge.EVENT_BUS.post(ContainerScreenEvent.Render.Background(this, graphics, mouseX, mouseY))
|
|
||||||
graphics.pose().popPose()
|
|
||||||
RenderSystem.disableDepthTest()
|
|
||||||
|
|
||||||
// Screen.super.render
|
// Screen.super.render
|
||||||
for (widget in renderables) {
|
for (widget in renderables) {
|
||||||
@ -696,6 +698,8 @@ abstract class MatteryScreen<T : MatteryMenu>(menu: T, inventory: Inventory, tit
|
|||||||
// /Screen.super.render
|
// /Screen.super.render
|
||||||
|
|
||||||
RenderSystem.disableDepthTest()
|
RenderSystem.disableDepthTest()
|
||||||
|
|
||||||
|
// EMI workaround for not rendering itself properly, the way JEI does
|
||||||
graphics.pose().pushPose()
|
graphics.pose().pushPose()
|
||||||
graphics.pose().translate(guiLeft.toFloat(), guiTop.toFloat(), 0f)
|
graphics.pose().translate(guiLeft.toFloat(), guiTop.toFloat(), 0f)
|
||||||
NeoForge.EVENT_BUS.post(ContainerScreenEvent.Render.Foreground(this, graphics, mouseX, mouseY))
|
NeoForge.EVENT_BUS.post(ContainerScreenEvent.Render.Foreground(this, graphics, mouseX, mouseY))
|
||||||
|
@ -20,6 +20,7 @@ import ru.dbotthepony.mc.otm.client.CursorType
|
|||||||
import ru.dbotthepony.mc.otm.client.render.MGUIGraphics
|
import ru.dbotthepony.mc.otm.client.render.MGUIGraphics
|
||||||
import ru.dbotthepony.mc.otm.client.minecraft
|
import ru.dbotthepony.mc.otm.client.minecraft
|
||||||
import ru.dbotthepony.mc.otm.client.moveMousePosScaled
|
import ru.dbotthepony.mc.otm.client.moveMousePosScaled
|
||||||
|
import ru.dbotthepony.mc.otm.client.render.RenderGravity
|
||||||
import ru.dbotthepony.mc.otm.client.render.currentScissorRect
|
import ru.dbotthepony.mc.otm.client.render.currentScissorRect
|
||||||
import ru.dbotthepony.mc.otm.client.render.popScissorRect
|
import ru.dbotthepony.mc.otm.client.render.popScissorRect
|
||||||
import ru.dbotthepony.mc.otm.client.render.pushScissorRect
|
import ru.dbotthepony.mc.otm.client.render.pushScissorRect
|
||||||
@ -320,14 +321,32 @@ open class EditablePanel<out S : Screen>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Позволяет смещать потомков на эту координату
|
/**
|
||||||
|
* Specifies how to offset ("scroll") children panels on X coordinate
|
||||||
|
*/
|
||||||
var xOffset = 0f
|
var xOffset = 0f
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies how to offset ("scroll") children panels on Y coordinate
|
||||||
|
*/
|
||||||
var yOffset = 0f
|
var yOffset = 0f
|
||||||
|
|
||||||
// Обрезать отрисовку потомков?
|
/**
|
||||||
|
* Push scissor to scissor stack when rendering this panel?
|
||||||
|
*
|
||||||
|
* Useful for when panel calls rendering code which can exceed panel's bounds and this outcome is undesired
|
||||||
|
*/
|
||||||
var scissor = false
|
var scissor = false
|
||||||
var scissorLock = false
|
var scissorLock = false
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extends or shrinks scissor bounds when [scissor] is true
|
||||||
|
*/
|
||||||
var scissorPadding = DockProperty.EMPTY
|
var scissorPadding = DockProperty.EMPTY
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Automatic panel docking to one of sides
|
||||||
|
*/
|
||||||
var dock = Dock.NONE
|
var dock = Dock.NONE
|
||||||
set(value) {
|
set(value) {
|
||||||
if (field != value) {
|
if (field != value) {
|
||||||
@ -335,6 +354,12 @@ open class EditablePanel<out S : Screen>(
|
|||||||
parent?.layoutInvalidated = true
|
parent?.layoutInvalidated = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Allows to specify how to resize panel while docking
|
||||||
|
*
|
||||||
|
* If a side does not get resized, panel gets repositioned according to [dockGravity]
|
||||||
|
*/
|
||||||
var dockResize = DockResizeMode.ALL
|
var dockResize = DockResizeMode.ALL
|
||||||
set(value) {
|
set(value) {
|
||||||
if (field != value) {
|
if (field != value) {
|
||||||
@ -342,6 +367,23 @@ open class EditablePanel<out S : Screen>(
|
|||||||
parent?.layoutInvalidated = true
|
parent?.layoutInvalidated = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specifies how to handle panel repositioning if there are gaps due to [dockResize] not being [DockResizeMode.ALL]
|
||||||
|
*/
|
||||||
|
var dockGravity = RenderGravity.CENTER_CENTER
|
||||||
|
set(value) {
|
||||||
|
if (field != value) {
|
||||||
|
field = value
|
||||||
|
|
||||||
|
if (dockResize != DockResizeMode.ALL)
|
||||||
|
parent?.layoutInvalidated = true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Positioning of this panel against docking edges
|
||||||
|
*/
|
||||||
var dockMargin = DockProperty.EMPTY
|
var dockMargin = DockProperty.EMPTY
|
||||||
set(value) {
|
set(value) {
|
||||||
if (field != value) {
|
if (field != value) {
|
||||||
@ -386,6 +428,9 @@ open class EditablePanel<out S : Screen>(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Positioning of children panels against this panel's edges
|
||||||
|
*/
|
||||||
var dockPadding = DockProperty.EMPTY
|
var dockPadding = DockProperty.EMPTY
|
||||||
set(value) {
|
set(value) {
|
||||||
if (field != value) {
|
if (field != value) {
|
||||||
@ -1219,7 +1264,7 @@ open class EditablePanel<out S : Screen>(
|
|||||||
if (child.dockResize.changeHeight)
|
if (child.dockResize.changeHeight)
|
||||||
child.height = child.dockedHeight
|
child.height = child.dockedHeight
|
||||||
else if (child.height != child.dockedHeight)
|
else if (child.height != child.dockedHeight)
|
||||||
child.y += (child.dockedHeight / 2f - child.height / 2f).roundToInt().toFloat()
|
child.y += dockGravity.repositionY(child.dockedHeight, child.height).roundToInt().toFloat()
|
||||||
}
|
}
|
||||||
|
|
||||||
Dock.RIGHT -> {
|
Dock.RIGHT -> {
|
||||||
@ -1233,7 +1278,7 @@ open class EditablePanel<out S : Screen>(
|
|||||||
if (child.dockResize.changeHeight)
|
if (child.dockResize.changeHeight)
|
||||||
child.height = child.dockedHeight
|
child.height = child.dockedHeight
|
||||||
else if (child.height != child.dockedHeight)
|
else if (child.height != child.dockedHeight)
|
||||||
child.y += (child.dockedHeight / 2f - child.height / 2f).roundToInt().toFloat()
|
child.y += dockGravity.repositionY(child.dockedHeight, child.height).roundToInt().toFloat()
|
||||||
}
|
}
|
||||||
|
|
||||||
Dock.TOP -> {
|
Dock.TOP -> {
|
||||||
@ -1261,7 +1306,7 @@ open class EditablePanel<out S : Screen>(
|
|||||||
if (child.dockResize.changeWidth)
|
if (child.dockResize.changeWidth)
|
||||||
child.width = child.dockedWidth
|
child.width = child.dockedWidth
|
||||||
else if (child.width != child.dockedWidth)
|
else if (child.width != child.dockedWidth)
|
||||||
child.x += (child.dockedWidth / 2f - child.width / 2f).roundToInt().toFloat()
|
child.x += dockGravity.repositionX(child.dockedWidth, child.width).roundToInt().toFloat()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1284,12 +1329,12 @@ open class EditablePanel<out S : Screen>(
|
|||||||
if (child.dockResize.changeHeight)
|
if (child.dockResize.changeHeight)
|
||||||
child.height = child.dockedHeight
|
child.height = child.dockedHeight
|
||||||
else if (child.height != child.dockedHeight)
|
else if (child.height != child.dockedHeight)
|
||||||
child.y += child.dockedHeight / 2f - child.height / 2f
|
child.y += dockGravity.repositionY(child.dockedHeight, child.height).roundToInt().toFloat()
|
||||||
|
|
||||||
if (child.dockResize.changeWidth)
|
if (child.dockResize.changeWidth)
|
||||||
child.width = child.dockedWidth
|
child.width = child.dockedWidth
|
||||||
else if (child.width != child.dockedWidth)
|
else if (child.width != child.dockedWidth)
|
||||||
child.x += child.dockedWidth / 2f - child.width / 2f
|
child.x += dockGravity.repositionX(child.dockedWidth, child.width).roundToInt().toFloat()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user