46 lines
1.8 KiB
Java
46 lines
1.8 KiB
Java
package electroblob.wizardry.client.renderer.effect;
|
|
|
|
import electroblob.wizardry.registry.WizardryPotions;
|
|
import net.minecraft.client.renderer.GlStateManager;
|
|
import net.minecraft.client.renderer.GlStateManager.DestFactor;
|
|
import net.minecraft.client.renderer.GlStateManager.SourceFactor;
|
|
import net.minecraftforge.client.event.RenderLivingEvent;
|
|
import net.minecraftforge.fml.common.Mod.EventBusSubscriber;
|
|
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
|
|
import net.minecraftforge.fml.relauncher.Side;
|
|
|
|
import java.util.Random;
|
|
|
|
@EventBusSubscriber(Side.CLIENT)
|
|
public class RenderMirage {
|
|
|
|
private static final int BLINK_PERIOD_1 = 47; // Use two prime numbers to make it look as chaotic as possible
|
|
private static final int BLINK_PERIOD_2 = 71;
|
|
|
|
private static final double MAX_OFFSET = 3;
|
|
|
|
private static final Random random = new Random(); // Seed will be set later
|
|
|
|
@SubscribeEvent
|
|
public static void onRenderLivingEvent(RenderLivingEvent.Pre<?> event){
|
|
if(event.getEntity().isPotionActive(WizardryPotions.mirage)){
|
|
random.setSeed(event.getEntity().ticksExisted / BLINK_PERIOD_1
|
|
+ event.getEntity().ticksExisted / BLINK_PERIOD_2);
|
|
GlStateManager.pushMatrix();
|
|
GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE); // GhoOOoOostly OooOOOo00oOOo
|
|
GlStateManager.color(1, 1, 1, 0.5f);
|
|
GlStateManager.translate((random.nextDouble() * 2 - 1) * MAX_OFFSET,
|
|
(random.nextDouble() * 2 - 1) * MAX_OFFSET, (random.nextDouble() * 2 - 1) * MAX_OFFSET);
|
|
}
|
|
}
|
|
|
|
@SubscribeEvent
|
|
public static void onRenderLivingEvent(RenderLivingEvent.Post<?> event){
|
|
if(event.getEntity().isPotionActive(WizardryPotions.mirage)){
|
|
GlStateManager.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA);
|
|
GlStateManager.popMatrix();
|
|
}
|
|
}
|
|
|
|
}
|