Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
package gregtechlite.gtlitecore.client.renderer;

import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;

public interface TranscendentRenderBehavior extends ItemRendererManager
{

float getRotationSpeed();

float getRotationAxisX();

float getRotationAxisY();

float getRotationAxisZ();

float getFloatingOffset();

@SideOnly(Side.CLIENT)
default float[] getRotationAxis()
{
return new float[] { getRotationAxisX(), getRotationAxisY(), getRotationAxisZ() };
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,150 @@
package gregtechlite.gtlitecore.client.renderer.handler;

import com.morphismmc.morphismlib.client.Games;
import gregtech.api.items.metaitem.MetaItem;
import gregtechlite.gtlitecore.client.model.WrappedModelGetter;
import gregtechlite.gtlitecore.client.renderer.CustomItemRenderer;
import gregtechlite.gtlitecore.client.renderer.TranscendentRenderBehavior;
import gregtechlite.gtlitecore.client.shader.CosmicShaderHelper;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.block.model.IBakedModel;
import net.minecraft.client.renderer.block.model.ItemCameraTransforms;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.model.IModelState;

public class TranscendentItemRenderer extends WrappedItemRenderer
{

private long animationTick = 0;

public TranscendentItemRenderer(IModelState state, IBakedModel model)
{
super(state, model);
}

public TranscendentItemRenderer(IModelState state, WrappedModelGetter getter)
{
super(state, getter);
}

@Override
public void renderItem(ItemStack stack, ItemCameraTransforms.TransformType transformType)
{
if (!(stack.getItem() instanceof MetaItem)) {
renderModel(wrapped, stack);
return;
}

MetaItem<?>.MetaValueItem valueItem = ((MetaItem<?>) stack.getItem()).getItem(stack);
TranscendentRenderBehavior trb = null;
if (valueItem != null) {
trb = (TranscendentRenderBehavior) ((CustomItemRenderer) valueItem).getRendererManager();
}

if (trb == null) {
renderModel(wrapped, stack);
return;
}

processLightLevel(transformType);

if (transformType == ItemCameraTransforms.TransformType.GUI)
{
renderInventory(stack, renderEntity, trb);
}
else
{
renderSimple(stack, renderEntity, trb);
}
}

protected void renderSimple(ItemStack stack, EntityLivingBase player, TranscendentRenderBehavior trb)
{
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
GlStateManager.color(1F, 1F, 1F, 1F);

World world = player != null ? player.world : null;
IBakedModel model = wrapped.getOverrides().handleItemState(wrapped, stack, world, player);

applyEffect(trb);
renderModel(model, stack);
GlStateManager.disableBlend();
GlStateManager.popMatrix();
}

protected void renderInventory(ItemStack stack, EntityLivingBase player, TranscendentRenderBehavior trb)
{
GlStateManager.pushMatrix();
GlStateManager.enableBlend();
GlStateManager.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA);
GlStateManager.disableAlpha();
GlStateManager.disableDepth();

World world = player != null ? player.world : null;
IBakedModel model = wrapped.getOverrides().handleItemState(wrapped, stack, world, player);

applyEffect(trb);
renderModel(model, stack);

GlStateManager.enableAlpha();
GlStateManager.enableRescaleNormal();
GlStateManager.enableDepth();
GlStateManager.disableBlend();
GlStateManager.popMatrix();
}

protected void applyEffect(TranscendentRenderBehavior trb)
{
updateAnimationTick();
float rotation = (animationTick * trb.getRotationSpeed()) % 360;

GlStateManager.translate(0.5f, 0.5f, 0.0f);

float[] axis = trb.getRotationAxis();
GlStateManager.rotate(rotation, axis[0], axis[1], axis[2]);
GlStateManager.rotate(180, 0.5f, 0.0f, 0.0f);
GlStateManager.translate(-0.5f, -0.5f, 0.0f);
}

private void updateAnimationTick()
{
if (Games.world() != null) {
animationTick = Games.world().getWorldTime() % Integer.MAX_VALUE;
}
}

protected void processLightLevel(ItemCameraTransforms.TransformType transformType)
{
switch (transformType)
{
case GROUND:
if (entityPos != null)
{
CosmicShaderHelper.setLightFromLocation(world, entityPos);
return;
}
break;
case THIRD_PERSON_LEFT_HAND:
case THIRD_PERSON_RIGHT_HAND:
case FIRST_PERSON_LEFT_HAND:
case FIRST_PERSON_RIGHT_HAND:
case HEAD:
if (renderEntity != null)
{
CosmicShaderHelper.setLightFromLocation(world, entityPos);
return;
}
break;
case GUI:
CosmicShaderHelper.setLightLevel(1.2F);
return;
default:
break;
}
CosmicShaderHelper.setLightLevel(1.0F);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,7 @@ import gregtechlite.gtlitecore.api.unification.material.info.GTLiteMaterialIconS
import gregtechlite.gtlitecore.api.unification.material.info.GTLiteMaterialIconSet.MAGNETIUM
import gregtechlite.gtlitecore.api.unification.material.info.GTLiteMaterialIconSet.OMNIUM
import gregtechlite.gtlitecore.api.unification.material.info.GTLiteMaterialIconSet.SPACETIME
import gregtechlite.gtlitecore.api.unification.material.info.GTLiteMaterialIconSet.TRANSCENDENT
import gregtechlite.gtlitecore.api.unification.material.info.GTLiteMaterialIconSet.UNIVERSIUM
import net.minecraft.init.Enchantments

Expand Down Expand Up @@ -345,13 +346,12 @@ object GTLiteElementMaterials
rotorProp(144.0F, 2.4F, 786_432)
}

// TODO: New renderer with rotate animation.
// 15 Transcendent Metal
TranscendentMetal = addMaterial(15, "transcendent_metal")
{
ingot()
liquid()
color(0x1A1A1A).iconSet(METALLIC)
color(0x1A1A1A).iconSet(TRANSCENDENT)
element(Tsx)
flags(EXT2_METAL, GENERATE_DOUBLE_PLATE, GENERATE_DENSE, GENERATE_ROTOR, GENERATE_FRAME, GENERATE_GEAR,
GENERATE_SMALL_GEAR, GENERATE_ROUND, GENERATE_SPRING, GENERATE_SPRING_SMALL, GENERATE_FINE_WIRE,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ import gregtech.api.unification.material.Materials.Uranium238
import gregtech.api.unification.material.info.MaterialIconSet
import gregtechlite.gtlitecore.client.renderer.texture.GTLiteTextures
import gregtechlite.gtlitecore.common.item.behavior.HaloRenderItemBehavior
import gregtechlite.gtlitecore.common.item.behavior.TranscendentRenderItemBehavior

object GTLiteMaterialIconSet
{
Expand Down Expand Up @@ -119,6 +120,10 @@ object GTLiteMaterialIconSet
val ETERNITY = MaterialIconSetWithRenderer("eternity", null, true,
HaloRenderItemBehavior(10, 0xFF000000.toInt(), {{ GTLiteTextures.HALO }}, true))

@JvmField
val TRANSCENDENT = MaterialIconSetWithRenderer("transcendent", MaterialIconSet.METALLIC, false,
TranscendentRenderItemBehavior())

// endregion

fun setMaterialIconSets()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
package gregtechlite.gtlitecore.common.item.behavior

import codechicken.lib.model.ModelRegistryHelper
import codechicken.lib.util.TransformUtils
import gregtechlite.gtlitecore.client.renderer.TranscendentRenderBehavior
import gregtechlite.gtlitecore.client.renderer.handler.TranscendentItemRenderer
import net.minecraft.client.renderer.block.model.ModelResourceLocation
import net.minecraft.util.ResourceLocation
import net.minecraftforge.fml.relauncher.Side
import net.minecraftforge.fml.relauncher.SideOnly


class TranscendentRenderItemBehavior(
private val rotationSpeed: Float = 3.5f,
private val rotationAxisX: Float = 0.3f,
private val rotationAxisY: Float = 0.5f,
private val rotationAxisZ: Float = 0.2f,
private val floatingOffset: Float = 0.03125f) : TranscendentRenderBehavior
{

override fun getRotationSpeed(): Float = this.rotationSpeed

override fun getRotationAxisX(): Float = this.rotationAxisX

override fun getRotationAxisY(): Float = this.rotationAxisY

override fun getRotationAxisZ(): Float = this.rotationAxisZ

override fun getFloatingOffset(): Float = this.floatingOffset

@SideOnly(Side.CLIENT)
override fun onRendererRegistry(location: ResourceLocation)
{
ModelRegistryHelper.register(ModelResourceLocation(location, "inventory"),
TranscendentItemRenderer(TransformUtils.DEFAULT_ITEM) { modelRegistry ->
modelRegistry.getObject(ModelResourceLocation(location, "inventory"))
})
}

}