Merge branch 'master' of https://github.com/Anuken/Mindustry into v104

This commit is contained in:
Petr Gašparík
2020-03-27 08:44:57 +01:00
28 changed files with 112 additions and 76 deletions

View File

@@ -21,7 +21,7 @@ public class SerializeProcess extends BaseProcessor{
/** Target class name. */ /** Target class name. */
private static final String className = "Serialization"; private static final String className = "Serialization";
/** Name of the base package to put all the generated classes. */ /** Name of the base package to put all the generated classes. */
private static final String data = "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"; private static final String data = "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";
@Override @Override
public void process(RoundEnvironment env) throws Exception{ public void process(RoundEnvironment env) throws Exception{

View File

@@ -142,6 +142,8 @@ research = Research
researched = [lightgray]{0} researched. researched = [lightgray]{0} researched.
players = {0} players players = {0} players
players.single = {0} player players.single = {0} player
players.search = search
players.notfound = [gray]no players found
server.closing = [accent]Closing server... server.closing = [accent]Closing server...
server.kicked.kick = You have been kicked from the server! server.kicked.kick = You have been kicked from the server!
server.kicked.whitelist = You are not whitelisted here. server.kicked.whitelist = You are not whitelisted here.
@@ -176,7 +178,7 @@ host.invalid = [scarlet]Can't connect to host.
servers.local = Local Servers servers.local = Local Servers
servers.remote = Remote Servers servers.remote = Remote Servers
servers.global = Global Servers servers.global = Community Servers
trace = Trace Player trace = Trace Player
trace.playername = Player name: [accent]{0} trace.playername = Player name: [accent]{0}
@@ -1232,7 +1234,7 @@ block.unloader.description = Unloads items from any nearby non-transportation bl
block.launch-pad.description = Launches batches of items without any need for a core launch. block.launch-pad.description = Launches batches of items without any need for a core launch.
block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently.
block.duo.description = A small, cheap turret. Useful against ground units. block.duo.description = A small, cheap turret. Useful against ground units.
block.scatter.description = An essential anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.scatter.description = An essential anti-air turret. Sprays clumps of lead, scrap or metaglass flak at enemy units.
block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. block.scorch.description = Burns any ground enemies close to it. Highly effective at close range.
block.hail.description = A small, long-range artillery turret. block.hail.description = A small, long-range artillery turret.
block.wave.description = A medium-sized turret. Shoots streams of liquid at enemies. Automatically extinguishes fires when supplied with water. block.wave.description = A medium-sized turret. Shoots streams of liquid at enemies. Automatically extinguishes fires when supplied with water.

View File

@@ -12,7 +12,7 @@ link.itch.io.description = itch.io -sivu tietokoneversion latausten kanssa
link.google-play.description = Google Play Kauppa -sivu link.google-play.description = Google Play Kauppa -sivu
link.f-droid.description = F-Droid catalogue listing link.f-droid.description = F-Droid catalogue listing
link.wiki.description = Virallinen Mindustry wiki link.wiki.description = Virallinen Mindustry wiki
link.feathub.description = Suggest new features link.feathub.description = Ehdota uusia ominaisuuksia
linkfail = Linkin avaaminen epäonnistui!\nOsoite on kopioitu leikepöydällesi. linkfail = Linkin avaaminen epäonnistui!\nOsoite on kopioitu leikepöydällesi.
screenshot = Kuvankaappaus tallennettu sijaintiin {0} screenshot = Kuvankaappaus tallennettu sijaintiin {0}
screenshot.invalid = Kartta liian laaja, kuvankaappaukselle ei mahdollisesti ole tarpeeksi tilaa. screenshot.invalid = Kartta liian laaja, kuvankaappaukselle ei mahdollisesti ole tarpeeksi tilaa.
@@ -193,7 +193,7 @@ confirmkick = Oletko varma että haluat potkia tämän pelaajan?
confirmvotekick = Oletko varma että haluat äänestää tämän pelaajan potkituksi? confirmvotekick = Oletko varma että haluat äänestää tämän pelaajan potkituksi?
confirmunban = Oletko varma että haluat päästää tämän pelaajan takaisin? confirmunban = Oletko varma että haluat päästää tämän pelaajan takaisin?
confirmadmin = Oletko varma että haluat antaa pelaajalle hallinto-oikeuksia? confirmadmin = Oletko varma että haluat antaa pelaajalle hallinto-oikeuksia?
confirmunadmin = Are you sure you want to remove admin status from this player? confirmunadmin = Oletko varma että haluat poistaa hallinto-oikeudet pelaajalta?
joingame.title = Liity peliin joingame.title = Liity peliin
joingame.ip = Osoite: joingame.ip = Osoite:
disconnect = Yhteys katkaistu. disconnect = Yhteys katkaistu.
@@ -214,9 +214,9 @@ overwrite = Overwrite
save.none = No saves found! save.none = No saves found!
saveload = Tallennetaan... saveload = Tallennetaan...
savefail = Pelin tallentaminen epäonnistui! savefail = Pelin tallentaminen epäonnistui!
save.delete.confirm = Are you sure you want to delete this save? save.delete.confirm = Oletko varma että haluat poistaa tämän tallennuksen?
save.delete = Delete save.delete = Poista
save.export = Export Save save.export = Vie Tallennus
save.import.invalid = [accent]This save is invalid! save.import.invalid = [accent]This save is invalid!
save.import.fail = [crimson]Failed to import save: [accent]{0} save.import.fail = [crimson]Failed to import save: [accent]{0}
save.export.fail = [crimson]Failed to export save: [accent]{0} save.export.fail = [crimson]Failed to export save: [accent]{0}
@@ -256,7 +256,7 @@ data.invalid = This isn't valid game data.
data.import.confirm = Importing external data will overwrite[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. data.import.confirm = Importing external data will overwrite[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
classic.export = Export Classic Data classic.export = Export Classic Data
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app? classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
quit.confirm = Are you sure you want to quit? quit.confirm = Oletko varma että haluat poistua?
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
loading = [accent]Ladataan... loading = [accent]Ladataan...
reloading = [accent]Reloading Mods... reloading = [accent]Reloading Mods...
@@ -282,7 +282,7 @@ map.random = [accent]Satunnainen kartta
map.nospawn = Tässä kartassa ei ole ytimiä joihin syntyä! Lisää[accent] oranssi[] ydin karttaan editorissa. map.nospawn = Tässä kartassa ei ole ytimiä joihin syntyä! Lisää[accent] oranssi[] ydin karttaan editorissa.
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor. map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor.
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor. map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
map.invalid = Error loading map: corrupted or invalid map file. map.invalid = Virhe ladatessa karttaa: korruptoitunut tai väärä karttatiedosto.
workshop.update = Update Item workshop.update = Update Item
workshop.error = Error fetching workshop details: {0} 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.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!
@@ -337,7 +337,7 @@ editor.errorload = Virhe ladattaessa tiedostoa:\n[accent]{0}
editor.errorsave = Virhe tallennettaessa tiedostoa:\n[accent]{0} editor.errorsave = Virhe tallennettaessa tiedostoa:\n[accent]{0}
editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor. editor.errorimage = That's an image, not a map. Don't go around changing extensions expecting it to work.\n\nIf you want to import a legacy map, use the 'import legacy map' button in the editor.
editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported. editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported.
editor.errornot = This is not a map file. editor.errornot = Tämä ei ole karttatiedosto.
editor.errorheader = This map file is either not valid or corrupt. editor.errorheader = This map file is either not valid or corrupt.
editor.errorname = Map has no name defined. Are you trying to load a save file? editor.errorname = Map has no name defined. Are you trying to load a save file?
editor.update = Päivitä editor.update = Päivitä
@@ -365,7 +365,7 @@ editor.exportimage = Export Terrain Image
editor.exportimage.description = Export a map image file editor.exportimage.description = Export a map image file
editor.loadimage = Import Terrain editor.loadimage = Import Terrain
editor.saveimage = Export Terrain editor.saveimage = Export Terrain
editor.unsaved = [scarlet]You have unsaved changes![]\nAre you sure you want to exit? editor.unsaved = [scarlet]Sinulla on tallentamattomia muutoksia![]\nOletko varma että haluat poistua?
editor.resizemap = Resize Map editor.resizemap = Resize Map
editor.mapname = Kartan nimi: editor.mapname = Kartan nimi:
editor.overwrite = [accent]Warning!\nThis overwrites an existing map. editor.overwrite = [accent]Warning!\nThis overwrites an existing map.
@@ -437,11 +437,11 @@ editor = Editori
mapeditor = Kartan Editori mapeditor = Kartan Editori
abandon = Hylkää abandon = Hylkää
abandon.text = This zone and all its resources will be lost to the enemy. abandon.text = Tämä alue ja kaikki sen resurssit menetetään viholliselle.
locked = Lukittu locked = Lukittu
complete = [lightgray]Reach: complete = [lightgray]Reach:
requirement.wave = Pääse Tasolle {0} kartassa {1} requirement.wave = Pääse Tasolle {0} kartassa {1}
requirement.core = Tuhoa vihollise ydin kartassa {0} requirement.core = Tuhoa vihollisen ydin kartassa {0}
requirement.unlock = Avaa {0} requirement.unlock = Avaa {0}
resume = Resume Zone:\n[lightgray]{0} resume = Resume Zone:\n[lightgray]{0}
bestwave = [lightgray]Paras taso: {0} bestwave = [lightgray]Paras taso: {0}
@@ -724,7 +724,7 @@ keybind.pause.name = Pause
keybind.pause_building.name = Pause/Resume Building keybind.pause_building.name = Pause/Resume Building
keybind.minimap.name = Pienoiskartta keybind.minimap.name = Pienoiskartta
keybind.chat.name = Keskustelu keybind.chat.name = Keskustelu
keybind.player_list.name = Player list keybind.player_list.name = Pelaaja lista
keybind.console.name = Console keybind.console.name = Console
keybind.rotate.name = Rotate keybind.rotate.name = Rotate
keybind.rotateplaced.name = Rotate Existing (Hold) keybind.rotateplaced.name = Rotate Existing (Hold)

View File

@@ -1065,8 +1065,8 @@ tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwi
tutorial.drill = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nPlacez-en une sur un filon de cuivre. tutorial.drill = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nPlacez-en une sur un filon de cuivre.
tutorial.drill.mobile = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nAppuyez sur l'onglet de forage en bas à droite.\nSélectionnez la[accent] perceuse mécanique[].\nPlacez-la sur une veine de cuivre, puis appuyez sur la[accent] coche(V)[] ci-dessous pour confirmer votre sélection.\nAppuyez sur le [accent] bouton X[]pour annuler le placement. tutorial.drill.mobile = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nAppuyez sur l'onglet de forage en bas à droite.\nSélectionnez la[accent] perceuse mécanique[].\nPlacez-la sur une veine de cuivre, puis appuyez sur la[accent] coche(V)[] ci-dessous pour confirmer votre sélection.\nAppuyez sur le [accent] bouton X[]pour annuler le placement.
tutorial.blockinfo = Chaque bloc a des statistiques différentes. Chaque foreuse ne peut extraire que certains minerais.\nPour vérifier les informations et les statistiques d'un bloc,[accent] tapez sur le "?" tout en le sélectionnant dans le menu de compilation.[]\n\n[accent]Accédez aux statistiques de la foreuse mécanique maintenant.[] tutorial.blockinfo = Chaque bloc a des statistiques différentes. Chaque foreuse ne peut extraire que certains minerais.\nPour vérifier les informations et les statistiques d'un bloc,[accent] tapez sur le "?" tout en le sélectionnant dans le menu de compilation.[]\n\n[accent]Accédez aux statistiques de la foreuse mécanique maintenant.[]
tutorial.conveyor = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreusse à la base.\n[accent]Maintenez le clique droit de la souris pour placer dans une ligne.[]\nMaintenir[accent] CTRL[] en sélectionnant une ligne à placer en diagonale.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base. tutorial.conveyor = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreuse à la base.\n[accent]Maintenez le clique droit de la souris pour placer dans une ligne.[]\nMaintenir[accent] CTRL[] en sélectionnant une ligne à placer en diagonale.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base.
tutorial.conveyor.mobile = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreusse à la base.\n[accent] Placez dans une ligne en maintenant votre doigt appuyé pendant quelques secondes[] et en le faisant glisser dans une direction.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base. tutorial.conveyor.mobile = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreuse à la base.\n[accent] Placez dans une ligne en maintenant votre doigt appuyé pendant quelques secondes[] et en le faisant glisser dans une direction.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base.
tutorial.turret = Des constructions défensives doivent être construites pour repousser [LIGHT_GRAY]les ennemis[].Construisez une tourelle "duo" près de votre base. tutorial.turret = Des constructions défensives doivent être construites pour repousser [LIGHT_GRAY]les ennemis[].Construisez une tourelle "duo" près de votre base.
tutorial.drillturret = Les tourelles "Duo" ont besoin de [accent]munitions en cuivre[] pour tirer.\nPlacez une foreuse à côté de la tourelle pour l'approvisionner avec du cuivre. tutorial.drillturret = Les tourelles "Duo" ont besoin de [accent]munitions en cuivre[] pour tirer.\nPlacez une foreuse à côté de la tourelle pour l'approvisionner avec du cuivre.
tutorial.pause = Pendant le combat, vous pouvez[accent] mettre le jeu en pause.[]\nVous pouvez construire des bâtiments pendant que le jeu est en pause.\n\n[accent]Appuyez sur espace pour mettre le jeu en pause. tutorial.pause = Pendant le combat, vous pouvez[accent] mettre le jeu en pause.[]\nVous pouvez construire des bâtiments pendant que le jeu est en pause.\n\n[accent]Appuyez sur espace pour mettre le jeu en pause.

View File

@@ -39,6 +39,8 @@ be.check = Verifica aggiornamenti
schematic = Schematica schematic = Schematica
schematic.add = Salva Schematica... schematic.add = Salva Schematica...
schematics = Schematiche schematics = Schematiche
schematic.replace = Esiste già una schematica con questo nome. Sostituirla?
schematic.exists = Esiste già una schematica con questo nome.
schematic.import = Importa schematica schematic.import = Importa schematica
schematic.exportfile = Esporta File schematic.exportfile = Esporta File
schematic.importfile = Importa File schematic.importfile = Importa File
@@ -765,6 +767,7 @@ rules.attack = Modalità Attacco
rules.enemyCheat = Risorse AI Infinite rules.enemyCheat = Risorse AI Infinite
rules.unitdrops = Generazione Unità rules.unitdrops = Generazione Unità
rules.unitbuildspeedmultiplier = Moltiplicatore Velocità Costruzione Unità rules.unitbuildspeedmultiplier = Moltiplicatore Velocità Costruzione Unità
rules.deconstructrefundmultiplier = Resa Rimborso di Smantellamento
rules.unithealthmultiplier = Moltiplicatore Vita Unità rules.unithealthmultiplier = Moltiplicatore Vita Unità
rules.blockhealthmultiplier = Moltiplicatore Danno Blocco rules.blockhealthmultiplier = Moltiplicatore Danno Blocco
rules.playerhealthmultiplier = Moltiplicatore Vita Giocatore rules.playerhealthmultiplier = Moltiplicatore Vita Giocatore

View File

@@ -37,7 +37,7 @@ be.noupdates = 更新が見つかりません。
be.check = 更新を確認します。 be.check = 更新を確認します。
schematic = 設計図 schematic = 設計図
schematic.add = 設計図を保存しています... schematic.add = 設計図を保存
schematics = 設計図一覧 schematics = 設計図一覧
schematic.replace = 同じ名前の設計図があるようです。 上書きしますか? schematic.replace = 同じ名前の設計図があるようです。 上書きしますか?
schematic.import = 設計図をインポート schematic.import = 設計図をインポート
@@ -97,7 +97,7 @@ committingchanges = 変更を適応中
done = 完了 done = 完了
feature.unsupported = あなたのデバイスはこの機能をサポートしていません。 feature.unsupported = あなたのデバイスはこの機能をサポートしていません。
mods.alphainfo = Mods機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 発見した問題をMindustry GitHubに報告してください。 mods.alphainfo = Mods機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 問題を発見した場合は Mindustry GitHubに報告してください。
mods.alpha = [accent](Alpha) mods.alpha = [accent](Alpha)
mods = Mods mods = Mods
mods.none = [LIGHT_GRAY]Modが見つかりませんでした! mods.none = [LIGHT_GRAY]Modが見つかりませんでした!
@@ -283,14 +283,14 @@ map.nospawn = このマップにはプレイヤーが出現するためのコア
map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[SCARLET]オレンジ色ではない[]コアをマップに追加してください。 map.nospawn.pvp = このマップには敵のプレイヤーが出現するためのコアがありません! エディターで[SCARLET]オレンジ色ではない[]コアをマップに追加してください。
map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[SCARLET]赤色[]のコアをマップに追加してください。 map.nospawn.attack = このマップには攻撃するための敵のコアがありません! エディターで[SCARLET]赤色[]のコアをマップに追加してください。
map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。 map.invalid = マップの読み込みエラー: ファイルが無効、または破損しています。
workshop.update = Update Item workshop.update = 更新
workshop.error = Error fetching workshop details: {0} workshop.error = ワークショップの詳細を取得中にエラーが発生しました: {0}
map.publish.confirm = 本当にこのマップを公開しますか?\n\n[lightgray]公開するためには、ワークショップ利用規約に同意する必要があります。 map.publish.confirm = 本当にこのマップを公開しますか?\n\n[lightgray]公開するためには、ワークショップ利用規約に同意する必要があります。
workshop.menu = Select what you would like to do with this item. workshop.menu = このアイテムに対して行う操作を選択してください。
workshop.info = Item Info workshop.info = アイテムの詳細
changelog = Changelog (optional): changelog = 更新履歴 (オプション):
eula = Steam EULA eula = Steam EULA
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. missing = このアイテムは削除または移動されています。\n[lightgray]ワークショップのリストは自動的にリンク解除されました。
publishing = [accent]Publishing... publishing = [accent]Publishing...
publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up! publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up!
publish.error = Error publishing item: {0} publish.error = Error publishing item: {0}
@@ -373,9 +373,9 @@ editor.overwrite.confirm = [scarlet]警告![] すでに同じ名前のマップ
editor.exists = すでに同じ名前のマップが存在します。 editor.exists = すでに同じ名前のマップが存在します。
editor.selectmap = 読み込むマップを選択: editor.selectmap = 読み込むマップを選択:
toolmode.replace = きかえ toolmode.replace =
toolmode.replace.description = 固体ブロックのみに描きます。 toolmode.replace.description = 固体ブロックのみに描きます。
toolmode.replaceall = 全て置きかえ toolmode.replaceall = 全て置
toolmode.replaceall.description = このマップにあるすべてのブロックを置き換えます。 toolmode.replaceall.description = このマップにあるすべてのブロックを置き換えます。
toolmode.orthogonal = 直角 toolmode.orthogonal = 直角
toolmode.orthogonal.description = 直角の線を描きます。 toolmode.orthogonal.description = 直角の線を描きます。
@@ -496,11 +496,11 @@ zone.fungalPass.name = ファングル ・ パス
zone.groundZero.description = Mindustryに慣れていない初心者向けのマップです。敵は強くなく、資源も多すぎません。\n出来るだけ多くの銅と鉛を集めるのがポイントです。 zone.groundZero.description = Mindustryに慣れていない初心者向けのマップです。敵は強くなく、資源も多すぎません。\n出来るだけ多くの銅と鉛を集めるのがポイントです。
zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\n電力を使用してみましょう。火力発電機を建設し、修復機の使い方を学びましょう。 zone.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\n電力を使用してみましょう。火力発電機を建設し、修復機の使い方を学びましょう。
zone.desertWastes.description = 大量の廃棄物が散乱し、放棄された建造物が存在します。\nこのマップには石炭が存在します。石炭を燃やして発電したり、グラファイトを生成しましょう。\n\n[lightgray]この着陸位置は保証できません。 zone.desertWastes.description = 大量の廃棄物が散乱し、放棄された建造物が存在します。\nこのマップには石炭が存在します。石炭を燃やして発電したり、グラファイトを生成しましょう。\n\n[lightgray]この着陸位置は保証できません。
zone.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. zone.saltFlats.description = 砂漠の外れに塩類平原がある。この土地には殆ど資源が存在しません。\nしかし敵はここに資源貯蔵施設を建設しました。敵のコアを破壊してそこに建造しましょう。
zone.craters.description = このクレーターには、古い戦争の遺物である水が溜まっています。マップを開拓し、砂を集めましょう。メタガラスを生成して、水をポンプで吸い上げ、タレットやドリルを冷却しましょう。 zone.craters.description = このクレーターには、古い戦争の遺物である水が溜まっています。マップを開拓し、砂を集めましょう。メタガラスを生成して、水をポンプで吸い上げ、タレットやドリルを冷却しましょう。
zone.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. zone.ruinousShores.description = ゴミの向こうに海岸線がある。かつて、この場所には沿岸防衛の隊列があった。今ではその面影も殆ど無い。\n基本的な防衛構造だけは無傷のまま残っているが残りはすべて廃れた。\n外側に拡張していきましょうそして技術を再発見しましょう。
zone.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. zone.stainedMountains.description = 山の奥の内陸には胞子に汚染されてない土地がある。\nここでは豊富なチタンが採掘出来る。その使い方を学ぼう。\nここの敵はかなり手強い。\n奴らが大型のユニットを送る時間を与えないようにしなければ。
zone.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build dagger units. Destroy it. Reclaim that which was lost. zone.overgrowth.description = この土地は胞子の発生源に近く、過剰に増殖している。敵はここに前哨基地を設けた。\nダガーユニットを作ろう。前哨基地を破壊して失った物を取り戻そう。
zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. zone.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible.
zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. zone.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks.
zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. zone.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers.
@@ -559,9 +559,9 @@ blocks.maxunits = 最大ユニット数
blocks.health = 耐久値 blocks.health = 耐久値
blocks.buildtime = 建設時間 blocks.buildtime = 建設時間
blocks.buildcost = 建設費用 blocks.buildcost = 建設費用
blocks.inaccuracy = 精度のずれ blocks.inaccuracy = 誤差
blocks.shots = ショット blocks.shots = ショット
blocks.reload = ショット/秒 blocks.reload = リロード速度
blocks.ammo = 弾薬 blocks.ammo = 弾薬
bar.drilltierreq = より良いドリルが必要です bar.drilltierreq = より良いドリルが必要です
@@ -929,8 +929,8 @@ block.scorch.name = スコーチ
block.scatter.name = スキャッター block.scatter.name = スキャッター
block.hail.name = ヘイル block.hail.name = ヘイル
block.lancer.name = ランサー block.lancer.name = ランサー
block.conveyor.name = コンベア block.conveyor.name = コンベア
block.titanium-conveyor.name = チタンコンベア block.titanium-conveyor.name = チタンコンベア
block.armored-conveyor.name = 装甲コンベア block.armored-conveyor.name = 装甲コンベア
block.junction.name = ジャンクション block.junction.name = ジャンクション
block.router.name = ルーター block.router.name = ルーター
@@ -1193,7 +1193,7 @@ block.battery-large.description = 通常のバッテリーよりもたくさん
block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。 block.combustion-generator.description = 石油や可燃性の物質を燃やして発電します。
block.thermal-generator.description = 溶岩から大量の電力を発電します。 block.thermal-generator.description = 溶岩から大量の電力を発電します。
block.turbine-generator.description = 水を使って火力発電機より効率的に発電します。 block.turbine-generator.description = 水を使って火力発電機より効率的に発電します。
block.differential-generator.description = 体力の電力を生成します。冷却水と燃焼したピラタイトの温度差を利用します。 block.differential-generator.description = 大量の電力を生成します。冷却水と燃焼したピラタイトの温度差を利用します。
block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。 block.rtg-generator.description = トリウムリアクターよりも発電量は少ないですが、冷却を必要としない放射性同位体熱発電機(RTG)です。
block.solar-panel.description = 太陽光から少量の電力を発電します。 block.solar-panel.description = 太陽光から少量の電力を発電します。
block.solar-panel-large.description = 高価な建設費と引き換えに、通常のソーラーパネルより大量の電力を発電することができます。 block.solar-panel-large.description = 高価な建設費と引き換えに、通常のソーラーパネルより大量の電力を発電することができます。

View File

@@ -40,6 +40,7 @@ schematic = Schemat
schematic.add = Zapisz schemat... schematic.add = Zapisz schemat...
schematics = Schematy schematics = Schematy
schematic.replace = Schemat o takiej nazwie już istnieje. Czy chcesz go zastąpić? schematic.replace = Schemat o takiej nazwie już istnieje. Czy chcesz go zastąpić?
schematic.exists = Schemat o tej nazwie już istnieje.
schematic.import = Importuj Schemat... schematic.import = Importuj Schemat...
schematic.exportfile = Eksportuj plik schematic.exportfile = Eksportuj plik
schematic.importfile = Importuj plik schematic.importfile = Importuj plik
@@ -105,6 +106,7 @@ mods.none = [LIGHT_GRAY]Nie znaleziono modów!
mods.guide = Poradnik do modów mods.guide = Poradnik do modów
mods.report = Zgłoś Błąd mods.report = Zgłoś Błąd
mods.openfolder = Otwórz folder z modami mods.openfolder = Otwórz folder z modami
mod.display = [gray]Mod:[orange] {0}
mod.enabled = [lightgray]Włączony mod.enabled = [lightgray]Włączony
mod.disabled = [scarlet]Wyłączony mod.disabled = [scarlet]Wyłączony
mod.disable = Wyłącz mod.disable = Wyłącz
@@ -171,6 +173,11 @@ hosts.discovering.any = Wyszukiwanie gier
server.refreshing = Odświeżanie serwera server.refreshing = Odświeżanie serwera
hosts.none = [lightgray]Brak serwerów w sieci LAN! hosts.none = [lightgray]Brak serwerów w sieci LAN!
host.invalid = [scarlet]Nie można połączyć się z hostem. host.invalid = [scarlet]Nie można połączyć się z hostem.
servers.local = Serwery Lokalne
servers.remote = Serwery Zdalne
servers.global = Serwery Publiczne
trace = Zlokalizuj Gracza trace = Zlokalizuj Gracza
trace.playername = Nazwa gracza: [accent]{0} trace.playername = Nazwa gracza: [accent]{0}
trace.ip = IP: [accent]{0} trace.ip = IP: [accent]{0}
@@ -252,6 +259,7 @@ copylink = Kopiuj Link
back = Wróć back = Wróć
data.export = Eksportuj Dane data.export = Eksportuj Dane
data.import = Importuj Dane data.import = Importuj Dane
data.openfolder = Otwórz folder danych
data.exported = Dane wyeksportowane. data.exported = Dane wyeksportowane.
data.invalid = Nieprawidłowe dane gry. data.invalid = Nieprawidłowe dane gry.
data.import.confirm = Zaimportowanie zewnętrznych danych usunie[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zimportowane, gra automatycznie się wyłączy. data.import.confirm = Zaimportowanie zewnętrznych danych usunie[scarlet] wszystkie[] obecne dane gry.\n[accent]Nie można tego cofnąć![]\n\nGdy dane zostaną zimportowane, gra automatycznie się wyłączy.
@@ -668,8 +676,10 @@ setting.mutesound.name = Wycisz dźwięki
setting.crashreport.name = Wysyłaj anonimowo dane o crashu gry setting.crashreport.name = Wysyłaj anonimowo dane o crashu gry
setting.savecreate.name = Automatyczne tworzenie zapisu setting.savecreate.name = Automatyczne tworzenie zapisu
setting.publichost.name = Widoczność Gry Publicznej setting.publichost.name = Widoczność Gry Publicznej
setting.playerlimit.name = Limit Graczy
setting.chatopacity.name = Przezroczystość czatu setting.chatopacity.name = Przezroczystość czatu
setting.lasersopacity.name = Przezroczystość laserów zasilających setting.lasersopacity.name = Przezroczystość laserów zasilających
setting.bridgeopacity.name = Przezroczystość mostów
setting.playerchat.name = Wyświetlaj czat w grze setting.playerchat.name = Wyświetlaj czat w grze
public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej. public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej.
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi. public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
@@ -767,6 +777,7 @@ rules.respawntime = Czas odrodzenia:[lightgray] (sek)
rules.wavespacing = Odstępy między falami:[lightgray] (sek) rules.wavespacing = Odstępy między falami:[lightgray] (sek)
rules.buildcostmultiplier = Mnożnik kosztów budowania rules.buildcostmultiplier = Mnożnik kosztów budowania
rules.buildspeedmultiplier = Mnożnik prędkości budowania rules.buildspeedmultiplier = Mnożnik prędkości budowania
rules.deconstructrefundmultiplier = Mnożnik Zwrotu Dekonstrukcji
rules.waitForWaveToEnd = Fale czekają na przeciwników rules.waitForWaveToEnd = Fale czekają na przeciwników
rules.dropzoneradius = Zasięg strefy zrzutu:[lightgray] (kratki) rules.dropzoneradius = Zasięg strefy zrzutu:[lightgray] (kratki)
rules.respawns = Maksymalna ilośc odrodzeń na falę rules.respawns = Maksymalna ilośc odrodzeń na falę
@@ -779,7 +790,8 @@ rules.title.enemy = Przeciwnicy
rules.title.unit = Jednostki rules.title.unit = Jednostki
rules.title.experimental = Eksperymentalne rules.title.experimental = Eksperymentalne
rules.lighting = Oświetlenie rules.lighting = Oświetlenie
rules.ambientlight = Światła otoczenia rules.ambientlight = Otaczające Światło
rules.solarpowermultiplier = Mnożnik Energii Słonecznej
content.item.name = Przedmioty content.item.name = Przedmioty
content.liquid.name = Płyny content.liquid.name = Płyny

View File

@@ -39,6 +39,8 @@ be.check = 檢查是否有新的更新
schematic = 藍圖 schematic = 藍圖
schematic.add = 儲存藍圖... schematic.add = 儲存藍圖...
schematics = 藍圖 schematics = 藍圖
schematic.replace = 相同名稱的藍圖已經存在。是否取代它?
schematic.exists = 相同名稱的藍圖已經存在。
schematic.import = 匯入藍圖... schematic.import = 匯入藍圖...
schematic.exportfile = 匯出檔案 schematic.exportfile = 匯出檔案
schematic.importfile = 匯入檔案 schematic.importfile = 匯入檔案
@@ -775,6 +777,7 @@ rules.respawntime = 重生時間︰[lightgray](秒)
rules.wavespacing = 波次間距︰[lightgray](秒) rules.wavespacing = 波次間距︰[lightgray](秒)
rules.buildcostmultiplier = 建設成本倍數 rules.buildcostmultiplier = 建設成本倍數
rules.buildspeedmultiplier = 建設速度倍數 rules.buildspeedmultiplier = 建設速度倍數
rules.deconstructrefundmultiplier = 拆除資源返還比例
rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次 rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次
rules.dropzoneradius = 空降區半徑:[lightgray](格) rules.dropzoneradius = 空降區半徑:[lightgray](格)
rules.respawns = 每波次最多重生次數 rules.respawns = 每波次最多重生次數

View File

@@ -118,6 +118,7 @@ public class ContentLoader{
callable.get(content); callable.get(content);
}catch(Throwable e){ }catch(Throwable e){
if(content.minfo.mod != null){ if(content.minfo.mod != null){
Log.err(e);
mods.handleContentError(content, e); mods.handleContentError(content, e);
}else{ }else{
throw new RuntimeException(e); throw new RuntimeException(e);
@@ -139,7 +140,7 @@ public class ContentLoader{
if(color == 0) continue; if(color == 0) continue;
Block block = block(i); Block block = block(i);
Color.rgba8888ToColor(block.color, color); block.color.set(color);
} }
} }
pixmap.dispose(); pixmap.dispose();

View File

@@ -193,7 +193,7 @@ public class Control implements ApplicationListener, Loadable{
Core.settings.defaults( Core.settings.defaults(
"ip", "localhost", "ip", "localhost",
"color-0", Color.rgba8888(playerColors[8]), "color-0", playerColors[8].rgba(),
"name", "", "name", "",
"lastBuild", 0 "lastBuild", 0
); );

View File

@@ -81,7 +81,7 @@ public class NetClient implements ApplicationListener{
c.mods = mods.getModStrings(); c.mods = mods.getModStrings();
c.mobile = mobile; c.mobile = mobile;
c.versionType = Version.type; c.versionType = Version.type;
c.color = Color.rgba8888(player.color); c.color = player.color.rgba();
c.usid = getUsid(packet.addressTCP); c.usid = getUsid(packet.addressTCP);
c.uuid = platform.getUUID(); c.uuid = platform.getUUID();

View File

@@ -900,7 +900,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
super.writeSave(buffer, !isLocal); super.writeSave(buffer, !isLocal);
TypeIO.writeStringData(buffer, name); TypeIO.writeStringData(buffer, name);
buffer.writeByte(Pack.byteValue(isAdmin) | (Pack.byteValue(dead) << 1) | (Pack.byteValue(isBoosting) << 2) | (Pack.byteValue(isTyping) << 3)| (Pack.byteValue(isBuilding) << 4)); buffer.writeByte(Pack.byteValue(isAdmin) | (Pack.byteValue(dead) << 1) | (Pack.byteValue(isBoosting) << 2) | (Pack.byteValue(isTyping) << 3)| (Pack.byteValue(isBuilding) << 4));
buffer.writeInt(Color.rgba8888(color)); buffer.writeInt(color.rgba());
buffer.writeByte(mech.id); buffer.writeByte(mech.id);
buffer.writeInt(mining == null ? noSpawner : mining.pos()); buffer.writeInt(mining == null ? noSpawner : mining.pos());
buffer.writeInt(spawner == null || !spawner.hasUnit(this) ? noSpawner : spawner.getTile().pos()); buffer.writeInt(spawner == null || !spawner.hasUnit(this) ? noSpawner : spawner.getTile().pos());

View File

@@ -183,7 +183,7 @@ public class Schematics implements Loadable{
Tmp.m2.set(Draw.trans()); Tmp.m2.set(Draw.trans());
FrameBuffer buffer = new FrameBuffer((schematic.width + padding) * resolution, (schematic.height + padding) * resolution); FrameBuffer buffer = new FrameBuffer((schematic.width + padding) * resolution, (schematic.height + padding) * resolution);
shadowBuffer.beginDraw(Color.clear); shadowBuffer.begin(Color.clear);
Draw.trans().idt(); Draw.trans().idt();
Draw.proj().setOrtho(0, 0, shadowBuffer.getWidth(), shadowBuffer.getHeight()); Draw.proj().setOrtho(0, 0, shadowBuffer.getWidth(), shadowBuffer.getHeight());
@@ -202,9 +202,9 @@ public class Schematics implements Loadable{
} }
}); });
shadowBuffer.endDraw(); shadowBuffer.end();
buffer.beginDraw(Color.clear); buffer.begin(Color.clear);
Draw.proj().setOrtho(0, buffer.getHeight(), buffer.getWidth(), -buffer.getHeight()); Draw.proj().setOrtho(0, buffer.getHeight(), buffer.getWidth(), -buffer.getHeight());
@@ -231,7 +231,7 @@ public class Schematics implements Loadable{
Draw.flush(); Draw.flush();
Draw.trans().idt(); Draw.trans().idt();
buffer.endDraw(); buffer.end();
Draw.proj(Tmp.m1); Draw.proj(Tmp.m1);
Draw.trans(Tmp.m2); Draw.trans(Tmp.m2);

View File

@@ -183,14 +183,14 @@ public class LightRenderer{
} }
Draw.color(); Draw.color();
buffer.beginDraw(Color.clear); buffer.begin(Color.clear);
Gl.blendEquationSeparate(Gl.funcAdd, Gl.max); Gl.blendEquationSeparate(Gl.funcAdd, Gl.max);
for(Runnable run : lights){ for(Runnable run : lights){
run.run(); run.run();
} }
Draw.reset(); Draw.reset();
buffer.endDraw(); buffer.end();
Gl.blendEquationSeparate(Gl.funcAdd, Gl.funcAdd); Gl.blendEquationSeparate(Gl.funcAdd, Gl.funcAdd);
Draw.color(); Draw.color();

View File

@@ -169,7 +169,7 @@ public class MenuRenderer implements Disposable{
//draw shadows //draw shadows
Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight()); Draw.proj().setOrtho(0, 0, shadows.getWidth(), shadows.getHeight());
shadows.beginDraw(Color.clear); shadows.begin(Color.clear);
Draw.color(Color.black); Draw.color(Color.black);
for(int x = 0; x < width; x++){ for(int x = 0; x < width; x++){
for(int y = 0; y < height; y++){ for(int y = 0; y < height; y++){
@@ -179,7 +179,7 @@ public class MenuRenderer implements Disposable{
} }
} }
Draw.color(); Draw.color();
shadows.endDraw(); shadows.end();
SpriteBatch prev = Core.batch; SpriteBatch prev = Core.batch;

View File

@@ -75,7 +75,7 @@ public class MapIO{
Pixmap floors = new Pixmap(map.width, map.height, Format.RGBA8888); Pixmap floors = new Pixmap(map.width, map.height, Format.RGBA8888);
Pixmap walls = new Pixmap(map.width, map.height, Format.RGBA8888); Pixmap walls = new Pixmap(map.width, map.height, Format.RGBA8888);
int black = Color.rgba8888(Color.black); int black = 255;
int shade = Color.rgba8888(0f, 0f, 0f, 0.5f); int shade = Color.rgba8888(0f, 0f, 0f, 0.5f);
CachedTile tile = new CachedTile(){ CachedTile tile = new CachedTile(){
@Override @Override
@@ -148,7 +148,7 @@ public class MapIO{
if(wall.synthetic()){ if(wall.synthetic()){
return team.color.rgba(); return team.color.rgba();
} }
return Color.rgba8888(wall.solid ? wall.color : ore == Blocks.air ? floor.color : ore.color); return (wall.solid ? wall.color : ore == Blocks.air ? floor.color : ore.color).rgba();
} }
/** Reads a pixmap in the 3.5 pixmap format. */ /** Reads a pixmap in the 3.5 pixmap format. */
@@ -164,7 +164,7 @@ public class MapIO{
if(block.ore != null) tile.setOverlay(block.ore); if(block.ore != null) tile.setOverlay(block.ore);
//place core //place core
if(color == Color.rgba8888(Color.green)){ if(color == Color.green.rgba()){
//actual core parts //actual core parts
tile.setBlock(Blocks.coreShard); tile.setBlock(Blocks.coreShard);
tile.setTeam(Team.sharded); tile.setTeam(Team.sharded);

View File

@@ -244,7 +244,7 @@ public class TypeIO{
@WriteClass(Color.class) @WriteClass(Color.class)
public static void writeColor(ByteBuffer buffer, Color color){ public static void writeColor(ByteBuffer buffer, Color color){
buffer.putInt(Color.rgba8888(color)); buffer.putInt(color.rgba());
} }
@ReadClass(Color.class) @ReadClass(Color.class)

View File

@@ -454,6 +454,8 @@ public class ContentParser{
if(t.getMessage() != null && t instanceof JsonParseException){ if(t.getMessage() != null && t instanceof JsonParseException){
builder.append("[accent][[JsonParse][] ").append(":\n").append(t.getMessage()); builder.append("[accent][[JsonParse][] ").append(":\n").append(t.getMessage());
}else if(t instanceof NullPointerException){
builder.append(Strings.parseException(t, true));
}else{ }else{
Array<Throwable> causes = Strings.getCauses(t); Array<Throwable> causes = Strings.getCauses(t);
for(Throwable e : causes){ for(Throwable e : causes){

View File

@@ -122,7 +122,7 @@ public class Scripts implements Disposable{
if(matched.find()){ if(matched.find()){
LoadedMod required = Vars.mods.locateMod(matched.group(1)); LoadedMod required = Vars.mods.locateMod(matched.group(1));
String script = matched.group(2); String script = matched.group(2);
if(required == null || root.equals(required.root.child("scripts"))){ // Mod not found, or already using a mod if(required == null){ // Mod not found, treat it as a folder
Fi dir = root.child(matched.group(1)); Fi dir = root.child(matched.group(1));
if(!dir.exists()) return null; // Mod and folder not found if(!dir.exists()) return null; // Mod and folder not found
return loadSource(script, dir, validator); return loadSource(script, dir, validator);

View File

@@ -1,7 +1,6 @@
package mindustry.ui.dialogs; package mindustry.ui.dialogs;
import arc.*; import arc.*;
import arc.graphics.*;
import arc.scene.ui.*; import arc.scene.ui.*;
import arc.util.*; import arc.util.*;
import mindustry.*; import mindustry.*;
@@ -33,7 +32,7 @@ public class HostDialog extends FloatingDialog{
ImageButton button = t.addImageButton(Tex.whiteui, Styles.clearFulli, 40, () -> { ImageButton button = t.addImageButton(Tex.whiteui, Styles.clearFulli, 40, () -> {
new PaletteDialog().show(color -> { new PaletteDialog().show(color -> {
player.color.set(color); player.color.set(color);
Core.settings.put("color-0", Color.rgba8888(color)); Core.settings.put("color-0", color.rgba());
Core.settings.save(); Core.settings.save();
}); });
}).size(54f).get(); }).size(54f).get();

View File

@@ -1,16 +1,15 @@
package mindustry.ui.dialogs; package mindustry.ui.dialogs;
import arc.*; import arc.*;
import mindustry.annotations.Annotations.*;
import arc.struct.*;
import arc.graphics.*;
import arc.input.*; import arc.input.*;
import arc.math.*; import arc.math.*;
import arc.scene.ui.*; import arc.scene.ui.*;
import arc.scene.ui.layout.*; import arc.scene.ui.layout.*;
import arc.struct.*;
import arc.util.*; import arc.util.*;
import arc.util.serialization.*; import arc.util.serialization.*;
import mindustry.*; import mindustry.*;
import mindustry.annotations.Annotations.*;
import mindustry.core.*; import mindustry.core.*;
import mindustry.gen.*; import mindustry.gen.*;
import mindustry.graphics.*; import mindustry.graphics.*;
@@ -275,7 +274,7 @@ public class JoinDialog extends FloatingDialog{
ImageButton button = t.addImageButton(Tex.whiteui, Styles.clearFulli, 40, () -> { ImageButton button = t.addImageButton(Tex.whiteui, Styles.clearFulli, 40, () -> {
new PaletteDialog().show(color -> { new PaletteDialog().show(color -> {
player.color.set(color); player.color.set(color);
Core.settings.put("color-0", Color.rgba8888(color)); Core.settings.put("color-0", color.rgba());
Core.settings.save(); Core.settings.save();
}); });
}).size(54f).get(); }).size(54f).get();

View File

@@ -21,6 +21,7 @@ public class PlayerListFragment extends Fragment{
private boolean visible = false; private boolean visible = false;
private Table content = new Table().marginRight(13f).marginLeft(13f); private Table content = new Table().marginRight(13f).marginLeft(13f);
private Interval timer = new Interval(); private Interval timer = new Interval();
private TextField sField;
@Override @Override
public void build(Group parent){ public void build(Group parent){
@@ -44,6 +45,12 @@ public class PlayerListFragment extends Fragment{
cont.table(Tex.buttonTrans, pane -> { cont.table(Tex.buttonTrans, pane -> {
pane.label(() -> Core.bundle.format(playerGroup.size() == 1 ? "players.single" : "players", playerGroup.size())); pane.label(() -> Core.bundle.format(playerGroup.size() == 1 ? "players.single" : "players", playerGroup.size()));
pane.row(); pane.row();
sField = pane.addField(null, text -> {
rebuild();
}).grow().pad(8).get();
sField.setMaxLength(maxNameLength);
sField.setMessageText(Core.bundle.format("players.search"));
pane.row();
pane.pane(content).grow().get().setScrollingDisabled(true, false); pane.pane(content).grow().get().setScrollingDisabled(true, false);
pane.row(); pane.row();
@@ -71,6 +78,7 @@ public class PlayerListFragment extends Fragment{
NetConnection connection = user.con; NetConnection connection = user.con;
if(connection == null && net.server() && !user.isLocal) return; if(connection == null && net.server() && !user.isLocal) return;
if(sField.getText().length() > 0 && !user.name.toLowerCase().contains(sField.getText().toLowerCase()) && !Strings.stripColors(user.name.toLowerCase()).contains(sField.getText().toLowerCase())) return;
Table button = new Table(); Table button = new Table();
button.left(); button.left();
@@ -105,9 +113,9 @@ public class PlayerListFragment extends Fragment{
t.defaults().size(bs); t.defaults().size(bs);
t.addImageButton(Icon.hammer, Styles.clearPartiali, t.addImageButton(Icon.hammer, Styles.clearPartiali,
() -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(user, AdminAction.ban))); () -> ui.showConfirm("$confirm", "$confirmban", () -> Call.onAdminRequest(user, AdminAction.ban)));
t.addImageButton(Icon.cancel, Styles.clearPartiali, t.addImageButton(Icon.cancel, Styles.clearPartiali,
() -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(user, AdminAction.kick))); () -> ui.showConfirm("$confirm", "$confirmkick", () -> Call.onAdminRequest(user, AdminAction.kick)));
t.row(); t.row();
@@ -122,10 +130,10 @@ public class PlayerListFragment extends Fragment{
ui.showConfirm("$confirm", "$confirmadmin", () -> netServer.admins.adminPlayer(id, user.usid)); ui.showConfirm("$confirm", "$confirmadmin", () -> netServer.admins.adminPlayer(id, user.usid));
} }
}) })
.update(b -> b.setChecked(user.isAdmin)) .update(b -> b.setChecked(user.isAdmin))
.disabled(b -> net.client()) .disabled(b -> net.client())
.touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled) .touchable(() -> net.client() ? Touchable.disabled : Touchable.enabled)
.checked(user.isAdmin); .checked(user.isAdmin);
t.addImageButton(Icon.zoom, Styles.clearPartiali, () -> Call.onAdminRequest(user, AdminAction.trace)); t.addImageButton(Icon.zoom, Styles.clearPartiali, () -> Call.onAdminRequest(user, AdminAction.trace));
@@ -134,7 +142,7 @@ public class PlayerListFragment extends Fragment{
button.add().growY(); button.add().growY();
button.addImageButton(Icon.hammer, Styles.clearPartiali, button.addImageButton(Icon.hammer, Styles.clearPartiali,
() -> ui.showConfirm("$confirm", "$confirmvotekick", () -> Call.sendChatMessage("/votekick " + user.name))).size(h); () -> ui.showConfirm("$confirm", "$confirmvotekick", () -> Call.sendChatMessage("/votekick " + user.name))).size(h);
} }
content.add(button).padBottom(-6).width(350f).maxHeight(h + 14); content.add(button).padBottom(-6).width(350f).maxHeight(h + 14);
@@ -143,6 +151,10 @@ public class PlayerListFragment extends Fragment{
content.row(); content.row();
}); });
if(sField.getText().length() > 0 && !playerGroup.all().contains(user -> user.name.toLowerCase().contains(sField.getText().toLowerCase()))) {
content.add(Core.bundle.format("players.notfound")).padBottom(6).width(350f).maxHeight(h + 14);
}
content.marginBottom(5); content.marginBottom(5);
} }
@@ -150,6 +162,9 @@ public class PlayerListFragment extends Fragment{
visible = !visible; visible = !visible;
if(visible){ if(visible){
rebuild(); rebuild();
}else{
Core.scene.setKeyboardFocus(null);
sField.clearText();
} }
} }

View File

@@ -43,15 +43,15 @@ public class LegacyColorMapper implements ContentList{
} }
private void map(String color, Block block, Block wall, Block ore){ private void map(String color, Block block, Block wall, Block ore){
blockMap.put(Color.rgba8888(Color.valueOf(color)), new LegacyBlock(block, wall, ore)); blockMap.put(Color.valueOf(color).rgba(), new LegacyBlock(block, wall, ore));
} }
private void map(String color, Block block, Block wall){ private void map(String color, Block block, Block wall){
blockMap.put(Color.rgba8888(Color.valueOf(color)), new LegacyBlock(block, wall)); blockMap.put(Color.valueOf(color).rgba(), new LegacyBlock(block, wall));
} }
private void map(String color, Block block){ private void map(String color, Block block){
blockMap.put(Color.rgba8888(Color.valueOf(color)), new LegacyBlock(block, Blocks.air)); blockMap.put(Color.valueOf(color).rgba(), new LegacyBlock(block, Blocks.air));
} }
public static class LegacyBlock{ public static class LegacyBlock{

View File

@@ -100,7 +100,7 @@ public class ImpactReactor extends PowerGenerator{
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy()); Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy());
for(int i = 0; i < plasmas; i++){ for(int i = 0; i < plasmas; i++){
float r = 29f + Mathf.absin(Time.time(), 2f + i * 1f, 5f - i * 0.5f); float r = size * tilesize - 3f + Mathf.absin(Time.time(), 2f + i * 1f, 5f - i * 0.5f);
Draw.color(plasma1, plasma2, (float)i / plasmas); Draw.color(plasma1, plasma2, (float)i / plasmas);
Draw.alpha((0.3f + Mathf.absin(Time.time(), 2f + i * 2f, 0.3f + i * 0.05f)) * entity.warmup); Draw.alpha((0.3f + Mathf.absin(Time.time(), 2f + i * 2f, 0.3f + i * 0.05f)) * entity.warmup);

View File

@@ -104,7 +104,7 @@ PackrConfig.Platform.values().each{ platform ->
classpath = ["desktop/build/packr/desktop.jar"] classpath = ["desktop/build/packr/desktop.jar"]
removePlatformLibs = ["desktop/build/packr/desktop.jar"] removePlatformLibs = ["desktop/build/packr/desktop.jar"]
vmArgs = ["Djava.net.preferIPv4Stack=true"] vmArgs = []
minimizeJre = "desktop/packr_minimize.json" minimizeJre = "desktop/packr_minimize.json"
jdk = JDK_DIR + "jdk-${platform.toString().toLowerCase()}.zip" jdk = JDK_DIR + "jdk-${platform.toString().toLowerCase()}.zip"

View File

@@ -1,3 +1,3 @@
org.gradle.daemon=true org.gradle.daemon=true
org.gradle.jvmargs=-Xms256m -Xmx1024m org.gradle.jvmargs=-Xms256m -Xmx1024m
archash=31a5158c6395b7e905ba546348c98fd99ea736bb archash=dd0f2c60c53919ce97c987e502acf94af3a9a2b4

View File

@@ -27,8 +27,8 @@ def transformColors = { List<List<String>> list ->
} }
newColors.each{ color -> newColors.each{ color ->
colorMap.put(Color.argb8888(color), newColors) colorMap.put(color.argb8888(), newColors)
colorIndexMap.put(Color.argb8888(color), newColors.indexOf(color)) colorIndexMap.put(color.argb8888(), newColors.indexOf(color))
} }
} }
} }

View File

@@ -50,7 +50,7 @@ class Image{
Color getColor(int x, int y){ Color getColor(int x, int y){
if(!Structs.inBounds(x, y, width, height)) return color.set(0, 0, 0, 0); if(!Structs.inBounds(x, y, width, height)) return color.set(0, 0, 0, 0);
int i = image.getRGB(x, y); int i = image.getRGB(x, y);
Color.argb8888ToColor(color, i); color.argb8888(i);
return color; return color;
} }