Advertisement
Naitenne

IBMTrack

Jan 25th, 2017
164
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 6.73 KB | None | 0 0
  1. package net.railsofwar.row.track.client.bakedmodel;
  2.  
  3. import net.minecraft.block.state.IBlockState;
  4. import net.minecraft.client.renderer.block.model.*;
  5. import net.minecraft.client.renderer.texture.TextureAtlasSprite;
  6. import net.minecraft.client.renderer.vertex.DefaultVertexFormats;
  7. import net.minecraft.util.EnumFacing;
  8. import net.minecraftforge.client.model.IModel;
  9. import net.minecraftforge.client.model.ModelLoader;
  10. import net.minecraftforge.client.model.MultiModel;
  11. import net.minecraftforge.common.model.IModelState;
  12. import net.minecraftforge.common.property.IExtendedBlockState;
  13. import net.railsofwar.row.track.block.BlockTrackBase;
  14. import net.railsofwar.row.track.block.BlockTrackSWNE;
  15. import net.railsofwar.row.track.client.ModelLibTrack;
  16. import net.railsofwar.row.track.enumeration.EnumRailway;
  17. import net.railsofwar.row.track.enumeration.EnumTrackDirectionSWNE;
  18. import net.railsofwar.row.track.enumeration.EnumTrackShape;
  19. import net.railsofwar.row.track.enumeration.EnumTrackState;
  20. import net.railsofwar.row.track.util.PieceProperty;
  21. import net.railsofwar.row.track.util.TrackGeometry;
  22. import org.apache.commons.lang3.tuple.Pair;
  23.  
  24. import javax.annotation.Nullable;
  25. import java.util.Collections;
  26. import java.util.HashMap;
  27. import java.util.List;
  28. import java.util.Map;
  29.  
  30. import static net.railsofwar.row.track.client.util.UtilModelTRSR.*;
  31. import static net.railsofwar.row.track.client.util.UtilTrackRender.*;
  32.  
  33. public class ModelTrack implements IBakedModel{
  34.  
  35.     public static final ModelResourceLocation modelResourceLocation
  36.             = new ModelResourceLocation("row:blockTrack");
  37.  
  38.     public ModelTrack(){
  39.         super();
  40.     }
  41.  
  42.     @Override
  43.     public List<BakedQuad> getQuads(@Nullable IBlockState blockState, @Nullable EnumFacing side, long rand){
  44.         if(blockState == null) return Collections.emptyList();
  45.         if(side != null) return Collections.emptyList();
  46.         assert IExtendedBlockState.class.isAssignableFrom(blockState.getClass());
  47.         IExtendedBlockState extendedBlockState = (IExtendedBlockState) blockState;
  48.  
  49.         EnumTrackShape shape = extendedBlockState.getValue(BlockTrackBase.shape);
  50.         int scalarA = extendedBlockState.getValue(BlockTrackBase.scalarA);
  51.         boolean mirrored = extendedBlockState.getValue(BlockTrackBase.mirrored);
  52.         EnumRailway railway = extendedBlockState.getValue(BlockTrackBase.railway);
  53.         EnumTrackState trackState = extendedBlockState.getValue(BlockTrackSWNE.trackState);
  54.         int seed = extendedBlockState.getValue(BlockTrackSWNE.seed);
  55.         EnumTrackDirectionSWNE direction = extendedBlockState.getValue(BlockTrackSWNE.direction);
  56.  
  57.         TrackGeometry geometry = new TrackGeometry(railway, shape, scalarA, mirrored, seed);
  58.  
  59.         if(trackState == null) return Collections.emptyList();
  60.         IModelState modelStateBase = stateTR(tern(0.5F, 0, 0.5F), rotY(direction.getAzimuth()));
  61.         if(shape == EnumTrackShape.SWITCH_CIRCULAR){
  62.             if(!mirrored){
  63.                 IBakedModel modelBaked = ModelLibTrack.rail750Switch1right.bake(modelStateBase, DefaultVertexFormats.ITEM, ModelLoader.defaultTextureGetter());
  64.                 return modelBaked.getQuads(null, null, rand);
  65.             }else{
  66.                 IBakedModel modelBaked = ModelLibTrack.rail750Switch1left.bake(modelStateBase, DefaultVertexFormats.ITEM, ModelLoader.defaultTextureGetter());
  67.                 return modelBaked.getQuads(null, null, rand);
  68.             }
  69.         }
  70.         switch(trackState){
  71.             case MARKUP:
  72.                 return processGeometry(geometry, direction, rand, true, false, false, false, false);
  73.             case SLEEPERS:
  74.                 return processGeometry(geometry, direction, rand, false, true, false, false, false);
  75.             case RAILS:
  76.                 return processGeometry(geometry, direction, rand, false, true, true, true, false);
  77.             case WORKING:
  78.                 return processGeometry(geometry, direction, rand, false, true, true, true, true);
  79.             default:
  80.                 return Collections.emptyList();
  81.         }
  82.     }
  83.  
  84.     private List<BakedQuad> processGeometry(TrackGeometry geometry, EnumTrackDirectionSWNE direction,
  85.                                             long random, boolean drawMarkup, boolean drawSleepers,
  86.                                             boolean drawRailLeft, boolean drawRailRight, boolean drawSpikes){
  87.         Map<String, Pair<IModel, IModelState>> map = new HashMap<>();
  88.         if(drawMarkup){
  89.             //marker(map, stateR(rotY(0F)));
  90.             //marker(map, stateTR(tern(0F, 0F, 8F), rotY(180F))); //TODO pass marker positions with geometry
  91.         }
  92.         if(drawSleepers)
  93.             for(PieceProperty l : geometry.getSleepers())
  94.                 sleeper(map, stateTSR(
  95.                         tern(l.getPX(), l.getPY(), l.getPZ()),
  96.                         tern(l.getSX(), l.getSY(), l.getSZ()),
  97.                         rotAPR(l.getAzimuth(), l.getPith(), l.getRoll())));
  98.  
  99.         if(drawRailLeft){
  100.             for(int i = 0; i < geometry.getRails().getLeft().size(); i++){
  101.                 PieceProperty r = geometry.getRails().getLeft().get(i);
  102.                 if(i < geometry.getRails().getLeft().size() - 1)
  103.                     rail8vxLeft(map,
  104.                             stateTSR(tern(r.getPX(), r.getPY(), r.getPZ()),
  105.                                     tern(r.getSX(), r.getSY(), r.getSZ()),
  106.                                     rotAPR(r.getAzimuth(), r.getPith(), r.getRoll())));
  107.                 if(i == 0) railButt(map,
  108.                         stateTR(tern(r.getPX(), r.getPY(), r.getPZ()),
  109.                                 rotAPR(r.getAzimuth(), r.getPith(), r.getRoll())));
  110.                 if(i == geometry.getRails().getLeft().size() - 1)
  111.                     railButt(map,
  112.                             stateTR(tern(r.getPX(), r.getPY(), r.getPZ()),
  113.                                     rotAPR(r.getAzimuth(), r.getPith(), r.getRoll())));
  114.             }
  115.         }
  116.  
  117.         if(drawRailRight){
  118.             for(int i = 0; i < geometry.getRails().getRight().size(); i++){
  119.                 PieceProperty r = geometry.getRails().getRight().get(i);
  120.                 if(i < geometry.getRails().getRight().size() - 1)
  121.                     rail8vxRight(map,
  122.                             stateTSR(tern(r.getPX(), r.getPY(), r.getPZ()),
  123.                                     tern(r.getSX(), r.getSY(), r.getSZ()),
  124.                                     rotAPR(r.getAzimuth(), r.getPith(), r.getRoll())));
  125.                 if(i == 0) railButt(map,
  126.                         stateTR(tern(r.getPX(), r.getPY(), r.getPZ()),
  127.                                 rotAPR(r.getAzimuth(), r.getPith(), r.getRoll())));
  128.                 if(i == geometry.getRails().getRight().size() - 1)
  129.                     railButt(map,
  130.                             stateTR(tern(r.getPX(), r.getPY(), r.getPZ()),
  131.                                     rotAPR(r.getAzimuth(), r.getPith(), r.getRoll())));
  132.             }
  133.         }
  134.  
  135.         //spacer(map, geometry.getRailway(), 15);
  136.  
  137.         IModelState modelStateBase = stateTR(tern(0.5F, 0, 0.5F), rotY(direction.getAzimuth()));
  138.         IBakedModel modelBaked = (new MultiModel(null, null, null, map)).bake(modelStateBase, DefaultVertexFormats.ITEM, ModelLoader.defaultTextureGetter());
  139.         return modelBaked.getQuads(null, null, random);
  140.     }
  141.  
  142.     @Override
  143.     public TextureAtlasSprite getParticleTexture(){
  144.         return null; //defaultModel.getParticleTexture();
  145.     }
  146.  
  147.     @Override
  148.     public boolean isAmbientOcclusion(){
  149.         return false;
  150.     }
  151.  
  152.     @Override
  153.     public boolean isGui3d(){
  154.         return false;
  155.     }
  156.  
  157.     @Override
  158.     public boolean isBuiltInRenderer(){
  159.         return false;
  160.     }
  161.  
  162.     @Override
  163.     public ItemCameraTransforms getItemCameraTransforms(){
  164.         return null;
  165.     }
  166.  
  167.     @Override
  168.     public ItemOverrideList getOverrides(){
  169.         return null;
  170.     }
  171. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement