From 4b428c6636b8ebbe9933510163c08f033f2e3f44 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 20 Oct 2019 14:06:43 -0400 Subject: [PATCH] Bugfixes --- core/assets/bundles/bundle.properties | 3 +- .../entities/traits/BuilderTrait.java | 2 +- .../io/anuke/mindustry/game/Schematics.java | 24 ++++++--- .../anuke/mindustry/input/DesktopInput.java | 3 +- .../ui/dialogs/SchematicsDialog.java | 1 + .../mindustry/world/blocks/Autotiler.java | 20 +++---- .../world/blocks/distribution/Conduit.java | 2 +- .../world/blocks/distribution/Conveyor.java | 2 +- .../mindustry/desktop/steam/SWorkshop.java | 54 +++++++++++++------ 9 files changed, 71 insertions(+), 40 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 226fbf326f..3996812ecf 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -261,7 +261,8 @@ map.invalid = Error loading map: corrupted or invalid map file. workshop.update = Update Item workshop.error = Error fetching workshop details: {0} map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up! -map.menu = Select what you would like to do with this map. +workshop.menu = Select what you would like to do with this item. +workshop.info = Item Info changelog = Changelog (optional): eula = Steam EULA missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. diff --git a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java index 482bfb653f..71caeec3d4 100644 --- a/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java +++ b/core/src/io/anuke/mindustry/entities/traits/BuilderTrait.java @@ -283,7 +283,7 @@ public interface BuilderTrait extends Entity, TeamTrait{ /** Last progress.*/ public float progress; /** Whether construction has started for this request.*/ - public boolean initialized; + public boolean initialized, worldContext = true; /** Visual scale. Used only for rendering.*/ public float animScale = 0f; diff --git a/core/src/io/anuke/mindustry/game/Schematics.java b/core/src/io/anuke/mindustry/game/Schematics.java index 768b12656c..a81e10c6fb 100644 --- a/core/src/io/anuke/mindustry/game/Schematics.java +++ b/core/src/io/anuke/mindustry/game/Schematics.java @@ -64,7 +64,7 @@ public class Schematics implements Loadable{ all.sort(); Core.app.post(() -> { - shadowBuffer = new FrameBuffer(maxSchematicSize + padding + 2, maxSchematicSize + padding + 2); + shadowBuffer = new FrameBuffer(maxSchematicSize + padding + 8, maxSchematicSize + padding + 8); }); } @@ -162,6 +162,7 @@ public class Schematics implements Loadable{ //draw requests requests.each(req -> { req.animScale = 1f; + req.worldContext = false; req.block.drawRequestRegion(req, requests::each); }); @@ -190,8 +191,11 @@ public class Schematics implements Loadable{ public void add(Schematic schematic){ all.add(schematic); try{ - write(schematic, schematicDirectory.child(Time.millis() + "." + schematicExtension)); - }catch(IOException e){ + FileHandle file = schematicDirectory.child(Time.millis() + "." + schematicExtension); + write(schematic, file); + schematic.file = file; + }catch(Exception e){ + ui.showException(e); Log.err(e); } } @@ -216,6 +220,8 @@ public class Schematics implements Loadable{ x2 = result.x2; y2 = result.y2; + int ox = x, oy = y, ox2 = x2, oy2 = y2; + Array tiles = new Array<>(); int minx = x2, miny = y2, maxx = x, maxy = y; @@ -247,17 +253,19 @@ public class Schematics implements Loadable{ int width = x2 - x + 1, height = y2 - y + 1; int offsetX = -x, offsetY = -y; - for(int cx = x; cx <= x2; cx++){ - for(int cy = y; cy <= y2; cy++){ - Tile tile = world.tile(cx, cy); + IntSet counted = new IntSet(); + for(int cx = ox; cx <= ox2; cx++){ + for(int cy = oy; cy <= oy2; cy++){ + Tile tile = world.ltile(cx, cy); - if(tile != null && tile.entity != null){ + if(tile != null && tile.entity != null && !counted.contains(tile.pos())){ int config = tile.entity.config(); if(tile.block().posConfig){ config = Pos.get(Pos.x(config) + offsetX, Pos.y(config) + offsetY); } - tiles.add(new Stile(tile.block(), cx + offsetX, cy + offsetY, config, tile.rotation())); + tiles.add(new Stile(tile.block(), tile.x + offsetX, tile.y + offsetY, config, tile.rotation())); + counted.add(tile.pos()); } } } diff --git a/core/src/io/anuke/mindustry/input/DesktopInput.java b/core/src/io/anuke/mindustry/input/DesktopInput.java index f167e99311..e77d15838f 100644 --- a/core/src/io/anuke/mindustry/input/DesktopInput.java +++ b/core/src/io/anuke/mindustry/input/DesktopInput.java @@ -73,7 +73,7 @@ public class DesktopInput extends InputHandler{ ui.showInfoFade("$schematic.saved"); ui.schematics.showInfo(lastSchematic); }); - }).colspan(2).size(250f, 50f); + }).colspan(2).size(250f, 50f).disabled(f -> lastSchematic == null || lastSchematic.file != null); }); }).margin(6f); }); @@ -175,6 +175,7 @@ public class DesktopInput extends InputHandler{ if(mode != none){ selectRequests.clear(); + lastSchematic = null; } if(player.isShooting && !canShoot()){ diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SchematicsDialog.java index 83e1a63404..67a74f8850 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SchematicsDialog.java @@ -194,6 +194,7 @@ public class SchematicsDialog extends FloatingDialog{ t.addImageTextButton("$schematic.shareworkshop", Icon.wikiSmall, style, () -> platform.publish(s)).marginLeft(12f); t.row(); + dialog.hide(); } t.addImageTextButton("$schematic.copy", Icon.copySmall, style, () -> { dialog.hide(); diff --git a/core/src/io/anuke/mindustry/world/blocks/Autotiler.java b/core/src/io/anuke/mindustry/world/blocks/Autotiler.java index 3256a47178..4ee4d938fb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/Autotiler.java +++ b/core/src/io/anuke/mindustry/world/blocks/Autotiler.java @@ -33,20 +33,20 @@ public interface Autotiler{ } }); - return buildBlending(req.tile(), req.rotation, directionals); + return buildBlending(req.tile(), req.rotation, directionals, req.worldContext); } - default int[] buildBlending(Tile tile, int rotation, BuildRequest[] directional){ + default int[] buildBlending(Tile tile, int rotation, BuildRequest[] directional, boolean world){ int[] blendresult = AutotilerHolder.blendresult; blendresult[0] = 0; blendresult[1] = blendresult[2] = 1; int num = - (blends(tile, rotation, directional, 2) && blends(tile, rotation, directional, 1) && blends(tile, rotation, directional, 3)) ? 0 : - (blends(tile, rotation, directional, 1) && blends(tile, rotation, directional, 3)) ? 1 : - (blends(tile, rotation, directional, 1) && blends(tile, rotation, directional, 2)) ? 2 : - (blends(tile, rotation, directional, 3) && blends(tile, rotation, directional, 2)) ? 3 : - blends(tile, rotation, directional, 1) ? 4 : - blends(tile, rotation, directional, 3) ? 5 : + (blends(tile, rotation, directional, 2, world) && blends(tile, rotation, directional, 1, world) && blends(tile, rotation, directional, 3, world)) ? 0 : + (blends(tile, rotation, directional, 1, world) && blends(tile, rotation, directional, 3, world)) ? 1 : + (blends(tile, rotation, directional, 1, world) && blends(tile, rotation, directional, 2, world)) ? 2 : + (blends(tile, rotation, directional, 3, world) && blends(tile, rotation, directional, 2, world)) ? 3 : + blends(tile, rotation, directional, 1, world) ? 4 : + blends(tile, rotation, directional, 3, world) ? 5 : -1; transformCase(num, blendresult); return blendresult; @@ -70,7 +70,7 @@ public interface Autotiler{ } } - default boolean blends(Tile tile, int rotation, @Nullable BuildRequest[] directional, int direction){ + default boolean blends(Tile tile, int rotation, @Nullable BuildRequest[] directional, int direction, boolean checkWorld){ int realDir = Mathf.mod(rotation - direction, 4); if(directional != null && directional[realDir] != null){ BuildRequest req = directional[realDir]; @@ -78,7 +78,7 @@ public interface Autotiler{ return true; } } - return blends(tile, rotation, direction); + return checkWorld && blends(tile, rotation, direction); } default boolean blends(Tile tile, int rotation, int direction){ diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Conduit.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Conduit.java index d051adbc2d..4abf4c9cdc 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Conduit.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Conduit.java @@ -40,7 +40,7 @@ public class Conduit extends LiquidBlock implements Autotiler{ super.onProximityUpdate(tile); ConduitEntity entity = tile.entity(); - int[] bits = buildBlending(tile, tile.rotation(), null); + int[] bits = buildBlending(tile, tile.rotation(), null, true); entity.blendbits = bits[0]; } diff --git a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java index 09e73ce7cb..4b05b35eeb 100644 --- a/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/io/anuke/mindustry/world/blocks/distribution/Conveyor.java @@ -94,7 +94,7 @@ public class Conveyor extends Block implements Autotiler{ super.onProximityUpdate(tile); ConveyorEntity entity = tile.entity(); - int[] bits = buildBlending(tile, tile.rotation(), null); + int[] bits = buildBlending(tile, tile.rotation(), null, true); entity.blendbits = bits[0]; entity.blendsclx = bits[1]; entity.blendscly = bits[2]; diff --git a/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java b/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java index b5b010bb9e..9e1c80ab64 100644 --- a/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java +++ b/desktop/src/io/anuke/mindustry/desktop/steam/SWorkshop.java @@ -57,6 +57,7 @@ public class SWorkshop implements SteamUGCCallback{ /** Publish a new item and submit an update for it. * If it is already published, redirects to its page.*/ public void publish(Publishable p){ + Log.info("publish(): " + p.steamTitle()); if(p.hasSteamID()){ Log.info("Content already published, redirecting to ID."); viewListing(p); @@ -64,6 +65,7 @@ public class SWorkshop implements SteamUGCCallback{ } if(!p.prePublish()){ + Log.info("Rejecting due to pre-publish."); return; } @@ -92,9 +94,9 @@ public class SWorkshop implements SteamUGCCallback{ if(details.getResult() == SteamResult.OK){ if(details.getOwnerID().equals(SVars.user.user.getSteamID())){ - FloatingDialog dialog = new FloatingDialog("$editor.mapinfo"); + FloatingDialog dialog = new FloatingDialog("$workshop.info"); dialog.setFillParent(false); - dialog.cont.add("$map.menu").pad(20f); + dialog.cont.add("$workshop.menu").pad(20f); dialog.addCloseButton(); dialog.buttons.addImageTextButton("$view.workshop", Icon.linkSmall, () -> { @@ -141,6 +143,7 @@ public class SWorkshop implements SteamUGCCallback{ } void update(Publishable p, SteamPublishedFileID id, String changelog){ + Log.info("Calling update({0})", p.steamTitle()); String sid = SteamNativeHandle.getNativeHandle(id) + ""; updateItem(id, h -> { @@ -172,10 +175,11 @@ public class SWorkshop implements SteamUGCCallback{ .size(210f, 64f); dialog.buttons.addImageTextButton("$ok", Icon.checkSmall, () -> { + Log.info("Accepted, publishing item..."); + itemHandlers.add(published); ugc.createItem(SVars.steamID, WorkshopFileType.Community); ui.loadfrag.show("$publishing"); dialog.hide(); - itemHandlers.add(published); }).size(170f, 64f); dialog.show(); } @@ -187,23 +191,30 @@ public class SWorkshop implements SteamUGCCallback{ } void updateItem(SteamPublishedFileID publishedFileID, Consumer tagger, Runnable updated){ - SteamUGCUpdateHandle h = ugc.startItemUpdate(SVars.steamID, publishedFileID); + try{ + SteamUGCUpdateHandle h = ugc.startItemUpdate(SVars.steamID, publishedFileID); + Log.info("begin updateItem({0})", publishedFileID.toString()); - tagger.accept(h); + tagger.accept(h); + Log.info("Tagged."); - ItemUpdateInfo info = new ItemUpdateInfo(); + ItemUpdateInfo info = new ItemUpdateInfo(); - ui.loadfrag.setProgress(() -> { - ItemUpdateStatus status = ugc.getItemUpdateProgress(h, info); - ui.loadfrag.setText("$" + status.name().toLowerCase()); - if(status == ItemUpdateStatus.Invalid){ - ui.loadfrag.setText("$done"); - return 1f; - } - return (float)status.ordinal() / (float)ItemUpdateStatus.values().length; - }); + ui.loadfrag.setProgress(() -> { + ItemUpdateStatus status = ugc.getItemUpdateProgress(h, info); + ui.loadfrag.setText("$" + status.name().toLowerCase()); + if(status == ItemUpdateStatus.Invalid){ + ui.loadfrag.setText("$done"); + return 1f; + } + return (float)status.ordinal() / (float)ItemUpdateStatus.values().length; + }); - updatedHandlers.put(publishedFileID, updated); + updatedHandlers.put(publishedFileID, updated); + }catch(Throwable t){ + ui.loadfrag.hide(); + Log.err(t); + } } @Override @@ -216,18 +227,23 @@ public class SWorkshop implements SteamUGCCallback{ Log.info("GET QUERY " + query); if(detailHandlers.containsKey(query)){ + Log.info("Query being handled..."); if(numResultsReturned > 0){ + Log.info("{0} q results", numResultsReturned); Array details = new Array<>(); for(int i = 0; i < numResultsReturned; i++){ - details.set(i, new SteamUGCDetails()); + details.add(new SteamUGCDetails()); ugc.getQueryUGCResult(query, i, details.get(i)); } detailHandlers.get(query).accept(details, result); }else{ + Log.info("Nothing found."); detailHandlers.get(query).accept(new Array<>(), SteamResult.FileNotFound); } detailHandlers.remove(query); + }else{ + Log.info("Query not handled."); } } @@ -248,14 +264,18 @@ public class SWorkshop implements SteamUGCCallback{ @Override public void onCreateItem(SteamPublishedFileID publishedFileID, boolean needsToAcceptWLA, SteamResult result){ + Log.info("onCreateItem(" + result + ")"); if(!itemHandlers.isEmpty()){ if(result == SteamResult.OK){ + Log.info("Passing to first handler."); itemHandlers.first().accept(publishedFileID); }else{ ui.showErrorMessage(Core.bundle.format("publish.error ", result.name())); } itemHandlers.remove(0); + }else{ + Log.err("No handlers for createItem()"); } }