88import com .robotgryphon .compactcrafting .core .FieldProjectionSize ;
99import net .minecraft .block .BlockState ;
1010import net .minecraft .client .Minecraft ;
11- import net .minecraft .client .renderer .*;
11+ import net .minecraft .client .renderer .Atlases ;
12+ import net .minecraft .client .renderer .BlockRendererDispatcher ;
13+ import net .minecraft .client .renderer .IRenderTypeBuffer ;
14+ import net .minecraft .client .renderer .RenderType ;
1215import net .minecraft .client .renderer .model .IBakedModel ;
1316import net .minecraft .client .renderer .model .ModelManager ;
1417import net .minecraft .client .renderer .tileentity .TileEntityRenderer ;
1518import net .minecraft .client .renderer .tileentity .TileEntityRendererDispatcher ;
1619import net .minecraft .util .Direction ;
1720import net .minecraft .util .math .AxisAlignedBB ;
1821import net .minecraft .util .math .BlockPos ;
22+ import net .minecraft .util .math .vector .Quaternion ;
1923import net .minecraft .util .math .vector .Vector3d ;
2024import net .minecraft .util .math .vector .Vector3f ;
25+ import net .minecraft .util .math .vector .Vector3i ;
2126import net .minecraftforge .client .model .ModelDataManager ;
2227import net .minecraftforge .client .model .data .IModelData ;
2328
2429import java .awt .*;
2530import java .util .Optional ;
2631
27- import static net .minecraft .client .renderer .RenderType .makeType ;
28-
2932public class FieldProjectorRenderer extends TileEntityRenderer <FieldProjectorTile > {
3033
3134 enum RotationSpeed {
@@ -45,6 +48,8 @@ public int getSpeed() {
4548 }
4649
4750 private IBakedModel bakedModelCached ;
51+
52+ private Color colorProjectionArc = new Color (255 , 106 , 0 , 200 );
4853 private final Color colorProjectionCube = new Color (255 , 106 , 0 , 100 );
4954 private final Color colorScanLine = new Color (255 , 106 , 0 , 200 );
5055
@@ -56,16 +61,18 @@ public FieldProjectorRenderer(TileEntityRendererDispatcher rendererDispatcherIn)
5661 public void render (FieldProjectorTile tile , float partialTicks , MatrixStack matrixStack , IRenderTypeBuffer buffers , int combinedLightIn , int combinedOverlayIn ) {
5762 renderDish (tile , matrixStack , buffers , combinedLightIn , combinedOverlayIn );
5863
59- Optional <BlockPos > c = tile .getCenter ();
60- if (c .isPresent ()) {
61- BlockPos center = c .get ();
62- FieldProjectionSize fieldProjectionSize = tile .getProjectionSize ();
63- int fieldSize = fieldProjectionSize .getSize ();
64+ Optional <FieldProjectionSize > fieldProjectionSize = tile .getFieldSize ();
65+ if (fieldProjectionSize .isPresent ()) {
66+ BlockPos center = tile .getCenter ().get ();
67+ int fieldSize = fieldProjectionSize .get ().getSize ();
6468
6569 AxisAlignedBB cube = new AxisAlignedBB (center ).grow (fieldSize );
6670
6771 renderFaces (tile , matrixStack , buffers , cube , 0 );
6872
73+ // TODO - WIP ARC CODE
74+ // drawProjectorArcs(tile, matrixStack, buffers, cube, fieldSize);
75+
6976 if (tile .isMainProjector ()) {
7077 drawScanLines (tile , matrixStack , buffers , cube , fieldSize );
7178 renderProjectionCube (tile , matrixStack , buffers , cube , fieldSize );
@@ -270,7 +277,63 @@ private void renderProjectionCube(FieldProjectorTile tile, MatrixStack mx, IRend
270277 * Handles drawing the projection arcs that connect the projector blocks to the main projection
271278 * in the center of the crafting area.
272279 */
273- private void drawProjectorArcs () {
280+ private void drawProjectorArcs (FieldProjectorTile tile , MatrixStack mx , IRenderTypeBuffer buffers , AxisAlignedBB cube , int cubeSize ) {
281+
282+ IVertexBuilder builder = buffers .getBuffer (RenderTypesExtensions .getLines ());
283+
284+ double zAngle = ((Math .sin (Math .toDegrees (RenderTickCounter .renderTicks ) / -5000 ) + 1.0d ) / 2 ) * (cube .getYSize ());
285+ double scanHeight = (cube .minY + zAngle );
286+
287+ Vector3d centerPos = cube .getCenter ();
288+
289+ Direction facing = tile .getBlockState ().get (FieldProjectorBlock .FACING );
290+ Quaternion rotation = facing .getRotation ();
291+ Vector3i identity = facing .getDirectionVec ();
292+
293+ mx .push ();
294+
295+ mx .translate (.5 , .5 , .5 );
296+
297+ mx .rotate (rotation );
298+
299+ // 0, 0, 0 is now the edge of the projector's space
300+ addColoredVertex (builder , mx , colorProjectionArc , new Vector3f (0f , 0f , 0f ));
301+
302+ // Now translate to center of projection field
303+ addColoredVertex (builder , mx , colorProjectionArc , new Vector3f ((float ) -scanHeight , 3 , 0 ));
304+
305+ mx .pop ();
306+
307+ // mx.push();
308+ //
309+ // translateRendererToCube(tile, mx, cube, cubeSize);
310+ //
311+ // Vector3f LEFT_ENDPOINT = null;
312+ // Vector3f RIGHT_ENDPOINT = null;
313+ //
314+ // switch(facing) {
315+ // case NORTH:
316+ // LEFT_ENDPOINT = new Vector3f((float) cube.minX, (float) scanHeight, (float) cube.maxZ);
317+ // break;
318+ //
319+ // case SOUTH:
320+ // LEFT_ENDPOINT = new Vector3f((float) cube.maxX, (float) scanHeight, (float) cube.minZ);
321+ // break;
322+ //
323+ // case WEST:
324+ // LEFT_ENDPOINT = new Vector3f((float) cube.maxX, (float) scanHeight, (float) cube.maxZ);
325+ // break;
326+ //
327+ // case EAST:
328+ // LEFT_ENDPOINT = new Vector3f((float) cube.minX, (float) scanHeight, (float) cube.minZ);
329+ // break;
330+ // }
331+ //
332+ // if(LEFT_ENDPOINT != null)
333+ // addColoredVertex(builder, mx, colorProjectionArc, LEFT_ENDPOINT);
334+ //
335+ // mx.pop();
336+
274337// // Render projection planes
275338// double zAngle = ((Math.sin(Math.toDegrees(RenderTickCounter.renderTicks) / -5000) + 1.0d) / 2) * (cube.maxY - cube.minY);
276339// double y3 = y1 + zAngle;
0 commit comments