Clean
[esp.git] / src / net / encode / wurmesp / feature / FeatureXRay.java
1 package net.encode.wurmesp.feature;
2
3 import com.wurmonline.client.game.PlayerPosition;
4 import com.wurmonline.mesh.Tiles;
5 import java.awt.Color;
6 import java.util.logging.Level;
7 import java.util.logging.Logger;
8 import net.encode.wurmesp.WurmEspMod;
9 import net.encode.wurmesp.util.RenderUtils;
10 import net.encode.wurmesp.util.XrayColors;
11
12 public class FeatureXRay
13 extends Feature {
14 @Override
15 public void refresh() {
16 if (!this.world.isOwnBodyAdded()) {
17 return;
18 }
19 WurmEspMod._terrain.clear();
20 WurmEspMod._caveBuffer = this.world.getCaveBuffer();
21 PlayerPosition pos = this.world.getPlayer().getPos();
22 int px = pos.getTileX();
23 int py = pos.getTileY();
24 int size = WurmEspMod.xraydiameter;
25 int sx = px - size / 2;
26 int sy = py - size / 2;
27 float ox = this.world.getRenderOriginX();
28 float oy = this.world.getRenderOriginY();
29 for (int x = 0; x < size; ++x) {
30 for (int y = size - 1; y >= 0; --y) {
31 try {
32 int tileX = x + sx;
33 int tileY = y + sy;
34 Tiles.Tile tile = WurmEspMod._caveBuffer.getTileType(tileX, tileY);
35 if (tile == null || !tile.isOreCave()) continue;
36 Color color = XrayColors.getColorFor(tile);
37 float[] colorF = new float[]{(float)color.getRed() / 255.0f, (float)color.getGreen() / 255.0f, (float)color.getBlue() / 255.0f};
38 float curX = (float)(tileX * 4) - ox;
39 float curY = (float)(tileY * 4) - oy;
40 float nextX = (float)((tileX + 1) * 4) - ox;
41 float nextY = (float)((tileY + 1) * 4) - oy;
42 float x0 = curX + 0.2f;
43 float y0 = curY + 0.2f;
44 float x1 = nextX - 0.2f;
45 float y1 = nextY - 0.2f;
46 WurmEspMod._terrain.add(new float[]{x0, y0, x1, y1, colorF[0], colorF[1], colorF[2]});
47 continue;
48 }
49 catch (IllegalArgumentException | SecurityException ex) {
50 Logger.getLogger(FeatureXRay.class.getName()).log(Level.SEVERE, null, ex);
51 }
52 }
53 }
54 }
55
56 @Override
57 public void queue() {
58 if (WurmEspMod._terrain == null) {
59 return;
60 }
61 WurmEspMod._terrain.stream().forEach(t -> {
62 float x0 = t[0];
63 float y0 = t[1];
64 float x1 = t[2];
65 float y1 = t[3];
66
67 float[] color = new float[]{t[4],t[5],t[6], 1.0F};
68 PlayerPosition pos = this.world.getPlayer().getPos();
69
70 float z0 = pos.getH();
71 float z1 = z0 + 3;
72
73 float[] vertexdata = new float[] {
74 x1, z0, y0,
75 x1, z1, y0,
76 x0, z1, y0,
77 x0, z0, y0,
78 x1, z0, y1,
79 x1, z1, y1,
80 x0, z1, y1,
81 x0, z0, y1 };
82
83 int[] indexdata = new int[] { 0, 1, 1, 2, 2, 3, 3, 0, 4, 5, 5, 6, 6, 7, 7, 4, 0, 4, 1, 5, 2, 6, 3, 7 };
84 RenderUtils.renderPrimitiveLines(8, vertexdata, indexdata, this.queuePick, color);
85 });
86 /*
87 if (!this.world.isOwnBodyAdded()) {
88 return;
89 }
90 WurmEspMod._terrain.clear();
91 WurmEspMod._caveBuffer = this.world.getCaveBuffer();
92 PlayerPosition pos = this.world.getPlayer().getPos();
93 int px = pos.getTileX();
94 int py = pos.getTileY();
95 int size = WurmEspMod.xraydiameter;
96 int sx = px - size / 2;
97 int sy = py - size / 2;
98 WorldRender worldRenderer = (WorldRender)ReUtils.getField(this.world, "worldRenderer");
99 CaveRender caveRenderer = (CaveRender)ReUtils.getField(worldRenderer, "caveRenderer");
100 for (int x = 0; x < size; ++x) {
101 for (int y = size - 1; y >= 0; --y) {
102 try {
103 int tileX = x + sx;
104 int tileY = y + sy;
105 for (int side = 0; side < 7; ++side) {
106 IntBuffer intBuffer = IntBuffer.allocate(3);
107 intBuffer.put(tileX);
108 intBuffer.put(tileY);
109 intBuffer.put(side);
110 Class<HitNamesData> cls = HitNamesData.class;
111 Constructor<HitNamesData> constructor = cls.getDeclaredConstructor(IntBuffer.class, Integer.TYPE);
112 constructor.setAccessible(true);
113 HitNamesData hitNames = (HitNamesData)constructor.newInstance(intBuffer, 3);
114 caveRenderer.getPickedWall(hitNames).renderPicked(this.queuePick, RenderState.RENDERSTATE_DEFAULT, com.wurmonline.client.renderer.Color.GREEN);
115 }
116 continue;
117 }
118 catch (IllegalAccessException | IllegalArgumentException | InstantiationException | NoSuchMethodException | SecurityException | InvocationTargetException ex) {
119 Logger.getLogger(FeatureXRay.class.getName()).log(Level.SEVERE, null, ex);
120 }
121 }
122 }*/
123 }
124 }
125