aboutsummaryrefslogtreecommitdiff
path: root/utils/renderUtils.js
blob: 4398b19cd612030e34e9fe430ea7b6d4fba1315d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
const { f, m } = require("../../mappings/mappings");

const {default:renderBeaconBeam2} = require("../../BeaconBeam/index");
const numberUtils = require("./numberUtils");
const { default: RenderLib2D } = require("./renderLib2d");

if(!GlStateManager){
    var GL11 = Java.type("org.lwjgl.opengl.GL11"); //using var so it goes to global scope
    var GlStateManager = Java.type("net.minecraft.client.renderer.GlStateManager");
}
let ret = {

    /* accepts parameters
     * h  Object = {h:x, s:y, v:z}
     * OR
     * h, s, v
    */
    HSVtoRGB:function (h, s, v) {
        var r, g, b, i, f, p, q, t;
        if (arguments.length === 1) {
            s = h.s, v = h.v, h = h.h;
        }
        i = Math.floor(h * 6);
        f = h * 6 - i;
        p = v * (1 - s);
        q = v * (1 - f * s);
        t = v * (1 - (1 - f) * s);
        switch (i % 6) {
            case 0: r = v, g = t, b = p; break;
            case 1: r = q, g = v, b = p; break;
            case 2: r = p, g = v, b = t; break;
            case 3: r = p, g = q, b = v; break;
            case 4: r = t, g = p, b = v; break;
            case 5: r = v, g = p, b = q; break;
        }
        return {
            r: r * 255,
            g: g * 255,
            b: b * 255
        };
    },
    drawLine:function (x, y, z, x2, y2, z2, r, g, b, thickness=1) {
    
        GL11.glBlendFunc(770, 771);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glLineWidth(thickness);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDepthMask(false);
        GlStateManager.func_179094_E();
    
        Tessellator.begin(3).colorize(r, g, b);
    
        Tessellator.pos(x, y, z);
        Tessellator.pos(x2, y2, z2);
    
        Tessellator.draw();
    
    
        GlStateManager.func_179121_F();
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glDepthMask(true);
        GL11.glDisable(GL11.GL_BLEND);
    },
    drawLineWithDepth:function (x, y, z, x2, y2, z2, r, g, b,t) {
    
        GL11.glBlendFunc(770, 771);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glLineWidth(t);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDepthMask(false);
        GlStateManager.func_179094_E();
    
        Tessellator.begin(3).colorize(r, g, b);
    
        Tessellator.pos(x, y, z);
        Tessellator.pos(x2, y2, z2);
    
        Tessellator.draw();
    
    
        GlStateManager.func_179121_F();
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDepthMask(true);
        GL11.glDisable(GL11.GL_BLEND);
    },
    setupLineSmall: function(width){
        GL11.glBlendFunc(770, 771);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glLineWidth(width);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDepthMask(false);
        GlStateManager.func_179094_E();
    },
    endLineSmall: function(){
        GlStateManager.func_179121_F();
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDepthMask(true);
        GL11.glDisable(GL11.GL_BLEND);
    },
    drawLineSmall:function (x, y, z, x2, y2, z2, r, g, b) {
    
        Tessellator.begin(3).colorize(r, g, b);
    
        Tessellator.pos(x, y, z);
        Tessellator.pos(x2, y2, z2);
    
        Tessellator.draw();
    },
    drawLinePoints: function(locations, r, g, b, thickness=1){
        GL11.glBlendFunc(770, 771);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glLineWidth(thickness);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDepthMask(false);
        GlStateManager.func_179094_E();
    
        Tessellator.begin(3).colorize(r, g, b);
    
        locations.forEach(loc => {
            Tessellator.pos(...loc);
        });
    
        Tessellator.draw();
    
    
        GlStateManager.func_179121_F();
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDepthMask(true);
        GL11.glDisable(GL11.GL_BLEND);
    },
    drawBoxAtBlockNotVisThruWalls:function (x, y, z, colorR, colorG, colorB, w=1, h=1, a=1){
        GL11.glBlendFunc(770, 771);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glLineWidth(3);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GlStateManager.func_179094_E();
    
        x -= 0.005
        y -= 0.005
        z -= 0.005
        w += 0.01
        h += 0.01
        
        Tessellator.begin(3).colorize(colorR, colorG, colorB, a);
            
        Tessellator.pos(x+w,y+h,z+w);
        Tessellator.pos(x+w,y+h,z);
        Tessellator.pos(x,y+h,z);
        Tessellator.pos(x,y+h,z+w);
        Tessellator.pos(x+w,y+h,z+w);
        Tessellator.pos(x+w,y,z+w);
        Tessellator.pos(x+w,y,z);
        Tessellator.pos(x,y,z);
        Tessellator.pos(x,y,z+w);
        Tessellator.pos(x,y,z);
        Tessellator.pos(x,y+h,z);
        Tessellator.pos(x,y,z);
        Tessellator.pos(x+w,y,z);
        Tessellator.pos(x+w,y+h,z);
        Tessellator.pos(x+w,y,z);
        Tessellator.pos(x+w,y,z+w);
        Tessellator.pos(x,y,z+w);
        Tessellator.pos(x,y+h,z+w);
        Tessellator.pos(x+w,y+h,z+w);
    
        Tessellator.draw();
    
        GlStateManager.func_179121_F();
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_BLEND);
    },
    drawBoxAtBlock:function (x, y, z, colorR, colorG, colorB, w=1, h=1, a=1){
    
        GL11.glBlendFunc(770, 771);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glLineWidth(3);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDepthMask(false);
        GlStateManager[m.pushMatrix]()
    
        
        Tessellator.begin(3).colorize(colorR, colorG, colorB, a);
            
        Tessellator.pos(x+w,y+h,z+w);
        Tessellator.pos(x+w,y+h,z);
        Tessellator.pos(x,y+h,z);
        Tessellator.pos(x,y+h,z+w);
        Tessellator.pos(x+w,y+h,z+w);
        Tessellator.pos(x+w,y,z+w);
        Tessellator.pos(x+w,y,z);
        Tessellator.pos(x,y,z);
        Tessellator.pos(x,y,z+w);
        Tessellator.pos(x,y,z);
        Tessellator.pos(x,y+h,z);
        Tessellator.pos(x,y,z);
        Tessellator.pos(x+w,y,z);
        Tessellator.pos(x+w,y+h,z);
        Tessellator.pos(x+w,y,z);
        Tessellator.pos(x+w,y,z+w);
        Tessellator.pos(x,y,z+w);
        Tessellator.pos(x,y+h,z+w);
        Tessellator.pos(x+w,y+h,z+w);
    
        Tessellator.draw();
    
        GlStateManager[m.popMatrix]()
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glDepthMask(true);
        GL11.glDisable(GL11.GL_BLEND);
    },
    drawBoxAtEntity:function (entity, colorR, colorG, colorB, width, height, partialTicks, lineWidth=2, phase=false){
        let x = entity.getX() + ((entity.getX()-entity.getLastX())*partialTicks)
        let y = entity.getY() + ((entity.getY()-entity.getLastY())*partialTicks)
        let z = entity.getZ() + ((entity.getZ()-entity.getLastZ())*partialTicks)
        
        if(width === null){
            width = entity.getWidth()/2
            height = entity.getHeight()
        }else{
            width = width/2
        }
        
    
        GL11.glBlendFunc(770, 771);
        GL11.glEnable(GL11.GL_BLEND);
        GL11.glLineWidth(lineWidth);
        if(phase) GL11.glDisable(GL11.GL_DEPTH_TEST);
        GL11.glDisable(GL11.GL_TEXTURE_2D);
        GlStateManager.func_179094_E();
    
        
        Tessellator.begin(3).colorize(colorR, colorG, colorB);
            
        Tessellator.pos(x+width,y+height,z+width);
        Tessellator.pos(x+width,y+height,z-width);
        Tessellator.pos(x-width,y+height,z-width);
        Tessellator.pos(x-width,y+height,z+width);
        Tessellator.pos(x+width,y+height,z+width);
        Tessellator.pos(x+width,y,z+width);
        Tessellator.pos(x+width,y,z-width);
        Tessellator.pos(x-width,y,z-width);
        Tessellator.pos(x-width,y,z+width);
        Tessellator.pos(x-width,y,z-width);
        Tessellator.pos(x-width,y+height,z-width);
        Tessellator.pos(x-width,y,z-width);
        Tessellator.pos(x+width,y,z-width);
        Tessellator.pos(x+width,y+height,z-width);
        Tessellator.pos(x+width,y,z-width);
        Tessellator.pos(x+width,y,z+width);
        Tessellator.pos(x-width,y,z+width);
        Tessellator.pos(x-width,y+height,z+width);
        Tessellator.pos(x+width,y+height,z+width);
    
        Tessellator.draw();
    
        GlStateManager.func_179121_F();
        GL11.glEnable(GL11.GL_TEXTURE_2D);
        if(phase) GL11.glEnable(GL11.GL_DEPTH_TEST);
        GL11.glDisable(GL11.GL_BLEND);
    },
    drawFilledBox: function(x, y, z, w, h, red, green, blue, alpha, phase) { //FROM RENDERUTILS
        GL11.glDisable(GL11.GL_CULL_FACE);
        if (phase) {
            GL11.glBlendFunc(770, 771);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glLineWidth(2.0);
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glDisable(GL11.GL_DEPTH_TEST);
            GL11.glDepthMask(false);
            GlStateManager.func_179094_E();
        } else {
            GL11.glDisable(GL11.GL_TEXTURE_2D);
            GL11.glBlendFunc(770, 771);
            GL11.glEnable(GL11.GL_BLEND);
            GL11.glLineWidth(2.0);
            GL11.glDepthMask(false);
            GlStateManager.func_179094_E();
        }

        w /= 2;

        Tessellator.begin(GL11.GL_QUADS, false);
        Tessellator.colorize(red, green, blue, alpha);

        Tessellator.translate(x, y, z)
            .pos(w, 0, w)
            .pos(w, 0, -w)
            .pos(-w, 0, -w)
            .pos(-w, 0, w)

            .pos(w, h, w)
            .pos(w, h, -w)
            .pos(-w, h, -w)
            .pos(-w, h, w)

            .pos(-w, h, w)
            .pos(-w, h, -w)
            .pos(-w, 0, -w)
            .pos(-w, 0, w)

            .pos(w, h, w)
            .pos(w, h, -w)
            .pos(w, 0, -w)
            .pos(w, 0, w)

            .pos(w, h, -w)
            .pos(-w, h, -w)
            .pos(-w, 0, -w)
            .pos(w, 0, -w)

            .pos(-w, h, w)
            .pos(w, h, w)
            .pos(w, 0, w)
            .pos(-w, 0, w)
            .draw();

        GL11.glEnable(GL11.GL_CULL_FACE);
        if (phase) {
            GlStateManager.func_179121_F();
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            GL11.glEnable(GL11.GL_DEPTH_TEST);
            GL11.glDepthMask(true);
            GL11.glDisable(GL11.GL_BLEND);
        } else {
            GL11.glEnable(GL11.GL_TEXTURE_2D);
            GlStateManager.func_179121_F();
            GL11.glDepthMask(true);
            GL11.glDisable(GL11.GL_BLEND);
        }
    },
    renderBeaconBeam(x, y, z, r, g, b, alpha, phase){
        renderBeaconBeam2(x, y, z, r, g, b, alpha, !phase)
    },
    drawCoolWaypoint(x, y, z, r, g, b, {name="", showDist=!!name ,phase=false}){
        let distToPlayerSq = (x-Player.getRenderX())**2 + (y-(Player.getRenderY()+Player.getPlayer()[m.getEyeHeight]()))**2 + (z-Player.getRenderZ())**2

        let alpha = Math.min(1,Math.max(0,1-(distToPlayerSq-10000)/12500))

        ret[phase?"drawBoxAtBlock":"drawBoxAtBlockNotVisThruWalls"](x-0.005, y-0.005, z-0.005, r, g, b, 1.01, 1.01, alpha)
        ret.drawFilledBox(x+0.5, y, z+0.5, 1.02, 1.01, r, g, b, 0.25*alpha, phase)
        ret.renderBeaconBeam(x, y+1, z, r, g, b, Math.min(1,Math.max(0,(distToPlayerSq-25)/100))*alpha, false)

        if(name || showDist){
            let distToPlayer = Math.sqrt(distToPlayerSq)

            let distRender = Math.min(distToPlayer,50)

            let loc1 = [x+0.5, y+2+20*distToPlayer/300, z+0.5]
            let loc2 = [x+0.5, y+2+20*distToPlayer/300-10*distToPlayer/300, z+0.5]

            let loc3 = [loc1[0]-Player.getRenderX(), loc1[1]-(Player.getRenderY()+Player.getPlayer()[m.getEyeHeight]()), loc1[2]-Player.getRenderZ()]
            let loc4 = [loc2[0]-Player.getRenderX(), loc2[1]-(Player.getRenderY()+Player.getPlayer()[m.getEyeHeight]()), loc2[2]-Player.getRenderZ()]

            let loc5 = [Player.getRenderX()+loc3[0]/(distToPlayer/distRender), (Player.getRenderY()+Player.getPlayer()[m.getEyeHeight]())+loc3[1]/(distToPlayer/distRender), Player.getRenderZ()+loc3[2]/(distToPlayer/distRender)]
            let loc6 = [Player.getRenderX()+loc4[0]/(distToPlayer/distRender), (Player.getRenderY()+Player.getPlayer()[m.getEyeHeight]())+loc4[1]/(distToPlayer/distRender), Player.getRenderZ()+loc4[2]/(distToPlayer/distRender)]

            if(name) Tessellator.drawString("§a" + name, loc5[0], loc5[1], loc5[2], 0, true, distRender/300, false)
            if(showDist) Tessellator.drawString("§b(" + numberUtils.numberWithCommas(Math.round(distToPlayer)) + "m)", (name?loc6[0]:loc5[0]), (name?loc6[1]:loc5[1]), (name?loc6[2]:loc5[2]), 0, false, distRender/300, false)
        }
    }
}

module.exports = ret