From 2b58bd5bd8499dd542227a8a6596f58311561a5a Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 11 Jul 2018 12:19:21 -0400 Subject: [PATCH] Optimizations --- build.gradle | 2 +- core/assets/shaders/outline.fragment | 31 ++++--------- .../src/io/anuke/mindustry/core/Renderer.java | 6 +-- .../anuke/mindustry/core/ThreadHandler.java | 11 ----- .../io/anuke/mindustry/entities/Player.java | 2 +- .../mindustry/entities/units/FlyingUnit.java | 2 +- .../mindustry/entities/units/types/Drone.java | 2 +- .../mindustry/graphics/BlockRenderer.java | 2 +- .../io/anuke/mindustry/graphics/Trail.java | 7 +-- .../io/anuke/mindustry/ui/MobileButton.java | 3 +- .../io/anuke/kryonet/DefaultThreadImpl.java | 44 ------------------- 11 files changed, 21 insertions(+), 91 deletions(-) diff --git a/build.gradle b/build.gradle index 2181519448..53409d95cd 100644 --- a/build.gradle +++ b/build.gradle @@ -27,7 +27,7 @@ allprojects { gdxVersion = '1.9.8' roboVMVersion = '2.3.0' aiVersion = '1.8.1' - uCoreVersion = 'e1749b8798' + uCoreVersion = '7673041e62' getVersionString = { String buildVersion = getBuildVersion() diff --git a/core/assets/shaders/outline.fragment b/core/assets/shaders/outline.fragment index 1c6fdd5b28..46f6f6872d 100644 --- a/core/assets/shaders/outline.fragment +++ b/core/assets/shaders/outline.fragment @@ -3,6 +3,8 @@ precision mediump float; precision mediump int; #endif +#define SPACE 1.0 + uniform sampler2D u_texture; uniform vec4 u_color; @@ -11,30 +13,15 @@ uniform vec2 u_texsize; varying vec4 v_color; varying vec2 v_texCoord; -bool id(vec4 v){ - return v.a > 0.1; -} - void main() { - - vec2 T = v_texCoord.xy; - vec2 v = vec2(1.0/u_texsize.x, 1.0/u_texsize.y); - bool any = false; + vec4 c = texture2D(u_texture, v_texCoord.xy); - float step = 1.0; - - vec4 c = texture2D(u_texture, T); - - if(texture2D(u_texture, T).a < 0.1 && - (id(texture2D(u_texture, T + vec2(0, step) * v)) || id(texture2D(u_texture, T + vec2(0, -step) * v)) || - id(texture2D(u_texture, T + vec2(step, 0) * v)) || id(texture2D(u_texture, T + vec2(-step, 0) * v)))) - any = true; - - if(any){ - gl_FragColor = u_color; - }else{ - gl_FragColor = c * v_color; - } + gl_FragColor = mix(c * v_color, u_color, + (1.0-step(0.1, texture2D(u_texture, v_texCoord.xy).a)) * + step(0.1, texture2D(u_texture, v_texCoord.xy + vec2(0, SPACE) * v).a + + texture2D(u_texture, v_texCoord.xy + vec2(0, -SPACE) * v).a + + texture2D(u_texture, v_texCoord.xy + vec2(SPACE, 0) * v).a + + texture2D(u_texture, v_texCoord.xy + vec2(-SPACE, 0) * v).a)); } diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index dfa84d2041..dce53892cf 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -253,7 +253,7 @@ public class Renderer extends RendererModule{ } private void drawFlyerShadows(){ - Graphics.surface(effectSurface); + Graphics.surface(effectSurface, true, false); float trnsX = 12, trnsY = -13; @@ -263,12 +263,12 @@ public class Renderer extends RendererModule{ for(EntityGroup group : unitGroups){ if(!group.isEmpty()){ - drawAndInterpolate(group, Unit::isFlying, Unit::drawShadow); + drawAndInterpolate(group, unit -> unit.isFlying() && !unit.isDead(), Unit::drawShadow); } } if(!playerGroup.isEmpty()){ - drawAndInterpolate(playerGroup, Unit::isFlying, Unit::drawShadow); + drawAndInterpolate(playerGroup, unit -> unit.isFlying() && !unit.isDead(), Unit::drawShadow); } Graphics.end(); diff --git a/core/src/io/anuke/mindustry/core/ThreadHandler.java b/core/src/io/anuke/mindustry/core/ThreadHandler.java index e127b94941..66baa64fa2 100644 --- a/core/src/io/anuke/mindustry/core/ThreadHandler.java +++ b/core/src/io/anuke/mindustry/core/ThreadHandler.java @@ -4,10 +4,6 @@ import com.badlogic.gdx.Gdx; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.TimeUtils; import io.anuke.ucore.core.Timers; -import io.anuke.ucore.entities.Entities; -import io.anuke.ucore.entities.EntityGroup; -import io.anuke.ucore.entities.EntityGroup.ArrayContainer; -import io.anuke.ucore.entities.trait.Entity; import io.anuke.ucore.util.Log; import static io.anuke.mindustry.Vars.control; @@ -89,9 +85,6 @@ public class ThreadHandler { public void setEnabled(boolean enabled){ if(enabled){ logic.doUpdate = false; - for(EntityGroup group : Entities.getAllGroups()){ - impl.switchContainer(group); - } Timers.runTask(2f, () -> { impl.start(this::runLogic); this.enabled = true; @@ -99,9 +92,6 @@ public class ThreadHandler { }else{ this.enabled = false; impl.stop(); - for(EntityGroup group : Entities.getAllGroups()){ - group.setContainer(new ArrayContainer<>()); - } Timers.runTask(2f, () -> { logic.doUpdate = true; }); @@ -175,6 +165,5 @@ public class ThreadHandler { void stop(); void wait(Object object) throws InterruptedException; void notify(Object object); - void switchContainer(EntityGroup group); } } diff --git a/core/src/io/anuke/mindustry/entities/Player.java b/core/src/io/anuke/mindustry/entities/Player.java index 4cc3b3cf79..bd88c5b98c 100644 --- a/core/src/io/anuke/mindustry/entities/Player.java +++ b/core/src/io/anuke/mindustry/entities/Player.java @@ -374,7 +374,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra float wobblyness = 0.6f; trail.update(x + Angles.trnsx(rotation + 180f, 5f) + Mathf.range(wobblyness), y + Angles.trnsy(rotation + 180f, 5f) + Mathf.range(wobblyness)); - trail.draw(mech.trailColor, mech.trailColor, 5f * (isFlying() ? 1f : boostHeat)); + trail.draw(mech.trailColor, 5f * (isFlying() ? 1f : boostHeat)); }else{ trail.clear(); } diff --git a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java index 7a65787501..b4353ca108 100644 --- a/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java +++ b/core/src/io/anuke/mindustry/entities/units/FlyingUnit.java @@ -76,7 +76,7 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{ @Override public void drawOver() { - trail.draw(Palette.lightTrail, Palette.lightTrail, 5f); + trail.draw(Palette.lightTrail, 5f); } @Override diff --git a/core/src/io/anuke/mindustry/entities/units/types/Drone.java b/core/src/io/anuke/mindustry/entities/units/types/Drone.java index e814aef0a5..ac004b943f 100644 --- a/core/src/io/anuke/mindustry/entities/units/types/Drone.java +++ b/core/src/io/anuke/mindustry/entities/units/types/Drone.java @@ -149,7 +149,7 @@ public class Drone extends FlyingUnit implements BuilderTrait { @Override public void drawOver() { - trail.draw(Palette.lightTrail, Palette.lightTrail, 3f); + trail.draw(Palette.lightTrail, 3f); TargetTrait entity = target; diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java index 86e01d8300..7a898eb72f 100644 --- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java @@ -57,7 +57,7 @@ public class BlockRenderer{ int expandr = 4; - Graphics.surface(renderer.effectSurface); + Graphics.surface(renderer.effectSurface, true, false); int avgx = Mathf.scl(camera.position.x, tilesize); int avgy = Mathf.scl(camera.position.y, tilesize); diff --git a/core/src/io/anuke/mindustry/graphics/Trail.java b/core/src/io/anuke/mindustry/graphics/Trail.java index 04389cd44b..0a21f06d3e 100644 --- a/core/src/io/anuke/mindustry/graphics/Trail.java +++ b/core/src/io/anuke/mindustry/graphics/Trail.java @@ -40,7 +40,8 @@ public class Trail { points.clear(); } - public synchronized void draw(Color start, Color end, float stroke){ + public synchronized void draw(Color color, float stroke){ + Draw.color(color); for(int i = 0; i < points.size - 2; i += 2){ float x = points.get(i); @@ -49,8 +50,6 @@ public class Trail { float y2 = points.get(i + 3); float s = Mathf.clamp((float)(i) / points.size); - Draw.color(start, end, s); - Lines.stroke(s * stroke); Lines.line(x, y, x2, y2); } @@ -59,8 +58,6 @@ public class Trail { Fill.circle(points.get(points.size-2), points.get(points.size-1), stroke/2f); } - Draw.color(start); - Draw.reset(); } } diff --git a/core/src/io/anuke/mindustry/ui/MobileButton.java b/core/src/io/anuke/mindustry/ui/MobileButton.java index 6d7f8211d5..c2d7585c80 100644 --- a/core/src/io/anuke/mindustry/ui/MobileButton.java +++ b/core/src/io/anuke/mindustry/ui/MobileButton.java @@ -1,5 +1,6 @@ package io.anuke.mindustry.ui; +import com.badlogic.gdx.utils.Align; import io.anuke.ucore.function.Listenable; import io.anuke.ucore.scene.ui.ImageButton; @@ -10,6 +11,6 @@ public class MobileButton extends ImageButton { resizeImage(isize); clicked(listener); row(); - add(text).growX().wrap(); + add(text).growX().wrap().center().get().setAlignment(Align.center, Align.center); } } diff --git a/kryonet/src/io/anuke/kryonet/DefaultThreadImpl.java b/kryonet/src/io/anuke/kryonet/DefaultThreadImpl.java index 7e2b8670f6..ff2d80c4b2 100644 --- a/kryonet/src/io/anuke/kryonet/DefaultThreadImpl.java +++ b/kryonet/src/io/anuke/kryonet/DefaultThreadImpl.java @@ -1,14 +1,8 @@ package io.anuke.kryonet; import io.anuke.mindustry.core.ThreadHandler.ThreadProvider; -import io.anuke.ucore.entities.EntityGroup; -import io.anuke.ucore.entities.EntityGroup.EntityContainer; -import io.anuke.ucore.entities.trait.Entity; import io.anuke.ucore.util.Log; -import java.util.Iterator; -import java.util.concurrent.CopyOnWriteArrayList; - public class DefaultThreadImpl implements ThreadProvider { private Thread thread; @@ -54,42 +48,4 @@ public class DefaultThreadImpl implements ThreadProvider { object.notify(); } - @Override - public void switchContainer(EntityGroup group) { - group.setContainer(new ConcurrentContainer<>()); - } - - static class ConcurrentContainer implements EntityContainer{ - private CopyOnWriteArrayList list = new CopyOnWriteArrayList<>(); - - @Override - public int size() { - return list.size(); - } - - @Override - public void add(T item) { - list.add(item); - } - - @Override - public void clear() { - list.clear(); - } - - @Override - public void remove(T item) { - list.remove(item); - } - - @Override - public T get(int index) { - return list.get(index); - } - - @Override - public Iterator iterator() { - return list.iterator(); - } - } }