From 4b39e5fab662c8af356df64c28fd18b9baadce87 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 7 Apr 2018 19:31:42 -0400 Subject: [PATCH] Fully implemented teleporters --- core/assets/maps/hole.mmap | Bin 198387 -> 0 bytes core/assets/maps/{space.mmap => trinity.mmap} | Bin 198387 -> 198387 bytes core/assets/shaders/space2.fragment | 5 +- core/assets/version.properties | 2 +- .../mindustry/content/blocks/Blocks.java | 1 + .../anuke/mindustry/content/fx/BlockFx.java | 23 +++++ core/src/io/anuke/mindustry/io/Maps.java | 2 +- .../mindustry/ui/fragments/DebugFragment.java | 6 +- .../blocks/types/distribution/Teleporter.java | 93 +++++++++++++----- .../blocks/types/modules/InventoryModule.java | 11 +++ 10 files changed, 110 insertions(+), 33 deletions(-) delete mode 100644 core/assets/maps/hole.mmap rename core/assets/maps/{space.mmap => trinity.mmap} (86%) diff --git a/core/assets/maps/hole.mmap b/core/assets/maps/hole.mmap deleted file mode 100644 index 37421492654fcdb6e8d8864548780e300b038ff1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 198387 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�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

Ar_(Q#hv&u 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 diff --git a/core/assets/maps/space.mmap b/core/assets/maps/trinity.mmap similarity index 86% rename from core/assets/maps/space.mmap rename to core/assets/maps/trinity.mmap index 86de26f1b6f812fd0d06555b0b3434b69008f903..fee20250e3842f65430fc99b4c4f70c501ea7c2b 100644 GIT binary patch literal 198387 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 aOpib=mH?HD+da=Stulv|mEcmd)&u~&RMKSt diff --git a/core/assets/shaders/space2.fragment b/core/assets/shaders/space2.fragment index f654d312c7..5b9ea44853 100644 --- a/core/assets/shaders/space2.fragment +++ b/core/assets/shaders/space2.fragment @@ -14,7 +14,7 @@ varying vec4 v_color; varying vec2 v_texCoord; const float tau = 6.28318530717958647692; -const float tscl = 0.5; +const float tscl = 0.4; // Gamma correction #define GAMMA (2.2) @@ -34,8 +34,7 @@ float srand(vec2 co){ } vec4 Noise(ivec2 x ){ - vec2 uv = (vec2(x)+0.5)/256.0; - return vec4(srand(uv), srand(uv + vec2(10.0, 0.0)), srand(uv + vec2(10.0, 0.0)), srand(uv + vec2(10.0, 10.0))); + return vec4(srand((vec2(x)+0.5)/256.0)); } void main(){ diff --git a/core/assets/version.properties b/core/assets/version.properties index d26b96c5eb..73b5ed875f 100644 --- a/core/assets/version.properties +++ b/core/assets/version.properties @@ -1,5 +1,5 @@ #Autogenerated file. Do not modify. -#Fri Apr 06 21:25:35 EDT 2018 +#Sat Apr 07 19:29:57 EDT 2018 version=release androidBuildCode=864 name=Mindustry diff --git a/core/src/io/anuke/mindustry/content/blocks/Blocks.java b/core/src/io/anuke/mindustry/content/blocks/Blocks.java index 1627798e5d..6996739d78 100644 --- a/core/src/io/anuke/mindustry/content/blocks/Blocks.java +++ b/core/src/io/anuke/mindustry/content/blocks/Blocks.java @@ -24,6 +24,7 @@ public class Blocks { space = new Floor("space") {{ variants = 0; drawLayer = DrawLayer.space; + solid = true; }}, deepwater = new Floor("deepwater") {{ diff --git a/core/src/io/anuke/mindustry/content/fx/BlockFx.java b/core/src/io/anuke/mindustry/content/fx/BlockFx.java index d3b73f7f14..eb281b6af9 100644 --- a/core/src/io/anuke/mindustry/content/fx/BlockFx.java +++ b/core/src/io/anuke/mindustry/content/fx/BlockFx.java @@ -8,6 +8,7 @@ import io.anuke.ucore.graphics.Draw; import io.anuke.ucore.graphics.Fill; import io.anuke.ucore.graphics.Lines; import io.anuke.ucore.util.Angles; +import io.anuke.ucore.util.Mathf; import static io.anuke.mindustry.Vars.tilesize; @@ -213,5 +214,27 @@ public class BlockFx { Fill.poly(e.x + x, e.y + y, 4, 0.5f+e.fout()*2f, 45); Draw.reset(); }); + }), + teleport = new Effect(60, e -> { + Draw.color(e.color); + Lines.stroke(e.fin()*2f); + Lines.circle(e.x, e.y, 7f + e.fout()*8f); + + Angles.randLenVectors(e.id, 20, 6f + 20f * e.fout(), (x, y) -> { + Lines.lineAngle(e.x + x, e.y + y, Mathf.atan2(x, y), e.fin()*4f + 1f); + }); + + Draw.reset(); + }), + teleportOut = new Effect(20, e -> { + Draw.color(e.color); + Lines.stroke(e.fout()*2f); + Lines.circle(e.x, e.y, 7f + e.fin()*8f); + + Angles.randLenVectors(e.id, 20, 4f + 20f * e.fin(), (x, y) -> { + Lines.lineAngle(e.x + x, e.y + y, Mathf.atan2(x, y), e.fslope()*4f + 1f); + }); + + Draw.reset(); }); } diff --git a/core/src/io/anuke/mindustry/io/Maps.java b/core/src/io/anuke/mindustry/io/Maps.java index 14986f13e9..c58e795aa5 100644 --- a/core/src/io/anuke/mindustry/io/Maps.java +++ b/core/src/io/anuke/mindustry/io/Maps.java @@ -17,7 +17,7 @@ import static io.anuke.mindustry.Vars.mapExtension; public class Maps implements Disposable{ /**List of all built-in maps.*/ - private static final String[] defaultMapNames = {"test", "space", "hole"}; + private static final String[] defaultMapNames = {"test", "trinity"}; /**Tile format version.*/ private static final int version = 0; diff --git a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java index 4101664fb8..2d4b82ba21 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/DebugFragment.java @@ -2,10 +2,10 @@ package io.anuke.mindustry.ui.fragments; import com.badlogic.gdx.Gdx; import com.badlogic.gdx.files.FileHandle; -import io.anuke.mindustry.content.fx.ExplosionFx; +import io.anuke.mindustry.content.UnitTypes; +import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.entities.Player; import io.anuke.mindustry.entities.units.BaseUnit; -import io.anuke.mindustry.content.UnitTypes; import io.anuke.mindustry.game.Team; import io.anuke.mindustry.net.Net; import io.anuke.ucore.core.Effects; @@ -53,7 +53,7 @@ public class DebugFragment implements Fragment { row(); new button("blocks", "toggle", () -> showBlockDebug = !showBlockDebug); row(); - new button("effect", () -> Effects.effect(ExplosionFx.explosion, player)); + new button("effect", () -> Effects.effect(BlockFx.teleport, player)); row(); new button("wave", () -> state.wavetime = 0f); row(); diff --git a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java index e37df9e5e7..f609003936 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/distribution/Teleporter.java @@ -3,11 +3,12 @@ package io.anuke.mindustry.world.blocks.types.distribution; import com.badlogic.gdx.graphics.Color; import com.badlogic.gdx.utils.Array; import com.badlogic.gdx.utils.ObjectSet; -import io.anuke.mindustry.content.fx.Fx; +import io.anuke.mindustry.content.fx.BlockFx; import io.anuke.mindustry.entities.TileEntity; import io.anuke.mindustry.resource.Item; import io.anuke.mindustry.world.Tile; import io.anuke.mindustry.world.blocks.types.PowerBlock; +import io.anuke.ucore.core.Effects; import io.anuke.ucore.core.Effects.Effect; import io.anuke.ucore.core.Timers; import io.anuke.ucore.graphics.Draw; @@ -28,6 +29,8 @@ public class Teleporter extends PowerBlock{ Color.PURPLE, Color.GOLD, Color.PINK, Color.LIGHT_GRAY}; public static final int colors = colorArray.length; + protected int timerTeleport = timers++; + private static ObjectSet[] teleporters = new ObjectSet[colors]; private static Color color = new Color(); private static byte lastColor = 0; @@ -35,8 +38,10 @@ public class Teleporter extends PowerBlock{ private Array removal = new Array<>(); private Array returns = new Array<>(); - protected float warmupTime = 80f; - protected Effect teleportEffect = Fx.none; + protected float warmupTime = 60f; + protected float teleportMax = 400f; + protected Effect teleportEffect = BlockFx.teleport; + protected Effect teleportOutEffect = BlockFx.teleportOut; static{ for(int i = 0; i < colors; i ++){ @@ -51,7 +56,7 @@ public class Teleporter extends PowerBlock{ health = 80; powerCapacity = 30f; size = 3; - itemCapacity = 150; + itemCapacity = 100; } @Override @@ -77,45 +82,39 @@ public class Teleporter extends PowerBlock{ @Override public void draw(Tile tile){ TeleporterEntity entity = tile.entity(); + float time = entity.time; super.draw(tile); - Color target = colorArray[entity.color]; - float ss = 0.5f; - float bs = 0.2f; - - Draw.color(Hue.shift(Hue.multiply(color.set(target), 1, ss), 2, 0)); + Draw.color(getColor(tile, 0)); Draw.rect("teleporter-top", tile.drawx(), tile.drawy()); - //Draw.color(Palette.portal); - Draw.color(Hue.shift(Hue.multiply(color.set(target), 1, ss), 2, 0)); + Draw.color(getColor(tile, 0)); - Fill.circle(tile.drawx(), tile.drawy(), 7f + Mathf.absin(Timers.time()+55, 8f, 1f)); + Fill.circle(tile.drawx(), tile.drawy(), 7f + Mathf.absin(time+55, 8f, 1f)); - //Draw.color(Palette.portalDark); - Draw.color(Hue.shift(Hue.multiply(color.set(target), 1, ss), 2, -bs)); + Draw.color(getColor(tile, -1)); - Fill.circle(tile.drawx(), tile.drawy(), 2f + Mathf.absin(Timers.time(), 7f, 3f)); + Fill.circle(tile.drawx(), tile.drawy(), 2f + Mathf.absin(time, 7f, 3f)); for(int i = 0; i < 11; i ++){ Lines.swirl(tile.drawx(), tile.drawy(), - 2f + i/3f + Mathf.sin(Timers.time() - i *75, 20f + i, 3f), - 0.3f + Mathf.sin(Timers.time() + i *33, 10f + i, 0.1f), - Timers.time() * (1f + Mathf.randomSeedRange(i + 1, 1f)) + Mathf.randomSeedRange(i, 360f)); + 2f + i/3f + Mathf.sin(time - i *75, 20f + i, 3f), + 0.3f + Mathf.sin(time + i *33, 10f + i, 0.1f), + time * (1f + Mathf.randomSeedRange(i + 1, 1f)) + Mathf.randomSeedRange(i, 360f)); } - //Draw.color(Palette.portalLight); - Draw.color(Hue.shift(Hue.multiply(color.set(target), 1, ss), 2, bs)); + Draw.color(getColor(tile, 1)); Lines.stroke(2f); - Lines.circle(tile.drawx(), tile.drawy(), 7f + Mathf.absin(Timers.time()+55, 8f, 1f)); + Lines.circle(tile.drawx(), tile.drawy(), 7f + Mathf.absin(time+55, 8f, 1f)); Lines.stroke(1f); for(int i = 0; i < 11; i ++){ Lines.swirl(tile.drawx(), tile.drawy(), - 3f + i/3f + Mathf.sin(Timers.time() + i *93, 20f + i, 3f), - 0.2f + Mathf.sin(Timers.time() + i *33, 10f + i, 0.1f), - Timers.time() * (1f + Mathf.randomSeedRange(i + 1, 1f)) + Mathf.randomSeedRange(i, 360f)); + 3f + i/3f + Mathf.sin(time + i *93, 20f + i, 3f), + 0.2f + Mathf.sin(time + i *33, 10f + i, 0.1f), + time * (1f + Mathf.randomSeedRange(i + 1, 1f)) + Mathf.randomSeedRange(i, 360f)); } Draw.reset(); @@ -131,8 +130,39 @@ public class Teleporter extends PowerBlock{ tryDump(tile); } - if(entity.inventory.totalItems() == itemCapacity && entity.power.amount >= powerCapacity){ + if(entity.teleporting){ + entity.speedScl = Mathf.lerpDelta(entity.speedScl, 2f, 0.01f); + }else{ + entity.speedScl = Mathf.lerpDelta(entity.speedScl, 1f, 0.04f); + } + entity.time += Timers.delta()*entity.speedScl; + + if(entity.inventory.totalItems() == itemCapacity && entity.power.amount >= powerCapacity && + entity.timer.get(timerTeleport, teleportMax)){ + Array testLinks = findLinks(tile); + + if(testLinks.size == 0) return; + + entity.teleporting = true; + + Effects.effect(teleportEffect, getColor(tile, 0), tile.drawx(), tile.drawy()); + Timers.run(warmupTime, () -> { + Array links = findLinks(tile); + + for(Tile other : links){ + int canAccept = itemCapacity - other.entity.inventory.totalItems(); + int total = entity.inventory.totalItems(); + if(total == 0) break; + Effects.effect(teleportOutEffect, getColor(tile, 0), other.drawx(), other.drawy()); + for(int i = 0; i < canAccept && i < total; i ++){ + other.entity.inventory.addItem(entity.inventory.takeItem(), 1); + } + } + Effects.effect(teleportOutEffect, getColor(tile, 0), tile.drawx(), tile.drawy()); + entity.power.amount = 0f; + entity.teleporting = false; + }); } } @@ -180,6 +210,16 @@ public class Teleporter extends PowerBlock{ public TileEntity getEntity(){ return new TeleporterEntity(); } + + private Color getColor(Tile tile, int shift){ + TeleporterEntity entity = tile.entity(); + + Color target = colorArray[entity.color]; + float ss = 0.5f; + float bs = 0.2f; + + return Hue.shift(Hue.multiply(color.set(target), 1, ss), 2, shift * bs + (entity.speedScl - 1f)/3f); + } private Array findLinks(Tile tile){ TeleporterEntity entity = tile.entity(); @@ -209,6 +249,9 @@ public class Teleporter extends PowerBlock{ public static class TeleporterEntity extends TileEntity{ public byte color = 0; + public boolean teleporting; + public float speedScl = 1f; + public float time; @Override public void write(DataOutputStream stream) throws IOException{ diff --git a/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java b/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java index 195461c469..1928a87714 100644 --- a/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java +++ b/core/src/io/anuke/mindustry/world/blocks/types/modules/InventoryModule.java @@ -12,6 +12,7 @@ import java.util.Arrays; public class InventoryModule extends BlockModule{ public int[] items = new int[Item.getAllItems().size]; + //TODO optimize! public int totalItems(){ int sum = 0; for(int i = 0; i < items.length; i ++){ @@ -20,6 +21,16 @@ public class InventoryModule extends BlockModule{ return sum; } + public Item takeItem(){ + for(int i = 0; i < items.length; i ++){ + if(items[i] > 0){ + items[i] --; + return Item.getByID(i); + } + } + return null; + } + public int getItem(Item item){ return items[item.id]; }