Skip to content

Commit ec6a562

Browse files
committed
TeraType displays.
1 parent 5634b65 commit ec6a562

File tree

8 files changed

+639
-4
lines changed

8 files changed

+639
-4
lines changed

common/src/main/java/generations/gg/generations/core/generationscore/common/client/BattleOverlayProxy.kt

Lines changed: 465 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package generations.gg.generations.core.generationscore.common.client.screen;
2+
3+
import com.cobblemon.mod.common.api.gui.blitk
4+
import com.cobblemon.mod.common.api.types.tera.TeraType
5+
import com.cobblemon.mod.common.api.types.tera.elemental.ElementalTypeTeraType
6+
import com.cobblemon.mod.common.api.types.tera.gimmick.StellarTeraType
7+
import generations.gg.generations.core.generationscore.common.GenerationsCore
8+
import net.minecraft.client.gui.GuiGraphics
9+
10+
private val TeraType?.textureXMultiplier: Int
11+
get() = when(this) {
12+
is ElementalTypeTeraType -> this.type.textureXMultiplier
13+
is StellarTeraType -> 18
14+
else -> 19
15+
}
16+
17+
class TeraTypeIcon(
18+
val x: Number,
19+
val y: Number,
20+
val type: TeraType?,
21+
val centeredX: Boolean = false,
22+
val small: Boolean = false,
23+
val opacity: Float = 1F
24+
) {
25+
companion object {
26+
private const val TYPE_ICON_DIAMETER = 36
27+
private const val SCALE = 0.5F
28+
29+
private val typesResource = GenerationsCore.id("textures/gui/tera_types.png")
30+
private val smallTypesResource = GenerationsCore.id("textures/gui/tera_types_small.png")
31+
}
32+
33+
fun render(context: GuiGraphics) {
34+
val diameter = if (small) (TYPE_ICON_DIAMETER / 2) else TYPE_ICON_DIAMETER
35+
val offsetX = if (centeredX) (((diameter / 2) * SCALE)) else 0F;
36+
37+
blitk(
38+
matrixStack = context.pose(),
39+
texture = if (small) smallTypesResource else typesResource,
40+
x = (x.toFloat() - offsetX) / SCALE,
41+
y = y.toFloat() / SCALE,
42+
height = diameter,
43+
width = diameter,
44+
uOffset = diameter * type.textureXMultiplier.toFloat() + 0.1,
45+
textureWidth = diameter * 20,
46+
alpha = opacity,
47+
scale = SCALE
48+
)
49+
}
50+
}
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package generations.gg.generations.core.generationscore.common.mixin;
2+
3+
import com.cobblemon.mod.common.api.pokedex.PokedexEntryProgress;
4+
import com.cobblemon.mod.common.client.battle.ActiveClientBattlePokemon;
5+
import com.cobblemon.mod.common.client.battle.ClientBallDisplay;
6+
import com.cobblemon.mod.common.client.gui.battle.BattleOverlay;
7+
import com.cobblemon.mod.common.client.render.models.blockbench.PosableState;
8+
import com.cobblemon.mod.common.pokemon.Gender;
9+
import com.cobblemon.mod.common.pokemon.Species;
10+
import com.cobblemon.mod.common.pokemon.status.PersistentStatus;
11+
import generations.gg.generations.core.generationscore.common.client.BattleOverlayProxy;
12+
import gg.generations.rarecandy.shaded.commons.lang3.tuple.Triple;
13+
import net.minecraft.client.gui.GuiGraphics;
14+
import net.minecraft.network.chat.MutableComponent;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.Shadow;
17+
import org.spongepowered.asm.mixin.injection.At;
18+
import org.spongepowered.asm.mixin.injection.Inject;
19+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
20+
21+
@Mixin(BattleOverlay.class)
22+
public abstract class BattleOverlayMixin {
23+
24+
// @Shadow public abstract float getPassedSeconds(); TODO: In a future version, figure out how to get TeraType to be availabel to display.
25+
//
26+
// @Shadow public abstract double getOpacity();
27+
//
28+
// @Inject(
29+
// method = "drawTile",
30+
// at = @At("RETURN")
31+
// )
32+
// private void onDrawBattleTilePost(GuiGraphics context, float tickDelta, ActiveClientBattlePokemon activeBattlePokemon, boolean left, int rank, PokedexEntryProgress dexState, boolean hasCommand, boolean isHovered, boolean isCompact, CallbackInfo ci
33+
// ) {
34+
// BattleOverlayProxy.render(context, tickDelta, activeBattlePokemon, left, rank, dexState, hasCommand, isHovered, isCompact, getPassedSeconds(), getOpacity());
35+
// }
36+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package generations.gg.generations.core.generationscore.common.mixin.client;
2+
3+
import com.cobblemon.mod.common.client.gui.TypeIcon;
4+
import com.cobblemon.mod.common.client.gui.pc.PCGUI;
5+
import com.cobblemon.mod.common.client.gui.summary.widgets.ModelWidget;
6+
import com.cobblemon.mod.common.pokemon.Pokemon;
7+
import generations.gg.generations.core.generationscore.common.GenerationsCore;
8+
import generations.gg.generations.core.generationscore.common.client.screen.TeraTypeIcon;
9+
import net.minecraft.client.gui.GuiGraphics;
10+
import net.minecraft.client.gui.screens.Screen;
11+
import net.minecraft.network.chat.Component;
12+
import net.minecraft.resources.ResourceLocation;
13+
import org.jetbrains.annotations.Nullable;
14+
import org.spongepowered.asm.mixin.Final;
15+
import org.spongepowered.asm.mixin.Mixin;
16+
import org.spongepowered.asm.mixin.Shadow;
17+
import org.spongepowered.asm.mixin.Unique;
18+
import org.spongepowered.asm.mixin.injection.At;
19+
import org.spongepowered.asm.mixin.injection.Inject;
20+
import org.spongepowered.asm.mixin.injection.Redirect;
21+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
22+
23+
@Mixin(PCGUI.class)
24+
public abstract class PcGuiMixin extends Screen {
25+
@Shadow @Nullable private Pokemon previewPokemon;
26+
27+
@Shadow @Final public static int BASE_WIDTH;
28+
29+
@Shadow @Final public static int BASE_HEIGHT;
30+
31+
protected PcGuiMixin(Component title) {
32+
super(title);
33+
}
34+
35+
@Inject(method = "render", at = @At("TAIL"))
36+
public void renderThings(GuiGraphics context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
37+
if(previewPokemon != null) {
38+
var x = (width - BASE_WIDTH) / 2;
39+
var y = (height - BASE_HEIGHT) / 2;
40+
41+
new TeraTypeIcon(x + 6 + 1, y + 27 + 66 - 9 - 1, previewPokemon.getTeraType(), false, true, 1f).render(context);
42+
}
43+
}
44+
}
Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
package generations.gg.generations.core.generationscore.common.mixin.client;
2+
3+
import com.cobblemon.mod.common.client.gui.summary.Summary;
4+
import com.cobblemon.mod.common.pokemon.Pokemon;
5+
import generations.gg.generations.core.generationscore.common.client.screen.TeraTypeIcon;
6+
import net.minecraft.client.gui.GuiGraphics;
7+
import net.minecraft.client.gui.screens.Screen;
8+
import net.minecraft.network.chat.Component;
9+
import org.jetbrains.annotations.Nullable;
10+
import org.spongepowered.asm.mixin.Final;
11+
import org.spongepowered.asm.mixin.Mixin;
12+
import org.spongepowered.asm.mixin.Shadow;
13+
import org.spongepowered.asm.mixin.injection.At;
14+
import org.spongepowered.asm.mixin.injection.Inject;
15+
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
16+
17+
@Mixin(Summary.class)
18+
public class SummaryMixin extends Screen {
19+
@Shadow public Pokemon selectedPokemon;
20+
21+
@Shadow @Final
22+
public static int BASE_WIDTH;
23+
24+
@Shadow @Final public static int BASE_HEIGHT;
25+
26+
protected SummaryMixin(Component title) {
27+
super(title);
28+
}
29+
30+
@Inject(method = "render", at = @At("TAIL"))
31+
public void renderThings(GuiGraphics context, int mouseX, int mouseY, float delta, CallbackInfo ci) {
32+
if(selectedPokemon != null) {
33+
var x = (width - BASE_WIDTH) / 2;
34+
var y = (height - BASE_HEIGHT) / 2;
35+
36+
new TeraTypeIcon(x + 6 + 1, y + 32 + 66 - 18 - 1, selectedPokemon.getTeraType(), false, false, 1f).render(context);
37+
}
38+
}
39+
}

common/src/main/resources/GenerationsCore-common.mixins.json

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
"ServerPlayerMixin",
1616
"ShowdownSpeciesMixin",
1717
"SuppressTeraPacketMixin",
18-
1918
"datafix.ItemStackComponentizationFixMixin",
2019
"showdown.FormeChangeInstructionMixin",
2120
"showdown.ShowdownActionRequestMixin",
@@ -29,12 +28,14 @@
2928
"client.LevelRendererMixin",
3029
"client.LightTextureMixin",
3130
"client.ModelAssetVariationMixin",
31+
"client.PcGuiMixin",
32+
"client.PokemonClientDelegateMixin",
3233
"client.PokemonEntityMixin",
34+
"client.PokemonItemRendererMixin",
3335
"client.PokemonOnShoulderRendererCompanionAccessorMixin",
3436
"client.PokemonOnShoulderRenderMixin",
35-
"client.PokemonClientDelegateMixin",
36-
"client.PokemonItemRendererMixin",
37-
"client.PosableStateMixin"
37+
"client.PosableStateMixin",
38+
"client.SummaryMixin"
3839
],
3940
"injectors": {
4041
"defaultRequire": 1
27.2 KB
Loading
10.8 KB
Loading

0 commit comments

Comments
 (0)