mirror of
https://github.com/Anuken/Mindustry.git
synced 2026-10-01 18:50:27 +03:00
Merge branch 'master' of https://github.com/Anuken/Mindustry into array-textures
# Conflicts: # core/src/mindustry/mod/DataImagePacker.java # gradle.properties
This commit is contained in:
@@ -31,6 +31,13 @@
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW"/>
|
||||
<category android:name="android.intent.category.DEFAULT"/>
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="mindustry"/>
|
||||
</intent-filter>
|
||||
|
||||
</activity>
|
||||
|
||||
</application>
|
||||
|
||||
@@ -1454,7 +1454,8 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Adapt interface to display notch
|
||||
setting.macnotch.description = Restart required to apply changes
|
||||
steam.friendsonly = Friends Only
|
||||
|
||||
steam.friendsonly = Steam Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
setting.minmagnificationmultiplierpercent.name = Max Camera Distance
|
||||
@@ -2311,7 +2312,7 @@ ff.arc = :arc: [accent]Arc[] turrets require power to function. Research and pla
|
||||
fungalpass.tutorial1 = Use [accent]units[] to defend buildings and attack the enemy.\nResearch and place a :ground-factory: [accent]ground factory[].
|
||||
fungalpass.tutorial2 = Select :dagger: [accent]Dagger[] units in the factory.\nProduce 3 units.
|
||||
|
||||
frontier.tutorial1 = The :additive-reconstructor: [accent]Additive Reconstructor[]\nupgrades tier 1 units to tier 2\nusing :silicon: silicon and :graphite: graphite.\n\n[accent]Research and reconstruct\na []:dagger:[accent] dagger to a []:mace:[accent] mace.
|
||||
frontier.tutorial1 = The :additive-reconstructor: [accent]Additive Reconstructor[]\nupgrades tier 1 units to tier 2\nusing :silicon: silicon and :graphite: graphite.\n\n[accent]Reconstruct a []:dagger:[accent] dagger\nto a []:mace:[accent] mace.
|
||||
frontier.tutorial2 = Enemy waves send [accent]infinitely[] until all enemy cores are [unlaunched]destroyed.
|
||||
frontier.tutorial3 = [accent]Attack the enemy base fast to prevent waves from getting too high[].
|
||||
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Паказаць Анімацыю Надвор'я
|
||||
setting.hidedisplays.name = Схаваць Лагічныя экраны
|
||||
setting.macnotch.name = Адаптуйце інтэрфейс для адлюстравання выемкі
|
||||
setting.macnotch.description = Каб змены ўжыліся патрабуецца перазапуск
|
||||
|
||||
steam.friendsonly = Толькі сябры
|
||||
steam.friendsonly.tooltip = Толькі сябры з Steam моргуць зайсці у вашу гульню.\nУбярыце птушачку адсюль і гульня стане публічнай - Кожны зможа зайсці.
|
||||
setting.maxmagnificationmultiplierpercent.name = Мін. дыстанцыя камеры
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Показвай графики за климата
|
||||
setting.hidedisplays.name = Скрий логическите екрани
|
||||
setting.macnotch.name = Адаптирайте интерфейса за показване на прорез
|
||||
setting.macnotch.description = За прилагане на промените е необходимо рестартиране
|
||||
|
||||
steam.friendsonly = Само приятели
|
||||
steam.friendsonly.tooltip = Дали вашите приятели от Steam ще могат да се включат в играта ви.\nИзключването на тази опция ще направи играта Ви публична и всеки ще може да се присъедини.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Mostra l’estat meteorològic
|
||||
setting.hidedisplays.name = Amaga els monitors lògics
|
||||
setting.macnotch.name = Adapta la interfície per a mostrar el notch
|
||||
setting.macnotch.description = Cal reiniciar perquè s’apliquin els canvis
|
||||
|
||||
steam.friendsonly = Només amics
|
||||
steam.friendsonly.tooltip = Indica si només els amics de Steam podran unir-se a la vostra partida.\nSi no es selecciona aquesta opció, la vostra partida serà pública i s’hi podrà unir qualsevol jugador.
|
||||
setting.maxmagnificationmultiplierpercent.name = Distància mín. de la càmera
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Zobrazit Grafiku Počasí
|
||||
setting.hidedisplays.name = Skrýt displeje logiky
|
||||
setting.macnotch.name = Přizpůsobte rozhraní zobrazení zářezu
|
||||
setting.macnotch.description = Pro aplikování změn je potřeba restart
|
||||
|
||||
steam.friendsonly = Pouze pro přátele
|
||||
steam.friendsonly.tooltip = Určuje, zda bude hra přístupná jen tvým přátelům na Steamu, nebo všem. Odškrtnutí udělá hru veřejnou - připojit se bude moci každý.
|
||||
setting.maxmagnificationmultiplierpercent.name = Minimální vzdálenost kamery
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Tilpas grænsefladen til at vise hak
|
||||
setting.macnotch.description = Genstart påkrævet for at anvende ændringer
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Wetter anzeigen
|
||||
setting.hidedisplays.name = Logik-Bildschirme verdecken
|
||||
setting.macnotch.name = Benutzeroberfläche an Aussparung anpassen
|
||||
setting.macnotch.description = Neustart erforderlich
|
||||
|
||||
steam.friendsonly = Nur Freunde
|
||||
steam.friendsonly.tooltip = Ob nur Steam-Freunde deinem Spiel beitreten können.\nDiese Einstellung zu deaktivieren macht dein Spiel öffentlich - jeder kann beitreten.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Kameradistanz
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Efectos visuales climáticos
|
||||
setting.hidedisplays.name = Ocultar pantallas lógicas
|
||||
setting.macnotch.name = Adaptar la interfaz para mostrar la muesca
|
||||
setting.macnotch.description = Es necesario reiniciar para aplicar los cambios
|
||||
|
||||
steam.friendsonly = Solo amigos
|
||||
steam.friendsonly.tooltip = Si solo los amigos de Steam podrán unirse a tu partida.\nDesmarcar esta opción hará tu partida pública - cualquiera podrá unirse.
|
||||
setting.maxmagnificationmultiplierpercent.name = Distancia de cámara mínima
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Kohandage liidest sälku kuvamiseks
|
||||
setting.macnotch.description = Muudatuste rakendamiseks on vaja taaskäivitada
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Erakutsi eguraldi grafikoak
|
||||
setting.hidedisplays.name = Ezkutatu pantaila logikoak
|
||||
setting.macnotch.name = Egokitu interfazea bistaratzeko
|
||||
setting.macnotch.description = Berrabiarazi behar da aldaketak aplikatzeko
|
||||
|
||||
steam.friendsonly = Lagunak bakarrik
|
||||
steam.friendsonly.tooltip = Bai, Steam lagunak bakarrik sartu ahal izango dira zure jokoan.\nKutxa hau desblokeatzeak zure jokoa publiko egingo du. Edonork bat egin dezake.
|
||||
setting.maxmagnificationmultiplierpercent.name = Kameraren distantzia minimoa
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Näytä säägrafiikat
|
||||
setting.hidedisplays.name = Piilota logiikkanäytöt
|
||||
setting.macnotch.name = Mukauta käyttöliittymä näyttämään lovi
|
||||
setting.macnotch.description = Muutosten toteuttaminen vaatii uudelleenkäynnistyksen
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Iangkop ang interface upang ipakita ang bingaw
|
||||
setting.macnotch.description = Kinakailangan ang pag-restart upang mailapat ang mga pagbabago
|
||||
|
||||
steam.friendsonly = Mga Kaibigan lang
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Montrer les Effets météo
|
||||
setting.hidedisplays.name = Cacher les Écrans
|
||||
setting.macnotch.name = Adapter l'interface pour afficher l'encoche
|
||||
setting.macnotch.description = Redémarrage du jeu nécessaire pour appliquer les changements
|
||||
|
||||
steam.friendsonly = Amis seulement
|
||||
steam.friendsonly.tooltip = Indique si seuls les amis Steam peuvent rejoindre votre partie.\nSi vous décochez cette case, votre partie deviendra publique et tout le monde pourra la rejoindre.
|
||||
setting.maxmagnificationmultiplierpercent.name = Distance min de la caméra
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Időjárás-grafika megjelenítése
|
||||
setting.hidedisplays.name = Logikai kijelzők elrejtése
|
||||
setting.macnotch.name = A felület igazítása a kijelző bevágásához
|
||||
setting.macnotch.description = A változtatások érvénybe lépéséhez újraindítás szükséges
|
||||
|
||||
steam.friendsonly = Csak barátok
|
||||
steam.friendsonly.tooltip = Meghatározza, hogy csak a Steam-barátok kapcsolódhassanak-e a játékodhoz.\nHa kikapcsolod, a játékod nyilvános lesz és bárki kapcsolódhat hozzá.
|
||||
setting.maxmagnificationmultiplierpercent.name = Legkisebb kameratávolság
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Tampilkan Cuaca
|
||||
setting.hidedisplays.name = Sembunyikan Tampilan Logika
|
||||
setting.macnotch.name = Sesuaikan tampilan dengan batas layar
|
||||
setting.macnotch.description = Mulai ulang diperlukan untuk menerapkan perubahan
|
||||
|
||||
steam.friendsonly = Hanya Teman
|
||||
steam.friendsonly.tooltip = Mengatur bisa atau tidaknya teman Steam bergabung ke permainanmu.\nMenghapus centang pada kotak ini akan membuat permainan Anda menjadi publik - siapa saja dapat bergabung.
|
||||
setting.maxmagnificationmultiplierpercent.name = Jarak Kamera Minimum
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Mostra grafica del meteo
|
||||
setting.hidedisplays.name = Nascondi display logici
|
||||
setting.macnotch.name = Adatta l'interfaccia per visualizzare la tacca
|
||||
setting.macnotch.description = Riavvio necessario per applicare le modifiche
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -331,10 +331,10 @@ cantconnect = ゲームに参加できませんでした。 ([accent]{0}[])
|
||||
connecting = [accent]接続中...
|
||||
reconnecting = [accent]再接続中...
|
||||
|
||||
connecting.establish = [accent]Establishing connection...
|
||||
receiving.world = [accent]Receiving world data ({0})...
|
||||
receiving.assets = [accent]Receiving assets ({0})...
|
||||
receiving.assets.fail = Error occurred while receiving assets.
|
||||
connecting.establish = [accent]接続を確立中...
|
||||
receiving.world = [accent]ワールドデータを受信中 ({0})...
|
||||
receiving.assets = [accent]アセットを受信中 ({0})...
|
||||
receiving.assets.fail = アセットの受信中にエラーが発生しました。
|
||||
|
||||
server.port = ポート:
|
||||
server.invalidport = 無効なポート番号です!
|
||||
@@ -352,10 +352,10 @@ save.export = エクスポート
|
||||
save.import.invalid = [accent]無効なセーブデータです!
|
||||
save.import.fail = [crimson]セーブデータのインポートに失敗しました: [accent]{0}
|
||||
save.export.fail = [crimson]セーブデータのエクスポートに失敗しました: [accent]{0}
|
||||
save.export.needsload = [scarlet]⚠ This save contains embedded assets.[]\nLoad into this save before exporting it.
|
||||
save.assets.missing = Missing Assets
|
||||
save.assets.missing.list = Asset List...
|
||||
save.assets.missing.info = [scarlet]⚠ This save contains missing assets![]\n\n[lightgray]This is likely because the save file was not properly exported.\n[lightgray]When sharing saves, only export through the in-game UI. Do not copy save files directly.\n[lightgray]If transferring files is necessary, make sure the [accent]assetCache[] folder is copied as well.
|
||||
save.export.needsload = [scarlet]⚠ このセーブには埋め込みアセットがあります。[]\nこのセーブに読み込んでからエクスポートしてください。
|
||||
save.assets.missing = 欠落アセット
|
||||
save.assets.missing.list = アセット一覧...
|
||||
save.assets.missing.info = [scarlet]⚠ このセーブには欠落しているアセットがあります![]\n\n[lightgray]これは、セーブファイルが正しくエクスポートされていないことが原因の可能性があります。\n[lightgray]セーブを共有する際は、必ずゲーム内UIからエクスポートしてください。セーブファイルを直接コピーしないでください。\n[lightgray]ファイルの転送が必要な場合は、[accent]assetCache[] フォルダも必ずコピーしてください。
|
||||
save.import = インポート
|
||||
save.newslot = セーブ名:
|
||||
save.rename = 名前を変更
|
||||
@@ -402,7 +402,7 @@ stance.shoot = 指示:発砲
|
||||
stance.holdfire = 指示:発砲控え
|
||||
stance.pursuetarget = 指示:追撃
|
||||
stance.patrol = 指示:偵察経路
|
||||
stance.holdposition = 指示:位置を保持
|
||||
stance.holdposition = 指示:位置を保持
|
||||
stance.ram = 指示: 突撃\n[lightgray]直線、経路捜索無し
|
||||
stance.boost = ブースト
|
||||
stance.mineauto = 自採掘掘
|
||||
@@ -542,47 +542,47 @@ patch.fields = {0} フィールド
|
||||
|
||||
bundle.lines = {0} lines
|
||||
|
||||
images = Images
|
||||
asset.guide = Usage Guide
|
||||
asset.bundle.exists = A bundle with path '{0}' already exists.
|
||||
asset.importzip = Import Asset Zip
|
||||
asset.exportzip = Export Asset Zip
|
||||
asset.image.importzip = Import Zip
|
||||
asset.image.exportzip = Export Zip
|
||||
asset.clearall = Clear All
|
||||
asset.clearall.confirm = Are you sure that you want to clear [red]all[] assets from this map?\nThis includes images, audio, content, etc.
|
||||
asset.imports = Import Results
|
||||
asset.imported = [accent]{0} assets imported.
|
||||
asset.import.none = No valid asset files found in zip archive.
|
||||
asset.content.errors = Content Errors
|
||||
asset.content.add = Add Content
|
||||
images = 画像
|
||||
asset.guide = 使用ガイド
|
||||
asset.bundle.exists = パスが'{0}'のバンドルはすでに存在します。
|
||||
asset.importzip = ZIPアセットをインポート
|
||||
asset.exportzip = ZIPアセットをエクスポート
|
||||
asset.image.importzip = ZIPをインポート
|
||||
asset.image.exportzip = ZIPをエクスポート
|
||||
asset.clearall = すべてを消去
|
||||
asset.clearall.confirm = このマップから[red]すべて[]のアセットを消去してもよろしいですか?\nこれには画像、音声、コンテンツなどが含まれます。
|
||||
asset.imports = インポート結果
|
||||
asset.imported = [accent]{0} 個のアセットをインポートしました。
|
||||
asset.import.none = ZIPアーカイブ内に有効なアセットファイルが見つかりませんでした。
|
||||
asset.content.errors = コンテンツエラー
|
||||
asset.content.add = コンテンツを追加
|
||||
asset.content.type = Type:
|
||||
asset.content.exists = [red]Content with that name already exists!
|
||||
asset.content.badname = [red]Invalid name! Most symbols are not allowed.
|
||||
asset.content.import.file = Import File
|
||||
asset.content.import.clipboard = Import From Clipboard
|
||||
asset.exists = An asset of that type with the same path/name already exists:\n[lightgray]{0}
|
||||
asset.broken = This asset file could not be located.\nThis can be caused by improper import of data, or an incorrectly exported save.
|
||||
asset.audio.invalid = Audio file could not be loaded.\nEnsure that it is a valid OGG or MP3 file.
|
||||
asset.delete.confirm = Are you sure you want to delete this asset?
|
||||
asset.images = Data Patch Images
|
||||
asset.image.imports = Import Results
|
||||
asset.image.imported = [accent]{0} images imported.
|
||||
asset.image.none = No valid PNG files found in zip archive.
|
||||
asset.image.error = [red]The following errors were encountered:[]
|
||||
asset.image.clearall.confirm = Are you certain that you wish to clear all images?
|
||||
asset.image.info = Image Info
|
||||
asset.image.toolarge = Image ([lightgray]{0}x{1}[]) is too large. Maximum size is {2}x{3}.
|
||||
asset.image.exists = An image with that path/name already exists:\n[lightgray]{0}
|
||||
asset.image.delete.confirm = Are you certain that you wish to delete this image?
|
||||
asset.image.name = [accent]File Name: [lightgray]{0}
|
||||
asset.image.region.name = [accent]Region Name: [lightgray]{0}
|
||||
asset.image.path = [accent]Path: [lightgray]{0}
|
||||
asset.image.env = [accent]Uses Environment Atlas: [lightgray]{0}
|
||||
asset.image.size = [accent]Size: [lightgray]{0}x{1}
|
||||
asset.image.filesize = [accent]File Size: [lightgray]{0}
|
||||
asset.image.packfailed = [red]⚠ Failed to pack sprite![]
|
||||
asset.image.packfailed.env = This is likely caused by a lack of space in the environment atlas.\nNote that environment sprites are limited to a 512x512 total area.
|
||||
asset.content.exists = [red]その名前のコンテンツはすでに存在します!
|
||||
asset.content.badname = [red]無効な名前です!ほとんどの符号は許可されていません。
|
||||
asset.content.import.file = ファイルをインポート
|
||||
asset.content.import.clipboard = クリップボードからインポート
|
||||
asset.exists = そのタイプのアセットで、同じパス/名前のものが既に存在します:\n[lightgray]{0}
|
||||
asset.broken = アセットファイルが見つかりませんでした。\nデータの不適切なインポート、または正しくエクスポートされていない保存ファイルが原因である可能性があります。
|
||||
asset.audio.invalid = 音声ファイルを読み込めませんでした。\n有効な OGG または MP3 ファイルであることを確認してください。
|
||||
asset.delete.confirm = このアセットを削除してもよろしいですか?
|
||||
asset.images = データパッチ画像:
|
||||
asset.image.imports = インポート結果
|
||||
asset.image.imported = [accent]{0} 枚の画像をインポートしました。
|
||||
asset.image.none = ZIP アーカイブ内に有効な PNG ファイルが見つかりませんでした。
|
||||
asset.image.error = [red]以下のエラーが発生しました:[]
|
||||
asset.image.clearall.confirm = すべての画像を消去してもよろしいですか?
|
||||
asset.image.info = 画像情報
|
||||
asset.image.toolarge = 画像 ([lightgray]{0}x{1}[]) が大きすぎます。最大サイズは {2}x{3}です。
|
||||
asset.image.exists = 同じパス/名前の画像が既に存在します:\n[lightgray]{0}
|
||||
asset.image.delete.confirm = この画像を削除してもよろしいですか?
|
||||
asset.image.name = [accent]ファイル名: [lightgray]{0}
|
||||
asset.image.region.name = [accent]リージョン名: [lightgray]{0}
|
||||
asset.image.path = [accent]パス: [lightgray]{0}
|
||||
asset.image.env = [accent]環境アトラスの使用: [lightgray]{0}
|
||||
asset.image.size = [accent]サイズ: [lightgray]{0}x{1}
|
||||
asset.image.filesize = [accent]ファイルサイズ: [lightgray]{0}
|
||||
asset.image.packfailed = [red]⚠ スプライトのパックに失敗しました![]
|
||||
asset.image.packfailed.env = おそらく環境アトラスの空き容量不足が原因です。\n環境スプライトは合計512x512の制限があります。
|
||||
|
||||
workshop = ワークショップ
|
||||
waves.title = ウェーブ
|
||||
@@ -1141,7 +1141,7 @@ stat.targetsground = 対地攻撃
|
||||
stat.crushdamage = クラッシュダメージ
|
||||
stat.legsplashdamage = 踏みつぶしダメージ
|
||||
stat.itemsmoved = 輸送速度
|
||||
stat.itemsmoved.info = Throughput is often not linear and tied to FPS/TPS.
|
||||
stat.itemsmoved.info = スループットは線形とは限らず、FPS/TPSに依存することが多い。
|
||||
stat.launchtime = 発射の待機時間
|
||||
stat.shootrange = 範囲
|
||||
stat.size = 大きさ
|
||||
@@ -1164,8 +1164,8 @@ stat.weapons = 武器
|
||||
stat.bullet = 弾丸
|
||||
stat.moduletier = モジュールレベル
|
||||
stat.unittype = ユニット種
|
||||
stat.receiverate = Receiving Rate
|
||||
stat.receiverate.info = Affected by overdrive. Throughput can be increased by placing additional unloaders.
|
||||
stat.receiverate = 受信速度
|
||||
stat.receiverate.info = オーバードライブの影響を受ける。スループットは追加の搬出機を設置することで増加できる。
|
||||
stat.speedincrease = 速度向上
|
||||
stat.range = 範囲
|
||||
stat.drilltier = ドリル
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = 天気のグラフィックを表示
|
||||
setting.hidedisplays.name = 描画されているロジックディスプレイを非表示
|
||||
setting.macnotch.name = インターフェイスをノッチ表示に適応させる
|
||||
setting.macnotch.description = 再起動が必要です。
|
||||
|
||||
steam.friendsonly = フレンドのみ
|
||||
steam.friendsonly.tooltip = Steamのフレンドのみがゲームに参加できるようにします。\nこの設定を無効にするとゲームは公開され、誰でも参加できます。
|
||||
setting.maxmagnificationmultiplierpercent.name = 最低描写距離
|
||||
@@ -2185,9 +2186,9 @@ block.disperse.name = ディスパーズ
|
||||
block.afflict.name = アフリクト
|
||||
block.lustre.name = ラストル
|
||||
block.scathe.name = スケース
|
||||
block.scathe.carbide.info = Travels significantly faster.\nModerate damage at any range.
|
||||
block.scathe.surge-alloy.info = Splits into micro missiles.\nHeavy damage at close distance.
|
||||
block.scathe.phase-fabric.info = Equipped with a force field.\nLow damage, largest radius.
|
||||
block.scathe.carbide.info = かなり高速で移動する。\nどの距離でも中程度のダメージ。
|
||||
block.scathe.surge-alloy.info = 微小ミサイルに分裂する。\n近距離で高ダメージ。
|
||||
block.scathe.phase-fabric.info = フォースフィールドを搭載している。\nダメージは低いが、最大の範囲を持つ。
|
||||
block.tank-refabricator.name = 戦車再加工工場
|
||||
block.mech-refabricator.name = メカ再加工工場
|
||||
block.ship-refabricator.name = 戦艦再加工工場
|
||||
@@ -2766,7 +2767,7 @@ lst.setprop = ユニットまたは建物のプロパティを設定します。
|
||||
lst.effect = パーティクルエフェクトを作成します。
|
||||
lst.sync = ネットワーク経由で変数を同期します。\n最大で1秒間に10回まで呼び出されます。
|
||||
lst.playsound = サウンドを再生します。\n音量とパンはグローバル値として設定するか、位置に基づいて計算できます。
|
||||
lst.playmusic = Plays a music track by name, e.g. [accent]"game1"[].\nIf [accent]interrupt[] is true, the previously playing music will be stopped.\nPlaying with null music and interrupt set to true will stop the current track.\nNote that music from data patches must be prefixed with [accent]dp-[].
|
||||
lst.playmusic = 名前で音楽トラックを再生する。例: [accent]"game1"[]。\n[accent]interrupt[] が true の場合、再生中の音楽は停止される。\nnull の音楽を再生し、interrupt を true にすると現在のトラックを停止できる。\ndata patch の音楽を再生する場合は、[accent]dp-[] を接頭辞として付ける必要がある。
|
||||
lst.makemarker = ワールドに新しいロジックマーカーを作成します。\nこのマーカーを識別するためのIDを指定する必要があります。\nマーカーは現在、1ワールドにつき最大20,000個までです。
|
||||
lst.setmarker = マーカーのプロパティを設定します。\n使用するIDは"Make Marker"命令で指定したものと同じである必要があります。
|
||||
lst.localeprint = マップのロケールプロパティの値をテキストバッファに追加します。\nマップエディタでロケールバンドルを設定するには、[accent]Map Info > Locale Bundles[] を確認してください。\nクライアントがモバイルの場合、末尾が ".mobile" のプロパティを優先して出力します。
|
||||
@@ -2775,8 +2776,8 @@ lst.query = 指定した範囲内のユニット/建物を検索します。結
|
||||
lglobal.false = 0
|
||||
lglobal.true = 1
|
||||
lglobal.null = null
|
||||
lglobal.@pi = 円周率(π:3.141...)という数学定数
|
||||
lglobal.@e = ネイピア数(e:2.718...)という数学定数
|
||||
lglobal.@pi = 円周率(π:3.141...)という数学定数
|
||||
lglobal.@e = ネイピア数(e:2.718...)という数学定数
|
||||
lglobal.@degToRad = 度をラジアンに変換するための乗算係数
|
||||
lglobal.@radToDeg = ラジアンを度に変換するための乗算係数
|
||||
|
||||
@@ -2809,13 +2810,13 @@ lglobal.@liquidCount = ゲーム内液体種類数(lookup命令で使用)
|
||||
lglobal.@server = サーバーまたはシングルプレイで実行中なら true、それ以外は false
|
||||
lglobal.@client = クライアント接続中なら true
|
||||
|
||||
lglobal.@clientLocale = クライアントの言語設定(例:en_US)
|
||||
lglobal.@clientLocale = クライアントの言語設定(例: en_US)
|
||||
lglobal.@clientUnit = クライアントが操作しているユニット
|
||||
lglobal.@clientName = クライアントのプレイヤー名
|
||||
lglobal.@clientTeam = クライアントのチームID
|
||||
lglobal.@clientMobile = クライアントがモバイルなら true、それ以外は false
|
||||
|
||||
lenum.type = ユニットや建物の種類を取得します。\n例:任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。
|
||||
lenum.type = ユニットや建物の種類を取得します。\n例: 任意のルーターに対して、 [accent]@router[] を返します。\n文字列ではありません。
|
||||
lenum.shoot = 指定した座標に向かって撃ちます。
|
||||
lenum.shootp = 任意のユニットや建物を撃ちます。
|
||||
lenum.config = 建物の設定を取得します。\n例:ソーターに設定されているアイテムなど
|
||||
@@ -2828,7 +2829,7 @@ laccess.controller = ユニットを制御しているものを取得します
|
||||
laccess.dead = ユニットや建物が機能しているかどうか、またはもう有効でないかどうか。
|
||||
laccess.controlled = ユニットや建物がどのように制御されているのかを取得します。\nプロセッサ制御の場合、 [accent]@ctrlProcessor[] を返します。\nプレイヤー制御の場合、 [accent]@ctrlPlayer[] を返します。\n隊列を組んでいる場合、 [accent]@ctrlFormation[] を返します。\nそれ以外は 0 を返します。
|
||||
laccess.progress = アクションの進行状況を0〜1で取得します。\n生産、リロード、または建設の進捗状況を返します。
|
||||
laccess.speed = ユニットの最高速度を返します。(単位:タイル/秒)
|
||||
laccess.speed = ユニットの最高速度を返します。(単位: タイル/秒)
|
||||
laccess.size = ユニット/建物の大きさ、または紐の長さ。
|
||||
laccess.id = ユニット/ブロック/アイテム/液体のID。\nこれは検索操作の逆です。
|
||||
laccess.displaywidth = 表示ブロックの幅(ピクセル単位)
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = 날씨 그래픽 표시
|
||||
setting.hidedisplays.name = 로직 디스플레이 숨김
|
||||
setting.macnotch.name = 노치를 표시하도록 인터페이스 조정
|
||||
setting.macnotch.description = 적용하려면 재시작이 필요합니다.
|
||||
|
||||
steam.friendsonly = 친구 전용
|
||||
steam.friendsonly.tooltip = 스팀 친구만 게임에 접속할 수 있을지 정합니다.\n체크를 해제하면 누구나 접속할 수 있습니다.
|
||||
setting.maxmagnificationmultiplierpercent.name = 최소 카메라 거리
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Pritaikykite sąsają, kad būtų rodoma įpjova
|
||||
setting.macnotch.description = Norint pritaikyti pakeitimus, reikia paleisti iš naujo
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Toon Weer Graphics
|
||||
setting.hidedisplays.name = Verberg Logische Displays
|
||||
setting.macnotch.name = Pas de interface aan om de inkeping weer te geven
|
||||
setting.macnotch.description = Herstart vereist om veranderingen door te voeren
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Adapt interface to display notch
|
||||
setting.macnotch.description = Restart required to apply changes
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Pokaż pogodę
|
||||
setting.hidedisplays.name = Ukryj wyświetlacze logiczne
|
||||
setting.macnotch.name = Dostosuj interfejs do wyświetlania wycięcia ekranu
|
||||
setting.macnotch.description = Aby zastosować zmiany, wymagane jest ponowne uruchomienie
|
||||
|
||||
steam.friendsonly = Tylko Znajomi
|
||||
steam.friendsonly.tooltip = Czy tylko Znajomi ze Steam będą mogli dołączyć do twojej gry?\nOdznaczenie tego okienka ustawi twoją grę na publiczną - każdy może dołączyć.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min. odległość kamery
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Mostrar Gráficos do Clima
|
||||
setting.hidedisplays.name = Ocultar Displays de Lógicos
|
||||
setting.macnotch.name = Adaptar a interface para exibir o entalhe
|
||||
setting.macnotch.description = Reinicialização necessária para aplicar as alterações
|
||||
|
||||
steam.friendsonly = Amigos apenas
|
||||
steam.friendsonly.tooltip = Se apenas amigos do Steam poderão entrar no seu jogo.\nDesmarcar esta caixa tornará seu jogo público - qualquer pessoa pode entrar.
|
||||
setting.maxmagnificationmultiplierpercent.name = Distância Mínima da Câmera
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Mostrar Gráficos do Clima
|
||||
setting.hidedisplays.name = Ocultar Ecrãs Lógicos
|
||||
setting.macnotch.name = Adaptar a interface para exibir o entalhe
|
||||
setting.macnotch.description = É necessário reiniciar para aplicar as alterações
|
||||
|
||||
steam.friendsonly = Amigos Apenas
|
||||
steam.friendsonly.tooltip = Define se apenas amigos da Steam podem juntar-se ao teu jogo.\nDesativar esta opção fará o teu jogo público - qualquer um pode-se juntar ao teu mapa.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Vezi Vremea
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Adaptați interfața pentru a afișa notch-ul
|
||||
setting.macnotch.description = Repornire necesară pt a aplica schimbările.
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Отображать погоду
|
||||
setting.hidedisplays.name = Скрыть логические дисплеи
|
||||
setting.macnotch.name = Адаптировать интерфейс к вырезу на экране
|
||||
setting.macnotch.description = Для вступления изменений в силу требуется перезагрузка игры
|
||||
|
||||
steam.friendsonly = Только друзья
|
||||
steam.friendsonly.tooltip = Только ли друзья из Steam могут присоединяться к вашей игре.\nУбрав эту галочку, вы сделаете вашу игру публичной - присоединиться сможет любой желающий.
|
||||
setting.maxmagnificationmultiplierpercent.name = Минимальная дистанция камеры
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Prikazuj Grafiku Vremena
|
||||
setting.hidedisplays.name = Sakrij Logičke Displeje
|
||||
setting.macnotch.name = Prilagodi interfejs da prikaže zarez
|
||||
setting.macnotch.description = Restartovanje je zahtevano da bi se učitale promene
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Anpassa gränssnittet för att visa skåra
|
||||
setting.macnotch.description = Omstart krävs för att tillämpa ändringar
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = แสดงกราฟิกสภาพอาก
|
||||
setting.hidedisplays.name = ซ่อนหน้าจอลอจิก
|
||||
setting.macnotch.name = ปรับอินเตอร์เฟซให้เข้ากับติ่งหน้าจอ
|
||||
setting.macnotch.description = อาจจะต้องรีสตาร์ทเพื่อใช้งานการเปลี่ยนแปลง
|
||||
|
||||
steam.friendsonly = เพื่อนเท่านั้น
|
||||
steam.friendsonly.tooltip = ว่าจะให้แค่เพื่อนเท่านั้นหรือไม่ที่จะสามารถเข้าร่วมเกมของคุณได้\nหากคุณติ๊กช่องนี้ออกนั้นจะทำให้เกมของคุณเปิดเป็นสาธารณะ - ใครๆก็จะสามารถเข้าร่วมเกมของคุณได้
|
||||
setting.maxmagnificationmultiplierpercent.name = ระยะห่างกล้องต่ำสุด
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Show Weather Graphics
|
||||
setting.hidedisplays.name = Hide Logic Displays
|
||||
setting.macnotch.name = Kesgitlemek üçin interfeýsi uýgunlaşdyryň
|
||||
setting.macnotch.description = Üýtgeşmeleri ulanmak üçin täzeden başlaň
|
||||
|
||||
steam.friendsonly = Friends Only
|
||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Hava Durumu Grafiklerini Göster
|
||||
setting.hidedisplays.name = İşlemci İpuçlarını Gizle
|
||||
setting.macnotch.name = Arayüzü çentik gösterecek şekilde uyarlayın
|
||||
setting.macnotch.description = Değişikleri uygulamak için yeniden başlatma gerekli
|
||||
|
||||
steam.friendsonly = Arkadaşlara özel
|
||||
steam.friendsonly.tooltip = Sadece Steam arkadaşlarının katılıp katılabilemeyeceğini belirler.\nBu kutudan tiki kaldırmak oyununuzu herkese açık yapacaktır.
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Показувати погоду
|
||||
setting.hidedisplays.name = Приховувати логічні дисплеї
|
||||
setting.macnotch.name = Адаптувати інтерфейс для показу виїмки
|
||||
setting.macnotch.description = Потрібен перезапуск для застосування змін
|
||||
|
||||
steam.friendsonly = Лише друзі
|
||||
steam.friendsonly.tooltip = Чи лише друзі Steam зможуть приєднатися до вашої гри. Якщо зняти цей прапорець, ваша гра стане загальнодоступною – будь-хто зможе приєднатися.
|
||||
setting.maxmagnificationmultiplierpercent.name = Мінімальна відстань камери
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = Hiện đồ họa thời tiết
|
||||
setting.hidedisplays.name = Ẩn hiển thị logic
|
||||
setting.macnotch.name = Giao diện phù hợp với hiển thị tai thỏ
|
||||
setting.macnotch.description = Cần khởi động lại để áp dụng các thay đổi
|
||||
|
||||
steam.friendsonly = Chỉ bạn bè
|
||||
steam.friendsonly.tooltip = Liệu chỉ bạn bè trên Steam mới có thể tham gia trò chơi của bạn hay không.\nBỏ chọn ô này sẽ làm trò chơi của bạn công khai - mọi người có thể tham gia.
|
||||
setting.maxmagnificationmultiplierpercent.name = Tầm xa tối thiểu của máy quay
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = 显示天气效果
|
||||
setting.hidedisplays.name = 不显示逻辑绘图
|
||||
setting.macnotch.name = 适应刘海显示
|
||||
setting.macnotch.description = 需要重启才能应用更改
|
||||
|
||||
steam.friendsonly = 仅限好友
|
||||
steam.friendsonly.tooltip = 是否只有 Steam 好友才能加入你的游戏。\n取消选中该选项将使你的游戏公开 - 任何人都可以加入。
|
||||
setting.maxmagnificationmultiplierpercent.name = 最小视距
|
||||
|
||||
@@ -1449,6 +1449,7 @@ setting.showweather.name = 顯示天氣動畫
|
||||
setting.hidedisplays.name = 隱藏邏輯顯示
|
||||
setting.macnotch.name = 使界面適應顯示槽口
|
||||
setting.macnotch.description = 需要重新啟動遊戲以更改大小
|
||||
|
||||
steam.friendsonly = 僅限好友
|
||||
steam.friendsonly.tooltip = 是否只有 Steam 好友可以加入您的遊戲。\n取消勾選後,遊戲為公開的,任何人都可以加入。
|
||||
setting.maxmagnificationmultiplierpercent.name = Min Camera Distance
|
||||
|
||||
Binary file not shown.
Binary file not shown.
@@ -11,6 +11,7 @@ import mindustry.ai.types.*;
|
||||
import mindustry.content.*;
|
||||
import mindustry.core.*;
|
||||
import mindustry.entities.*;
|
||||
import mindustry.entities.comp.*;
|
||||
import mindustry.game.EventType.*;
|
||||
import mindustry.game.Teams.*;
|
||||
import mindustry.gen.*;
|
||||
@@ -160,7 +161,7 @@ public class RtsAI{
|
||||
ay /= units.size;
|
||||
|
||||
if(debug){
|
||||
Vars.ui.showLabel("Squad: " + units.size, -1, 2f, ax, ay);
|
||||
Vars.ui.showLabel("Squad: " + units.size, -1, 2f, ax, ay, WorldLabel.flagBackground | WorldLabel.flagAutoscale);
|
||||
}
|
||||
|
||||
Building defend = null;
|
||||
@@ -192,7 +193,7 @@ public class RtsAI{
|
||||
defend = best;
|
||||
|
||||
if(debug){
|
||||
Vars.ui.showLabel("Defend, dst = " + (int)(best.dst(ax, ay)), -1, 8f, best.x, best.y);
|
||||
Vars.ui.showLabel("Defend, dst = " + (int)(best.dst(ax, ay)), -1, 8f, best.x, best.y, WorldLabel.flagBackground | WorldLabel.flagAutoscale);
|
||||
}
|
||||
|
||||
if(best instanceof CoreBuild){
|
||||
|
||||
@@ -1503,7 +1503,7 @@ public class Blocks{
|
||||
}};
|
||||
|
||||
smallHeatRedirector = new HeatConductor("small-heat-redirector"){{
|
||||
requirements(Category.crafting, with(Items.surgeAlloy, 8, Items.graphite, 8));
|
||||
requirements(Category.crafting, with(Items.surgeAlloy, 3, Items.graphite, 8));
|
||||
|
||||
researchCostMultiplier = 2f;
|
||||
researchCostMultipliers.put(Items.graphite, 7f);
|
||||
|
||||
@@ -142,6 +142,7 @@ public class Planets{
|
||||
r.waveTeam = Team.crux;
|
||||
r.placeRangeCheck = false;
|
||||
r.hideSpawns = true;
|
||||
r.derelictRepair = true;
|
||||
r.coreDestroyClear = true;
|
||||
};
|
||||
showRtsAIRule = true;
|
||||
|
||||
@@ -41,8 +41,8 @@ public class SerpuloTechTree{
|
||||
|
||||
node(itemBridge, () -> {
|
||||
node(titaniumConveyor, Seq.with(new SectorComplete(crateredBattleground)), () -> {
|
||||
node(phaseConveyor, () -> {
|
||||
node(massDriver, Seq.with(new SectorComplete(tarFields)), () -> {
|
||||
node(massDriver, Seq.with(new SectorComplete(tarFields)), () -> {
|
||||
node(phaseConveyor, () -> {
|
||||
|
||||
});
|
||||
});
|
||||
@@ -53,8 +53,8 @@ public class SerpuloTechTree{
|
||||
});
|
||||
});
|
||||
|
||||
node(armoredConveyor, () -> {
|
||||
node(plastaniumConveyor, () -> {
|
||||
node(plastaniumConveyor, () -> {
|
||||
node(armoredConveyor, () -> {
|
||||
|
||||
});
|
||||
});
|
||||
|
||||
@@ -373,7 +373,7 @@ public class NetClient implements ApplicationListener{
|
||||
|
||||
@Remote(called = Loc.client, variants = Variant.one)
|
||||
public static void connect(String ip, int port){
|
||||
if(!steam && ip.startsWith("steam:")) return;
|
||||
if(!steam && (ip.startsWith("steam:") || ip.startsWith("steamserver:"))) return;
|
||||
netClient.disconnectQuietly();
|
||||
logic.reset();
|
||||
|
||||
|
||||
@@ -89,7 +89,7 @@ public class UI implements ApplicationListener, Loadable{
|
||||
/** Maps popups to ids so that they can be removed or updated by id. */
|
||||
private final ObjectMap<String, Table> popups = new ObjectMap<>();
|
||||
/** Maps labels to ids so that they can be removed or updated by id. */
|
||||
private final IntMap<Table> labels = new IntMap<>();
|
||||
private final IntMap<WorldLabel> labels = new IntMap<>();
|
||||
|
||||
public UI(){
|
||||
Fonts.loadFonts();
|
||||
@@ -437,34 +437,20 @@ public class UI implements ApplicationListener, Loadable{
|
||||
}
|
||||
|
||||
/** Shows a label in the world. This label is behind everything. Does not fade. */
|
||||
public void showLabel(@Nullable String info, int id, float duration, float worldx, float worldy){
|
||||
public void showLabel(@Nullable String info, int id, float duration, float worldx, float worldy, int flags){
|
||||
if(info == null){ // null info allows deletion of old labels provided they have ids
|
||||
var table = labels.remove(id);
|
||||
if(table != null) table.remove();
|
||||
var label = labels.remove(id);
|
||||
if(label != null) label.remove();
|
||||
return;
|
||||
}
|
||||
var table = new Table(Styles.black3).margin(4);
|
||||
if(id != -1){
|
||||
Table old = labels.put(id, table);
|
||||
if(old != null) old.remove();
|
||||
}
|
||||
table.touchable = Touchable.disabled;
|
||||
table.update(() -> {
|
||||
if(state.isMenu()){
|
||||
table.remove();
|
||||
if(id != -1) labels.remove(id);
|
||||
}
|
||||
Vec2 v = Core.camera.project(worldx, worldy);
|
||||
table.setPosition(v.x, v.y, Align.center);
|
||||
});
|
||||
table.actions(Actions.delay(duration), Actions.remove(), Actions.run(() -> { if(id != -1) labels.remove(id); }));
|
||||
table.add(info).style(Styles.outlineLabel);
|
||||
table.pack();
|
||||
table.act(0f);
|
||||
//make sure it's at the back
|
||||
Core.scene.root.addChildAt(0, table);
|
||||
|
||||
table.getChildren().first().act(0f);
|
||||
var label = labels.get(id, WorldLabel::create); // todo: pool?
|
||||
label.x = worldx;
|
||||
label.y = worldy;
|
||||
label.text = info;
|
||||
label.flags = (byte)flags; // flag | flag2 at call site turns it into an int so the flags param here has to be int or casting has to be done at every call site
|
||||
label.duration = duration;
|
||||
label.add();
|
||||
}
|
||||
|
||||
public void showInfo(String info){
|
||||
|
||||
@@ -45,7 +45,7 @@ public class MapImagesView implements AssetView{
|
||||
|
||||
if(width > DataPatcher.maxImageSize || height > DataPatcher.maxImageSize){
|
||||
ui.showErrorMessage(Core.bundle.format("asset.image.toolarge", width, height, DataPatcher.maxImageSize, DataPatcher.maxImageSize));
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
String name = result.nameWithoutExtension();
|
||||
@@ -53,7 +53,7 @@ public class MapImagesView implements AssetView{
|
||||
var other = images.find(p -> p.path.equalsIgnoreCase(path) || p.name.equalsIgnoreCase(name));
|
||||
if(other != null){
|
||||
ui.showErrorMessage(Core.bundle.format("asset.image.exists", other.name + " (" + other.path + ")"));
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
|
||||
byte[] hash = assetCache.add(bytes);
|
||||
|
||||
@@ -1283,8 +1283,15 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
||||
}
|
||||
|
||||
public void payloadDraw(){
|
||||
if(block.isAir()) return;
|
||||
draw();
|
||||
float z = Draw.z();
|
||||
if(block.drawCached){
|
||||
Draw.z(block.buildingCacheLayer.layer);
|
||||
drawCached();
|
||||
}
|
||||
if(block.drawDynamic){
|
||||
Draw.z(z);
|
||||
draw();
|
||||
}
|
||||
}
|
||||
|
||||
public void drawTeamTop(){
|
||||
@@ -1793,6 +1800,11 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
||||
|
||||
if(power != null && updatePower){
|
||||
var oldGraph = power.graph;
|
||||
for(var other : proximity){
|
||||
if(other != null && other.team != team && other.power != null && other.power.graph == oldGraph){
|
||||
new PowerGraph().reflow(other);
|
||||
}
|
||||
}
|
||||
for(int i = 0; i < power.links.size; i++){
|
||||
var other = world.build(power.links.items[i]);
|
||||
|
||||
|
||||
@@ -32,12 +32,22 @@ public abstract class WorldLabelComp implements Posc, Drawc, Syncc{
|
||||
public byte flags = flagBackground | flagOutline;
|
||||
/** If not null, this label gets set to the parent position with x, y used as offsets. */
|
||||
public @Nullable Posc parent;
|
||||
/** Duration in seconds. Ignored if zero or negative. */
|
||||
public transient float duration;
|
||||
|
||||
@Replace
|
||||
public float clipSize(){
|
||||
return text.length() * 10f * fontSize;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(){
|
||||
if(duration > 0){
|
||||
duration -= Time.delta / 60f;
|
||||
if(duration <= 0) hide();
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(){
|
||||
float x = this.x, y = this.y;
|
||||
|
||||
@@ -1424,7 +1424,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
||||
overlappingPlayer= player;
|
||||
}
|
||||
|
||||
plan.animScale = Mathf.lerpDelta(plan.animScale, 1f, 0.2f * Time.delta);
|
||||
plan.animScale = Mathf.lerpDelta(plan.animScale, 1f, 0.2f);
|
||||
plan.block.drawOtherPlayerPlan(plan, player.planEachable, overlappingPlan == plan ? 0.7f : 0.25f);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -630,12 +630,7 @@ public class TypeIO{
|
||||
int x = read.us();
|
||||
int y = read.us();
|
||||
Block block = Vars.content.block(read.us());
|
||||
if(block == null){
|
||||
// Skip unrecognised block IDs (e.g. from a modded client)
|
||||
read.b(); // consume rotation byte
|
||||
readClientPlanConfig(read); // consume config
|
||||
continue;
|
||||
}
|
||||
if(block == null) throw new ArcRuntimeException("Invalid block ID in block plans! Client is likely using an incorrectly configured mod.");
|
||||
int rotation = (block.rotate ? read.b() : 0);
|
||||
Object config = readClientPlanConfig(read);
|
||||
BuildPlan plan = new BuildPlan(x, y, rotation, block, config);
|
||||
|
||||
@@ -1558,7 +1558,7 @@ public class LExecutor{
|
||||
public void run(LExecutor exec){
|
||||
if(net.client()) return;
|
||||
|
||||
Tile tile = world.tile(x.numi(), y.numi());
|
||||
Tile tile = world.tile(Mathf.round(x.numf()), Mathf.round(y.numf()));
|
||||
if(tile != null && block.obj() instanceof Block b){
|
||||
switch(layer){
|
||||
case ore -> {
|
||||
|
||||
@@ -1574,7 +1574,7 @@ public class LStatements{
|
||||
}).size(80f, 40f).pad(4f).color(table.color);
|
||||
|
||||
if(statusNames == null){
|
||||
statusNames = content.statusEffects().select(s -> !s.isHidden()).map(s -> s.name).toArray(String.class);
|
||||
statusNames = content.statusEffects().map(s -> s.name).toArray(String.class);
|
||||
}
|
||||
|
||||
table.button(b -> {
|
||||
|
||||
@@ -63,7 +63,8 @@ public class SteamAdmin{
|
||||
}
|
||||
|
||||
public static boolean isBanned(String id){
|
||||
if(!id.startsWith("steam:")) return false;
|
||||
//bans are ignored with private lobbies
|
||||
if(!id.startsWith("steam:") || !Core.settings.getBool("steampublichost2")) return false;
|
||||
return data.bans.contains(id.substring("steam:".length()));
|
||||
}
|
||||
|
||||
|
||||
@@ -141,9 +141,19 @@ public class Menus{
|
||||
infoPopup(message, duration, align, top, left, bottom, right);
|
||||
}
|
||||
|
||||
@Remote(variants = Variant.both, unreliable = true)
|
||||
public static void label(@Nullable String message, int id, float duration, float worldx, float worldy, int flags){
|
||||
ui.showLabel(message, id, duration, worldx, worldy, flags);
|
||||
}
|
||||
|
||||
@Remote(variants = Variant.both)
|
||||
public static void labelReliable(@Nullable String message, int id, float duration, float worldx, float worldy, int flags){
|
||||
label(message, id, duration, worldx, worldy, flags);
|
||||
}
|
||||
|
||||
@Remote(variants = Variant.both, unreliable = true)
|
||||
public static void label(@Nullable String message, int id, float duration, float worldx, float worldy){
|
||||
ui.showLabel(message, id, duration, worldx, worldy);
|
||||
label(message, id, duration, worldx, worldy, WorldLabel.flagBackground | WorldLabel.flagAutoscale | WorldLabel.flagOutline);
|
||||
}
|
||||
|
||||
@Remote(variants = Variant.both)
|
||||
|
||||
@@ -43,7 +43,7 @@ public class HostDialog extends BaseDialog{
|
||||
|
||||
cont.add().width(65f);
|
||||
|
||||
cont.check("@steam.friendsonly", !Core.settings.getBool("steampublichost"), val -> Core.settings.put("steampublichost", !val)).colspan(2).left()
|
||||
cont.check("@steam.friendsonly", !Core.settings.getBool("steampublichost2"), val -> Core.settings.put("steampublichost2", !val)).colspan(2).left()
|
||||
.with(c -> ui.addDescTooltip(c, "@steam.friendsonly.tooltip")).padBottom(15f).row();
|
||||
}
|
||||
|
||||
@@ -98,9 +98,9 @@ public class HostDialog extends BaseDialog{
|
||||
player.admin = true;
|
||||
Events.fire(new HostEvent());
|
||||
|
||||
if(steam && Core.settings.getBool("steampublichost")){
|
||||
if(steam && Core.settings.getBool("steampublichost2")){
|
||||
if(Version.modifier.contains("beta") || Version.modifier.contains("alpha")){
|
||||
Core.settings.put("steampublichost", false);
|
||||
Core.settings.put("steampublichost2", false);
|
||||
platform.updateLobby();
|
||||
Core.settings.getBoolOnce("betapublic", () -> ui.showInfo("@public.beta"));
|
||||
}
|
||||
|
||||
@@ -58,6 +58,14 @@ public class PausedDialog extends BaseDialog{
|
||||
});
|
||||
|
||||
if(!mobile){
|
||||
if(steam){
|
||||
cont.check("@steam.friendsonly", !Core.settings.getBool("steampublichost2"), val -> {
|
||||
Core.settings.put("steampublichost2", !val);
|
||||
platform.updateLobby();
|
||||
}).colspan(2).left().with(c -> ui.addDescTooltip(c, "@steam.friendsonly.tooltip")).width(440f)
|
||||
.visible(() -> net.server()).center().colspan(2).fillX().padBottom(10f).row();
|
||||
}
|
||||
|
||||
float dw = 220f;
|
||||
cont.defaults().width(dw).height(55).pad(5f);
|
||||
|
||||
|
||||
@@ -419,12 +419,6 @@ public class SettingsMenuDialog extends BaseDialog{
|
||||
platform.updateLobby();
|
||||
return i + "";
|
||||
});
|
||||
|
||||
if(!Version.modifier.contains("beta")){
|
||||
game.checkPref("steampublichost", false, i -> {
|
||||
platform.updateLobby();
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
game.checkPref("console", false);
|
||||
|
||||
@@ -56,6 +56,7 @@ public class HudFragment{
|
||||
|
||||
private Seq<Block> blocksOut = new Seq<>();
|
||||
private Table hudLabel;
|
||||
private float coreAttackTime;
|
||||
|
||||
private static ObjectSet<String> favoriteBlocks = new ObjectSet<>();
|
||||
private static String lastFavorited = null;
|
||||
@@ -592,9 +593,11 @@ public class HudFragment{
|
||||
c.top().collapser(coreItems, () -> Core.settings.getBool("coreitems") && !mobile && shown).fillX().row();
|
||||
|
||||
float notifDuration = 240f;
|
||||
float[] coreAttackTime = {0};
|
||||
|
||||
Events.run(Trigger.teamCoreDamage, () -> coreAttackTime[0] = notifDuration);
|
||||
Events.run(Trigger.teamCoreDamage, () -> coreAttackTime = notifDuration);
|
||||
Events.on(ResetEvent.class, e -> {
|
||||
coreAttackTime = 0f;
|
||||
});
|
||||
|
||||
//'core is under attack' table
|
||||
c.collapser(top -> top.background(Styles.black6).add("@coreattack").pad(8)
|
||||
@@ -608,13 +611,13 @@ public class HudFragment{
|
||||
})
|
||||
.update(label -> label.color.set(Color.orange).lerp(Color.scarlet, Mathf.absin(Time.time, 2f, 1f))), true,
|
||||
() -> {
|
||||
if(!shown || state.isPaused()) return false;
|
||||
if(state.isMenu() || !player.team().data().hasCore()){
|
||||
coreAttackTime[0] = 0f;
|
||||
coreAttackTime = 0f;
|
||||
return false;
|
||||
}
|
||||
if(!shown || state.isPaused()) return false;
|
||||
|
||||
return (coreAttackTime[0] -= Time.delta) > 0;
|
||||
return (coreAttackTime -= Time.delta) > 0;
|
||||
})
|
||||
.touchable(Touchable.disabled)
|
||||
.fillX().row();
|
||||
|
||||
@@ -190,8 +190,6 @@ public class PlayerListFragment{
|
||||
var teamSelect = new BaseDialog(Core.bundle.get("player.team") + ": " + user.name);
|
||||
teamSelect.setFillParent(false);
|
||||
|
||||
var group = new ButtonGroup<>();
|
||||
|
||||
int i = 0;
|
||||
|
||||
for(Team team : Team.baseTeams){
|
||||
@@ -203,7 +201,7 @@ public class PlayerListFragment{
|
||||
Call.adminRequest(user, AdminAction.switchTeam, team);
|
||||
teamSelect.hide();
|
||||
});
|
||||
teamSelect.cont.add(b).size(50f).checked(a -> user.team() == team).group(group);
|
||||
teamSelect.cont.add(b).size(50f).checked(a -> user.team() == team);
|
||||
|
||||
if(i++ % 3 == 2) teamSelect.cont.row();
|
||||
}
|
||||
|
||||
@@ -62,6 +62,7 @@ public class BaseShield extends Block{
|
||||
hasPower = true;
|
||||
update = solid = true;
|
||||
rebuildable = false;
|
||||
canPickup = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -523,11 +523,6 @@ public class LogicBlock extends Block{
|
||||
l.trySet(executor, null); //always clear old variable, it may get a new name
|
||||
|
||||
if(valid){
|
||||
//this prevents conflicts
|
||||
l.name = "";
|
||||
//finds a new matching name after toggling
|
||||
l.name = findLinkName(cur.block);
|
||||
|
||||
//remove redundant links
|
||||
links.removeAll(o -> {
|
||||
boolean remove = world.build(o.x, o.y) == cur && o != l;
|
||||
|
||||
@@ -32,6 +32,7 @@ public class TileableLogicDisplay extends LogicDisplay{
|
||||
super(name);
|
||||
|
||||
displaySize = 32;
|
||||
allowRectanglePlacement = true;
|
||||
}
|
||||
|
||||
public static void linkDisplays(TileableLogicDisplayBuild start){
|
||||
|
||||
@@ -166,8 +166,9 @@ public class UnitAssembler extends PayloadBlock{
|
||||
|
||||
@Override
|
||||
public void afterPatch(){
|
||||
initCapacities();
|
||||
super.afterPatch();
|
||||
|
||||
initCapacities();
|
||||
}
|
||||
|
||||
public void initCapacities(){
|
||||
@@ -705,6 +706,13 @@ public class UnitAssembler extends PayloadBlock{
|
||||
return super.sense(sensor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptUnitPayload(Unit unit){
|
||||
var plan = plan();
|
||||
return plan.requirements.contains(b -> b.item == unit.type() &&
|
||||
blocks.get(unit.type()) < Mathf.round(b.amount * state.rules.unitCost(team)));
|
||||
}
|
||||
|
||||
@Override
|
||||
public PayloadSeq getPayloads(){
|
||||
return blocks;
|
||||
|
||||
@@ -656,7 +656,7 @@ public class StatValues{
|
||||
if(blockName != null && t instanceof UnlockableContent){
|
||||
UnlockableContent content = (UnlockableContent) t;
|
||||
String key = "block." + blockName + "." + content.name + ".info";
|
||||
if(Core.bundle.has(key)){
|
||||
if(Core.bundle.has(key) && !Vars.headless){
|
||||
bt.table(desc -> {
|
||||
desc.image(Icon.info.getRegion()).size(20).color(Color.lightGray).scaling(Scaling.fit).padRight(8).padLeft(12);
|
||||
desc.add("[lightgray]" + Core.bundle.get(key));
|
||||
@@ -872,7 +872,7 @@ public class StatValues{
|
||||
private static Cell<?> note(Table table, String text){
|
||||
table.row();
|
||||
return table.table(t -> {
|
||||
t.image(Icon.arrowNoteSmall.getRegion()).size(15).color(Pal.stat).scaling(Scaling.fit).padRight(6).padLeft(12);
|
||||
if(!Vars.headless) t.image(Icon.arrowNoteSmall.getRegion()).size(15).color(Pal.stat).scaling(Scaling.fit).padRight(6).padLeft(12);
|
||||
t.add(text);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -133,6 +133,38 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
|
||||
}catch(NumberFormatException e){
|
||||
throw new IOException("Invalid Steam ID: " + lobbyname);
|
||||
}
|
||||
}else if (ip.startsWith("steamserver:")){
|
||||
String server = ip.substring("steamserver:".length());
|
||||
try{
|
||||
SteamID serverID = SteamID.createFromNativeHandle(Long.parseLong(server));
|
||||
if(!serverID.isValid()) throw new IOException("Invalid Steam ID structure: " + server);
|
||||
|
||||
Core.app.post(() -> {
|
||||
currentLobby = null;
|
||||
currentServer = serverID;
|
||||
|
||||
// Run success
|
||||
if(success != null) success.run();
|
||||
|
||||
// Connect
|
||||
Connect con = new Connect();
|
||||
con.addressTCP = "steam:" + currentServer.getAccountID();
|
||||
|
||||
net.setClientConnected();
|
||||
net.handleClientReceived(con);
|
||||
Core.app.post(() -> { // TODO: This gets hidden and I can't figure out how to not do so.
|
||||
ui.loadfrag.show("@connecting");
|
||||
ui.loadfrag.setButton(() -> {
|
||||
ui.loadfrag.hide();
|
||||
netClient.disconnectQuietly();
|
||||
});
|
||||
});
|
||||
|
||||
Log.info("Initiated direct Steam P2P connection to server: @", currentServer.getAccountID());
|
||||
});
|
||||
}catch(NumberFormatException e){
|
||||
throw new IOException("Failed to parse server Steam ID: " + server);
|
||||
}
|
||||
}else{
|
||||
provider.connectClient(ip, port, success);
|
||||
}
|
||||
@@ -165,13 +197,11 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
|
||||
@Override
|
||||
public void disconnectClient(){
|
||||
if(isSteamClient()){
|
||||
if(currentLobby != null){
|
||||
smat.leaveLobby(currentLobby);
|
||||
snet.closeP2PSessionWithUser(currentServer);
|
||||
currentServer = null;
|
||||
currentLobby = null;
|
||||
net.handleClientReceived(new Disconnect());
|
||||
}
|
||||
if(currentLobby != null) smat.leaveLobby(currentLobby);
|
||||
snet.closeP2PSessionWithUser(currentServer);
|
||||
currentServer = null;
|
||||
currentLobby = null;
|
||||
net.handleClientReceived(new Disconnect());
|
||||
}else{
|
||||
provider.disconnectClient();
|
||||
}
|
||||
@@ -196,14 +226,14 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
|
||||
@Override
|
||||
public void hostServer(int port) throws IOException{
|
||||
provider.hostServer(port);
|
||||
smat.createLobby(Core.settings.getBool("steampublichost") ? LobbyType.Public : LobbyType.FriendsOnly, Core.settings.getInt("playerlimit"));
|
||||
smat.createLobby(Core.settings.getBool("steampublichost2") ? LobbyType.Public : LobbyType.FriendsOnly, Core.settings.getInt("playerlimit"));
|
||||
|
||||
Core.app.post(() -> Core.app.post(() -> Core.app.post(() -> Log.info("Server: @\nClient: @\nActive: @", net.server(), net.client(), net.active()))));
|
||||
}
|
||||
|
||||
public void updateLobby(){
|
||||
if(currentLobby != null && net.server()){
|
||||
smat.setLobbyType(currentLobby, Core.settings.getBool("steampublichost") ? LobbyType.Public : LobbyType.FriendsOnly);
|
||||
smat.setLobbyType(currentLobby, Core.settings.getBool("steampublichost2") ? LobbyType.Public : LobbyType.FriendsOnly);
|
||||
smat.setLobbyMemberLimit(currentLobby, Core.settings.getInt("playerlimit"));
|
||||
}
|
||||
}
|
||||
@@ -411,6 +441,13 @@ public class SNet implements SteamNetworkingCallback, SteamMatchmakingCallback,
|
||||
}else if(steamIDRemote.equals(currentServer)){
|
||||
Log.info("Disconnected! @: @", steamIDRemote.getAccountID(), sessionError);
|
||||
net.handleClientReceived(new Disconnect());
|
||||
|
||||
Core.app.post(() -> {
|
||||
ui.loadfrag.hide();
|
||||
ui.showErrorMessage(Core.bundle.format("cantconnect", sessionError.name()));
|
||||
net.handleClientReceived(new Disconnect());
|
||||
currentServer = null;
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+1
-1
@@ -13,7 +13,7 @@
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>12.0.0</string>
|
||||
<string>13.0.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${app.name}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
|
||||
Reference in New Issue
Block a user