From 8f99530795b4870b7dd165d2b55f6912a82a44d9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 15 Nov 2018 12:37:07 -0500 Subject: [PATCH] Fix for off-screen players and laggy interpolation --- core/src/io/anuke/mindustry/core/NetClient.java | 2 +- core/src/io/anuke/mindustry/core/NetServer.java | 2 +- core/src/io/anuke/mindustry/entities/Player.java | 6 ++++++ .../anuke/mindustry/entities/traits/SyncTrait.java | 14 +++++++++++++- 4 files changed, 21 insertions(+), 3 deletions(-) diff --git a/core/src/io/anuke/mindustry/core/NetClient.java b/core/src/io/anuke/mindustry/core/NetClient.java index 12a644687d..748b0fc869 100644 --- a/core/src/io/anuke/mindustry/core/NetClient.java +++ b/core/src/io/anuke/mindustry/core/NetClient.java @@ -45,7 +45,7 @@ import static io.anuke.mindustry.Vars.*; public class NetClient extends Module{ private final static float dataTimeout = 60 * 18; private final static float playerSyncTime = 2; - private final static float viewScale = 1.75f; + private final static float viewScale = 2f; private Timer timer = new Timer(5); /**Whether the client is currently connecting.*/ diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 756da10efe..9e00ecf130 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -494,7 +494,7 @@ public class NetServer extends Module{ //check for syncable groups for(EntityGroup group : Entities.getAllGroups()){ if(group.isEmpty() || !(group.all().get(0) instanceof SyncTrait)) continue; - //clipping is done by represntatives + //clipping is done by representatives SyncTrait represent = (SyncTrait) group.all().get(0); //make sure mapping is enabled for this group diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 6d336b6fe6..df2686d7e2 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -809,6 +809,12 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra //region read and write methods + + @Override + public boolean isClipped(){ + return false; + } + @Override public void writeSave(DataOutput stream) throws IOException{ stream.writeBoolean(isLocal); diff --git a/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java b/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java index fff2468020..4dd24deb88 100644 --- a/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/SyncTrait.java @@ -1,7 +1,9 @@ package io.anuke.mindustry.entities.traits; import io.anuke.mindustry.net.Interpolator; +import io.anuke.ucore.core.Core; import io.anuke.ucore.entities.trait.Entity; +import io.anuke.ucore.util.Tmp; import java.io.DataInput; import java.io.DataOutput; @@ -24,8 +26,18 @@ public interface SyncTrait extends Entity, TypeTrait{ /**Interpolate entity position only. Override if you need to interpolate rotations or other values.*/ default void interpolate(){ - if(getInterpolator() == null) + if(getInterpolator() == null){ throw new RuntimeException("This entity must have an interpolator to interpolate()!"); + } + + if(isClipped()){ + //move off screen when no longer in bounds + if(!Tmp.r1.setSize(Core.camera.viewportWidth * Core.camera.zoom, Core.camera.viewportHeight * Core.camera.zoom) + .setCenter(Core.camera.position.x, Core.camera.position.y).contains(getX(), getY())){ + set(-99999f, -99999f); + return; + } + } getInterpolator().update();