Moved radial menu to RenderHandler.

Resolved issue #12 and #13.
(And #10 with pull request.)
This commit is contained in:
Christian Knaapen
2019-02-10 19:27:53 +01:00
parent 5944ea4aa1
commit 1aa1401450
7 changed files with 119 additions and 94 deletions

View File

@@ -85,6 +85,12 @@ public class ModeSettingsManager {
handleNewPlayer(player); handleNewPlayer(player);
} }
@SubscribeEvent
public static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) {
EntityPlayer player = event.player;
handleNewPlayer(player);
}
private static void handleNewPlayer(EntityPlayer player){ private static void handleNewPlayer(EntityPlayer player){
if (getModeSettings(player) == null) { if (getModeSettings(player) == null) {
setModeSettings(player, new ModeSettings()); setModeSettings(player, new ModeSettings());

View File

@@ -176,6 +176,12 @@ public class ModifierSettingsManager {
handleNewPlayer(player); handleNewPlayer(player);
} }
@SubscribeEvent
public static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) {
EntityPlayer player = event.player;
handleNewPlayer(player);
}
private static void handleNewPlayer(EntityPlayer player){ private static void handleNewPlayer(EntityPlayer player){
if (getModifierSettings(player) == null) { if (getModifierSettings(player) == null) {
setModifierSettings(player, new ModifierSettings()); setModifierSettings(player, new ModifierSettings());

View File

@@ -24,12 +24,14 @@ public class CommandReach extends CommandBase {
@Override @Override
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException { public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
EntityPlayerMP player = (EntityPlayerMP) sender;
if (args.length != 1) { if (args.length != 1) {
int reachUpgrade = ModifierSettingsManager.getModifierSettings(player).getReachUpgrade();
EffortlessBuilding.log(player, "Current reach: level "+reachUpgrade);
throw new WrongUsageException("commands.reach.usage"); throw new WrongUsageException("commands.reach.usage");
} }
if (sender instanceof EntityPlayerMP) { if (sender instanceof EntityPlayerMP) {
EntityPlayerMP player = (EntityPlayerMP) sender;
//Set reach level to args[0] //Set reach level to args[0]
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player); ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
modifierSettings.setReachUpgrade(Integer.valueOf(args[0])); modifierSettings.setReachUpgrade(Integer.valueOf(args[0]));

View File

@@ -308,90 +308,6 @@ public class ClientProxy implements IProxy {
} }
} }
@SubscribeEvent
public static void onRenderGameOverlay(final RenderGameOverlayEvent.Post event ) {
EntityPlayerSP player = Minecraft.getMinecraft().player;
//final ChiselToolType tool = getHeldToolType( lastHand );
final RenderGameOverlayEvent.ElementType type = event.getType();
//TODO check if chisel and bits tool in hand (and has menu)
if (type == RenderGameOverlayEvent.ElementType.ALL)
{
final boolean wasVisible = RadialMenu.instance.isVisible();
if ( keyBindings[3].isKeyDown() )
{
RadialMenu.instance.actionUsed = false;
RadialMenu.instance.raiseVisibility();
}
else
{
if ( !RadialMenu.instance.actionUsed )
{
ModeSettingsManager.ModeSettings modeSettings = ModeSettingsManager.getModeSettings(player);
if ( RadialMenu.instance.switchTo != null )
{
ClientProxy.playRadialMenuSound();
modeSettings.setBuildMode(RadialMenu.instance.switchTo);
ModeSettingsManager.setModeSettings(player, modeSettings);
EffortlessBuilding.packetHandler.sendToServer(new ModeSettingsMessage(modeSettings));
EffortlessBuilding.log(player, modeSettings.getBuildMode().name, true);
}
//TODO change buildmode settings
ClientProxy.playRadialMenuSound();
}
RadialMenu.instance.actionUsed = true;
RadialMenu.instance.decreaseVisibility();
}
if ( RadialMenu.instance.isVisible() )
{
final ScaledResolution res = event.getResolution();
RadialMenu.instance.configure( res.getScaledWidth(), res.getScaledHeight() );
if ( wasVisible == false )
{
RadialMenu.instance.mc.inGameHasFocus = false;
RadialMenu.instance.mc.mouseHelper.ungrabMouseCursor();
}
if ( RadialMenu.instance.mc.inGameHasFocus )
{
KeyBinding.unPressAllKeys();
}
final int k1 = Mouse.getX() * res.getScaledWidth() / RadialMenu.instance.mc.displayWidth;
final int l1 = res.getScaledHeight() - Mouse.getY() * res.getScaledHeight() / RadialMenu.instance.mc.displayHeight - 1;
net.minecraftforge.client.ForgeHooksClient.drawScreen( RadialMenu.instance, k1, l1, event.getPartialTicks() );
}
else
{
if ( wasVisible )
{
RadialMenu.instance.mc.setIngameFocus();
}
}
}
}
public static void playRadialMenuSound()
{
final float volume = 0.1f;
if ( volume >= 0.0001f )
{
final PositionedSoundRecord psr = new PositionedSoundRecord( SoundEvents.UI_BUTTON_CLICK, SoundCategory.MASTER,
volume, 1.0f, Minecraft.getMinecraft().player.getPosition() );
Minecraft.getMinecraft().getSoundHandler().playSound(psr);
}
}
public static RayTraceResult getLookingAt(EntityPlayer player) { public static RayTraceResult getLookingAt(EntityPlayer player) {
// World world = player.world; // World world = player.world;

View File

@@ -2,6 +2,7 @@ package nl.requios.effortlessbuilding.render;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.OpenGlHelper;
@@ -21,8 +22,10 @@ import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.buildmode.BuildModes; import nl.requios.effortlessbuilding.buildmode.BuildModes;
import nl.requios.effortlessbuilding.buildmode.IBuildMode; import nl.requios.effortlessbuilding.buildmode.IBuildMode;
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager.ModeSettings;
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers; import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager.ModifierSettings;
import nl.requios.effortlessbuilding.helper.CompatHelper; import nl.requios.effortlessbuilding.helper.CompatHelper;
import nl.requios.effortlessbuilding.helper.ReachHelper; import nl.requios.effortlessbuilding.helper.ReachHelper;
import nl.requios.effortlessbuilding.helper.SurvivalHelper; import nl.requios.effortlessbuilding.helper.SurvivalHelper;
@@ -68,7 +71,7 @@ public class BlockPreviewRenderer {
private static final int secondaryTextureUnit = 7; private static final int secondaryTextureUnit = 7;
public static void render(EntityPlayer player, ModifierSettingsManager.ModifierSettings modifierSettings, ModeSettingsManager.ModeSettings modeSettings) { public static void render(EntityPlayer player, ModifierSettings modifierSettings, ModeSettings modeSettings) {
//Render placed blocks with dissolve effect //Render placed blocks with dissolve effect
for (int i = 0; i < placedDataList.size(); i++) { for (int i = 0; i < placedDataList.size(); i++) {
@@ -118,9 +121,7 @@ public class BlockPreviewRenderer {
//Dont render if in normal mode and modifiers are disabled //Dont render if in normal mode and modifiers are disabled
//Unless alwaysShowBlockPreview is true in config //Unless alwaysShowBlockPreview is true in config
if (modeSettings.getBuildMode() != BuildModes.BuildModeEnum.Normal || if (doRenderBlockPreviews(modifierSettings, modeSettings, startPos)) {
(startPos != null && BuildModifiers.isEnabled(modifierSettings, startPos)) ||
BuildConfig.visuals.alwaysShowBlockPreview) {
RenderHandler.beginBlockPreviews(); RenderHandler.beginBlockPreviews();
@@ -214,12 +215,20 @@ public class BlockPreviewRenderer {
} }
} }
public static boolean doRenderBlockPreviews(ModifierSettings modifierSettings, ModeSettings modeSettings, BlockPos startPos) {
return modeSettings.getBuildMode() != BuildModes.BuildModeEnum.Normal ||
(startPos != null && BuildModifiers.isEnabled(modifierSettings, startPos)) ||
BuildConfig.visuals.alwaysShowBlockPreview;
}
protected static void renderBlockPreviews(List<BlockPos> coordinates, List<IBlockState> blockStates, protected static void renderBlockPreviews(List<BlockPos> coordinates, List<IBlockState> blockStates,
List<ItemStack> itemStacks, float dissolve, BlockPos firstPos, List<ItemStack> itemStacks, float dissolve, BlockPos firstPos,
BlockPos secondPos, boolean checkCanPlace) { BlockPos secondPos, boolean checkCanPlace) {
EntityPlayer player = Minecraft.getMinecraft().player; EntityPlayer player = Minecraft.getMinecraft().player;
BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher(); BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
if (coordinates.isEmpty()) return;
for (int i = coordinates.size() - 1; i >= 0; i--) { for (int i = coordinates.size() - 1; i >= 0; i--) {
BlockPos blockPos = coordinates.get(i); BlockPos blockPos = coordinates.get(i);
IBlockState blockState = blockStates.get(i); IBlockState blockState = blockStates.get(i);
@@ -242,9 +251,16 @@ public class BlockPreviewRenderer {
} }
public static void onBlocksPlaced() { public static void onBlocksPlaced() {
//Save current coordinates, blockstates and itemstacks EntityPlayerSP player = Minecraft.getMinecraft().player;
placedDataList.add(new PlacedData(ClientProxy.ticksInGame, previousCoordinates, previousBlockStates, ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
previousItemStacks, previousFirstPos, previousSecondPos)); ModeSettings modeSettings = ModeSettingsManager.getModeSettings(player);
//Check if block previews are enabled
if (doRenderBlockPreviews(modifierSettings, modeSettings, previousFirstPos)) {
//Save current coordinates, blockstates and itemstacks
placedDataList.add(new PlacedData(ClientProxy.ticksInGame, previousCoordinates, previousBlockStates,
previousItemStacks, previousFirstPos, previousSecondPos));
}
} }

View File

@@ -2,12 +2,17 @@ package nl.requios.effortlessbuilding.render;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.entity.EntityPlayerSP;
import net.minecraft.client.gui.ScaledResolution;
import net.minecraft.client.renderer.BlockRendererDispatcher; import net.minecraft.client.renderer.BlockRendererDispatcher;
import net.minecraft.client.renderer.GlStateManager; import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderGlobal; import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.client.renderer.texture.TextureMap; import net.minecraft.client.renderer.texture.TextureMap;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.entity.Entity; import net.minecraft.entity.Entity;
import net.minecraft.entity.player.EntityPlayer; import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.SoundEvents;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.SoundCategory; import net.minecraft.util.SoundCategory;
import net.minecraft.util.SoundEvent; import net.minecraft.util.SoundEvent;
@@ -16,6 +21,7 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Vec3d; import net.minecraft.util.math.Vec3d;
import net.minecraft.world.IWorldEventListener; import net.minecraft.world.IWorldEventListener;
import net.minecraft.world.World; import net.minecraft.world.World;
import net.minecraftforge.client.event.RenderGameOverlayEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent; import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
@@ -24,7 +30,11 @@ import nl.requios.effortlessbuilding.EffortlessBuilding;
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager; import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers; import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager; import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
import nl.requios.effortlessbuilding.helper.SurvivalHelper; import nl.requios.effortlessbuilding.helper.SurvivalHelper;
import nl.requios.effortlessbuilding.network.ModeSettingsMessage;
import nl.requios.effortlessbuilding.proxy.ClientProxy;
import org.lwjgl.input.Mouse;
import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL11;
import org.lwjgl.opengl.GL14; import org.lwjgl.opengl.GL14;
@@ -54,6 +64,76 @@ public class RenderHandler implements IWorldEventListener {
end(); end();
} }
@SubscribeEvent
public static void onRenderGameOverlay(final RenderGameOverlayEvent.Post event ) {
EntityPlayerSP player = Minecraft.getMinecraft().player;
//final ChiselToolType tool = getHeldToolType( lastHand );
final RenderGameOverlayEvent.ElementType type = event.getType();
//TODO check if chisel and bits tool in hand (and has menu)
if (type == RenderGameOverlayEvent.ElementType.ALL) {
final boolean wasVisible = RadialMenu.instance.isVisible();
if (ClientProxy.keyBindings[3].isKeyDown()) {
RadialMenu.instance.actionUsed = false;
RadialMenu.instance.raiseVisibility();
} else {
if ( !RadialMenu.instance.actionUsed ) {
ModeSettingsManager.ModeSettings modeSettings = ModeSettingsManager.getModeSettings(player);
if ( RadialMenu.instance.switchTo != null ) {
playRadialMenuSound();
modeSettings.setBuildMode(RadialMenu.instance.switchTo);
ModeSettingsManager.setModeSettings(player, modeSettings);
EffortlessBuilding.packetHandler.sendToServer(new ModeSettingsMessage(modeSettings));
EffortlessBuilding.log(player, modeSettings.getBuildMode().name, true);
}
//TODO change buildmode settings
playRadialMenuSound();
}
RadialMenu.instance.actionUsed = true;
RadialMenu.instance.decreaseVisibility();
}
if (RadialMenu.instance.isVisible()) {
final ScaledResolution res = event.getResolution();
RadialMenu.instance.configure(res.getScaledWidth(), res.getScaledHeight());
if (!wasVisible) {
RadialMenu.instance.mc.inGameHasFocus = false;
RadialMenu.instance.mc.mouseHelper.ungrabMouseCursor();
}
if (RadialMenu.instance.mc.inGameHasFocus) {
KeyBinding.unPressAllKeys();
}
final int k1 = Mouse.getX() * res.getScaledWidth() / RadialMenu.instance.mc.displayWidth;
final int l1 = res.getScaledHeight() - Mouse.getY() * res.getScaledHeight() / RadialMenu.instance.mc.displayHeight - 1;
net.minecraftforge.client.ForgeHooksClient.drawScreen(RadialMenu.instance, k1, l1, event.getPartialTicks());
} else {
if (wasVisible) {
RadialMenu.instance.mc.setIngameFocus();
}
}
}
}
public static void playRadialMenuSound() {
final float volume = 0.1f;
if (volume >= 0.0001f) {
final PositionedSoundRecord psr = new PositionedSoundRecord(SoundEvents.UI_BUTTON_CLICK, SoundCategory.MASTER,
volume, 1.0f, Minecraft.getMinecraft().player.getPosition());
Minecraft.getMinecraft().getSoundHandler().playSound(psr);
}
}
private static void begin(float partialTicks) { private static void begin(float partialTicks) {
EntityPlayer player = Minecraft.getMinecraft().player; EntityPlayer player = Minecraft.getMinecraft().player;
double playerX = player.prevPosX + (player.posX - player.prevPosX) * partialTicks; double playerX = player.prevPosX + (player.posX - player.prevPosX) * partialTicks;
@@ -87,10 +167,9 @@ public class RenderHandler implements IWorldEventListener {
GL11.glPushAttrib(GL11.GL_ENABLE_BIT); GL11.glPushAttrib(GL11.GL_ENABLE_BIT);
GL11.glEnable(GL11.GL_CULL_FACE); GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_TEXTURE_2D);
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(EffortlessBuilding.MODID, "textures/shader_color.png")); Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(EffortlessBuilding.MODID, "textures/shader_mask.png")); Minecraft.getMinecraft().renderEngine.bindTexture(new ResourceLocation(EffortlessBuilding.MODID, "textures/shader_mask.png"));
Minecraft.getMinecraft().renderEngine.bindTexture(TextureMap.LOCATION_BLOCKS_TEXTURE);
GlStateManager.enableBlend(); GlStateManager.enableBlend();
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
GL14.glBlendColor(1F, 1F, 1F, 0.8f); GL14.glBlendColor(1F, 1F, 1F, 0.8f);

Binary file not shown.

Before

Width:  |  Height:  |  Size: 266 B