mixins: fix duplicate spawn events for large gameobjects
This commit is contained in:
@@ -76,6 +76,9 @@ public abstract class RSTileMixin implements RSTile
|
|||||||
@Shadow("clientInstance")
|
@Shadow("clientInstance")
|
||||||
private static RSClient client;
|
private static RSClient client;
|
||||||
|
|
||||||
|
@Inject
|
||||||
|
private static RSGameObject lastGameObject;
|
||||||
|
|
||||||
@Inject
|
@Inject
|
||||||
private static RSDeque[][][] lastGroundItems = new RSDeque[Constants.MAX_Z][Constants.SCENE_SIZE][Constants.SCENE_SIZE];
|
private static RSDeque[][][] lastGroundItems = new RSDeque[Constants.MAX_Z][Constants.SCENE_SIZE][Constants.SCENE_SIZE];
|
||||||
|
|
||||||
@@ -234,12 +237,26 @@ public abstract class RSTileMixin implements RSTile
|
|||||||
// Update previous object to current
|
// Update previous object to current
|
||||||
previousGameObjects[idx] = current;
|
previousGameObjects[idx] = current;
|
||||||
|
|
||||||
|
// Last game object
|
||||||
|
RSGameObject last = lastGameObject;
|
||||||
|
|
||||||
|
// Update last game object
|
||||||
|
lastGameObject = current;
|
||||||
|
|
||||||
// Duplicate event, return
|
// Duplicate event, return
|
||||||
if (current == previous)
|
if (current == previous)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (current != null && current == last)
|
||||||
|
{
|
||||||
|
// When >1 tile objects are added to the scene, the same GameObject is added to
|
||||||
|
// multiple tiles. We keep lastGameObject to prevent duplicate spawn events from
|
||||||
|
// firing for these objects.
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
// actors, projectiles, and graphics objects are added and removed from the scene each frame as GameObjects,
|
// actors, projectiles, and graphics objects are added and removed from the scene each frame as GameObjects,
|
||||||
// so ignore them.
|
// so ignore them.
|
||||||
boolean currentInvalid = false, prevInvalid = false;
|
boolean currentInvalid = false, prevInvalid = false;
|
||||||
|
|||||||
Reference in New Issue
Block a user