Skip to content

Commit 9d69b71

Browse files
committed
WIP locker screens
1 parent b40cfab commit 9d69b71

File tree

7 files changed

+150
-0
lines changed

7 files changed

+150
-0
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package org.polyfrost.polyplus.mixin.client;
2+
3+
import com.llamalad7.mixinextras.sugar.Local;
4+
import dev.deftu.omnicore.api.client.screen.OmniScreen;
5+
import org.polyfrost.oneconfig.internal.ui.OneConfigUI;
6+
import org.polyfrost.polyplus.client.gui.LockerUI;
7+
import org.polyfrost.polyui.component.Component;
8+
import org.spongepowered.asm.mixin.Mixin;
9+
import org.spongepowered.asm.mixin.injection.At;
10+
import org.spongepowered.asm.mixin.injection.Inject;
11+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
12+
13+
@Mixin(OneConfigUI.class)
14+
public class Mixin_AddCosmeticsPage {
15+
@Inject(
16+
method = "create(Lorg/polyfrost/polyui/component/Component;)Ldev/deftu/omnicore/api/client/screen/OmniScreen;",
17+
at = @At(
18+
value = "INVOKE",
19+
target = "Lorg/polyfrost/polyui/component/extensions/ExtensionsKt;padded(Lorg/polyfrost/polyui/component/Component;FFFF)Lorg/polyfrost/polyui/component/Component;",
20+
ordinal = 4,
21+
remap = false
22+
),
23+
remap = false
24+
)
25+
private void polyplus$addCosmeticsButton(
26+
Component initialScreen,
27+
CallbackInfoReturnable<OmniScreen> cir,
28+
@Local Component[] var10005
29+
) {
30+
// Push index 8 and onwards one position to the right
31+
for (int i = var10005.length - 1; i > 8; i--) {
32+
var10005[i] = var10005[i - 1];
33+
}
34+
35+
// Insert at index 8
36+
var10005[8] = LockerUI.createCosmeticsPageButton();
37+
}
38+
}

src/main/kotlin/org/polyfrost/polyplus/client/PolyPlusClient.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import org.polyfrost.polyplus.PolyPlusConstants
2424
import org.polyfrost.polyplus.client.cosmetics.ApplyCosmetics
2525
import org.polyfrost.polyplus.client.cosmetics.CosmeticManager
2626
import org.polyfrost.polyplus.client.discord.DiscordPresence
27+
import org.polyfrost.polyplus.client.gui.FullscreenLockerUI
2728
import org.polyfrost.polyplus.client.network.http.PolyAuthorization
2829
import org.polyfrost.polyplus.client.network.http.PolyCosmetics
2930
import org.polyfrost.polyplus.client.network.websocket.PolyConnection
@@ -74,6 +75,10 @@ object PolyPlusClient {
7475

7576
refresh()
7677
PolyPlusConfig.addDefaultCommand(PolyPlusConstants.ID)
78+
.then(OmniClientCommands.literal("locker")
79+
.executes { ctx ->
80+
ctx.source.openScreen(FullscreenLockerUI.create())
81+
})
7782
.then(OmniClientCommands.literal("refresh")
7883
.executes { ctx ->
7984
refresh()

src/main/kotlin/org/polyfrost/polyplus/client/PolyPlusConfig.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,26 @@
11
package org.polyfrost.polyplus.client
22

3+
import dev.deftu.omnicore.api.client.screen.openScreen
34
import org.apache.logging.log4j.LogManager
45
import org.polyfrost.oneconfig.api.config.v1.Config
6+
import org.polyfrost.oneconfig.api.config.v1.annotations.Button
57
import org.polyfrost.oneconfig.api.config.v1.annotations.Dropdown
68
import org.polyfrost.oneconfig.api.config.v1.annotations.Switch
79
import org.polyfrost.polyplus.BackendUrl
810
import org.polyfrost.polyplus.PolyPlusConstants
911
import org.polyfrost.polyplus.client.discord.DiscordPresence
12+
import org.polyfrost.polyplus.client.gui.FullscreenLockerUI
1013
import org.polyfrost.polyplus.client.network.websocket.PolyConnection
1114

1215
object PolyPlusConfig : Config("${PolyPlusConstants.ID}.json", PolyPlusConstants.NAME, Category.OTHER) {
1316
@Transient
1417
private val LOGGER = LogManager.getLogger()
1518

19+
@Button(title = "Open Locker", description = "Open the PolyPlus Locker UI")
20+
fun openLocker() {
21+
FullscreenLockerUI.create().openScreen()
22+
}
23+
1624
@JvmStatic @Switch(title = "Discord RPC")
1725
var isDiscordEnabled = true
1826

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package org.polyfrost.polyplus.client.gui
2+
3+
import net.minecraft.client.gui.GuiScreen
4+
import org.polyfrost.oneconfig.api.ui.v1.OCPolyUIBuilder
5+
import org.polyfrost.oneconfig.api.ui.v1.UIManager
6+
import org.polyfrost.polyplus.PolyPlusConstants
7+
8+
object FullscreenLockerUI {
9+
private val INTENDED_WIDTH = 1920f
10+
private val INTENDED_HEIGHT = 1080f
11+
12+
fun create(): GuiScreen {
13+
val uiManager = UIManager.INSTANCE
14+
val builder = OCPolyUIBuilder.create()
15+
.blurs()
16+
.atResolution(INTENDED_WIDTH, INTENDED_HEIGHT)
17+
.renderer(uiManager.renderer)
18+
.translatorDelegate("assets/${PolyPlusConstants.ID}")
19+
20+
val polyUI = builder.make(
21+
)
22+
23+
val screen = uiManager.createPolyUIScreen(polyUI, INTENDED_WIDTH, INTENDED_HEIGHT, false, true) { }
24+
polyUI.window = uiManager.createWindow()
25+
return screen
26+
}
27+
}
Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
@file:Suppress("FunctionName")
2+
3+
package org.polyfrost.polyplus.client.gui
4+
5+
import org.polyfrost.oneconfig.internal.ui.OneConfigUI
6+
import org.polyfrost.polyui.component.Component
7+
import org.polyfrost.polyui.component.Drawable
8+
import org.polyfrost.polyui.component.extensions.named
9+
import org.polyfrost.polyui.component.extensions.onClick
10+
import org.polyfrost.polyui.component.extensions.padded
11+
import org.polyfrost.polyui.component.impl.Button
12+
import org.polyfrost.polyui.component.impl.Group
13+
import org.polyfrost.polyui.unit.Vec2
14+
import org.polyfrost.polyui.utils.image
15+
16+
object LockerUI {
17+
@JvmStatic
18+
fun createCosmeticsPageButton(): Component {
19+
return OneConfigUI.SidebarButton("assets/polyplus/ico/stars.svg".image(), "Cosmetics")
20+
.onClick { OneConfigUI.openPage(LockerPage()) }
21+
}
22+
}
23+
24+
private fun LockerPage(): Drawable {
25+
return Group(
26+
// Cosmetics List
27+
Group(
28+
size = Vec2(610f, 614f),
29+
),
30+
31+
// Right sidebar
32+
Group(
33+
// Purchasing options
34+
Group(
35+
Button(
36+
text = "Cart",
37+
radii = floatArrayOf(6f),
38+
padding = Vec2(42.75f, 5.5f),
39+
size = Vec2(136f, 32f)
40+
),
41+
Button(
42+
text = "Checkout items",
43+
radii = floatArrayOf(6f),
44+
padding = Vec2(75.5f, 5.5f),
45+
size = Vec2(306f, 32f)
46+
),
47+
size = Vec2(465f, 32f)
48+
),
49+
50+
// Player preview
51+
Group(
52+
size = Vec2(465f, 558f)
53+
).padded(0f, 12f, 0f, 0f),
54+
55+
size = Vec2(465f, 602f)
56+
).padded(13f, 0f, 0f, 0f),
57+
58+
size = Vec2(1088f, 614f)
59+
).named("Locker")
60+
}
Lines changed: 11 additions & 0 deletions
Loading

src/main/resources/mixins.polyplus.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
"Mixin_NoAI"
1111
],
1212
"client": [
13+
"client.Mixin_AddCosmeticsPage",
1314
"client.Mixin_ReplaceCapeTexture",
1415
"client.Mixin_ReplaceOneConfigLogo"
1516
],

0 commit comments

Comments
 (0)