diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index cbf80bd4e7..4e265ad422 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -443,6 +443,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Show FPS setting.vsync.name = VSync setting.lasers.name = Show Power Lasers +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Show Minimap setting.musicvol.name = Music Volume setting.mutemusic.name = Mute Music diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 8134f04eda..ecc81c2686 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -40,6 +40,7 @@ addplayers = Přidat/Odebrat hráče customgame = Vlastní hra newgame = New Game none = +minimap = Minimap close = Zavřít quit = Ukončit maps = Mapy @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Ukázat snímky/sekundu setting.vsync.name = Vertikální synchronizace setting.lasers.name = Ukázat laser energie +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Ukázat minimapu setting.musicvol.name = Hlasitost hudby setting.mutemusic.name = Ztišit hudbu diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index 251c20374b..c275b9005d 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -40,6 +40,7 @@ addplayers = Hinzufügen/Entfernen von Spielern customgame = Benutzerdefiniertes Spiel newgame = New Game none = +minimap = Minimap close = Schließen quit = Verlassen maps = Karten @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Zeige FPS setting.vsync.name = VSync setting.lasers.name = Zeige Stromlaser +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Zeige die Minimap setting.musicvol.name = Musiklautstärke setting.mutemusic.name = Musik stummschalten diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 138f315b02..802bda3a38 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -40,6 +40,7 @@ addplayers = Agregar/Quitar Jugadores customgame = Partida personalizada newgame = New Game none = +minimap = Minimap close = Cerrar quit = Salir maps = Mapas @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Mostrar FPS setting.vsync.name = VSync setting.lasers.name = Mostrar Energía de los Láseres +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Mostrar Minimapa setting.musicvol.name = Volumen de la Música setting.mutemusic.name = Silenciar Musica diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index e874b32e7c..65dbf1cb0f 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -40,6 +40,7 @@ addplayers = Ajouter/Enlever des joueurs customgame = Partie personnalisée newgame = New Game none = +minimap = Minimap close = Fermer quit = Quitter maps = Cartes @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Afficher FPS setting.vsync.name = VSync setting.lasers.name = Afficher les rayons des lasers +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = montrer la minimap setting.musicvol.name = volume de la musique setting.mutemusic.name = Couper la musique diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index a1766c3dd6..81c03b851a 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -40,6 +40,7 @@ addplayers = Ajouter/Enlever des joueurs customgame = Partie personnalisée newgame = New Game none = +minimap = Minimap close = Fermer quit = Quitter maps = Cartes @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Afficher FPS setting.vsync.name = VSync setting.lasers.name = Afficher les rayons des lasers +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Montrer la minimap setting.musicvol.name = Volume de la musique setting.mutemusic.name = Couper la musique diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index 04fb65e866..d7c1be85cb 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -40,6 +40,7 @@ addplayers = Tambah/Hapus Pemain customgame = Game Bebas newgame = New Game none = +minimap = Minimap close = Tutup quit = Keluar maps = Peta @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Tunjukkan FPS setting.vsync.name = VSync setting.lasers.name = Tampilkan Laser Tenaga +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Show Minimap setting.musicvol.name = Volume Musik setting.mutemusic.name = Bisukan Musik diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index a09e723533..b349429198 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -40,6 +40,7 @@ addplayers = Aggiungi/rimuovi giocatori customgame = Gioco personalizzato newgame = New Game none = +minimap = Minimap close = Chiuso quit = Esci maps = Mappe @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Mostra FPS setting.vsync.name = VSync setting.lasers.name = Mostra Laser Energetici +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Mostra minimappa setting.musicvol.name = Volume Musica setting.mutemusic.name = Silenzia musica diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 7ecb243bba..af973b2a6c 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -40,6 +40,7 @@ addplayers = プレイヤーを追加/削除 customgame = カスタムゲーム newgame = 新しいゲーム none = <なし> +minimap = Minimap close = 閉じる quit = 終了 maps = マップ @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = FPSを表示 setting.vsync.name = VSync setting.lasers.name = 電力レーザーを表示 +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = ミニマップを表示 setting.musicvol.name = 音楽 音量 setting.mutemusic.name = 音楽をミュート diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 182e6a6f6d..6311480ca8 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -40,6 +40,7 @@ addplayers = 플레이어 추가/제거 customgame = 커스텀 게임 newgame = 새 게임 none = <없음> +minimap = Minimap close = 닫기 quit = 나가기 maps = 맵 @@ -432,6 +433,7 @@ setting.borderless.name = 테두리 없는 창모드 setting.fps.name = FPS 표시 setting.vsync.name = VSync 활성화 setting.lasers.name = 전력 노드 레이저 표시 +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = 미니맵 보기 setting.musicvol.name = 음악 크기 setting.mutemusic.name = 음소거 diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 987301e3d9..912db21b76 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -40,6 +40,7 @@ addplayers = Add/Remove Players customgame = Custom Game newgame = New Game none = +minimap = Minimap close = Close quit = Quit maps = Maps @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Show FPS setting.vsync.name = VSync setting.lasers.name = Show Power Lasers +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Show Minimap setting.musicvol.name = Music Volume setting.mutemusic.name = Mute Music diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 2b9c806985..e47ce3b23d 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -40,6 +40,7 @@ addplayers = Dodaj/Usuń graczy customgame = Własna Gra newgame = Nowa Gra none = <żadne> +minimap = Minimap close = Zamknij quit = Wyjdź maps = Mapy @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Widoczny licznik FPS setting.vsync.name = Synchronizacja pionowa setting.lasers.name = Pokaż lasery zasilające +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Pokaż Minimapę setting.musicvol.name = Głośność muzyki setting.mutemusic.name = Wycisz muzykę diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 1cc0fbe6ee..9ba538c2fd 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -40,6 +40,7 @@ addplayers = Adicionar/Remover Jogador customgame = Jogo Customizado newgame = Novo Jogo none = +minimap = Minimap close = Fechar quit = Sair maps = Mapas @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Mostrar FPS setting.vsync.name = VSync setting.lasers.name = Mostrar lasers +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Mostrar minimapa setting.musicvol.name = Volume da Música setting.mutemusic.name = Desligar Música diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index c30751ad5b..1208b1d799 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -40,6 +40,7 @@ addplayers = Доб/удалить игроков customgame = Пользовательская игра newgame = Новая игра none = <нет> +minimap = Minimap close = Закрыть quit = Выход maps = Карты @@ -432,6 +433,7 @@ setting.borderless.name = Окно без границ setting.fps.name = Показывать FPS setting.vsync.name = Верт. синхронизация setting.lasers.name = Показывать энергию лазеров +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Показать миникарту setting.musicvol.name = Громкость музыки setting.mutemusic.name = Заглушить музыку diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index d05da0554a..fc3b424bb9 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -40,6 +40,7 @@ addplayers = Oyuncu ekle/cikar customgame = Ozel oyun newgame = New Game none = +minimap = Minimap close = Kapat quit = Cik maps = Haritalar @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = FPS'i goster setting.vsync.name = VSync setting.lasers.name = Guc lazerlerini goster +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Haritayi goster setting.musicvol.name = Ses yuksekligi setting.mutemusic.name = Sesi kapat diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 4cfde75442..69a3176f88 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -40,6 +40,7 @@ addplayers = Oyuncu ekle/cikar customgame = Ozel oyun newgame = New Game none = +minimap = Minimap close = Kapat quit = Çık maps = Haritalar @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = Saniyede ... Kare göstermek setting.vsync.name = VSync setting.lasers.name = Güç Lazerleri Göster +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Show Minimap setting.musicvol.name = Müzik sesi setting.mutemusic.name = Müziği Kapat diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 9172f78543..9703c7e5b2 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -40,6 +40,7 @@ addplayers = Дод/Видалити гравців customgame = Користувальницька гра newgame = Нова гра none = <нічого> +minimap = Minimap close = Закрити quit = Вийти maps = Мапи @@ -432,6 +433,7 @@ setting.borderless.name = Вікно без полів setting.fps.name = Показувати FPS setting.vsync.name = Вертикальна синхронізація setting.lasers.name = Показувати енергію лазерів +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = Показати мінімапу setting.musicvol.name = Гучність музики setting.mutemusic.name = Заглушити музику diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 3e69687789..70d0b78175 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -40,6 +40,7 @@ addplayers = 增加/删除玩家 customgame = 自定义游戏 newgame = 新游戏 none = <无> +minimap = Minimap close = 关闭 quit = 退出 maps = 地图 @@ -432,6 +433,7 @@ setting.borderless.name = Borderless Window setting.fps.name = 显示 FPS setting.vsync.name = 帧同步 setting.lasers.name = 显示能量射线 +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = 显示小地图 setting.musicvol.name = 音乐音量 setting.mutemusic.name = 静音 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index fab4aec809..a6f935211b 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -40,6 +40,7 @@ addplayers = 增加/移除玩家 customgame = 自訂遊戲 newgame = 新遊戲 none = 〈沒有〉 +minimap = Minimap close = 關閉 quit = 退出 maps = 地圖 @@ -432,6 +433,7 @@ setting.borderless.name = 無邊框窗口 setting.fps.name = 顯示FPS setting.vsync.name = 垂直同步 setting.lasers.name = 顯示雷射光束 +setting.pixelate.name = Pixelate [LIGHT_GRAY](may decrease performance) setting.minimap.name = 顯示小地圖 setting.musicvol.name = 音樂音量 setting.mutemusic.name = 靜音 diff --git a/core/src/io/anuke/mindustry/content/Blocks.java b/core/src/io/anuke/mindustry/content/Blocks.java index 7209b7a7ac..940f63be9f 100644 --- a/core/src/io/anuke/mindustry/content/Blocks.java +++ b/core/src/io/anuke/mindustry/content/Blocks.java @@ -641,6 +641,8 @@ public class Blocks implements ContentList{ int liquidRegion = reg("-liquid"); int topRegion =reg("-top"); + drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-top")}; + drawer = tile -> { GenericCrafterEntity entity = tile.entity(); @@ -666,6 +668,8 @@ public class Blocks implements ContentList{ int rotatorRegion = reg("-rotator"); + drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-rotator")}; + drawer = tile -> { GenericCrafterEntity entity = tile.entity(); diff --git a/core/src/io/anuke/mindustry/core/NetServer.java b/core/src/io/anuke/mindustry/core/NetServer.java index 5853d9c04a..4ec5ad6232 100644 --- a/core/src/io/anuke/mindustry/core/NetServer.java +++ b/core/src/io/anuke/mindustry/core/NetServer.java @@ -294,10 +294,12 @@ public class NetServer implements ApplicationListener{ player.isShooting = shooting; player.getPlaceQueue().clear(); for(BuildRequest req : requests){ + Tile tile = world.tile(req.x, req.y); + if(tile == null) continue; //auto-skip done requests - if(req.breaking && world.tile(req.x, req.y).block() == Blocks.air){ + if(req.breaking && tile.block() == Blocks.air){ continue; - }else if(!req.breaking && world.tile(req.x, req.y).block() == req.block && (!req.block.rotate || world.tile(req.x, req.y).getRotation() == req.rotation)){ + }else if(!req.breaking && tile.block() == req.block && (!req.block.rotate || tile.getRotation() == req.rotation)){ continue; } player.getPlaceQueue().addLast(req); diff --git a/core/src/io/anuke/mindustry/core/Renderer.java b/core/src/io/anuke/mindustry/core/Renderer.java index d3c63af7f3..5c610a2187 100644 --- a/core/src/io/anuke/mindustry/core/Renderer.java +++ b/core/src/io/anuke/mindustry/core/Renderer.java @@ -47,6 +47,7 @@ public class Renderer implements ApplicationListener{ public final BlockRenderer blocks = new BlockRenderer(); public final MinimapRenderer minimap = new MinimapRenderer(); public final OverlayRenderer overlays = new OverlayRenderer(); + public final Pixelator pixelator = new Pixelator(); public FrameBuffer shieldBuffer = new FrameBuffer(2, 2); private Color clearColor; @@ -132,8 +133,11 @@ public class Renderer implements ApplicationListener{ } updateShake(0.75f); - - draw(); + if(pixelator.enabled()){ + pixelator.drawPixelate(); + }else{ + draw(); + } } } diff --git a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java index 01f6ee818b..7060288d1a 100644 --- a/core/src/io/anuke/mindustry/graphics/BlockRenderer.java +++ b/core/src/io/anuke/mindustry/graphics/BlockRenderer.java @@ -139,6 +139,7 @@ public class BlockRenderer{ shadowEvents.clear(); Draw.proj(camera.projection()); + renderer.pixelator.rebind(); } float ww = world.width() * tilesize, wh = world.height() * tilesize; diff --git a/core/src/io/anuke/mindustry/graphics/CacheLayer.java b/core/src/io/anuke/mindustry/graphics/CacheLayer.java index 9c96f4d3c5..acc8af2d5c 100644 --- a/core/src/io/anuke/mindustry/graphics/CacheLayer.java +++ b/core/src/io/anuke/mindustry/graphics/CacheLayer.java @@ -43,7 +43,7 @@ public enum CacheLayer{ } void beginShader(){ - if(!Core.settings.getBool("animatedwater")) return; + if(!Core.settings.getBool("animatedwater") || renderer.pixelator.enabled()) return; renderer.blocks.floor.endc(); renderer.shieldBuffer.begin(); @@ -52,7 +52,7 @@ public enum CacheLayer{ } void endShader(Shader shader){ - if(!Core.settings.getBool("animatedwater")) return; + if(!Core.settings.getBool("animatedwater") || renderer.pixelator.enabled()) return; renderer.blocks.floor.endc(); renderer.shieldBuffer.end(); diff --git a/core/src/io/anuke/mindustry/graphics/Pixelator.java b/core/src/io/anuke/mindustry/graphics/Pixelator.java new file mode 100644 index 0000000000..91979a6e75 --- /dev/null +++ b/core/src/io/anuke/mindustry/graphics/Pixelator.java @@ -0,0 +1,48 @@ +package io.anuke.mindustry.graphics; + +import io.anuke.arc.Core; +import io.anuke.arc.graphics.g2d.Draw; +import io.anuke.arc.graphics.glutils.FrameBuffer; +import io.anuke.arc.util.Disposable; + +import static io.anuke.mindustry.Vars.*; + +public class Pixelator implements Disposable{ + private FrameBuffer buffer = new FrameBuffer(2, 2); + + public void drawPixelate(){ + float px = Core.camera.position.x, py = Core.camera.position.y; + Core.camera.position.set((int)px, (int)py + (Core.graphics.getHeight() % 2 == 0 ? 0 : 0.5f)); + + int w = (int)(Core.camera.width); + int h = (int)(Core.camera.height); + + if(buffer.getWidth() != w || buffer.getHeight() != h){ + buffer.resize(w, h); + } + + Draw.flush(); + buffer.begin(); + renderer.draw(); + Draw.flush(); + buffer.end(); + Draw.rect(Draw.wrap(buffer.getTexture()), Core.camera.position.x, Core.camera.position.y, Core.camera.width, -Core.camera.height); + + Core.camera.position.set(px, py); + } + + public void rebind(){ + if(enabled()){ + buffer.begin(); + } + } + + public boolean enabled(){ + return Core.settings.getBool("pixelate"); + } + + @Override + public void dispose(){ + buffer.dispose(); + } +} diff --git a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java index 325c6d2007..b044aba5df 100644 --- a/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/io/anuke/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -214,6 +214,7 @@ public class SettingsMenuDialog extends SettingsDialog{ graphics.checkPref("indicators", true); graphics.checkPref("animatedwater", false); graphics.checkPref("lasers", true); + graphics.checkPref("pixelate", false); } private void back(){ diff --git a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java index 8a9fb640c4..4bc398245f 100644 --- a/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java +++ b/core/src/io/anuke/mindustry/ui/fragments/HudFragment.java @@ -166,9 +166,10 @@ public class HudFragment extends Fragment{ IntFormat fps = new IntFormat("fps"); IntFormat ping = new IntFormat("ping"); - info.label(() -> ping.get(Net.getPing())).visible(Net::client).right(); + + info.label(() -> ping.get(Net.getPing())).visible(Net::client).left(); info.row(); - info.label(() -> fps.get(Core.graphics.getFramesPerSecond())).right(); + info.label(() -> fps.get(Core.graphics.getFramesPerSecond())).left(); }); //spawner warning