Moved radial menu to RenderHandler.
Resolved issue #12 and #13. (And #10 with pull request.)
This commit is contained in:
@@ -85,6 +85,12 @@ public class ModeSettingsManager {
|
||||
handleNewPlayer(player);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) {
|
||||
EntityPlayer player = event.player;
|
||||
handleNewPlayer(player);
|
||||
}
|
||||
|
||||
private static void handleNewPlayer(EntityPlayer player){
|
||||
if (getModeSettings(player) == null) {
|
||||
setModeSettings(player, new ModeSettings());
|
||||
|
||||
@@ -176,6 +176,12 @@ public class ModifierSettingsManager {
|
||||
handleNewPlayer(player);
|
||||
}
|
||||
|
||||
@SubscribeEvent
|
||||
public static void onPlayerChangedDimension(PlayerEvent.PlayerChangedDimensionEvent event) {
|
||||
EntityPlayer player = event.player;
|
||||
handleNewPlayer(player);
|
||||
}
|
||||
|
||||
private static void handleNewPlayer(EntityPlayer player){
|
||||
if (getModifierSettings(player) == null) {
|
||||
setModifierSettings(player, new ModifierSettings());
|
||||
|
||||
@@ -24,12 +24,14 @@ public class CommandReach extends CommandBase {
|
||||
|
||||
@Override
|
||||
public void execute(MinecraftServer server, ICommandSender sender, String[] args) throws CommandException {
|
||||
EntityPlayerMP player = (EntityPlayerMP) sender;
|
||||
if (args.length != 1) {
|
||||
int reachUpgrade = ModifierSettingsManager.getModifierSettings(player).getReachUpgrade();
|
||||
EffortlessBuilding.log(player, "Current reach: level "+reachUpgrade);
|
||||
throw new WrongUsageException("commands.reach.usage");
|
||||
}
|
||||
|
||||
if (sender instanceof EntityPlayerMP) {
|
||||
EntityPlayerMP player = (EntityPlayerMP) sender;
|
||||
//Set reach level to args[0]
|
||||
ModifierSettingsManager.ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
||||
modifierSettings.setReachUpgrade(Integer.valueOf(args[0]));
|
||||
|
||||
@@ -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) {
|
||||
// World world = player.world;
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package nl.requios.effortlessbuilding.render;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.entity.EntityPlayerSP;
|
||||
import net.minecraft.client.renderer.BlockRendererDispatcher;
|
||||
import net.minecraft.client.renderer.GlStateManager;
|
||||
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.IBuildMode;
|
||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager;
|
||||
import nl.requios.effortlessbuilding.buildmode.ModeSettingsManager.ModeSettings;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.BuildModifiers;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager.ModifierSettings;
|
||||
import nl.requios.effortlessbuilding.helper.CompatHelper;
|
||||
import nl.requios.effortlessbuilding.helper.ReachHelper;
|
||||
import nl.requios.effortlessbuilding.helper.SurvivalHelper;
|
||||
@@ -68,7 +71,7 @@ public class BlockPreviewRenderer {
|
||||
|
||||
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
|
||||
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
|
||||
//Unless alwaysShowBlockPreview is true in config
|
||||
if (modeSettings.getBuildMode() != BuildModes.BuildModeEnum.Normal ||
|
||||
(startPos != null && BuildModifiers.isEnabled(modifierSettings, startPos)) ||
|
||||
BuildConfig.visuals.alwaysShowBlockPreview) {
|
||||
if (doRenderBlockPreviews(modifierSettings, modeSettings, startPos)) {
|
||||
|
||||
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,
|
||||
List<ItemStack> itemStacks, float dissolve, BlockPos firstPos,
|
||||
BlockPos secondPos, boolean checkCanPlace) {
|
||||
EntityPlayer player = Minecraft.getMinecraft().player;
|
||||
BlockRendererDispatcher dispatcher = Minecraft.getMinecraft().getBlockRendererDispatcher();
|
||||
|
||||
if (coordinates.isEmpty()) return;
|
||||
|
||||
for (int i = coordinates.size() - 1; i >= 0; i--) {
|
||||
BlockPos blockPos = coordinates.get(i);
|
||||
IBlockState blockState = blockStates.get(i);
|
||||
@@ -242,9 +251,16 @@ public class BlockPreviewRenderer {
|
||||
}
|
||||
|
||||
public static void onBlocksPlaced() {
|
||||
EntityPlayerSP player = Minecraft.getMinecraft().player;
|
||||
ModifierSettings modifierSettings = ModifierSettingsManager.getModifierSettings(player);
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -2,12 +2,17 @@ package nl.requios.effortlessbuilding.render;
|
||||
|
||||
import net.minecraft.block.state.IBlockState;
|
||||
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.GlStateManager;
|
||||
import net.minecraft.client.renderer.RenderGlobal;
|
||||
import net.minecraft.client.renderer.texture.TextureMap;
|
||||
import net.minecraft.client.settings.KeyBinding;
|
||||
import net.minecraft.entity.Entity;
|
||||
import net.minecraft.entity.player.EntityPlayer;
|
||||
import net.minecraft.init.SoundEvents;
|
||||
import net.minecraft.util.ResourceLocation;
|
||||
import net.minecraft.util.SoundCategory;
|
||||
import net.minecraft.util.SoundEvent;
|
||||
@@ -16,6 +21,7 @@ import net.minecraft.util.math.BlockPos;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
import net.minecraft.world.IWorldEventListener;
|
||||
import net.minecraft.world.World;
|
||||
import net.minecraftforge.client.event.RenderGameOverlayEvent;
|
||||
import net.minecraftforge.client.event.RenderWorldLastEvent;
|
||||
import net.minecraftforge.fml.common.Mod;
|
||||
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.buildmodifier.BuildModifiers;
|
||||
import nl.requios.effortlessbuilding.buildmodifier.ModifierSettingsManager;
|
||||
import nl.requios.effortlessbuilding.gui.buildmode.RadialMenu;
|
||||
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.GL14;
|
||||
|
||||
@@ -54,6 +64,76 @@ public class RenderHandler implements IWorldEventListener {
|
||||
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) {
|
||||
EntityPlayer player = Minecraft.getMinecraft().player;
|
||||
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.glEnable(GL11.GL_CULL_FACE);
|
||||
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(TextureMap.LOCATION_BLOCKS_TEXTURE);
|
||||
GlStateManager.enableBlend();
|
||||
GlStateManager.blendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
GL14.glBlendColor(1F, 1F, 1F, 0.8f);
|
||||
|
||||
Binary file not shown.
|
Before Width: | Height: | Size: 266 B |
Reference in New Issue
Block a user