Skip to content

Commit 658c034

Browse files
authored
Merge pull request #186 from runejs/scene-refactor
refactor: convert most Landscape methods to instance and private
2 parents 350e07e + 5593fbe commit 658c034

File tree

9 files changed

+217
-199
lines changed

9 files changed

+217
-199
lines changed

src/main/java/org/runejs/OldEngine/MapDecompressor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -132,7 +132,7 @@ public static void spawnObject(int objectId, int x, int y, int z, int rotation,
132132
class20 = groundData[plane];
133133
}
134134
if(localY > 0 && localX > 0 && localY < 103 && localX < 103) {
135-
Game.currentScene.landscape.addObject(objectId, localX, localY, z, rotation, type, Game.currentScene, class20);
135+
Game.currentScene.landscape.addObject(objectId, localX, localY, z, rotation, type, class20);
136136
}
137137
}
138138

src/main/java/org/runejs/OldEngine/ObjectDecompressor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -135,7 +135,7 @@ public static void spawnObject(int objectId, int x, int y, int z, int rotation,
135135
class20 = groundData[plane];
136136
}
137137
if(localY > 0 && localX > 0 && localY < 103 && localX < 103) {
138-
Game.currentScene.landscape.addObject(objectId, localX, localY, z, rotation, type, Game.currentScene, class20);
138+
Game.currentScene.landscape.addObject(objectId, localX, localY, z, rotation, type, class20);
139139
}
140140
}
141141

src/main/java/org/runejs/client/Game.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1760,7 +1760,7 @@ public static void handleLoginScreenActions() {
17601760
MovedStatics.gameServerSocket.readDataToBuffer(0, IncomingPackets.incomingPacketSize, IncomingPackets.incomingPacketBuffer.buffer);
17611761
setConfigToDefaults();
17621762
MovedStatics.regionX = -1;
1763-
Landscape.constructMapRegion(false);
1763+
currentScene.landscape.constructMapRegion(false);
17641764
IncomingPackets.opcode = -1;
17651765
}
17661766
} else {
@@ -1918,7 +1918,7 @@ public static void method943(int arg0, TypeFace arg2, int arg3, int arg4) {
19181918
public static void method910() {
19191919
if(true) {
19201920
if (VertexNormal.lowMemory && MovedStatics.onBuildTimePlane != Player.worldLevel)
1921-
Landscape.method789(Player.localPlayer.pathY[0], MovedStatics.regionY, MovedStatics.regionX, Player.localPlayer.pathX[0], Player.worldLevel);
1921+
MovedStatics.method789(Player.localPlayer.pathY[0], MovedStatics.regionY, MovedStatics.regionX, Player.localPlayer.pathX[0], Player.worldLevel);
19221922
else if (MovedStatics.anInt1985 != Player.worldLevel) {
19231923
MovedStatics.anInt1985 = Player.worldLevel;
19241924
Minimap.method299(Player.worldLevel);

src/main/java/org/runejs/client/Landscape.java

Lines changed: 78 additions & 191 deletions
Large diffs are not rendered by default.

src/main/java/org/runejs/client/MovedStatics.java

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3657,4 +3657,91 @@ public static boolean method472(CacheArchive arg1, int arg2) {
36573657
return true;
36583658

36593659
}
3660+
3661+
public static void method789(int chunkLocalX, int chunkY, int chunkX, int chunkLocalY, int level) {
3662+
if(chunkX != regionX || chunkY != regionY || onBuildTimePlane != level && VertexNormal.lowMemory) {
3663+
onBuildTimePlane = level;
3664+
regionX = chunkX;
3665+
if(!VertexNormal.lowMemory)
3666+
onBuildTimePlane = 0;
3667+
regionY = chunkY;
3668+
processGameStatus(25);
3669+
method940(English.loadingPleaseWait, false, null);
3670+
int i = baseY;
3671+
int i_33_ = baseX;
3672+
baseX = (chunkX - 6) * 8;
3673+
int i_34_ = baseX + -i_33_;
3674+
i_33_ = baseX;
3675+
baseY = (-6 + chunkY) * 8;
3676+
int i_35_ = baseY + -i;
3677+
i = baseY;
3678+
for(int i_36_ = 0; i_36_ < 32768; i_36_++) {
3679+
Npc class40_sub5_sub17_sub4_sub2 = Player.npcs[i_36_];
3680+
if(class40_sub5_sub17_sub4_sub2 != null) {
3681+
for(int i_37_ = 0; i_37_ < 10; i_37_++) {
3682+
class40_sub5_sub17_sub4_sub2.pathY[i_37_] -= i_34_;
3683+
class40_sub5_sub17_sub4_sub2.pathX[i_37_] -= i_35_;
3684+
}
3685+
class40_sub5_sub17_sub4_sub2.worldX -= 128 * i_34_;
3686+
class40_sub5_sub17_sub4_sub2.worldY -= i_35_ * 128;
3687+
}
3688+
}
3689+
for(int i_38_ = 0; i_38_ < 2048; i_38_++) {
3690+
Player class40_sub5_sub17_sub4_sub1 = Player.trackedPlayers[i_38_];
3691+
if(class40_sub5_sub17_sub4_sub1 != null) {
3692+
for(int i_39_ = 0; i_39_ < 10; i_39_++) {
3693+
class40_sub5_sub17_sub4_sub1.pathY[i_39_] -= i_34_;
3694+
class40_sub5_sub17_sub4_sub1.pathX[i_39_] -= i_35_;
3695+
}
3696+
class40_sub5_sub17_sub4_sub1.worldY -= 128 * i_35_;
3697+
class40_sub5_sub17_sub4_sub1.worldX -= 128 * i_34_;
3698+
}
3699+
}
3700+
Player.worldLevel = level;
3701+
int i_40_ = 0;
3702+
Player.localPlayer.method787(chunkLocalY, false, chunkLocalX);
3703+
int i_41_ = 104;
3704+
int i_42_ = 1;
3705+
if(i_34_ < 0) {
3706+
i_41_ = -1;
3707+
i_40_ = 103;
3708+
i_42_ = -1;
3709+
}
3710+
int i_43_ = 104;
3711+
int i_44_ = 0;
3712+
int i_45_ = 1;
3713+
if(i_35_ < 0) {
3714+
i_44_ = 103;
3715+
i_43_ = -1;
3716+
i_45_ = -1;
3717+
}
3718+
for(int i_46_ = i_40_; i_41_ != i_46_; i_46_ += i_42_) {
3719+
for(int i_47_ = i_44_; i_43_ != i_47_; i_47_ += i_45_) {
3720+
int i_48_ = i_34_ + i_46_;
3721+
int i_49_ = i_35_ + i_47_;
3722+
for(int i_50_ = 0; i_50_ < 4; i_50_++) {
3723+
if(i_48_ < 0 || i_49_ < 0 || i_48_ >= 104 || i_49_ >= 104)
3724+
groundItems[i_50_][i_46_][i_47_] = null;
3725+
else
3726+
groundItems[i_50_][i_46_][i_47_] = groundItems[i_50_][i_48_][i_49_];
3727+
}
3728+
}
3729+
}
3730+
for(InteractiveObjectTemporary obj = (InteractiveObjectTemporary) interactiveObjectTemporaryNodeCache.peekFirst(); obj != null; obj = (InteractiveObjectTemporary) interactiveObjectTemporaryNodeCache.pollFirst()) {
3731+
obj.y -= i_35_;
3732+
obj.x -= i_34_;
3733+
if(obj.x < 0 || obj.y < 0 || obj.x >= 104 || obj.y >= 104)
3734+
obj.unlink();
3735+
}
3736+
anInt1985 = -1;
3737+
if(destinationX != 0) {
3738+
destinationX -= i_34_;
3739+
Game.destinationY -= i_35_;
3740+
}
3741+
Player.cutsceneActive = false;
3742+
SoundSystem.reset();
3743+
spotAnimQueue.clear();
3744+
projectileQueue.clear();
3745+
}
3746+
}
36603747
}

src/main/java/org/runejs/client/message/handler/rs435/region/LoadConstructedRegionMessageHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,6 @@ public void handle(LoadConstructedRegionInboundMessage message) {
5656
}
5757
}
5858
}
59-
Landscape.method789(chunkLocalX, chunkY, chunkX, chunkLocalY, level);
59+
MovedStatics.method789(chunkLocalX, chunkY, chunkX, chunkLocalY, level);
6060
}
6161
}

src/main/java/org/runejs/client/message/handler/rs435/region/LoadStandardRegionMessageHandler.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,6 @@ public void handle(LoadStandardRegionInboundMessage message) {
5151
}
5252
}
5353

54-
Landscape.method789(chunkLocalX, chunkY, chunkX, chunkLocalY, level);
54+
MovedStatics.method789(chunkLocalX, chunkY, chunkX, chunkLocalY, level);
5555
}
5656
}

src/main/java/org/runejs/client/scene/Scene.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ public class Scene {
3737

3838
public static boolean lowMemory = true;
3939

40-
public final Landscape landscape = new Landscape();
40+
public final Landscape landscape;
4141

4242
public SceneTile[][][] tileArray;
4343
public int[][][] tileOcclusionCycles;
@@ -103,6 +103,7 @@ public class Scene {
103103
private CameraTileVisibility tileVisibilityInfo;
104104

105105
public Scene() {
106+
this.landscape = new Landscape(this);
106107
tileArray = new SceneTile[mapSizeZ][mapSizeX][mapSizeY];
107108
tileOcclusionCycles = new int[mapSizeZ][mapSizeX + 1][mapSizeY + 1];
108109
this.heightMap = this.landscape.tile_height;
@@ -713,7 +714,7 @@ public void remove(InteractiveObject entity) {
713714
}
714715
}
715716

716-
public void renderTile(SceneTile _tile, boolean arg1) {
717+
private void renderTile(SceneTile _tile, boolean arg1) {
717718
tileList.addLast(_tile);
718719
for (; ; ) {
719720
SceneTile groundTile = (SceneTile) tileList.removeFirst();
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package org.runejs.client.util;
2+
3+
import org.runejs.client.media.Rasterizer3D;
4+
5+
/**
6+
* Perlin noise, used in the client for procedural terrain heightmap.
7+
*/
8+
public class PerlinNoise {
9+
public static int get(int x, int y, int scale) {
10+
int muX = x & -1 + scale;
11+
int scaledY = y / scale;
12+
int muY = scale - 1 & y;
13+
int scaledX = x / scale;
14+
int a = randomNoiseWeightedSum(scaledX, scaledY);
15+
int b = randomNoiseWeightedSum(1 + scaledX, scaledY);
16+
int c = randomNoiseWeightedSum(scaledX, 1 + scaledY);
17+
int d = randomNoiseWeightedSum(1 + scaledX, 1 + scaledY);
18+
int i1 = interpolateForPerlin(a, scale, b, true, muX);
19+
int i2 = interpolateForPerlin(c, scale, d, true, muX);
20+
return interpolateForPerlin(i1, scale, i2, true, muY);
21+
}
22+
23+
private static int interpolateForPerlin(int arg0, int arg1, int arg2, boolean arg3, int arg4) {
24+
if (!arg3)
25+
return -109;
26+
int i = 65536 + -Rasterizer3D.cosinetable[1024 * arg4 / arg1] >> 1;
27+
return ((65536 + -i) * arg0 >> 16) + (arg2 * i >> 16);
28+
}
29+
30+
private static int randomNoiseWeightedSum(int arg1, int arg2) {
31+
int i = randomNoise(-1 + arg1, -1 + arg2) + randomNoise(1 + arg1, arg2 - 1) + randomNoise(-1 + arg1, 1 + arg2) + randomNoise(1 + arg1, arg2 + 1);
32+
int i_126_ = randomNoise(arg1 - 1, arg2) + randomNoise(arg1 + 1, arg2) - (-randomNoise(arg1, arg2 - 1) + -randomNoise(arg1, 1 + arg2));
33+
int i_127_ = randomNoise(arg1, arg2);
34+
return i / 16 - (-(i_126_ / 8) - i_127_ / 4);
35+
}
36+
37+
private static int randomNoise(int x, int y) {
38+
int i = 57 * y + x;
39+
i ^= i << 13;
40+
int i_2_ = 1376312589 + (i * i * 15731 + 789221) * i & 0x7fffffff;
41+
return i_2_ >> 19 & 0xff;
42+
}
43+
}

0 commit comments

Comments
 (0)