Merged current master into branch (with manual changes)
@ -20,7 +20,7 @@
|
||||
<activity
|
||||
android:name="io.anuke.mindustry.AndroidLauncher"
|
||||
android:label="@string/app_name"
|
||||
android:screenOrientation="sensor"
|
||||
android:screenOrientation="user"
|
||||
android:configChanges="keyboard|keyboardHidden|orientation|screenSize|screenLayout">
|
||||
|
||||
<intent-filter>
|
||||
|
@ -8,12 +8,11 @@ buildscript {
|
||||
}
|
||||
dependencies {
|
||||
classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.0'
|
||||
classpath "com.badlogicgames.gdx:gdx-tools:1.9.8"
|
||||
classpath "com.badlogicgames.gdx:gdx-tools:1.9.9"
|
||||
}
|
||||
}
|
||||
|
||||
allprojects {
|
||||
apply plugin: "eclipse"
|
||||
apply plugin: "idea"
|
||||
|
||||
version = 'release'
|
||||
@ -25,7 +24,7 @@ allprojects {
|
||||
appName = 'Mindustry'
|
||||
gdxVersion = '1.9.9'
|
||||
roboVMVersion = '2.3.0'
|
||||
uCoreVersion = 'f73e538757ac66ff62d7f25d93011142b6abb8df'
|
||||
uCoreVersion = '3dfb820142a0fc583ad19413a24fc5038aa29d89'
|
||||
|
||||
getVersionString = {
|
||||
String buildVersion = getBuildVersion()
|
||||
|
@ -1,5 +1,6 @@
|
||||
{
|
||||
duplicatePadding: true,
|
||||
combineSubdirectories: true,
|
||||
flattenPaths: true
|
||||
flattenPaths: true,
|
||||
fast: true
|
||||
}
|
||||
|
Before Width: | Height: | Size: 132 B |
Before Width: | Height: | Size: 133 B After Width: | Height: | Size: 256 B |
BIN
core/assets-raw/sprites/ui/button-edge-1.9.png
Normal file
After Width: | Height: | Size: 261 B |
BIN
core/assets-raw/sprites/ui/button-edge-2.9.png
Normal file
After Width: | Height: | Size: 253 B |
BIN
core/assets-raw/sprites/ui/button-edge-3.9.png
Normal file
After Width: | Height: | Size: 271 B |
BIN
core/assets-raw/sprites/ui/button-edge-4.9.png
Normal file
After Width: | Height: | Size: 247 B |
Before Width: | Height: | Size: 133 B After Width: | Height: | Size: 284 B |
BIN
core/assets-raw/sprites/ui/button-right-down.9.png
Normal file
After Width: | Height: | Size: 241 B |
BIN
core/assets-raw/sprites/ui/button-right-over.9.png
Normal file
After Width: | Height: | Size: 265 B |
BIN
core/assets-raw/sprites/ui/button-right.9.png
Normal file
After Width: | Height: | Size: 284 B |
Before Width: | Height: | Size: 131 B After Width: | Height: | Size: 282 B |
BIN
core/assets-raw/sprites/ui/icons/icon-copy.png
Normal file
After Width: | Height: | Size: 195 B |
BIN
core/assets-raw/sprites/ui/icons/icon-paste.png
Normal file
After Width: | Height: | Size: 200 B |
BIN
core/assets-raw/sprites/ui/pane-2.9.png
Normal file
After Width: | Height: | Size: 238 B |
Before Width: | Height: | Size: 117 B |
Before Width: | Height: | Size: 211 B After Width: | Height: | Size: 248 B |
Before Width: | Height: | Size: 115 B After Width: | Height: | Size: 178 B |
BIN
core/assets-raw/sprites/ui/scroll-knob-horizontal-black.9.png
Normal file
After Width: | Height: | Size: 186 B |
Before Width: | Height: | Size: 127 B |
Before Width: | Height: | Size: 117 B After Width: | Height: | Size: 187 B |
Before Width: | Height: | Size: 126 B |
Before Width: | Height: | Size: 116 B After Width: | Height: | Size: 181 B |
Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 238 B |
Before Width: | Height: | Size: 123 B After Width: | Height: | Size: 234 B |
Before Width: | Height: | Size: 121 B After Width: | Height: | Size: 238 B |
Before Width: | Height: | Size: 73 B After Width: | Height: | Size: 135 B |
Before Width: | Height: | Size: 130 B |
Before Width: | Height: | Size: 116 B |
Before Width: | Height: | Size: 116 B |
BIN
core/assets-raw/sprites/ui/underline-2.9.png
Normal file
After Width: | Height: | Size: 238 B |
BIN
core/assets-raw/sprites/ui/underline.9.png
Normal file
After Width: | Height: | Size: 237 B |
Before Width: | Height: | Size: 172 B |
@ -351,6 +351,7 @@ text.category.items = Items
|
||||
text.category.crafting = Crafting
|
||||
text.category.shooting = Shooting
|
||||
text.category.optional = Optional Enhancements
|
||||
setting.indicators.name = Ally Indicators
|
||||
setting.autotarget.name = Auto-Target
|
||||
setting.fpscap.name = Max FPS
|
||||
setting.fpscap.none = None
|
||||
|
@ -99,7 +99,7 @@ text.hosts.refresh = Actualizar
|
||||
text.hosts.discovering = Descubrir partidas LAN
|
||||
text.server.refreshing = Actualizando servidor...
|
||||
text.hosts.none = [lightgray]¡No se han encontrado partidas LAN!
|
||||
text.host.invalid = [scarlet]No se ha podido conectar al anfitrión
|
||||
text.host.invalid = [scarlet]No se ha podido conectar al anfitrión.
|
||||
text.trace = Rastrear Jugador
|
||||
text.trace.playername = Nombre de jugador: [accent]{0}
|
||||
text.trace.ip = IP: [accent]{0}
|
||||
@ -176,7 +176,7 @@ text.open = Abrir
|
||||
text.cancel = Cancelar
|
||||
text.openlink = Abrir Enlace
|
||||
text.copylink = Copiar Enlace
|
||||
text.back = Atras
|
||||
text.back = Atrás
|
||||
text.quit.confirm = ¿Estás seguro de querer salir de la partida?
|
||||
text.changelog.title = Registro de Parches
|
||||
text.changelog.loading = Consiguiendo el registro de parches...
|
||||
@ -252,7 +252,7 @@ text.load = Cargar
|
||||
text.save = Guardar
|
||||
text.fps = FPS: {0}
|
||||
text.tps = TPS: {0}
|
||||
text.ping = Ping: {0}ms
|
||||
text.ping = Ping: {0} ms
|
||||
text.language.restart = Por favor reinicie el juego para que los cambios del lenguaje surjan efecto.
|
||||
text.settings = Ajustes
|
||||
text.tutorial = Tutorial
|
||||
@ -277,9 +277,9 @@ text.settings.graphics = Gráficos
|
||||
text.settings.cleardata = Limpiar Datos del Juego...
|
||||
text.settings.clear.confirm = ¿Estas seguro de querer limpiar estos datos?\n¡Esta acción no puede deshacerse!
|
||||
text.settings.clearall.confirm = [scarlet]ADVERTENCIA![]\nEsto va a eliminar todos tus datos, incluyendo guardados, mapas, desbloqueos y keybinds.\nUna vez presiones 'ok', el juego va a borrrar todos tus datos y saldrá del juego automáticamente.
|
||||
text.settings.clearsectors = Limpiar Sectores
|
||||
text.settings.clearunlocks = Limpiar Desbloqueos
|
||||
text.settings.clearall = Limpiar Todo
|
||||
text.settings.clearsectors = Eliminar Sectores
|
||||
text.settings.clearunlocks = Eliminar Desbloqueos
|
||||
text.settings.clearall = Eliminar Todo
|
||||
text.paused = Pausado
|
||||
text.yes = Sí
|
||||
text.no = No
|
||||
@ -311,10 +311,10 @@ text.blocks.inputitem = Objeto de Entrada
|
||||
text.blocks.inputitems = Objetos de Entrada
|
||||
text.blocks.outputitem = Objeto de Salida
|
||||
text.blocks.drilltier = Taladrables
|
||||
text.blocks.drillspeed = Velocidad de Base del Taladro
|
||||
text.blocks.drillspeed = Velocidad Base del Taladro
|
||||
text.blocks.liquidoutput = Líquido de Salida
|
||||
text.blocks.liquidoutputspeed = Velocidad de Salida del Líquido
|
||||
text.blocks.liquiduse = Uso del Líquido
|
||||
text.blocks.liquiduse = Uso de Líquido
|
||||
text.blocks.coolant = Refrigerante
|
||||
text.blocks.coolantuse = Uso del Refrigerante
|
||||
text.blocks.inputliquidfuel = Combustible Líquido
|
||||
@ -345,7 +345,7 @@ text.category.liquids = Líquidos
|
||||
text.category.items = Objetos
|
||||
text.category.crafting = Fabricación
|
||||
text.category.shooting = Disparo
|
||||
text.category.optional = Optional Enhancements
|
||||
text.category.optional = Mejoras Opcionales
|
||||
setting.autotarget.name = Auto apuntado
|
||||
setting.fpscap.name = Máx FPS
|
||||
setting.fpscap.none = Nada
|
||||
@ -370,7 +370,7 @@ setting.musicvol.name = Volumen de la Música
|
||||
setting.mutemusic.name = Silenciar Musica
|
||||
setting.sfxvol.name = Volumen de los efectos de sonido
|
||||
setting.mutesound.name = Silenciar Sonido
|
||||
setting.crashreport.name = Send Anonymous Crash Reports
|
||||
setting.crashreport.name = Enviar informes de fallos anónimos
|
||||
text.keybind.title = Reasignar Teclas
|
||||
category.general.name = General
|
||||
category.view.name = Visión
|
||||
@ -412,7 +412,7 @@ mode.pvp.name = PvP
|
||||
mode.pvp.description = Pelea contra otros jugadores localmente.
|
||||
content.item.name = Objetos
|
||||
content.liquid.name = Líquidos
|
||||
content.unit.name = Units
|
||||
content.unit.name = Unidades
|
||||
content.recipe.name = Bloques
|
||||
content.mech.name = Mecanoides
|
||||
item.stone.name = Piedra
|
||||
@ -433,7 +433,7 @@ item.silicon.name = Silicona
|
||||
item.silicon.description = Un semiconductor muy útil, se usa para paneles solares y muchos electrónicos complejos.
|
||||
item.plastanium.name = Plastanio
|
||||
item.plastanium.description = Un material dúctil, ligero usado en aeronaves y proyectiles de fragmentación.
|
||||
item.phase-fabric.name = Phase Fabric
|
||||
item.phase-fabric.name = Tejido de fase
|
||||
item.phase-fabric.description = Una sustancia casi sin peso usada en electrónica avanzada y en tecnología autoreparadora.
|
||||
item.surge-alloy.name = Surge Alloy
|
||||
item.surge-alloy.description = Una aleación avanzada con propiedades eléctricas únicas.
|
||||
@ -493,14 +493,14 @@ text.mech.ability = [LIGHT_GRAY]Hablidad: {0}
|
||||
text.liquid.heatcapacity = [LIGHT_GRAY]Capacidad Térmica: {0}
|
||||
text.liquid.viscosity = [LIGHT_GRAY]Viscosidad: {0}
|
||||
text.liquid.temperature = [LIGHT_GRAY]Temperatura: {0}
|
||||
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
|
||||
block.constructing = {0}\n[LIGHT_GRAY](Construyendo)
|
||||
block.spawn.name = Punto de generación
|
||||
block.core.name = Núcleo
|
||||
block.metalfloor.name = Suelo de Metal
|
||||
block.deepwater.name = Aguas profundas
|
||||
block.water.name = Agua
|
||||
block.lava.name = Lava
|
||||
block.tar.name = Tar
|
||||
block.tar.name = Alquitrán
|
||||
block.blackstone.name = Piedra negra
|
||||
block.stone.name = Piedra
|
||||
block.dirt.name = Tierra
|
||||
@ -516,8 +516,8 @@ block.copper-wall.name = Muro de cobre
|
||||
block.copper-wall-large.name = Muro de cobre grande
|
||||
block.dense-alloy-wall.name = Muro de aleación densa
|
||||
block.dense-alloy-wall-large.name = Muro de aleación densa grande
|
||||
block.phase-wall.name = Phase Wall
|
||||
block.phase-wall-large.name = Large Phase Wall
|
||||
block.phase-wall.name = Muro de Fase grande
|
||||
block.phase-wall-large.name = Muro de Fase grande
|
||||
block.thorium-wall.name = Pared de Torio
|
||||
block.thorium-wall-large.name = Pared de Torio grande
|
||||
block.door.name = Puerta
|
||||
@ -532,7 +532,7 @@ block.junction.name = Cruce
|
||||
block.router.name = Enrutador
|
||||
block.distributor.name = Distribuidor
|
||||
block.sorter.name = Clasificador
|
||||
block.sorter.description = Clasifica objetos. Si un objeto es igual a uno seleccionado, va a pasar. O si no, el objeto saldrá en la izquierda y la derecha.
|
||||
block.sorter.description = Clasifica objetos. Si un objeto es igual al seleccionado, pasará al frente. Si no, el objeto saldrá por la izquierda y la derecha.
|
||||
block.overflow-gate.name = Compuerta de Desborde
|
||||
block.overflow-gate.description = Un enrutador que solo saca por la izquierda y la derecha si la cinta del frente está llena.
|
||||
block.smelter.name = Horno de Fundición
|
||||
@ -562,7 +562,7 @@ block.dart-ship-pad.name = Pad de nave de dardos
|
||||
block.delta-mech-pad.name = Pad de mecanoide Delta
|
||||
block.javelin-ship-pad.name = Pad de nave Jabalina
|
||||
block.trident-ship-pad.name = Pad de nave Tridente
|
||||
block.glaive-ship-pad.name = Glaive Ship Pad
|
||||
block.glaive-ship-pad.name = Pad de nave Glaive
|
||||
block.omega-mech-pad.name = Pad de mecanoide Omega
|
||||
block.tau-mech-pad.name = Pad de mecanoide Tau
|
||||
block.conduit.name = Conducto
|
||||
@ -589,12 +589,12 @@ block.solar-panel-large.name = Panel Solar Grande
|
||||
block.oil-extractor.name = Extractor de Petróleo
|
||||
block.spirit-factory.name = Fábrica de Drones Espíritu
|
||||
block.phantom-factory.name = Fábrica de Drones Fantasmales
|
||||
block.wraith-factory.name = Wraith Fighter Factory
|
||||
block.ghoul-factory.name = Ghoul Bomber Factory
|
||||
block.wraith-factory.name = Fábrica de Wraith Fighter
|
||||
block.ghoul-factory.name = Fábrica de Ghoul Bomber
|
||||
block.dagger-factory.name = Fábrica de Dagas
|
||||
block.titan-factory.name = Fábrica de Titanes
|
||||
block.fortress-factory.name = Fortress Mech Factory
|
||||
block.revenant-factory.name = Revenant Fighter Factory
|
||||
block.fortress-factory.name = Fábrica de mecanoide Fortress
|
||||
block.revenant-factory.name = Fábrica de Revenant Fighter
|
||||
block.repair-point.name = Punto de Reparación
|
||||
block.pulse-conduit.name = Conducto de Pulso
|
||||
block.phase-conduit.name = Conducto de Fase
|
||||
@ -606,18 +606,18 @@ block.rotary-pump.name = Bomba Rotatoria
|
||||
block.thorium-reactor.name = Reactor de Torio
|
||||
block.command-center.name = Centro de Comando
|
||||
block.mass-driver.name = Teletransportador de Masa
|
||||
block.blast-drill.name = Taladro Gigante
|
||||
block.blast-drill.name = Taladro de explosión
|
||||
block.thermal-pump.name = Bomba Térmica
|
||||
block.thermal-generator.name = Generador Térmico
|
||||
block.alloy-smelter.name = Alloy Smtler
|
||||
block.alloy-smelter.name = Alloy Smelter
|
||||
block.mend-projector.name = Proyector de reparación
|
||||
block.surge-wall.name = Surge Wall
|
||||
block.surge-wall-large.name = Large Surge Wall
|
||||
block.cyclone.name = Ciclón
|
||||
block.fuse.name = Fuse
|
||||
block.shock-mine.name = Shock Mine
|
||||
block.overdrive-projector.name = Overdrive Projector
|
||||
block.force-projector.name = Force Projector
|
||||
block.overdrive-projector.name = Proyector de sobremarcha
|
||||
block.force-projector.name = Proyector de fuerza
|
||||
block.arc.name = Arc
|
||||
block.rtg-generator.name = Generador RTG
|
||||
block.spectre.name = Espectro
|
||||
@ -703,7 +703,7 @@ block.junction.description = Actúa como puente para dos transportadores que se
|
||||
block.mass-driver.description = El mejor bloque de transorte. Recoge varios objetos y los dispara a otro conductor de masa en un largo rango.
|
||||
block.smelter.description = Quema carbón para fundir cobre y plomo, produciendo así aleación densa.
|
||||
block.arc-smelter.description = Funde cobre y plomo en aleación densa usando una fuented de energía externa.
|
||||
block.silicon-smelter.description = Reduces sand with highly pure coke in order to produce silicon.
|
||||
block.silicon-smelter.description = Reduce arena con coque de alta pureza para producir silicona.
|
||||
block.plastanium-compressor.description = Produce plastanio con aceite y titanio.
|
||||
block.phase-weaver.description = Produces phase fabric from radioactive thorium and high amounts of sand.
|
||||
block.alloy-smelter.description = Produce "surge alloy" con titanio, plomo, silicona y cobre.
|
||||
@ -743,12 +743,12 @@ block.trident-ship-pad.description = Deja tu nave actual y transfórmate en una
|
||||
block.javelin-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea fuerte y rápida interceptora con arma eléctrica.\nUsa el pad tocándolo dos veces mientras estás en él.
|
||||
block.glaive-ship-pad.description = Deja tu nave actual y transfórmate en una unidad aérea grande y bien armada nave pistolera.\nUsa el pad tocándolo dos veces mientras estás en él.
|
||||
block.tau-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide de soporte que puede reparar construcciones y tropas aliadas.\nUsa el pad tocándolo dos veces mientras estás en él.
|
||||
block.delta-mech-pad.description = Leave your current vessel and change into a fast, lightly-armored mech made for hit-and-run attacks.\nUse the pad by double tapping while standing on it.
|
||||
block.delta-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide rápido y ligero hecho para ataques de emboscada y retirada.\nUsa el pad tocándolo dos veces mientras estás en él.
|
||||
block.omega-mech-pad.description = Deja tu nave actual y transfórmate en un mecanoide pesado y bien armado, hecho para asaltos en primera línea.\nUsa el pad tocándolo dos veces mientras estás en él.
|
||||
block.spirit-factory.description = Produce drones ligeros que obtienen minerales y reparan bloques.
|
||||
block.phantom-factory.description = Produce drones avanzados que son significativamente más eficientes que un dron espíritu.
|
||||
block.wraith-factory.description = Produce unidades aéreas rápidas e interceptoras.
|
||||
block.ghoul-factory.description = Produce unidadess bombarderas pesadas.
|
||||
block.ghoul-factory.description = Produce unidades bombarderas pesadas.
|
||||
block.dagger-factory.description = Produce unidades terrestres básicas.
|
||||
block.titan-factory.description = Produce unidades terrestres avanzadas.
|
||||
block.fortress-factory.description = Produce unidades terrestres de artillería pesada.
|
||||
|
@ -1,5 +1,6 @@
|
||||
text.credits.text = Создатель [ROYAL] Anuken. - [SKY]anukendev@gmail.com[][]\n\nЕсть недороботки в переводе?\nПишите в офф. discord-сервер mindustry в канал #русский. \n\n Активные переводчики:\n[GREEN]Prosta4ok_ua[]\n[GREEN]xga[]\n[BLACK]XZimur[]\n Неактивные переводчики:\n[MAGENTA]Krocotavus[]\nReazy\n[RED]Lexa1549[]
|
||||
text.credits.text = Создатель [ROYAL] Anuken. - [SKY]anukendev@gmail.com[][]\n\nЕсть недороботки в переводе?\nПишите в офф. discord-сервер mindustry в канал #русский.\n\nПереводчики на русский язык:\n[YELLOW]Prosta4ok_ua\n[GREEN]xga\n[BLACK]XZimur
|
||||
text.credits = Авторы
|
||||
text.contributors = Переводчики и контрибьюторы
|
||||
text.discord = Присоединяйтесь к нашему Discord!
|
||||
text.link.discord.description = Официальный discord-сервер Mindustry
|
||||
text.link.github.description = Исходный код игры
|
||||
@ -14,7 +15,7 @@ text.gameover.pvp = [accent] {0}[] команда победила!
|
||||
text.sector.gameover = Этот сектор потерян. Высадится повторно?
|
||||
text.sector.retry = Повторить попытку
|
||||
text.highscore = [YELLOW]Новый рекорд!
|
||||
text.wave.lasted = Вы продержались до волны [accent]{0}[].
|
||||
text.wave.lasted = Вы продержались до [accent]{0}[]-ой волны.
|
||||
text.level.highscore = Рекорд: [accent]{0}
|
||||
text.level.delete.title = Подтвердите удаление
|
||||
text.map.delete = Вы действительно хотите удалить карту "[accent]{0}[]"?
|
||||
@ -30,7 +31,7 @@ text.coreattack = < Ядро находится под атакой! >
|
||||
text.unlocks = Разблокированные
|
||||
text.savegame = Сохранить игру
|
||||
text.loadgame = Загрузить игру
|
||||
text.joingame = Присоединиться
|
||||
text.joingame = Присоеди\nниться
|
||||
text.addplayers = Доб/удалить игроков
|
||||
text.customgame = Пользовательская игра
|
||||
text.sectors = Секторы
|
||||
@ -238,7 +239,7 @@ text.editor.exportimage = Экспортировать изображение л
|
||||
text.editor.exportimage.description = Экспортировать файл с изображением карты
|
||||
text.editor.loadimage = Загрузить \nизображение
|
||||
text.editor.saveimage = Сохранить \nизображение
|
||||
text.editor.unsaved = [scarlet]У вас есть несохранённые изменения![] \nВы уверены, что хотите выйти?
|
||||
text.editor.unsaved = [scarlet]У вас есть несохранённые изменения![]\nВы уверены, что хотите выйти?
|
||||
text.editor.resizemap = Изменить размер карты
|
||||
text.editor.mapname = Название карты:
|
||||
text.editor.overwrite = [accent]Внимание! \nЭто перезапишет уже существующую карту.
|
||||
@ -258,12 +259,12 @@ text.settings = Настройки
|
||||
text.tutorial = Обучение
|
||||
text.editor = Редактор
|
||||
text.mapeditor = Редактор карт
|
||||
text.donate = Донат
|
||||
text.donate = Пожертво\nвать
|
||||
text.connectfail = [crimson]Не удалось подключиться к серверу: [accent] {0}
|
||||
text.error.unreachable = Сервер недоступен.
|
||||
text.error.invalidaddress = Некорректный адрес.
|
||||
text.error.timedout = Время ожидания истекло!\nУбедитесь, что хост настроен для перенаправления портов и адрес корректный!
|
||||
text.error.mismatch = Ошибка пакета:\nвозможное несоответствие версии клиента/сервера. \nУбедитесь, что у вас и у создателя сервера установлена последняя версия Mindustry\\!
|
||||
text.error.mismatch = Ошибка пакета:\nвозможное несоответствие версии клиента/сервера. \nУбедитесь, что у Вас и у владельца сервера установлена последняя версия Mindustry!
|
||||
text.error.alreadyconnected = Вы уже подключены.
|
||||
text.error.mapnotfound = Map file not found!
|
||||
text.error.any = Неизвестная сетевая ошибка.
|
||||
@ -319,8 +320,8 @@ text.blocks.coolant = Охлаждающая жидкость
|
||||
text.blocks.coolantuse = Охлажд. жидкости используется
|
||||
text.blocks.inputliquidfuel = Жидкое топливо
|
||||
text.blocks.liquidfueluse = Жидкого топлива используется
|
||||
text.blocks.boostitem = Boost Item
|
||||
text.blocks.boostliquid = Boost Liquid
|
||||
text.blocks.boostitem = Ускоряющий предмет
|
||||
text.blocks.boostliquid = Ускоряющая жидкость
|
||||
text.blocks.health = Здоровье
|
||||
text.blocks.inaccuracy = Разброс
|
||||
text.blocks.shots = Выстрелы
|
||||
@ -345,7 +346,7 @@ text.category.liquids = Жидкости
|
||||
text.category.items = Предметы
|
||||
text.category.crafting = Создание
|
||||
text.category.shooting = Cтрельба
|
||||
text.category.optional = Optional Enhancements
|
||||
text.category.optional = Дополнительные улучшения
|
||||
setting.autotarget.name = Авто-цель
|
||||
setting.fpscap.name = Макс. FPS
|
||||
setting.fpscap.none = Неограниченный
|
||||
@ -364,13 +365,13 @@ setting.seconds = {0} Секунд
|
||||
setting.fullscreen.name = Полноэкранный режим
|
||||
setting.fps.name = Показывать FPS
|
||||
setting.vsync.name = Верт. синхронизация
|
||||
setting.lasers.name = Показывать энергетические лазеры
|
||||
setting.lasers.name = Показывать энергию лазеров
|
||||
setting.minimap.name = Показать миникарту
|
||||
setting.musicvol.name = Громкость музыки
|
||||
setting.mutemusic.name = Заглушить музыку
|
||||
setting.sfxvol.name = Громкость звуковых эффектов
|
||||
setting.mutesound.name = Заглушить звук
|
||||
setting.crashreport.name = Отправлять анонимные отчёты о сбоях
|
||||
setting.crashreport.name = Отправлять анонимные отчёты о вылетах
|
||||
text.keybind.title = Настройка управления
|
||||
category.general.name = Основное
|
||||
category.view.name = Просмотр
|
||||
@ -380,14 +381,14 @@ command.retreat = Отступить
|
||||
command.patrol = Патрулирование
|
||||
keybind.press = Нажмите клавишу...
|
||||
keybind.press.axis = Нажмите клавишу...
|
||||
keybind.move_x.name = Движение по x
|
||||
keybind.move_y.name = Движение по y
|
||||
keybind.move_x.name = Движение по оси x
|
||||
keybind.move_y.name = Движение по оси y
|
||||
keybind.select.name = Выбор/Выстрел
|
||||
keybind.break.name = Разрушение
|
||||
keybind.deselect.name = Отмена
|
||||
keybind.shoot.name = Выстрел
|
||||
keybind.zoom_hold.name = Удержание зума
|
||||
keybind.zoom.name = Приблизить
|
||||
keybind.zoom_hold.name = Управление масштабом
|
||||
keybind.zoom.name = Приблизить/Отдалить
|
||||
keybind.menu.name = Меню
|
||||
keybind.pause.name = Пауза
|
||||
keybind.dash.name = Мчаться
|
||||
@ -403,10 +404,10 @@ keybind.drop_unit.name = Сбросить юнита
|
||||
keybind.zoom_minimap.name = Увеличить миникарту.
|
||||
mode.text.help.title = Описание режимов
|
||||
mode.waves.name = Волны
|
||||
mode.waves.description = В режиме "волны" ограниченные ресурсы и автоматические наступающие волны.
|
||||
mode.waves.description = Обычный режим. В режиме "Волны" надо самим добывать ресурсы и сами волны идут безостановочно.
|
||||
mode.sandbox.name = Песочница
|
||||
mode.sandbox.description = Бесконечные ресурсы и нет таймера для волн, но можно самим вызвать волну.
|
||||
mode.freebuild.name = Свободная\nстройка
|
||||
mode.freebuild.name = Cвободная\nстрой
|
||||
mode.freebuild.description = ограниченные ресурсы и нет таймера для волн.
|
||||
mode.pvp.name = Противо-\nстояние
|
||||
mode.pvp.description = боритесь против других игроков.
|
||||
@ -460,7 +461,7 @@ mech.delta-mech.description = Быстрый, легкобронированны
|
||||
mech.tau-mech.name = Тау
|
||||
mech.tau-mech.weapon = Восстановительный лазер
|
||||
mech.tau-mech.ability = Регенирирующая вспышка
|
||||
mech.tau-mech.description = Мех поддержки. Исцеляет союзные блоки, стреляя в них. Может потушить пожары и исцелить союзников радиусом с его способностью восстанавления.
|
||||
mech.tau-mech.description = Мех поддержки. Исцеляет союзные блоки, стреляя в них. Может исцелить союзников радиусом с его способностью восстанавления.
|
||||
mech.omega-mech.name = Омега
|
||||
mech.omega-mech.weapon = Ракетомётный пулемётконфигурация
|
||||
mech.omega-mech.ability = Защитная
|
||||
@ -493,9 +494,10 @@ text.mech.ability = [LIGHT_GRAY]Способность: {0}
|
||||
text.liquid.heatcapacity = [LIGHT_GRAY]Теплоёмкость: {0}
|
||||
text.liquid.viscosity = [LIGHT_GRAY]Вязкость: {0}
|
||||
text.liquid.temperature = [LIGHT_GRAY]Температура: {0}
|
||||
block.constructing = {0}\n[LIGHT_GRAY](В процессе)
|
||||
block.spawn.name = Спаун врагов
|
||||
block.constructing = {0}[LIGHT_GRAY](В процессе)
|
||||
block.spawn.name = Точка появления врагов
|
||||
block.core.name = Ядро
|
||||
block.space.name = Пустота
|
||||
block.metalfloor.name = Мeталичeский пoл
|
||||
block.deepwater.name = Глубоководье
|
||||
block.water.name = Вода
|
||||
@ -590,7 +592,7 @@ block.oil-extractor.name = Нефтяной экстрактор
|
||||
block.spirit-factory.name = Завод дронов "Призрак"
|
||||
block.phantom-factory.name = Завод дронов "Фантом"
|
||||
block.wraith-factory.name = Завод призрачных истребителей
|
||||
block.ghoul-factory.name = Завод гулевых бомбардировщиков
|
||||
block.ghoul-factory.name = Завод бомбардировщиков "Гуль"
|
||||
block.dagger-factory.name = Завод мехов "Разведчик"
|
||||
block.titan-factory.name = Завод мехов "Титан"
|
||||
block.fortress-factory.name = Завод мехов "Крепость"
|
||||
@ -775,6 +777,6 @@ block.itemvoid.description = Уничтожает любые предметы,
|
||||
block.powerinfinite.description = Бесконечность — не предел. Бесконечно выводит энергию. Доступен только в песочнице.
|
||||
block.powervoid.description = Энергия просто уходит в пустоту. Присутствует только в песочнице.
|
||||
liquid.water.description = Намного лучше чем [BLUE]монооксид дигидрогена[].\n\n Для получения воды используйте помпу(насос) на источнике(блоке) или экстрактор воды.\n\n Эту жидкость можно подвести к бурам для ускорения скорости добычи или к турелям для ускорения стрельбы.
|
||||
liquid.lava.description = [accent]Горячо...\nВещество расплавленное из горно-каменных пород.\nСлужит как топливо для термального генератора.
|
||||
liquid.oil.description = Кто-то писал о добавлении золота в игру. Его добавили, правда оно какое-то чёрное...\nСмесь жидких углеводородов, выделяющаяся из природного газа в результате снижения температуры и пластового давления.\nСлужит для пластиниевого компрессора и т.д..
|
||||
liquid.lava.description = [accent]Горячо...\nВещество расплавленное из горно-каменных пород.
|
||||
liquid.oil.description = Кто-то писал о добавлении золота в игру. Его добавили, правда оно какое-то чёрное...\nСмесь жидких углеводородов, выделяющаяся из природного газа в результате снижения температуры и пластового давления.
|
||||
liquid.cryofluid.description = Жидкость с температурой ниже чем -273 градусов по цельсию. Может быть использована для ускорения стрельбы турелей или для охлаждения чего-то.
|
||||
|
@ -1,10 +1,11 @@
|
||||
text.credits.text = Створив [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\nПерекладачі:\n[YELLOW]Prosta4ok_ua[]\n[GREEN]xga\n\n[] Є питання по грі або проблеми с перекладом? Іди в офіційний сервер discord Mindustry в канал #український.
|
||||
text.credits.text = Створив [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\nЄ питання по грі або проблеми с перекладом? Іди в офіційний сервер discord Mindustry в канал #український.
|
||||
text.credits = Автори
|
||||
text.contributors = Перекладачі та Контриб'ютори
|
||||
text.discord = Приєднуйтесь до нашого Discord!
|
||||
text.link.discord.description = Офіційний сервер discord Mindustry
|
||||
text.link.github.description = Вихідний код гри
|
||||
text.link.discord.description = Офіційний discord-сервер Mindustry
|
||||
text.link.github.description = Код гри
|
||||
text.link.dev-builds.description = Нестабільні версії
|
||||
text.link.trello.description = Офіційна дошка trello для запланованих функцій
|
||||
text.link.trello.description = Офіційна дошка trello(на англ.) для запланованих функцій
|
||||
text.link.itch.io.description = Itch.io сторінка з веб-версією та завантаженням для ПК
|
||||
text.link.google-play.description = Скачати з Google Play для Android
|
||||
text.link.wiki.description = Офіційна Mindustry вікі (англ.)
|
||||
@ -14,15 +15,15 @@ text.gameover.pvp = [accent] {0}[] команда перемогла!
|
||||
text.sector.gameover = Цей сектор було втрачено. Повторно висадитися?
|
||||
text.sector.retry = Повторити спробу
|
||||
text.highscore = [YELLOW]Новий рекорд!
|
||||
text.wave.lasted = Ви проіснували до [accent]{0}[]-ої хвилі.
|
||||
text.wave.lasted = Вы продержались до [accent]{0}[]-ой волны.
|
||||
text.level.highscore = Рекорд: [accent]{0}
|
||||
text.level.delete.title = Підтвердьте видалення
|
||||
text.map.delete = Ви впевнені, що хочете видалити карту "[accent]{0}[]"?
|
||||
text.level.select = Вибір мапи
|
||||
text.level.mode = Ігровий режим:
|
||||
text.level.mode = Режим гри:
|
||||
text.construction.desktop = Щоб скасувати вибір блоку або припинити будівництво, [accent] скористайтеся пробілом[].
|
||||
text.construction.title = Інструкція з будівництва блоків
|
||||
text.construction = Ви тільки що перешли в [accent]режим будівництва блоків[].\n\nЩоб розпочати розміщення, просто торкніться відповідного розташування поруч із вашим кораблем.\nПісля вибору деяких блоків натисніть прапорець, щоб підтвердити, і ваш корабель почне будувати їх.\n\n- [accent]Вилучіть блоки[] з вашого вибору, торкнувшись їх.\n- [accent]Перемістіть виділення[] утримуючи та перетягнувши будь-який блок у виділенні.\n- [accent]Розташуйте блоки у лінію[], торкнувшись і утримуючи порожнє місце, а потім перетягуючи в потрібному напрямку.\n- [accent]Скасуйте конструкцію або виділення[] натиснувши X внизу ліворуч.
|
||||
text.construction = Ви тільки що перейшли в режим будівництва[accent] блоків[].\n\nЩоб розпочати розміщення, просто торкніться підходящого місця поруч із вашим кораблем.\nПісля вибору деяких блоків натисніть прапорець, щоб підтвердити, і ваш корабель почне будувати їх.\n\n- [accent]Вилучіть блоки[] з вашого вибору, торкнувшись їх.\n- [accent]Перемістіть виділення[] утримуючи та перетягнувши будь-який блок у виділенні.\n- [accent]Розташуйте блоки у лінію[], торкнувшись і утримуючи порожнє місце, а потім перетягуючи в потрібному напрямку.\n- [accent]Скасуйте розміщення блоків[] натиснувши X внизу ліворуч.
|
||||
text.deconstruction.title = Інструкція з деконструкції блоків
|
||||
text.deconstruction = Ви тільки що перешли в [accent] режим деконструкції блоків[].\n\nЩоб почати руйнувати, просто торкніться блоку поруч із вашим кораблем.\nПісля вибору деяких блоків натисніть прапорець, щоб підтвердити, і ваш корабель почне їх деконструювати.\n\n- [accent]Вилучіть блоки[] з вашого вибору, торкнувшись їх.\n- [accent]Вилучіть блоки в зоні[] , торкнувшись і утримуючи порожнє місце, потім перетягніть у потрібному напрямку.\n- [accent]Скасуйте деконструкцію або виділення[] натиснувши X внизу ліворуч.
|
||||
text.showagain = Не показувати знову до наступного сеансу
|
||||
@ -30,11 +31,11 @@ text.coreattack = < Ядро під атакою! >
|
||||
text.unlocks = Розблоковане
|
||||
text.savegame = Зберегти гру
|
||||
text.loadgame = Завантажити гру
|
||||
text.joingame = Приєднатися\nдо гри
|
||||
text.joingame = Приєднатися
|
||||
text.addplayers = Дод/Видалити гравців
|
||||
text.customgame = Індивідуальна гра
|
||||
text.customgame = Користувальницька гра
|
||||
text.sectors = Сектори
|
||||
text.sector = Сектор: [LIGHT_GRAY]{0}
|
||||
text.sector = Обраний сектор: [LIGHT_GRAY]{0}
|
||||
text.sector.time = Час: [LIGHT_GRAY]{0}
|
||||
text.sector.deploy = Висадитися
|
||||
text.sector.abandon = Відступити
|
||||
@ -45,27 +46,27 @@ text.sector.unexplored = [accent][[Недосліджений]
|
||||
text.missions = Місії:[LIGHT_GRAY] {0}
|
||||
text.mission = Місія:[LIGHT_GRAY] {0}
|
||||
text.mission.main = Головна місія:[LIGHT_GRAY] {0}
|
||||
text.mission.info = Інформація про місії
|
||||
text.mission.complete = Місія завершена!
|
||||
text.mission.info = Інформація про місію
|
||||
text.mission.complete = Місія виконана!
|
||||
text.mission.complete.body = Сектор {0},{1} був завойований.
|
||||
text.mission.wave = Пережити наступну кількість хвиль:[accent]{0}/{1}[]\nХвиля в {2}
|
||||
text.mission.wave.enemies = Пережити [accent] {0}/{1} []хвиль\n{2} Ворог.
|
||||
text.mission.wave.enemy = Пережити[accent] {0}/{1} []хвиль\n{2} Ворог
|
||||
text.mission.wave.menu = Пережити[accent] {0} []хвиль
|
||||
text.mission.battle = Знищити базу супротивника.
|
||||
text.mission.wave = Пережити [accent]{0}/{1}[]\nХвиля через {2}
|
||||
text.mission.wave.enemies = Пережити [accent] {0}/{1} []хвиль\n{2} ворог.
|
||||
text.mission.wave.enemy = Пережити[accent] {0}/{1} []хвил.\n{2} Ворог
|
||||
text.mission.wave.menu = Пережити[accent] {0} [] хвиль
|
||||
text.mission.battle = Знищте ядро супротивника.
|
||||
text.mission.resource.menu = Добути {0} x{1}
|
||||
text.mission.resource = Отримано {0} x{1}
|
||||
text.mission.resource = Добути {0}:\n[accent]{1}/{2}[]
|
||||
text.mission.block = Створити {0}
|
||||
text.mission.unit = Створити {0} бой.од.
|
||||
text.mission.command = Надіслати команду {0} до боїв. одиниць
|
||||
text.mission.command = Надіслати команду {0} боїв. одиницям
|
||||
text.mission.linknode = З'єднати силові вузли
|
||||
text.mission.display = [accent]Місія:\n[LIGHT_GRAY]{0}
|
||||
text.mission.mech = Переключитися на мех[accent] {0}[]
|
||||
text.mission.create = Створити[accent] {0} []
|
||||
text.mission.create = Створити[accent] {0}[]
|
||||
text.none = <нічого>
|
||||
text.close = Закрити
|
||||
text.quit = Вийти
|
||||
text.maps = Карти
|
||||
text.maps = Мапи
|
||||
text.continue = Продовжити
|
||||
text.nextmission = Наступна місія
|
||||
text.maps.none = [LIGHT_GRAY]Карт не знайдено!
|
||||
@ -74,27 +75,27 @@ text.name = Нік:
|
||||
text.filename = Ім'я файлу:
|
||||
text.unlocked = Новий блок розблоковано!
|
||||
text.unlocked.plural = Нові блоки розблоковано!
|
||||
text.players = {0} гравців онлайн
|
||||
text.players.single = {0} гравець онлайн
|
||||
text.players = Гравців на сервері: {0}
|
||||
text.players.single = {0} гравець на сервері
|
||||
text.server.closing = [accent]Закриття серверу...
|
||||
text.server.kicked.kick = Ви були вигнані(кікнуті) з сервера!
|
||||
text.server.kicked.serverClose = Сервер закритий.
|
||||
text.server.kicked.sectorComplete = Сектор завойован.
|
||||
text.server.kicked.sectorComplete.text = Ваша місія завершена. \nСервер продовжить роботу в наступному секторі.
|
||||
text.server.kicked.serverClose = Сервер закрито.
|
||||
text.server.kicked.sectorComplete = Сектор завойовано.
|
||||
text.server.kicked.sectorComplete.text = Ваша місія завершена. \nСервер продовжить роботу і висадить Вас в наступному секторі.
|
||||
text.server.kicked.clientOutdated = Застарілий клієнт! Оновіть свою гру!
|
||||
text.server.kicked.serverOutdated = Застарілий сервер! Попросіть хост оновити сервер/гру!
|
||||
text.server.kicked.serverOutdated = Застарілий сервер! Попросіть адміністратора серверу оновити сервер/гру!
|
||||
text.server.kicked.banned = Ви були заблоковані на цьому сервері.
|
||||
text.server.kicked.recentKick = Нещодавно вас вигнали(кікнули). \nПочекайте, перш ніж підключитися знову.
|
||||
text.server.kicked.recentKick = Нещодавно Вас вигнали(кікнули). \nПочекайте трохи перед наступним підключенням.
|
||||
text.server.kicked.nameInUse = На цьому сервері є хтось \nз таким ніком.
|
||||
text.server.kicked.nameEmpty = Ваш нікнейм має містити принаймні один символ або цифру.
|
||||
text.server.kicked.idInUse = Ви вже на цьому сервері! Підключення двох облікових записів не допускається.
|
||||
text.server.kicked.customClient = Цей сервер не підтримує користувальницькі збірки. Завантажте офіційну версію.
|
||||
text.host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [LIGHT_GRAY] WiFi або локальній мережі [] повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то [accent] переадресація портів [] обов'язкова.\n\n[LIGHT_GRAY] Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера.
|
||||
text.join.info = Тут ви можете ввести [accent]IP серверу[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[LIGHT_GRAY] Примітка. Там немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити хазяїна серверу дати свій ip.
|
||||
text.host.info = Кнопка [accent]Сервер[] розміщує сервер на порті [scarlet]6567[]. \nКористувачі, які знаходяться у тій же [LIGHT_GRAY] WiFi або локальній мережі[] повинні бачити ваш сервер у своєму списку серверів.\n\nЯкщо ви хочете, щоб люди могли приєднуватися з будь-якої точки через IP, то [accent] переадресація порту [] обов'язкова.\n\n[LIGHT_GRAY] Примітка. Якщо у вас виникли проблеми з підключенням до вашої локальної гри, переконайтеся, що ви дозволили Mindustry доступ до вашої локальної мережі в налаштуваннях брандмауера.
|
||||
text.join.info = Тут ви можете ввести [accent]IP серверу[] для підключення або знайти сервери у [accent]локальній мережі[] для підключення до них.\nПідтримується локальна мережа(LAN) і широкосмугова мережа(WAN).\n\n[LIGHT_GRAY] Примітка. Тут немає автоматичного глобального списку серверів; якщо ви хочете підключитися до когось через IP, вам доведеться попросити створювача серверу дати свій ip.
|
||||
text.hostserver = Запустити сервер
|
||||
text.hostserver.mobile = Запустити\nСервер
|
||||
text.hostserver.mobile = Запустити\nсерверу
|
||||
text.host = Сервер
|
||||
text.hosting = [accent]Открытие сервера ...
|
||||
text.hosting = [accent]Відкриття серверу...
|
||||
text.hosts.refresh = Оновити
|
||||
text.hosts.discovering = Пошук локальних ігор
|
||||
text.server.refreshing = Оновлення серверу
|
||||
@ -113,9 +114,9 @@ text.trace.totalblocksplaced = Всього встановлено блоків:
|
||||
text.trace.lastblockplaced = Останній встановлений блок: [accent]{0}
|
||||
text.invalidid = Невірний ідентифікатор клієнта! Надішліть звіт про помилку.
|
||||
text.server.bans = Блокування
|
||||
text.server.bans.none = Нема заблокованих гравців!
|
||||
text.server.bans.none = Заблокованих гравців нема!
|
||||
text.server.admins = Адміністратори
|
||||
text.server.admins.none = Адміністраторів нема!
|
||||
text.server.admins.none = Адміністраторів нема
|
||||
text.server.add = Додати сервер
|
||||
text.server.delete = Ви впевнені, що хочете видалити цей сервер?
|
||||
text.server.hostname = Хост: {0}
|
||||
@ -123,10 +124,10 @@ text.server.edit = Редагувати сервер
|
||||
text.server.outdated = [crimson]Застарілий сервер![]
|
||||
text.server.outdated.client = [crimson]Застарілий клієнт![]
|
||||
text.server.version = [lightgray]Версія: {0}
|
||||
text.server.custombuild = [yellow]Користувацький білд
|
||||
text.confirmban = Ви впевнені, що хочете заблокувати(забанити) цього гравця?
|
||||
text.server.custombuild = [yellow]Користувацький збірка
|
||||
text.confirmban = Ви впевнені, що хочете заблокувати цього гравця?
|
||||
text.confirmkick = Ви впевнені, що хочете викинути(кікнути) цього гравця?
|
||||
text.confirmunban = Ви впевнені, що хочете розблокувати) цього гравця?
|
||||
text.confirmunban = Ви впевнені, що хочете розблокувати цього гравця?
|
||||
text.confirmadmin = Ви впевнені, що хочете зробити цього гравця адміністратором?
|
||||
text.confirmunadmin = Ви впевнені, що хочете видалити статус адміністратора з цього гравця?
|
||||
text.joingame.title = Приєднатися до гри
|
||||
@ -136,10 +137,10 @@ text.disconnect.data = Не вдалося завантажити світові
|
||||
text.connecting = [accent]Підключення...
|
||||
text.connecting.data = [accent]Завантаження даних світу...
|
||||
text.server.port = Порт:
|
||||
text.server.addressinuse = Адреса вже використовується!
|
||||
text.server.addressinuse = Ця адреса вже використовується!
|
||||
text.server.invalidport = Недійсний номер порту!
|
||||
text.server.error = [crimson]Помилка хостингу сервера: [accent]{0}
|
||||
text.save.old = Це збереження для старої версії гри, і його більше не можна використовувати.\n\n [LIGHT_GRAY]Зберігати зворотну сумісність буде реалізовано у повній версії 4.0.
|
||||
text.server.error = [crimson]Помилка запуску сервера: [accent]{0}
|
||||
text.save.old = Це збереження для старої версії гри, і його більше не можна використовувати.\n\n [LIGHT_GRAY]Зворотна сумісність буде реалізовано у повній версії 4.0.
|
||||
text.save.new = Нове збереження
|
||||
text.save.overwrite = Ви впевнені, що хочете перезаписати цей слот для збереження?
|
||||
text.overwrite = Перезаписати
|
||||
@ -152,24 +153,24 @@ text.save.export = Экспортувати збереження
|
||||
text.save.import.invalid = [accent]Це збереження недійсне!
|
||||
text.save.import.fail = [crimson]Не вдалося імпортувати збереження: [accent]{0}
|
||||
text.save.export.fail = [crimson]Не вдалося экспортувати збереження: [accent]{0}
|
||||
text.save.import = Імпорт збереження
|
||||
text.save.newslot = Зберегти ім'я:
|
||||
text.save.import = Імпортувати збереження
|
||||
text.save.newslot = Назва збереження:
|
||||
text.save.rename = Перейменувати
|
||||
text.save.rename.text = Нова назва:
|
||||
text.selectslot = Виберіть збереження.
|
||||
text.slot = [accent]Слот {0}
|
||||
text.save.corrupted = [accent]Збережений файл пошкоджений або недійсний! \nЯкщо ви щойно оновили свою гру, це, мабуть, є зміною формату збереження та [scarlet] не []є помилкою.
|
||||
text.sector.corrupted = [accent]Знайдено файл збереження для цього сектора, але завантаження не вдалося. \n Буде створено новий.
|
||||
text.save.corrupted = [accent]Збережений файл пошкоджено або э недійсним! \nЯкщо ви щойно оновили свою гру, це, мабуть, є зміною формату збереження та [scarlet] не[] є помилкою.
|
||||
text.sector.corrupted = [accent]Файл збереження для цього сектора знайдено, але завантаження не вдалося. \n Буде створено новий файл.
|
||||
text.empty = <порожній>
|
||||
text.on = Вкл
|
||||
text.off = Викл
|
||||
text.on = Включено
|
||||
text.off = Вимкнено
|
||||
text.save.autosave = Автозбереження: {0}
|
||||
text.save.map = Карта: {0}
|
||||
text.save.map = Мапа: {0}
|
||||
text.save.wave = Хвиля {0}
|
||||
text.save.difficulty = Рівень складності: {0}
|
||||
text.save.date = Останне збереження: {0}
|
||||
text.save.difficulty = Складність: {0}
|
||||
text.save.date = Останнє збереження
|
||||
text.save.playtime = Час гри: {0}
|
||||
text.confirm = Підтвердити
|
||||
text.confirm = Підтвердження
|
||||
text.delete = Видалити
|
||||
text.ok = ОК
|
||||
text.open = Відкрити
|
||||
@ -177,11 +178,11 @@ text.cancel = Скасувати
|
||||
text.openlink = Відкрити посилання
|
||||
text.copylink = Скопіювати посилання
|
||||
text.back = Назад
|
||||
text.quit.confirm = Ти впевнений що хочеш вийти?
|
||||
text.quit.confirm = Ви впевнені що хочете вийти?
|
||||
text.changelog.title = Журнал змін
|
||||
text.changelog.loading = Отримання журналу змін...
|
||||
text.changelog.error.android = [accent]Зверніть увагу, що іноді журнал змін не працює на ОС Android 4.4 або на нижчій версії!\nЦе пов'язано з внутрішньою помилкою Android.
|
||||
text.changelog.error.ios = [accent]Журнал змін наразі не підтримується в iOS.
|
||||
text.changelog.error.ios = [accent]В настоящее время журнал изменений не поддерживается iOS.
|
||||
text.changelog.error = [scarlet]Помилка отримання журналу змін!\nПеревірте підключення до Інтернету.
|
||||
text.changelog.current = [yellow][[Поточна версія]
|
||||
text.changelog.latest = [accent][[Остання версія]
|
||||
@ -190,7 +191,7 @@ text.saving = [accent]Збереження...
|
||||
text.wave = [accent]Хвиля {0}
|
||||
text.wave.waiting = Хвиля через {0}
|
||||
text.waiting = Очікування...
|
||||
text.waiting.players = Очікування гравців ...
|
||||
text.waiting.players = Очікування гравців
|
||||
text.wave.enemies = [LIGHT_GRAY]{0} ворог. залишилося
|
||||
text.wave.enemy = [LIGHT_GRAY]{0} ворог залишився
|
||||
text.loadimage = Завантажити зображення
|
||||
@ -199,91 +200,90 @@ text.unknown = Невідомо
|
||||
text.custom = Користувальницька
|
||||
text.builtin = Bбудована
|
||||
text.map.delete.confirm = Ви впевнені, що хочете видалити цю карту? Цю дію не можна скасувати!
|
||||
text.map.random = [accent]Випадкова карта
|
||||
text.map.nospawn = Ця карта не має жодного ядра для спавну гравця! Додайте[ROYAL] сине[] ядро в цю карту в редакторі.
|
||||
text.map.random = [accent]Випадкова мапа
|
||||
text.map.nospawn = Ця мапа не має жодного ядра для спавну гравця! Додайте[ROYAL] сине[] ядро в цю мапу редакторі.
|
||||
text.map.nospawn.pvp = У цій карти немає ворожих ядер, в яких гравець може з'явитися! Додайте[SCARLET] червоні[] ядра до цієї карті в редакторі.
|
||||
text.map.invalid = Помилка завантаження карти: пошкоджений або невірний файл карти.
|
||||
text.editor.brush = Пензлик
|
||||
text.editor.slope = \\
|
||||
text.editor.slope =
|
||||
text.editor.openin = Відкрити в редакторі
|
||||
text.editor.oregen = Генерація руд
|
||||
text.editor.oregen.info = Генерація руд:
|
||||
text.editor.mapinfo = Інформація про карту
|
||||
text.editor.mapinfo = Інформація про мапу
|
||||
text.editor.author = Автор:
|
||||
text.editor.description = Опис:
|
||||
text.editor.name = Назва:
|
||||
text.editor.teams = Команди
|
||||
text.editor.elevation = Высота височини
|
||||
text.editor.errorimageload = Помилка завантаження файлу:\n[accent]{0}
|
||||
text.editor.errorimagesave = Помилка збереження файлу:\n[accent]{0}
|
||||
text.editor.generate = Генерувати
|
||||
text.editor.resize = Змінити розмір
|
||||
text.editor.loadmap = Завантажити карту
|
||||
text.editor.elevation = Висота
|
||||
text.editor.errorimageload = Помилка завантаження зображення:[accent] {0}
|
||||
text.editor.errorimagesave = Помилка збереження зображення:\n[accent]{0}
|
||||
text.editor.generate = Створити
|
||||
text.editor.resize = Змінити \nрозмір
|
||||
text.editor.loadmap = Завантажити мапу
|
||||
text.editor.savemap = Зберегти карту
|
||||
text.editor.saved = Збережено!
|
||||
text.editor.save.noname = Ваша карта не має назви! Встановіть його в меню "інформація про карту".
|
||||
text.editor.save.overwrite = Ваша карта перезаписує вбудовану карту! Виберіть інше ім'я в меню "інформація про карту".
|
||||
text.editor.save.noname = Ваша карта не має назви! Встановіть його в меню «Інформація про карту».
|
||||
text.editor.save.overwrite = Ваша карта перезаписує вбудовану карту! Виберіть інше ім'я в меню «Інформація про карту».
|
||||
text.editor.import.exists = [scarlet]Неможливо імпортувати: [] вбудована карта з назвою "{0}" вже існує!
|
||||
text.editor.import = Імпорт...
|
||||
text.editor.importmap = Імпортувати карту
|
||||
text.editor.importmap.description = Імпортуйте вже існуючої карти
|
||||
text.editor.importmap.description = Імпортувати вже існуючу карту
|
||||
text.editor.importfile = Імпортувати файл
|
||||
text.editor.importfile.description = Імпортуйте зовнішній файл карти
|
||||
text.editor.importimage = Імпорт зображення місцевості
|
||||
text.editor.importimage.description = Імпорт зовнішнього файла зображення карти
|
||||
text.editor.importfile.description = Імпортувати зовнішній файл карти
|
||||
text.editor.importimage = Імпорт зовнішнього файла зображення карти
|
||||
text.editor.importimage.description = Імпорт зображення місцевості
|
||||
text.editor.export = Експорт...
|
||||
text.editor.exportfile = Експорт файлу
|
||||
text.editor.exportfile.description = Експортувати файл карти
|
||||
text.editor.exportimage = Експорт зображення місцевості
|
||||
text.editor.exportimage.description = Експорт файла з зображенням карти
|
||||
text.editor.loadimage = Імпорт місцевості
|
||||
text.editor.saveimage = Екпорт місцевості
|
||||
text.editor.loadimage = Завантажити\nзображення
|
||||
text.editor.saveimage = Зберегти\nзображення
|
||||
text.editor.unsaved = [scarlet]У вас є незбережені зміни![]\nВи впевнені, що хочете вийти?
|
||||
text.editor.resizemap = Змінити розмір карти
|
||||
text.editor.mapname = Назва карти:
|
||||
text.editor.mapname = Название карты:
|
||||
text.editor.overwrite = [accent]Попередження!\nЦе перезаписує існуючу карту.
|
||||
text.editor.overwrite.confirm = [scarlet]Попередження![] Карта з такою назвою вже існує. Ви впевнені, що хочете переписати її?
|
||||
text.editor.selectmap = Виберіть карту для завантаження:
|
||||
text.editor.selectmap = Виберіть мапу для завантаження:
|
||||
text.width = Ширина:
|
||||
text.height = Висота:
|
||||
text.menu = Меню
|
||||
text.play = Грати
|
||||
text.load = Завантаження
|
||||
text.load = Завантажити
|
||||
text.save = Зберегти
|
||||
text.fps = FPS: {0}
|
||||
text.tps = TPS: {0}
|
||||
text.ping = Пінг: {0} мс
|
||||
text.language.restart = Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.
|
||||
text.language.restart = Будь ласка, перезапустіть свою гру, щоб налаштування мови набули чинності.\nPlease restart your game for the language settings to take effect.
|
||||
text.settings = Налаштування
|
||||
text.tutorial = Навчання
|
||||
text.editor = Редактор
|
||||
text.mapeditor = Редактор карт
|
||||
text.donate = Пожертвувати
|
||||
text.mapeditor = Редактор мап
|
||||
text.donate = Пожертву\nвання
|
||||
text.connectfail = [crimson]Не вдалося підключитися до сервера: [accent]{0}
|
||||
text.error.unreachable = Server unreachable.
|
||||
text.error.invalidaddress = Invalid address.
|
||||
text.error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct!
|
||||
text.error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry!
|
||||
text.error.alreadyconnected = Already connected.
|
||||
text.error.mapnotfound = Map file not found!
|
||||
text.error.any = Unkown network error.
|
||||
text.error.unreachable = Сервер не доступний.
|
||||
text.error.invalidaddress = Некоректна адреса.
|
||||
text.error.timedout = Час очікувування вийшов.\nПереконайтеся, що адреса коректна і що власник сервера налаштував переадресацію порту!
|
||||
text.error.mismatch = Ошибка пакету:\nможливе невідповідність версії клієнта / сервера.\nПереконайтеся, що у Вас та у володара сервера встановлена остання версія Mindustry!
|
||||
text.error.alreadyconnected = Ви вже підключилися.
|
||||
text.error.any = Невідома мережева помилка
|
||||
text.settings.language = Мова
|
||||
text.settings.reset = Скинути до стандартних
|
||||
text.settings.rebind = Змінити
|
||||
text.settings.controls = Елементи управління
|
||||
text.settings.reset = Скинути за замовчуванням
|
||||
text.settings.rebind = Зміна
|
||||
text.settings.controls = Управління
|
||||
text.settings.game = Гра
|
||||
text.settings.sound = Звук
|
||||
text.settings.graphics = Графіка
|
||||
text.settings.cleardata = Очистити ігрові дані...
|
||||
text.settings.clear.confirm = Ви впевнені, що хочете очистити ці дані?\nЩо робиться, не може бути скасовано!
|
||||
text.settings.clearall.confirm = [scarlet]УВАГА![]\nЦе очистить всі дані, включаючи збереження, карти, розблокування та призначенні клавіші.\nПісля того, як ви натиснете "ОК", гра видалить усі дані та автоматично вийде.
|
||||
text.settings.cleardata = Очистити дані...
|
||||
text.settings.clear.confirm = Ви впевнені, що хочете очистити ці дані?\nЦя дія не може бути скасовано!
|
||||
text.settings.clearall.confirm = [scarlet]УВАГА![]\nЦе очистить всі дані, включаючи збереження, карти, розблокуване та призначенні клавіші.\nПісля того, як ви натиснете ОК, гра видалить усі дані та автоматично вийде.
|
||||
text.settings.clearsectors = Очистити сектори
|
||||
text.settings.clearunlocks = Очистити розблоковане
|
||||
text.settings.clearall = Очистити все
|
||||
text.paused = Пауза
|
||||
text.yes = Так
|
||||
text.no = Ні
|
||||
text.info.title = [accent]Інформація
|
||||
text.info.title = Інформація
|
||||
text.error.title = [crimson]Виникла помилка
|
||||
text.error.crashtitle = Виникла помилка
|
||||
text.blocks.unknown = [LIGHT_GRAY]???
|
||||
@ -291,14 +291,14 @@ text.blocks.blockinfo = Інформація про блок
|
||||
text.blocks.powercapacity = Місткість енергії
|
||||
text.blocks.powershot = Енергія/постріл
|
||||
text.blocks.targetsair = Атакуе повітряних ворогів?
|
||||
text.blocks.itemspeed = Переміщення одиниць
|
||||
text.blocks.shootrange = Діапазон
|
||||
text.blocks.itemspeed = Швидкість переміщення ресурсів
|
||||
text.blocks.shootrange = Діапазон дії
|
||||
text.blocks.size = Розмір
|
||||
text.blocks.liquidcapacity = Місткість рідини
|
||||
text.blocks.maxitemssecond = Макс. кількість предметів/секунду
|
||||
text.blocks.powerrange = Діапазон передачі енергії
|
||||
text.blocks.poweruse = Енергії використовується
|
||||
text.blocks.powerdamage = Енергія/Урон
|
||||
text.blocks.poweruse = Енергії використовує
|
||||
text.blocks.powerdamage = Енергія/урон
|
||||
text.blocks.inputitemcapacity = Ємність вхідних елементів
|
||||
text.blocks.outputitemcapacity = Ємність вихідних елементів
|
||||
text.blocks.itemcapacity = Місткість предметів
|
||||
@ -314,102 +314,102 @@ text.blocks.drilltier = Видобуває
|
||||
text.blocks.drillspeed = Базова швидкість свердління
|
||||
text.blocks.liquidoutput = Вихідна рідина
|
||||
text.blocks.liquidoutputspeed = Швидкість вихідної рідини
|
||||
text.blocks.liquiduse = Використовуеться рідина
|
||||
text.blocks.liquiduse = Використовуеться рідин
|
||||
text.blocks.coolant = Охолоджуюча рідина
|
||||
text.blocks.coolantuse = Охолодж. рідини використовуеться
|
||||
text.blocks.inputliquidfuel = Рідке паливо
|
||||
text.blocks.liquidfueluse = Рідкого палива використовуеться
|
||||
text.blocks.boostitem = Boost Item
|
||||
text.blocks.boostliquid = Boost Liquid
|
||||
text.blocks.boostitem = Прискорюючий предмет
|
||||
text.blocks.boostliquid = Прискорююча рідина
|
||||
text.blocks.health = Здоров'я
|
||||
text.blocks.inaccuracy = Розкид
|
||||
text.blocks.shots = Постріли
|
||||
text.blocks.reload = Перезарядка
|
||||
text.blocks.reload = Постріли/секунду
|
||||
text.blocks.inputfuel = Паливо
|
||||
text.blocks.fuelburntime = Час горіння топлива
|
||||
text.blocks.inputcapacity = Вміщення вводу
|
||||
text.blocks.outputcapacity = Вміщення виводу
|
||||
text.blocks.inputcapacity = Макс. місткість вхідних предметів
|
||||
text.blocks.outputcapacity = Макс. місткість вихідних предметів
|
||||
text.unit.blocks = блоки
|
||||
text.unit.powersecond = одиниць енергії/секунду
|
||||
text.unit.liquidsecond = рідких одиниць/секунду
|
||||
text.unit.itemssecond = предметів/секунду
|
||||
text.unit.pixelssecond = пікселів/секунду
|
||||
text.unit.liquidunits = рідин. одиниць
|
||||
text.unit.powerunits = енерг. одиниць
|
||||
text.unit.liquidunits = рідинних одиниць
|
||||
text.unit.powerunits = енергетичних одиниць
|
||||
text.unit.degrees = град.
|
||||
text.unit.seconds = сек.
|
||||
text.unit.items = предм.
|
||||
text.category.general = Загальне
|
||||
text.category.power = Енергетичне
|
||||
text.category.liquids = Рідинне
|
||||
text.category.items = Елементи
|
||||
text.category.general = Загальні
|
||||
text.category.power = Енергетичні
|
||||
text.category.liquids = Рідини
|
||||
text.category.items = Предмети
|
||||
text.category.crafting = Створення
|
||||
text.category.shooting = Стрільба
|
||||
text.category.optional = Optional Enhancements
|
||||
text.category.optional = Додаткові поліпшення
|
||||
setting.autotarget.name = Авто-ціль
|
||||
setting.fpscap.name = Макс. FPS
|
||||
setting.fpscap.none = Необмежений
|
||||
setting.fpscap.text = {0} FPS
|
||||
setting.difficulty.training = навчання
|
||||
setting.difficulty.easy = легкий
|
||||
setting.difficulty.normal = нормальний
|
||||
setting.difficulty.hard = важкий
|
||||
setting.difficulty.insane = божевільний
|
||||
setting.difficulty.name = Рівень складності:
|
||||
setting.difficulty.easy = легка
|
||||
setting.difficulty.normal = нормальна
|
||||
setting.difficulty.hard = важка
|
||||
setting.difficulty.insane = божевільна
|
||||
setting.difficulty.name = Складність:
|
||||
setting.screenshake.name = Тряска екрану
|
||||
setting.effects.name = Ефекти
|
||||
setting.sensitivity.name = Чутливість контролера
|
||||
setting.saveinterval.name = Інтервал автозбереження
|
||||
setting.seconds = {0} сек.
|
||||
setting.fullscreen.name = Повноекранний режим
|
||||
setting.fps.name = Показати FPS
|
||||
setting.fps.name = Показувати FPS
|
||||
setting.vsync.name = Вертикальна синхронізація
|
||||
setting.lasers.name = Показати енергетичні лазери
|
||||
setting.lasers.name = Показувати енергію лазерів
|
||||
setting.minimap.name = Показати мінікарту
|
||||
setting.musicvol.name = Гучність музики
|
||||
setting.mutemusic.name = Заглушити музику
|
||||
setting.sfxvol.name = Гучність звукових ефектів
|
||||
setting.mutesound.name = Заглушити звук
|
||||
setting.crashreport.name = Send Anonymous Crash Reports
|
||||
setting.crashreport.name = Надіслати анонімні звіти про аварійне завершення гри
|
||||
text.keybind.title = Налаштування управління
|
||||
category.general.name = Основне
|
||||
category.view.name = Перегляд
|
||||
category.multiplayer.name = Мультиплеєр
|
||||
command.attack = Атакувати
|
||||
command.retreat = Відступити
|
||||
command.patrol = Патрулювання
|
||||
command.patrol = Патрулювати
|
||||
keybind.press = Натисніть клавішу...
|
||||
keybind.press.axis = Натисніть клавішу...
|
||||
keybind.move_x.name = Переміщення по осі x
|
||||
keybind.move_y.name = Переміщення по осі y
|
||||
keybind.select.name = Виберіть
|
||||
keybind.break.name = Зламати
|
||||
keybind.move_x.name = Рух по осі x
|
||||
keybind.move_y.name = Рух по осі x
|
||||
keybind.select.name = ВибратиПостріл
|
||||
keybind.break.name = Руйнування
|
||||
keybind.deselect.name = Скасувати
|
||||
keybind.shoot.name = Постріл
|
||||
keybind.zoom_hold.name = Утримувати масштаб
|
||||
keybind.zoom.name = Збільшити
|
||||
keybind.zoom_hold.name = Удержание зума
|
||||
keybind.zoom.name = Приблизить
|
||||
keybind.menu.name = Меню
|
||||
keybind.pause.name = Пауза
|
||||
keybind.dash.name = Тире
|
||||
keybind.dash.name = Мчати
|
||||
keybind.chat.name = Чат
|
||||
keybind.player_list.name = Список гравців
|
||||
keybind.console.name = Консоль
|
||||
keybind.rotate.name = Повертати
|
||||
keybind.rotate.name = Обертати
|
||||
keybind.toggle_menus.name = Меню перемикання
|
||||
keybind.chat_history_prev.name = Попередня історія чату
|
||||
keybind.chat_history_next.name = Наступна історія чату
|
||||
keybind.chat_scroll.name = Прокрутка чату
|
||||
keybind.drop_unit.name = Скинути юніта
|
||||
keybind.drop_unit.name = Скинути бой. од.
|
||||
keybind.zoom_minimap.name = Збільшити мінікарту
|
||||
mode.text.help.title = Опис режимів
|
||||
mode.waves.name = Хвилі
|
||||
mode.waves.description = Нормальний режим. Обмежені ресурси та автоматичні хвилі.
|
||||
mode.waves.description = Звичайний режим. В режимі "Хвилі" треба самим добувати ресурси та хвилі йдуть беззупинно.
|
||||
mode.sandbox.name = Пісочниця
|
||||
mode.sandbox.description = Нескінченні ресурси і нема таймера для хвиль.
|
||||
mode.freebuild.name = Вільний режим
|
||||
mode.freebuild.description = обмежені ресурси і немає таймера для хвиль.
|
||||
mode.pvp.name = PvP
|
||||
mode.pvp.description = борітесь проти інших гравців тут.
|
||||
mode.sandbox.description = В режимі "Пісочниця" бескінечні ресурси(але їх все одно можно добувати) та хвилі йдуть за вашим бажанням.
|
||||
mode.freebuild.name = Вільне\nбудівництво
|
||||
mode.freebuild.description = В режимі "Пісочниця" треба самим добувати ресурси та хвилі йдуть за вашим бажанням.
|
||||
mode.pvp.name = PVP
|
||||
mode.pvp.description = боріться проти інших гравців.
|
||||
content.item.name = Предмети
|
||||
content.liquid.name = Рідини
|
||||
content.unit.name = Бойові одиниці
|
||||
@ -420,29 +420,29 @@ item.stone.description = Загальна сировина. Використов
|
||||
item.copper.name = Мідь
|
||||
item.copper.description = Корисний структурний матеріал. Широко використовується у всіх типах блоків.
|
||||
item.lead.name = Свинець
|
||||
item.lead.description = Базовий стартовий матеріал. Широко використовується в електроніки та транспорту рідини.
|
||||
item.lead.description = Базовий стартовий матеріал. Широко використовується в електроніки та транспорту рідин.
|
||||
item.coal.name = Вугілля
|
||||
item.coal.description = Загальне та легкодоступне паливо.
|
||||
item.dense-alloy.name = Щільний сплав
|
||||
item.dense-alloy.description = Жорсткий сплав з свинцем та міддю. Використовується в передових транспортних блоках та високорівневих свердлах.
|
||||
item.dense-alloy.description = Жорсткий сплав вироблений зі свинця та міді. Використовується в передових транспортних блоках та високорівневих свердлах.
|
||||
item.titanium.name = Титан
|
||||
item.titanium.description = Рідкий суперлегкий метал широко використовується в рідкому транспорті, свердлах та літальних апаратах.
|
||||
item.thorium.name = Торій
|
||||
item.thorium.description = Густий, радіоактивний метал, що використовується як структурна підтримка та ядерне паливо.
|
||||
item.silicon.name = Кремній
|
||||
item.silicon.description = Надзвичайно корисний напівпровідник з застосуванням в сонячних батареях та багатьох складних електроніках.
|
||||
item.silicon.name = Кремень
|
||||
item.silicon.description = Надзвичайно корисний напівпровідник з застосуванням в сонячних батареях та складній електроніці.
|
||||
item.plastanium.name = Пластиній
|
||||
item.plastanium.description = Легкий, пластичний матеріал, що використовується в сучасних літальних апаратах, та боєприпаси для фрагментації.
|
||||
item.phase-fabric.name = Phase Fabric
|
||||
item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology.
|
||||
item.surge-alloy.name = Хвилястий сплав
|
||||
item.surge-alloy.description = An advanced alloy with unique electrical properties.
|
||||
item.plastanium.description = Легкий, пластичний матеріал, що використовується в сучасних літальних апаратах та у боєприпасах для фрагментації.
|
||||
item.phase-fabric.name = Фазова тканина
|
||||
item.phase-fabric.description = Невагоме речовина, що використовується в сучасній електроніці і технології самовідновлення.
|
||||
item.surge-alloy.name = Високоміцний сплав
|
||||
item.surge-alloy.description = Передовий сплав з унікальними електричними властивостями.
|
||||
item.biomatter.name = Біоматерія
|
||||
item.biomatter.description = Скупчення органічної муси; використовується для перетворення в нафту або як основне паливо.
|
||||
item.biomatter.description = Скупчення органічної муси; використовується для перетворення в нафту або як паливо.
|
||||
item.sand.name = Пісок
|
||||
item.sand.description = Загальний матеріал, який широко використовується при плавленні, як у процесі плавки, так і в відходах.
|
||||
item.sand.description = Загальний матеріал, який широко використовується при плавленні, як у процесі плавки, так і у вигляді шлака.
|
||||
item.blast-compound.name = Вибухонебезпечне з'єднання
|
||||
item.blast-compound.description = Нестійкий склад, що використовується в бомбах та вибухових речовинах. Хоча воно може спалюватися як паливо, та це не рекомендується.
|
||||
item.blast-compound.description = Нестійке з'єднання, що використовується в бомбах та вибухових речовинах. Хоча воно може спалюватися як паливо, та це не рекомендується.
|
||||
item.pyratite.name = Піротит
|
||||
item.pyratite.description = Вкрай легкозаймиста речовина, що використовується у запальній зброї.
|
||||
liquid.water.name = Вода
|
||||
@ -450,9 +450,9 @@ liquid.lava.name = Лава
|
||||
liquid.oil.name = Нафта
|
||||
liquid.cryofluid.name = Кріогенна рідина
|
||||
mech.alpha-mech.name = Альфа
|
||||
mech.alpha-mech.weapon = Кулемет
|
||||
mech.alpha-mech.weapon = Звичайний кулемет
|
||||
mech.alpha-mech.ability = Виклик дронів
|
||||
mech.alpha-mech.description = Стандартний мех. Має пристойну швидкість і урон; може створити до 3-х дронів для збільшення можливості перемоги.
|
||||
mech.alpha-mech.description = Стандартний мех для настільних пристроїв. Має пристойну швидкість і урон; може створити до 3-х дронів для збільшення можливості перемоги.
|
||||
mech.delta-mech.name = Дельта
|
||||
mech.delta-mech.weapon = Генератор дуг
|
||||
mech.delta-mech.ability = Розряд
|
||||
@ -460,18 +460,18 @@ mech.delta-mech.description = Швидкий, легкоброньований
|
||||
mech.tau-mech.name = Тау
|
||||
mech.tau-mech.weapon = Відновлювальний лазер
|
||||
mech.tau-mech.ability = Відновлювальний спалах
|
||||
mech.tau-mech.description = Мех підтримки. Зцілює союзницькі блоки, стріляючи в них. Можна гасити пожежі і зцілити союзників у радіусі зі своєю можливостю для ремонту.
|
||||
mech.tau-mech.description = Мех підтримки. Зцілює союзницькі блоки, стріляючи в них. Може зцілити союзників у радіусі зі своєю здатністю для ремонту.
|
||||
mech.omega-mech.name = Омега
|
||||
mech.omega-mech.weapon = Купа ракет
|
||||
mech.omega-mech.ability = Захисна конфігурація
|
||||
mech.omega-mech.description = Громіздкий і добре броньований хутро, зроблений для фронтових нападів. Його здатність може блокувати до 90% вхідного шкоди.
|
||||
mech.omega-mech.description = Громіздкий і добре броньований мех, зроблений для фронтових нападів. Його здатність може блокувати до 90% вхідного урона.
|
||||
mech.dart-ship.name = Дротик
|
||||
mech.dart-ship.weapon = Ретранслятор
|
||||
mech.dart-ship.description = Стандартний корабель для мобільних пристріях. Досить швидкий і легкий, але має невеликі наступальні можливості і низьку швидкість видобутку.
|
||||
mech.dart-ship.description = Стандартний корабель на мобільних пристріях. Досить швидкий і легкий, але має невеликі наступальні можливості і низьку швидкість видобутку.
|
||||
mech.javelin-ship.name = Джавелін
|
||||
mech.javelin-ship.description = Ударний корабель, який використовує набіг з відскоком. Спочатку повільний, але пізніше він може прискоритися до великих швидкостей і літати над ворожими заставами, завдаючи великої шкоди своєю. блискавичною здатністю і ракетами.
|
||||
mech.javelin-ship.weapon = Вибухові ракети
|
||||
mech.javelin-ship.ability = Дуговий генератор
|
||||
mech.javelin-ship.ability = Генератор дуг
|
||||
mech.trident-ship.name = Тризубець
|
||||
mech.trident-ship.description = Важкий бомбардувальник. Досить добре броньований.
|
||||
mech.trident-ship.weapon = Вантажний відсік з бомбами
|
||||
@ -493,9 +493,10 @@ text.mech.ability = [LIGHT_GRAY]Здібність: {0}
|
||||
text.liquid.heatcapacity = [LIGHT_GRAY]Теплоємність: {0}
|
||||
text.liquid.viscosity = [LIGHT_GRAY]В'язкість: {0}
|
||||
text.liquid.temperature = [LIGHT_GRAY]Температура: {0}
|
||||
block.constructing = {0}\n[LIGHT_GRAY](Constructing)
|
||||
block.spawn.name = Спавн ворога
|
||||
block.constructing = {0}[LIGHT_GRAY](В процесі)
|
||||
block.spawn.name = Місце появи ворога
|
||||
block.core.name = Ядро
|
||||
block.space.name = Пустота
|
||||
block.metalfloor.name = Металічна підлога
|
||||
block.deepwater.name = Глибоководдя
|
||||
block.water.name = Вода
|
||||
@ -510,7 +511,7 @@ block.snow.name = Сніг
|
||||
block.grass.name = Трава
|
||||
block.shrub.name = Кущ
|
||||
block.rock.name = Кругляк
|
||||
block.blackrock.name = Чорнийкругляк
|
||||
block.blackrock.name = Чорний кругляк
|
||||
block.icerock.name = Льодяний кругляк
|
||||
block.copper-wall.name = Мідна стіна
|
||||
block.copper-wall-large.name = Велика мідна стіна
|
||||
@ -557,9 +558,9 @@ block.pneumatic-drill.name = Пневматичний дриль
|
||||
block.laser-drill.name = Лазерний дриль
|
||||
block.water-extractor.name = Екстрактор води
|
||||
block.cultivator.name = Культиватор
|
||||
block.alpha-mech-pad.name = Завод мехів "Альфа"
|
||||
block.alpha-mech-pad.name = Реконстуктор "Альфа"
|
||||
block.dart-ship-pad.name = Завод дротікових літаків
|
||||
block.delta-mech-pad.name = Завод мехів "Дельта"
|
||||
block.delta-mech-pad.name = Реконструктор "Дельта"
|
||||
block.javelin-ship-pad.name = Реконструктор "Джавелін"
|
||||
block.trident-ship-pad.name = Реконструктор "Тризуб"
|
||||
block.glaive-ship-pad.name = Реконструктор "Спис"
|
||||
@ -577,7 +578,7 @@ block.vault.name = Сховище
|
||||
block.wave.name = Хвиля
|
||||
block.swarmer.name = Ройевик
|
||||
block.salvo.name = Залп
|
||||
block.ripple.name = Хвилястість
|
||||
block.ripple.name = Рябь
|
||||
block.phase-conveyor.name = Фазовий конвеєр
|
||||
block.bridge-conveyor.name = Мостовий конвеєр
|
||||
block.plastanium-compressor.name = Пластиновий компресор
|
||||
@ -587,14 +588,14 @@ block.solidifer.name = Затверджувач
|
||||
block.solar-panel.name = Сонячна панель
|
||||
block.solar-panel-large.name = Велика сонячна панель
|
||||
block.oil-extractor.name = Екстрактор нафти
|
||||
block.spirit-factory.name = Завод дронів "Привид"
|
||||
block.phantom-factory.name = Завод дронів "Фантом"
|
||||
block.wraith-factory.name = Завод примарних винищувачів
|
||||
block.ghoul-factory.name = Завод гулевих бомбардувальників
|
||||
block.dagger-factory.name = Завод мехів "Розвідник"
|
||||
block.titan-factory.name = Завод мехів "Титан"
|
||||
block.fortress-factory.name = Завод мехів "Фортеця"
|
||||
block.revenant-factory.name = Завод бомбардувальників "Потойбічний вбивця"
|
||||
block.spirit-factory.name = Завод дронов "Призрак"
|
||||
block.phantom-factory.name = Завод дронов "Фантом"
|
||||
block.wraith-factory.name = Завод винищувачів "Примара"
|
||||
block.ghoul-factory.name = Завод бомбардувальників "Ґуль"
|
||||
block.dagger-factory.name = Завод мехов "Разведчик"
|
||||
block.titan-factory.name = Завод мехов "Титан"
|
||||
block.fortress-factory.name = Завод мехов "Крепость"
|
||||
block.revenant-factory.name = Завод бомбардировщиков "Потусторонний убийца"
|
||||
block.repair-point.name = Ремонтний пункт
|
||||
block.pulse-conduit.name = Імпульсний водовід
|
||||
block.phase-conduit.name = Фазовий водопровід
|
||||
@ -620,161 +621,161 @@ block.overdrive-projector.name = Сверхприводний проектор
|
||||
block.force-projector.name = Силовий проектор
|
||||
block.arc.name = Дуга
|
||||
block.rtg-generator.name = Радіоізотопний термоелектричний генератор
|
||||
block.spectre.name = Spectre
|
||||
block.meltdown.name = Meltdown
|
||||
block.spectre.name = Мара
|
||||
block.meltdown.name = Розтоплення
|
||||
block.container.name = Склад
|
||||
block.core.description = Найголовніша будівля в грі.
|
||||
team.blue.name = Синя
|
||||
team.red.name = Червона
|
||||
team.orange.name = Помаренчева
|
||||
team.none.name = Сіра
|
||||
team.green.name = Зелена
|
||||
team.purple.name = Фіолетова
|
||||
unit.alpha-drone.name = Альфа дрон
|
||||
unit.alpha-drone.name = Альфа
|
||||
unit.spirit.name = Дрон-привид
|
||||
unit.spirit.description = Початковий дрон. З'являється в ядрі за замовчуванням. Автоматично добуває руди та ремонтує блоки.
|
||||
unit.phantom.name = Фантом
|
||||
unit.phantom.description = Покращений дрон. Автоматично добуває руди та ремонтує блоки.\nЗначно краще дрона-привида.
|
||||
unit.dagger.name = Кинджал
|
||||
unit.phantom.description = Покращений дрон. Автоматично добуває руди та ремонтує блоки.
|
||||
unit.dagger.name = Розвідник
|
||||
unit.dagger.description = Базова наземна бойова одиниця. Корисен у купі.
|
||||
unit.titan.name = Титан
|
||||
unit.titan.description = Просунута броньована наземна одиниця. Атакуе наземні та повітряні цілі.
|
||||
unit.ghoul.name = Гулевий бомбардувальник
|
||||
unit.ghoul.description = Тяжкий ковровий бомбардувальник
|
||||
unit.titan.description = Улучшенная бронированная наземная боевая единица. Атакует наземные и воздушные цели.
|
||||
unit.ghoul.name = Бомбардувальний "Ґуль"
|
||||
unit.ghoul.description = Тяжкий ковровий бомбардувальник.
|
||||
unit.wraith.name = Примарний винищувач
|
||||
unit.wraith.description = Швидка бойова одиниця.
|
||||
unit.wraith.description = Швидка бойова одиниця, котрий використовує набіг з відскоком.
|
||||
unit.fortress.name = Фортеця
|
||||
unit.fortress.description = Тяжка артилерійна наземна бойова одиниця.
|
||||
unit.revenant.name = Потойбічний вбивця
|
||||
unit.revenant.description = Важка лазерна платформа.
|
||||
tutorial.begin = Ваша місія тут полягає в ліквідації[LIGHT_GRAY] противника[].\\n\\nПочнімо з[accent] видобутку міді[]. Щоб зробити це, торкніться мідної рудної жили біля вашого ядра.
|
||||
tutorial.drill = Ручна робота не ефективна\\n[accent]Бури []можуть копати автоматично.\\nПоставте один на мідній жилі.
|
||||
tutorial.conveyor = [accent]Конвейери[] використовуються для транспортування предметів в ядра.\\nЗробіть лінію конвейерів від бурів до ядра.
|
||||
tutorial.morecopper = Треба більше міді\\n\\nДобудьте вручну або поставте більше бурів
|
||||
tutorial.turret = Захистні споруди повинні бути побудованими для захисту від [LIGHT_GRAY] ворога[].\\nПобудуйте подвійну турель біля бази.
|
||||
tutorial.drillturret = Подвійні турелі потребують[accent] мідні патрони []для стрільби.\\nПоставте бури поруч з турелею, щоб знаюдити її видобутою міддю.
|
||||
tutorial.waves = [LIGHT_GRAY] Супротивник[] прижується.\\n\\nЗахистіть своє ядро від двух хвиль противника. Побудуйте більше турелей.
|
||||
tutorial.lead = Стало доступно більше руд. Знайдіть і добудьте[accent] свинець[].\\n\\nПеретягніть з вашого меху в ядро для передачі ресурсів.
|
||||
tutorial.smelter = Свинець і мідь тяжкі метали.\\nНайліпший[accent] щільний сплав[] може бути створеним у плавильному заводі.\\n\\nПобудуйте один завод.
|
||||
unit.revenant.description = Бойова одиниця з важкою лазерною зброєю.
|
||||
tutorial.begin = Ваша місія тут полягає в ліквідації[LIGHT_GRAY] противника[].\n\nПочнімо з[accent] видобутку міді[]. Щоб зробити це, торкніться мідної рудної жили біля вашого ядра.
|
||||
tutorial.drill = Ручна робота не ефективна\n[accent]Бури []можуть копати автоматично.\nПоставте один на мідній жилі.
|
||||
tutorial.conveyor = [accent]Конвейери[] використовуються для транспортування предметів в ядра.\nЗробіть лінію конвейерів від бурів до ядра.
|
||||
tutorial.morecopper = Треба більше міді\n\nДобудьте вручну або поставте більше бурів
|
||||
tutorial.turret = Захистні споруди повинні бути побудованими для захисту від [LIGHT_GRAY] ворога[].\nПобудуйте подвійну турель біля бази.
|
||||
tutorial.drillturret = Подвійні турелі потребують[accent] мідні патрони []для стрільби.\nПоставте бури поруч з турелею, щоб знаюдити її видобутою міддю.
|
||||
tutorial.waves = [LIGHT_GRAY] Супротивник[] прижується.\n\nЗахистіть своє ядро від двух хвиль противника. Побудуйте більше турелей.
|
||||
tutorial.lead = Стало доступно більше руд. Знайдіть і добудьте[accent] свинець[].\n\nПеретягніть з вашого меху в ядро для передачі ресурсів.
|
||||
tutorial.smelter = Свинець і мідь тяжкі метали.\nНайліпший[accent] щільний сплав[] може бути створеним у плавильному заводі.\n\nПобудуйте один завод.
|
||||
tutorial.densealloy = Плавильний завод тепер буде створювати сплав.
|
||||
tutorial.siliconsmelter = Ядро зараз створить[accent] дрона привида[] для добування і ремонтування блоків.\\n\\nЗаводи для других одиниць(юнітов) може бути створено за допомогою [accent] кремнія.\\nЗробіть кремнієвий завод.
|
||||
tutorial.silicondrill = Кремній потребує[accent] вугілляl[] та[accent] пісок[].\\nПочніть зі створення бурів.
|
||||
tutorial.generator = Ця технологія потребує енергії.\\nЗробіть[accent] генератор внутрішнього згорання[] для цього.
|
||||
tutorial.generatordrill = Генератор потребує вугілля.\\nПобудуйте бур на вугільній жилі.
|
||||
tutorial.node = Енергії потребує транспортування\\nСоздайте[accent] силовий вузол[] поруч з вашим генератором згорання, щоб передавати його енергію.
|
||||
tutorial.nodelink = Енергія може бути передана через контактні енергетичні блоки та генератори, або з'єднані силові вузли.\\n\\nЗ'єднайте живлення, торкнувшись вузла та вибравши генератор і кремнієвий завод.
|
||||
tutorial.silicon = Кремній почався створюватися. Отримайте трохи.\\n\\nРекомендується вдосконалити виробничу систему.
|
||||
tutorial.daggerfactory = Побудуйте[accent] завод "Розвідник".[]\\n\\nЦе буде використано для створення мехів атаки.
|
||||
tutorial.router = Фабрики потребують ресурсів для функціонування.\\nСтворіть маршрутизатор для розподілення ресурсів з конвейера.
|
||||
tutorial.siliconsmelter = Ядро зараз створить[accent] дрона привида[] для добування і ремонтування блоків.\n\nЗаводи для других одиниць(юнітов) може бути створено за допомогою [accent] кремнія.\nЗробіть кремнієвий завод.
|
||||
tutorial.silicondrill = Кремній потребує[accent] вугілляl[] та[accent] пісок[].\nПочніть зі створення бурів.
|
||||
tutorial.generator = Ця технологія потребує енергії.\nЗробіть[accent] генератор внутрішнього згорання[] для цього.
|
||||
tutorial.generatordrill = Генератор потребує вугілля.\nПобудуйте бур на вугільній жилі.
|
||||
tutorial.node = Енергії потребує транспортування\nСоздайте[accent] силовий вузол[] поруч з вашим генератором згорання, щоб передавати його енергію.
|
||||
tutorial.nodelink = Енергія може бути передана через контактні енергетичні блоки та генератори, або з'єднані силові вузли.\n\nЗ'єднайте живлення, торкнувшись вузла та вибравши генератор і кремнієвий завод.
|
||||
tutorial.silicon = Кремній почався створюватися. Отримайте трохи.\n\nРекомендується вдосконалити виробничу систему.
|
||||
tutorial.daggerfactory = Побудуйте[accent] завод "Розвідник".[]\n\nЦе буде використано для створення мехів атаки.
|
||||
tutorial.router = Фабрики потребують ресурсів для функціонування.\nСтворіть маршрутизатор для розподілення ресурсів з конвейера.
|
||||
tutorial.dagger = Зв'яжіть силовий вузол з заводом.\nЯк тільки вимоги будуть виконані, буде створено мех.\n\nЯкщо необхідно, то створіть ще бурів, генераторів та конвейерів
|
||||
tutorial.battle = [LIGHT_GRAY] Супротивник[] показав своє ядро.\\nЗнищьте його з вашим мехом та бойовою одиницею.
|
||||
block.copper-wall.description = Стіна з найменшим запасом міцності.\nДуж на початку гри для захисту.
|
||||
block.copper-wall-large.description = Велика стіна найменшим запасом міцності.\nХороша на початку гри.
|
||||
tutorial.battle = [LIGHT_GRAY] Супротивник[] показав своє ядро.\nЗнищьте його з вашим мехом та бойовою одиницею.
|
||||
block.core.description = Найголовніше будівля в грі.
|
||||
block.copper-wall.description = Дешевий оборонний блок.\nКорисен для захисту ядра і турелей під час перших хвиль.
|
||||
block.copper-wall-large.description = Велика стіна найменшим запасом міцності.\nКорисна на початку гри.
|
||||
block.dense-alloy-wall.description = Стіна з показником міцності "нижче середнього".
|
||||
block.dense-alloy-wall-large.description = Велика стіна з показником міцності "нижче середнього".
|
||||
block.thorium-wall.description = Стіна з показником міцності "вище середнього".
|
||||
block.thorium-wall-large.description = Велика стіна з показником міцності "вище середнього".
|
||||
block.phase-wall.description = Стіна з середнім показником міцності.
|
||||
block.phase-wall-large.description = Велика стіна з середнім показником міцності.
|
||||
block.surge-wall.description = Стіна з найбільшим запасом міцності.
|
||||
block.surge-wall.description = Стіна з найбільшим показником міцності.
|
||||
block.surge-wall-large.description = Велика стіна з найбільшим запасом міцності.
|
||||
block.door.description = Через ці двері не пройдуть вороги, якщо вона закрита. Щоб відкрити / закрити просто натисніть на неї.
|
||||
block.door-large.description = Для великих стін потрібні великі двері. Щоб відкрити / закрити просто натисніть на неї.
|
||||
block.door.description = Двері в прямому сенсі цього слова. Просто натисніть на неї.
|
||||
block.door-large.description = Для великих стін потрібні великі двері.\nДля відкриття або закриття просто натисніть на неї.
|
||||
block.mend-projector.description = Ремонтує будівлі в невеликому радіусі. Споживає енергію.
|
||||
block.overdrive-projector.description = Прискорює в невеликому радіусі всі ваші дії.
|
||||
block.force-projector.description = Створює в невеликому радіусі силове поле, яке захищає від противника.
|
||||
block.shock-mine.description = Поставте її. Вона б'є електрикою О_О
|
||||
block.duo.description = Хороша турель початкова турель. Використовуйте стіни для її захисту.\n\n Використовує як снаряди мідь, щільний сплав, кремній і піротит.\n\nМожно підвести воду і криогенну рідина для прискорення стрільби.
|
||||
block.arc.description = Турель з малим радіусом атаки. Для патронів треба воду або кріогенну рідина. Також потрібна енергія.
|
||||
block.hail.description = Далекобійна початкова турель.\nВикористовує як снаряди щільний сплав, кремній і піротит.\nДля прискорення стрільби можна підвести воду і криогенну рідину.
|
||||
block.lancer.description = Турель, яка стріляє лазером на середню відстань.\nВикористовує як снаряди енергію.\nДля прискорення стрільби можна підвести воду, нафту і криогенну рідину.
|
||||
block.wave.description = Турель з середнім радіусом атаки, яка відштовхує супротивників в сторони. Використовує в якості снарядів воду, нафту, лаву або кріогенну рідину.
|
||||
block.salvo.description = Турель з середнім радіусом атаки. Використовує в якості снарядів мідь, щільний сплав, торій, кремній і піротит.\nТакож потрібна якась рідина: вода, нафта або кріогенна.
|
||||
block.swarmer.description = Навіть Керріган в захваті від такого.\nВикористовує в якості снарядів високоміцний сплав, піротит і вибухонебезпечне з'єднання.\nТакож потрібна якась рідина: вода, нафта або кріогенна.
|
||||
block.ripple.description = Перша турель 3х3.\nВикористовує в якості снарядів щільний сплав, кремній, піротит, вибухонебезпечне з'єднання.\nТакож потрібна якась рідина: вода, нафта або кріогенна.
|
||||
block.cyclone.description = Турель з великою дальністю. Використовує в якості снарядів пластиній, вибухонебезпечне з'єднання і високоміцний сплав.\nТакож потрібна якась рідина: вода, нафта або кріогенна.
|
||||
block.fuse.description = Турель з малою дальністю атаки. Використовує в якості снарядів щільний сплав.\nТакож потрібна якась рідина: вода, нафта або кріогенна.
|
||||
block.spectre.description = Перша турель 4х4 з середнім радіусом атаки. Використовує в якості снарядів щільний сплав, торій і піротит.
|
||||
block.meltdown.description = Турель з середнім радіусом атаки. Для патронів треба воду або кріогенну рідину. Також потрібна енергія.
|
||||
block.overdrive-projector.description = Прискорює в невеликому радіусі роботу механізмів.
|
||||
block.force-projector.description = Створює в невеликому радіусі силове поле, яке захищає від атак супротивника.
|
||||
block.shock-mine.description = Поставте її на землю. Вона б'ється ЕЛЕКТРИКОЮ О_О
|
||||
block.duo.description = Маленька і дешева турель.\nДля прискорення стрільби можна підвести воду або кріогенну рідина.
|
||||
block.arc.description = Турель с малым радиусом атаки.\nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.hail.description = Далекобійна початкова турель.\nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.lancer.description = Турель, яка стріляє лазером на середню відстань.\nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.wave.description = Турель з середнім радіусом атаки, яка відштовхує супротивників в сторони.
|
||||
block.salvo.description = Турель з середнім радіусом атаки.\nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.swarmer.description = Середній розмір турелі з великим радіусом атаки, яка стріляє ракетами.\nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.ripple.description = Велика артилерійська турель, яка одночасно стріляє декільками пострілами.
|
||||
block.cyclone.description = Велика швидка вогняна турель. \nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.fuse.description = Велика турель, яка стріляє потужними ближніми променями.\nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.spectre.description = Велика вежа, яка стріляє зразу двома потужніми кулями.\nДля прискорення стрільби можна підвести воду або кріогенну рідину.
|
||||
block.meltdown.description = Велика турель, яка стріляє могутніми далекобійними променями.
|
||||
block.conveyor.description = Переміщує ресурси з малою швидкістю.
|
||||
block.titanium-conveyor.description = Конвеєр другого покоління. Збільшена швидкість переміщення предметів і міцність.
|
||||
block.phase-conveyor.description = Поки гра знаходиться в 2D, цей конвеєр вже в чотиривимірному просторі. Вимагає енергії.
|
||||
block.titanium-conveyor.description = Конвеєр другого покоління. Збільшена швидкість переміщення предметів і міцність конвеєра.
|
||||
block.phase-conveyor.description = Поки гра знаходиться в 2D, цей конвеєр вже в чотиривимірному просторі (можливо, це брехня).\nПотрібує енергії і підключається як мостовий конвеєр.
|
||||
block.junction.description = Назва говорить сама за себе. За допомогою нього можна зробити дві конвеєрні стрічки, які проходять через один одного і не змішуються.
|
||||
block.mass-driver.description = При наявності енергії передають ресурси на відстань 100 блоків, стріляючи в один-одного.
|
||||
block.smelter.description = Виробляє щільний сплав з міді і свинцю. Можна підвести пісок для прискорення виробництва.
|
||||
block.arc-smelter.description = Покращена версія плавильного заводу. Вимагає енергію. Виробляє щільний сплав з вугілля, міді і свинцю.\nМожно підвести пісок для прискорення виробництва.
|
||||
block.silicon-smelter.description = За допомогою піску, вугілля і енергії виробляє кремній.\n[RED]НЕ СИЛІКОН[]
|
||||
block.plastanium-compressor.description = Створює пластини з титану і нафти. Вимагає енергії. Для прискорення виробництва можна додати в компресор пісок.
|
||||
block.phase-weaver.description = Виробляє фазову матерію з торію і піску. Вимагає багато енергії.
|
||||
block.alloy-smelter.description = Створює високоміцний сплав з титану, кремнію, міді і свинцю. Вимагає енергію.
|
||||
block.arc-smelter.description = Покращена версія плавильного заводу. Вимагає енергію. Виробляє щільний сплав зміді і свинця.\nМожно підвести пісок для прискорення виробництва.
|
||||
block.silicon-smelter.description = За допомогою піску, вугілля і енергії виробляє кремній.
|
||||
block.plastanium-compressor.description = Створює пластинійи з титану і нафти. Вимагає енергії. Для прискорення виробництва можна додати в компресор пісок.
|
||||
block.phase-weaver.description = Виробляє фазову тканину торію і піску. Вимагає багато енергії.
|
||||
block.alloy-smelter.description = Створює високоміцний сплав з титану, кременя, міді і свинця. Вимагає енергію.
|
||||
block.pulverizer.description = Подрібнює камінь в пісок. Вимагає енергії.
|
||||
block.pyratite-mixer.description = Створює піротит з вугілля, свинцю і піску. Вимагає енергії.
|
||||
block.blast-mixer.description = Створює вибухонебезпечне з'єднання з нафти і піротіта. Для прискорення виробництва можна додати в мішалку пісок.
|
||||
block.cryofluidmixer.description = Виробляє криогенну рідина з води і титану. Вимагає енергії.
|
||||
block.cryofluidmixer.description = Виробляє криогенну рідину з води і титану. Вимагає енергії.
|
||||
block.solidifer.description = Остуджує лаву до каменя. Вимагає енергію.
|
||||
block.melter.description = Переплавляє камінь в лаву. Вимагає енергію.
|
||||
block.incinerator.description = Спалює сміття за допомогою енергії.
|
||||
block.biomattercompressor.description = Робить біоматерію з біосміття і енергії.
|
||||
block.incinerator.description = Якщо є непотрібні ресурси, можна просто їх спалити.\nВимагає енергії.
|
||||
block.biomattercompressor.description = Виробляє нафту з біоматеріі, біосміття і енергії.
|
||||
block.separator.description = Шукає в камені різні ресурси. Чим цінніше ресурс, тим з меншою ймовірністю він "знайдеться".
|
||||
block.centrifuge.description = Покращена версія отделителя.\nШукає в камені різні ресурси. Чим цінніше ресурс, тим з меншою ймовірністю він "знайдеться".\nВимагає енергію.
|
||||
block.power-node.description = Максимум допустимо 4 підключення. Щоб з'єднати з якимось блоком потрібно наступне:\n1. Щоб він знаходився в радіусі дії\n2.Нажать на потрібний блок.
|
||||
block.power-node-large.description = Силовий вузол другого покоління. Збільшено розмір вузла, кількість максимально допустимих підключень і інше.
|
||||
block.battery.description = Зберігає енергію, але батарейки DURACELL зберігають в 10 разів більше.(прихована реклама)
|
||||
block.battery-large.description = Зберігає енергію, але батарейки DURACELL все одно зберігають більше!(прихована реклама)
|
||||
block.combustion-generator.description = Початкове і дешевийе джерело енергії. Для виробництва енергії використовує нафту, вугілля, піротит, біоматерію і вибухонебезпечне з'єднання.
|
||||
block.turbine-generator.description = Для виробництва енергії використовує нафту, вугілля, Піроте, біоматерію і вибухонебезпечне з'єднання.\nТакже обов'язково потрібна вода.
|
||||
block.thermal-generator.description = Гаряче сприймає на ура.
|
||||
block.solar-panel.description = Зелена енергія
|
||||
block.solar-panel-large.description = Зелена енергія. Велике і нескінченне джерело енергії.
|
||||
block.thorium-reactor.description = Найбільше виробляє енергію. Може вибухнути. Потрібно рідина (вода, нафта або кріогенна) і торій.
|
||||
block.rtg-generator.description = A radioisotope thermoelectric generator which does not require cooling but provides less power than a thorium reactor.
|
||||
block.unloader.description = Вивантажує з ядра або сховища верхній лівий предмет.
|
||||
block.container.description = Зберігає ресурси. Спробуй звідти їх дістати :)
|
||||
block.vault.description = Зберігає предмети як ядро до 2 000.
|
||||
block.mechanical-drill.description = Найперший доступний бур. Видобуває мідь, свинець, вугілля, пісок.Можна підвести до нього воду для збільшення швидкості свердління.
|
||||
block.pneumatic-drill.description = Покращена версія механічного бура.\n\nВидобуває теж саме, що і механічний бур. Також може добувати титан і камінь.\n\nМожно підвести до нього[BLUE] воду [] для збільшення швидкості свердління.
|
||||
block.laser-drill.description = Покращена версія пневматичного бура.\n\nВидобуває теж саме, що і пневматичний бур. Також може добувати торій.\n\nМожно підвести до нього[BLUE] воду[] для збільшення швидкості свердління.
|
||||
block.blast-drill.description = Найкрутіший бур.\n\nШукає вона теж саме, що і лазерний бур. Свердлить швидше всіх бурів, але вимагає ще більше енергії. N n Можна підвести до нього [BLUE] воду [] для збільшення швидкості свердління.
|
||||
block.water-extractor.description = Видобуває воду з землі. Вимагає енергію.
|
||||
block.cultivator.description = Виробляє біоматерію з трави і води. Вимагає енергії.
|
||||
block.oil-extractor.description = Виробляє нафту з динозаврів (закреслено), грунту (закреслено), води і піску. Вимагає енергії.
|
||||
block.dart-ship-pad.description = Перетворює вас в дротіковий літак. Реконструктор вимагає енергію.\nПодробиці про дротікових літаків в "розблоковане".
|
||||
block.trident-ship-pad.description = Перетворює вас в Тризуб. Вимагає енергію. Подробиці про Тризуб в "розблоковане"
|
||||
block.javelin-ship-pad.description = Перетворює вас в Джавелін. Вимагає енергію. Подробиці про Джавелін в "розблоковане"
|
||||
block.glaive-ship-pad.description = Перетворює вас в Спис. Вимагає енергію. Подробиці про Спис в "розблоковане"
|
||||
block.tau-mech-pad.description = Перетворює вас в Тау. Вимагає енергію. N Подробиці про Тау в "розблоковане"
|
||||
block.delta-mech-pad.description = Перетворює вас в "Дельта". Реконструктор вимагає енергію.\nПодробиці про "Дельта" в "розблоковане".
|
||||
block.omega-mech-pad.description = Перетворює вас в Омега. Вимагає енергію.Подробиці про Омега в "розблоковане"
|
||||
block.spirit-factory.description = Виробляє дронів типу "привид"
|
||||
block.phantom-factory.description = Виробляє дронів типу "фантом" \nПодробиці в "розблоковане"
|
||||
block.wraith-factory.description = Виробляє примарних винищувачів\nПодробиці в "розблоковане"
|
||||
block.ghoul-factory.description = Виробляє Гулев бомбардувальників\nПодробиці в "розблоковане"
|
||||
block.dagger-factory.description = Виробляє "Розвідник\nПодробиці в "розблоковане"
|
||||
block.titan-factory.description = Виробляє меха типу "Титан".\nПодробиці в "розблоковане".
|
||||
block.fortress-factory.description = Величезний повільний мех володіє такою-ж величезною гарматою.
|
||||
block.revenant-factory.description = Виробляє бомбардувальників типу "Потойбічний вбивця"\nПодробиці в "розблоковане"
|
||||
block.repair-point.description = За допомогою енергії лікує тебе.
|
||||
block.command-center.description = Дозволяє управляти бойовими одиницями. Або атакувати, або стояти на місці, або застрявати в блоках ...
|
||||
block.conduit.description = Конвеєр для рідин першого покоління.
|
||||
block.pulse-conduit.description = "Конвеєр" для рідин другого покоління.
|
||||
block.phase-conduit.description = Кращий трубопровід, вимагає енергію. Схоже, він з майбутнього.
|
||||
block.liquid-router.description = Розподіляє рідину на 4 сторони.
|
||||
block.liquid-tank.description = Зберігає рідину.
|
||||
block.liquid-junction.description = Назва говорить сама за себе. За допомогою нього можна зробити дві труби, які проходять через один-одного і не змішуються.
|
||||
block.bridge-conduit.description = Дозволяє проходити над височинами (блоками). Найкраще підключати послідовно і в лінію.
|
||||
block.mechanical-pump.description = Качає тільки воду.
|
||||
block.rotary-pump.description = Качає воду і нафту. Вимагає енергії.
|
||||
block.thermal-pump.description = Дозволяє качати лаву, воду і нафту.
|
||||
block.router.description = Accepts items from one direction and outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.
|
||||
block.distributor.description = An advanced router which splits items to up to 7 other directions equally.
|
||||
block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building.
|
||||
block.alpha-mech-pad.description = Перетворює вас в Альфа. Вимагає енергію.Подробиці про Джавелін в "розблоковане"
|
||||
block.itemsource.description = З цього блоку можна отримати будь-який предмет.
|
||||
block.liquidsource.description = З цього блоку можна отримати будь-яку рідину.
|
||||
block.itemvoid.description = Предмети просто йдуть в порожнечу
|
||||
block.powerinfinite.description = Ти не повинен це бачити!\n[RED]WARNING[]
|
||||
block.powervoid.description = Рідини просто йдуть в порожнечу
|
||||
liquid.water.description = Набагато краще ніж[BLUE] монооксид дігідрогена[].\n\nДля отримання води використовуйте помпу(насос) на джерел(блоці) або екстрактор води.\n\nЦю рідину можна підвести до бурів для прискорення швидкості видобутку або до турелям для прискорення стрільби.
|
||||
liquid.lava.description = [accent]Гаряче...\nРечовина розплавлене з гірничо-кам'яних пород.\nСлужить як паливо для термального генератора.
|
||||
liquid.oil.description = Хтось писав про додавання золота в гру. Його додали, правда воно якесь чорне ...\nСуміш рідких вуглеводнів, що виділяється з природного газу в результаті зниження температури і пластового тиску.\nСлугує для пластіенівого компресора і т.д ..
|
||||
liquid.cryofluid.description = Рідина з температурою нижче ніж -273 градусів за Цельсієм. Може бути використана для прискорення стрільби турелей або для охолодження чогось.
|
||||
block.centrifuge.description = Шукає в камені різні ресурси. Чим цінніше ресурс, тим з меншою ймовірністю він "знайдеться".\nТребует енергію.
|
||||
block.power-node.description = Максимум допустимо 4 підключення.\nЩоб з'єднати з якимось блоком потрібно наступне\:\n1. Щоб він знаходився в радіусі дії \n2. Натиснити на потрібний силовий вузол, а потім на інший силовий вузол або блок.
|
||||
block.power-node-large.description = Силовий вузол другого покоління. Збільшено радіус дії і кількість максимально допустимих підключень.
|
||||
block.battery.description = Хранит энергию всякий раз, когда есть изобилие, и обеспечивает мощность всякий раз, когда есть недостаток, если есть мощность, але БАТАРЕЙКИ DURACELL ЗБЕРІГАЮТЬ БІЛЬШЕ! (прихована реклама)
|
||||
block.battery-large.description = Зберігає значно більше енергії, ніж звичайна батарейка...
|
||||
block.combustion-generator.description = Генерує енергію, спалюючи нафту або легкозаймисті матеріали.
|
||||
block.turbine-generator.description = Більш ефективний, ніж генератор горіння, але вимагає додаткової води.
|
||||
block.thermal-generator.description = Генерує велику кількість енергії з лави.
|
||||
block.solar-panel.description = Забезпечує невелику кількість енергії від сонця.
|
||||
block.solar-panel-large.description = Забезпечує набагато краще джерело живлення, ніж стандартна панель, але в той же час набагато дорожче її побудувати.
|
||||
block.thorium-reactor.description = Генерує величезну кількість енергії з високоактивного торію. Потребує постійного охолодження. Вибухне сильно, якщо постачається недостатня кількість рідини.
|
||||
block.rtg-generator.description = Радіоізотопний термоелектричний генератор, який не потребує охолодження, але забезпечує меншу потужність, ніж торієвий реактор.
|
||||
block.unloader.description = Вивантажує предмети з контейнера, сховища або ядра на конвеєр або безпосередньо в сусідній блок. Тип вивантажуваного елемента можна змінити, торкнувшись розвантажувача.
|
||||
block.container.description = Зберігає невелику кількість предметів кожного типу. Сусідні контейнери, склепіння та ядра будуть розглядатися як одиничне сховище. [LIGHT_GRAY]Розвантажувач [] можна використовувати для вилучення елементів з контейнера.
|
||||
block.vault.description = Зберігає велику кількість предметів кожного типу. Сусідні контейнери, сховища та ядра будуть розглядатися як одиничне сховище. [LIGHT_GRAY]Розвантажувач[] можна використовуватися для отримання елементів із сховища.
|
||||
block.mechanical-drill.description = Найперший доступний бур.\nВидобуває мідь, свинець, вугілля, пісок. \nМожно підвести до нього[BLUE] воду []для збільшення швидкості свердління.
|
||||
block.pneumatic-drill.description = Покращена версія механічного бура.\nВидобуває теж саме, що і механічний бур. Також може добувати титан і камінь.\nМожно підвести до нього[BLUE] воду []для збільшення швидкості свердління.
|
||||
block.laser-drill.description = Покращена версія пневматичного бура.\nДобивает теж саме, що і пневматичний бур. Також може добувати торій.\nМожно підвести до нього[BLUE] воду []для збільшення швидкості свердління.
|
||||
block.blast-drill.description = Найпотужніший бур.\n\nВидобуває теж саме, що і лазерний бур. Свердлить швидше всіх бурів, але вимагає ще більше енергії.\nМожно підвести до нього[BLUE] воду [] для збільшення швидкості свердління.
|
||||
block.water-extractor.description = Витягує воду з землі. Використовуйте його, коли поблизу немає озера.
|
||||
block.cultivator.description = Культивує грунт водою для отримання біоматеріі.
|
||||
block.oil-extractor.description = Використовує велику кількість енергії для видобутку нафти з піску, динозаврів (закреслено). Використовуйте його, коли поблизу немає прямого джерела нафти.
|
||||
block.dart-ship-pad.description = Залиште свій поточний судно і перейдіть на основний винищувач.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех.
|
||||
block.trident-ship-pad.description = Залиште свій поточний корабель і перейдіть в досить добре броньований важкий бомбардувальник.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех.
|
||||
block.javelin-ship-pad.description = Залиште свій поточний корабель і перейдіть в сильний і швидкий перехоплювач з блискавичним зброєю.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех.
|
||||
block.glaive-ship-pad.description = Залиште своє існуюче судно і перетворитесь на великий, добре броньований мех.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех.
|
||||
block.tau-mech-pad.description = Покиньте свій поточний корабель і перетворитеся на мех підтримки, який може зцілювати дружні будівлі і юніти.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех.
|
||||
block.delta-mech-pad.description = Залиште свій поточний корабель і перейдіть в великий, добре броньований бойовий корабель.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех.
|
||||
block.omega-mech-pad.description = Залиште свій поточний корабель і перетворіть його в громіздкий і добре броньований мех, зроблений для фронтових нападів.\nВикористовуйте подвійне натискання, стоячи на реконструкторів, щоб перетворитися в цей мех.
|
||||
block.spirit-factory.description = Виробляє легкі дрони, які видобувають руду (мідну і свинцеву) і ремонтує блоки. Один за замовчуванням з'являється з ядра.
|
||||
block.phantom-factory.description = Виробляє вдосконалені одиниці, які значно ефективніше, ніж дрон-привид.
|
||||
block.wraith-factory.description = Виробляє швидких і літаючих бойових одиниць.
|
||||
block.ghoul-factory.description = Виробляє важких килимових бомбардувальників.
|
||||
block.dagger-factory.description = Виробляє основні наземні бойові одиниці.
|
||||
block.titan-factory.description = Виробляє просунуті захищені бойові одиниці.
|
||||
block.fortress-factory.description = Виробляє важкі артилерійські бойові одиниці.
|
||||
block.revenant-factory.description = Виробляє важкі наземні бойові одиниці.
|
||||
block.repair-point.description = Постійно лікує найближчий пошкоджений апарат в його зоні дії.
|
||||
block.command-center.description = Дозволяє змінювати дружню поведінку AI. В даний час, атаки, відступ і патрулювання команди підтримуються.
|
||||
block.conduit.description = Основний транспортний блок. Працює як конвеєр, але з рідинами. Найкраще використовується з екстракторами, насосами або іншими трубопроводами.
|
||||
block.pulse-conduit.description = Розширений блок перевезення рідин. Транспортує рідини швидше і зберігає більше, аніж стандартні.
|
||||
block.phase-conduit.description = Покращений блок перевезення рідин. Використовує енергію для телепорту рідин до підключеного фазового каналу по декілька блоків.
|
||||
block.liquid-router.description = Приймає рідини з одного напрямку і виведить їх до 3 інших напрямків однаково. Можна також зберігати певну кількість рідини. Корисно для розщеплення рідин від одного джерела на кілька.
|
||||
block.liquid-tank.description = Зберігає велику кількість рідини. Використовуйте його для створення буферів, коли існує нестійкий попит на матеріали або як захист для охолодження життєво важливих блоків.
|
||||
block.liquid-junction.description = Діє як міст для двох перехресних трубопроводів. Корисно в ситуаціях з двома різними трубами, що несуть різні рідини в різні місця.
|
||||
block.bridge-conduit.description = Покращений блок перевезення рідин. Дозволяє транспортувати рідини понад 3 блоки будь-якої місцевості або будівлі.
|
||||
block.mechanical-pump.description = Дешевий насос з повільною швидкістю, але без споживання енергії.
|
||||
block.rotary-pump.description = Розширений насос, який подвоює швидкість, використовуючи енергію.
|
||||
block.thermal-pump.description = Остаточний насос. Тричі швидше, ніж механічний насос і єдиний насос, який здатний отримати лаву.
|
||||
block.router.description = Приймає елементи з одного напрямку і рівномірно виводить їх до 3 інших напрямків. Корисно для розділення матеріалів від одного джерела на кілька.
|
||||
block.distributor.description = Розширений маршрутизатор, який рівномірно розбиває елементи на 7 різних напрямків.
|
||||
block.bridge-conveyor.description = Покращений блок транспортування предметів. Дозволяє транспортувати предмети понад 3 блоки над будь-якої місцевостю або будівлеє.
|
||||
block.alpha-mech-pad.description = Коли ви отримаєте достатньо енергії, перебудовує ваш корабель у [accent] Альфа[] мех.
|
||||
block.itemsource.description = Безліченно виводить предмети. Лише пісочниця.
|
||||
block.liquidsource.description = Безліченно виводить рідини. Лише пісочниця.
|
||||
block.itemvoid.description = Знищує будь-які предмети, які входять, без використання енергії. Працює тільки в пісочниці.
|
||||
block.powerinfinite.description = Нескінченність не межа. Безмежно виводить енергію. Лише пісочниця.
|
||||
block.powervoid.description = Енергія просто йде в порожнечу. Лише пісочниця.
|
||||
liquid.water.description = Зазвичай використовується для охолодження машин та переробки відходів.
|
||||
liquid.lava.description = Можна перетворити в[LIGHT_GRAY] камінь[], який використовується для генерації енергії або використовуати як боєприпаси для певних турелей.
|
||||
liquid.oil.description = Можна спалити, взірвати або використовувати як теплоносій.
|
||||
liquid.cryofluid.description = Найефективніша рідина для охолодження. Рідина з температурою нижче ніж -273 градусів за Цельсієм. Може бути використана для прискорення стрільби турелей або для охолодження чогось.
|
||||
|
@ -38,7 +38,7 @@ void main() {
|
||||
else if(m > 0.35) gl_FragColor.rgb = p4;
|
||||
else gl_FragColor.rgb = vec3(0.0);
|
||||
|
||||
gl_FragColor.rgb *= 0.75;
|
||||
gl_FragColor.rgb *= 0.5;
|
||||
|
||||
gl_FragColor.a = mod(abs(float(coords.x)) + abs(float(coords.y)), 110.0) < 35.0 ? 1.0 : 0.0;
|
||||
}
|
Before Width: | Height: | Size: 98 KiB After Width: | Height: | Size: 103 KiB |
@ -12,51 +12,53 @@ TintedDrawable: {
|
||||
invis: {name: white, color: {r: 0, g: 0, b: 0, a: 0} }
|
||||
loadDim: {name: white, color: {r: 0, g: 0, b: 0, a: 0.8} },
|
||||
chatfield: {name: white, color: {r: 0, g: 0, b: 0, a: 0.2}},
|
||||
clear: {name: white, color: {r: 0.1, g: 0.1, b: 0.1, a: 0.75}},
|
||||
dark: {name: white, color: {hex: "#000000ff"}},
|
||||
none: {name: white, color: {r: 0, g: 0, b: 0, a: 0}},
|
||||
clear-over: {name: white, color: { hex: "#ffffff82" }},
|
||||
clear-alpha: {name: white, color: { hex: "#ffd37fff" }},
|
||||
clear-down: {name: white, color: { hex: "#ffd37fff" }}
|
||||
flat: {name: white, color: {r: 0.0, g: 0.0, b: 0.0, a: 0.6}},
|
||||
flat-over: {name: white, color: { hex: "#ffffff82" }},
|
||||
flat-down: {name: white, color: { hex: "#ffd37fff" }}
|
||||
},
|
||||
ButtonStyle: {
|
||||
default: {down: button-down, up: button },
|
||||
toggle: {checked: button-down, down: button-down, up: button }
|
||||
},
|
||||
TextButtonStyle: {
|
||||
default: {over: button-over, disabled: button, font: default-font, fontColor: white, disabledFontColor: gray, down: button-down, up: button, transition: 0 },
|
||||
default: {over: button-over, disabled: button, font: default-font, fontColor: white, disabledFontColor: gray, down: button-down, up: button},
|
||||
right: {over: button-right-over, font: default-font, fontColor: white, disabledFontColor: gray, down: button-right-down, up: button-right},
|
||||
wave: {font: default-font, fontColor: white, disabledFontColor: gray, up: button-edge-4},
|
||||
clear: {over: flat-over, font: default-font, fontColor: white, disabledFontColor: gray, down: pane, up: flat},
|
||||
discord: {font: default-font, fontColor: white, up: discord-banner},
|
||||
info: {font: default-font, fontColor: white, up: info-banner},
|
||||
clear: {down: clear-down, up: clear, over: clear-over, font: default-font, fontColor: white, disabledFontColor: gray },
|
||||
clear-partial: {down: white, up: button-select, over: clear-down, font: default-font, fontColor: white, disabledFontColor: gray },
|
||||
clear-partial: {down: white, up: button-select, over: flat-down, font: default-font, fontColor: white, disabledFontColor: gray },
|
||||
clear-partial-2: {down: flat-over, up: none, over: flat-over, font: default-font, fontColor: white, disabledFontColor: gray },
|
||||
empty: {font: default-font},
|
||||
toggle: {font: default-font, fontColor: white, checked: button-down, down: button-down, up: button, over: button-over, disabled: button, disabledFontColor: gray }
|
||||
},
|
||||
ImageButtonStyle: {
|
||||
default: {down: button-down, up: button, over: button-over, imageDisabledColor: gray, imageUpColor: white },
|
||||
right: {over: button-right-over, down: button-right-down, up: button-right},
|
||||
empty: { imageDownColor: accent, imageUpColor: white},
|
||||
emptytoggle: {imageCheckedColor: white, imageDownColor: white, imageUpColor: gray},
|
||||
static: {up: button },
|
||||
static-down: {up: button-down },
|
||||
toggle: {checked: button-down, down: button-down, up: button, imageDisabledColor: gray, imageUpColor: white },
|
||||
select: {checked: button-select, up: none },
|
||||
clear: {down: clear-down, up: clear, over: clear-over},
|
||||
clear-partial: {down: clear-down, up: none, over: clear-over},
|
||||
clear-toggle: {down: clear-down, checked: clear-down, up: clear, over: clear-over},
|
||||
clear-toggle-partial: {down: clear-down, checked: clear-down, up: none, over: clear-over},
|
||||
clear: {down: flat-over, up: flat, over: flat-over},
|
||||
clear-full: {down: white, up: button-select, over: flat-down},
|
||||
clear-partial: {down: flat-down, up: none, over: flat-over},
|
||||
clear-toggle: {down: flat-down, checked: flat-down, up: flat, over: flat-over},
|
||||
clear-toggle-partial: {down: flat-down, checked: flat-down, up: none, over: flat-over},
|
||||
},
|
||||
ScrollPaneStyle: {
|
||||
default: {background: border, vScroll: scroll, vScrollKnob: scroll-knob-vertical-black},
|
||||
horizontal: {background: border, vScroll: scroll, vScrollKnob: scroll-knob-vertical, hScroll: scroll-horizontal, hScrollKnob: scroll-knob-horizontal},
|
||||
volume: {background: button, vScroll: scroll, vScrollKnob: scroll-knob-vertical-black},
|
||||
clear: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black},
|
||||
clear-black: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black}
|
||||
default: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black},
|
||||
horizontal: {vScroll: scroll, vScrollKnob: scroll-knob-vertical-black, hScroll: scroll-horizontal, hScrollKnob: scroll-knob-horizontal-black},
|
||||
},
|
||||
WindowStyle: {
|
||||
default: {titleFont: default-font, titleFontColor: accent },
|
||||
dialog: {stageBackground: dialogDim, titleFont: default-font, background: window-empty, titleFontColor: accent }
|
||||
},
|
||||
KeybindDialogStyle: {
|
||||
default: {keyColor: accent, keyNameColor: white, controllerColor: lightgray, paneStyle: clear},
|
||||
default: {keyColor: accent, keyNameColor: white, controllerColor: lightgray},
|
||||
},
|
||||
SliderStyle: {
|
||||
default-horizontal: {background: slider, knob: slider-knob, knobOver: slider-knob-over, knobDown: slider-knob-down},
|
||||
@ -67,8 +69,8 @@ LabelStyle: {
|
||||
small: {font: default-font, fontColor: white }
|
||||
},
|
||||
TextFieldStyle: {
|
||||
default: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: button, cursor: cursor, messageFont: default-font, messageFontColor: gray }
|
||||
textarea: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: textarea, cursor: cursor, messageFont: default-font, messageFontColor: gray }
|
||||
default: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: underline, cursor: cursor, messageFont: default-font, messageFontColor: gray }
|
||||
textarea: {font: default-font-chat, fontColor: white, disabledFontColor: gray, selection: selection, background: underline, cursor: cursor, messageFont: default-font, messageFontColor: gray }
|
||||
},
|
||||
CheckBoxStyle: {
|
||||
default: {checkboxOn: check-on, checkboxOff: check-off, checkboxOnOver: check-on-over, checkboxOver: check-over, font: default-font, fontColor: white, disabledFontColor: gray }
|
||||
|
@ -45,7 +45,7 @@ public class Pathfinder{
|
||||
}
|
||||
|
||||
public void update(){
|
||||
if(Net.client()) return;
|
||||
if(Net.client() || paths == null) return;
|
||||
|
||||
for(Team team : Team.all){
|
||||
if(state.teams.isActive(team)){
|
||||
|
@ -10,9 +10,9 @@ import io.anuke.mindustry.game.Team;
|
||||
import io.anuke.mindustry.game.Waves;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.ucore.core.Events;
|
||||
import io.anuke.ucore.util.Structs;
|
||||
import io.anuke.ucore.util.GridBits;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Structs;
|
||||
|
||||
import java.io.DataInput;
|
||||
import java.io.DataOutput;
|
||||
|
@ -14,7 +14,7 @@ public class AmmoTypes implements ContentList{
|
||||
bulletDenseBig, bulletPyratiteBig, bulletThoriumBig,
|
||||
shock, bombExplosive, bombIncendiary, bombOil, shellCarbide, flamerThermite, weaponMissile, weaponMissileSwarm, bulletMech,
|
||||
healBlaster, bulletGlaive,
|
||||
/*flakCopper, */flakExplosive, flakPlastic, flakSurge,
|
||||
flakExplosive, flakPlastic, flakSurge,
|
||||
missileExplosive, missileIncindiary, missileSurge,
|
||||
artilleryDense, artilleryPlastic, artilleryHoming, artilleryIncindiary, artilleryExplosive, unitArtillery,
|
||||
basicFlame, lancerLaser, lightning, meltdownLaser, burstLaser,
|
||||
|
@ -43,7 +43,6 @@ public class UnitTypes implements ContentList{
|
||||
speed = 0.2f;
|
||||
maxVelocity = 0.8f;
|
||||
range = 50f;
|
||||
healSpeed = 0.22f;
|
||||
health = 60;
|
||||
}};
|
||||
|
||||
@ -115,6 +114,7 @@ public class UnitTypes implements ContentList{
|
||||
}};
|
||||
|
||||
phantom = new UnitType("phantom", Phantom.class, Phantom::new){{
|
||||
weapon = Weapons.healBlasterDrone2;
|
||||
isFlying = true;
|
||||
drag = 0.01f;
|
||||
mass = 2f;
|
||||
@ -125,7 +125,6 @@ public class UnitTypes implements ContentList{
|
||||
health = 220;
|
||||
buildPower = 0.9f;
|
||||
minePower = 1.1f;
|
||||
healSpeed = 0.5f;
|
||||
toMine = ObjectSet.with(Items.lead, Items.copper, Items.titanium);
|
||||
}};
|
||||
}
|
||||
|
@ -8,7 +8,7 @@ import io.anuke.mindustry.type.Weapon;
|
||||
|
||||
public class Weapons implements ContentList{
|
||||
public static Weapon blaster, blasterSmall, glaiveBlaster, droneBlaster, healBlaster, healBlasterDrone, chainBlaster, shockgun,
|
||||
sapper, swarmer, bomber, bomberTrident, flakgun, flamethrower, missiles, artillery, laserBurster;
|
||||
sapper, swarmer, bomber, bomberTrident, flakgun, flamethrower, missiles, artillery, laserBurster, healBlasterDrone2;
|
||||
|
||||
@Override
|
||||
public void load(){
|
||||
@ -179,6 +179,16 @@ public class Weapons implements ContentList{
|
||||
recoil = 2f;
|
||||
ammo = AmmoTypes.healBlaster;
|
||||
}};
|
||||
|
||||
healBlasterDrone2 = new Weapon("heal-blaster"){{
|
||||
length = 1.5f;
|
||||
reload = 20f;
|
||||
width = 0.5f;
|
||||
roundrobin = true;
|
||||
ejectEffect = Fx.none;
|
||||
recoil = 2f;
|
||||
ammo = AmmoTypes.healBlaster;
|
||||
}};
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -135,13 +135,13 @@ public class CraftingBlocks extends BlockList implements ContentList{
|
||||
melter = new PowerCrafter("melter"){{
|
||||
health = 200;
|
||||
outputLiquid = Liquids.lava;
|
||||
outputLiquidAmount = 0.75f;
|
||||
itemCapacity = 50;
|
||||
outputLiquidAmount = 1f;
|
||||
itemCapacity = 20;
|
||||
craftTime = 10f;
|
||||
hasLiquids = hasPower = true;
|
||||
|
||||
consumes.powerDirect(0.1f);
|
||||
consumes.item(Items.stone, 2);
|
||||
consumes.item(Items.stone, 1);
|
||||
}};
|
||||
|
||||
separator = new Separator("separator"){{
|
||||
|
@ -90,8 +90,11 @@ public class DebugBlocks extends BlockList implements ContentList{
|
||||
@Override
|
||||
public void update(Tile tile){
|
||||
SorterEntity entity = tile.entity();
|
||||
if(entity.sortItem == null) return;
|
||||
|
||||
entity.items.set(entity.sortItem, 1);
|
||||
tryDump(tile, entity.sortItem);
|
||||
entity.items.set(entity.sortItem, 0);
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -142,8 +145,8 @@ public class DebugBlocks extends BlockList implements ContentList{
|
||||
if(!control.unlocks.isUnlocked(items.get(i))) continue;
|
||||
|
||||
final int f = i;
|
||||
ImageButton button = cont.addImageButton("liquid-icon-" + items.get(i).name, "toggle", 24,
|
||||
() -> Call.setLiquidSourceLiquid(null, tile, items.get(f))).size(38, 42).padBottom(-5.1f).group(group).get();
|
||||
ImageButton button = cont.addImageButton("liquid-icon-" + items.get(i).name, "clear-toggle", 24,
|
||||
() -> Call.setLiquidSourceLiquid(null, tile, items.get(f))).size(38).group(group).get();
|
||||
button.setChecked(entity.source.id == f);
|
||||
|
||||
if(i % 4 == 3){
|
||||
|
@ -19,8 +19,8 @@ public class PowerBlocks extends BlockList implements ContentList{
|
||||
}};
|
||||
|
||||
thermalGenerator = new LiquidHeatGenerator("thermal-generator"){{
|
||||
maxLiquidGenerate = 4f;
|
||||
powerProduction = 8f;
|
||||
maxLiquidGenerate = 2f;
|
||||
powerProduction = 4f;
|
||||
generateEffect = BlockFx.redgeneratespark;
|
||||
size = 2;
|
||||
}};
|
||||
|
@ -53,7 +53,6 @@ public class Control extends Module{
|
||||
private Throwable error;
|
||||
|
||||
public Control(){
|
||||
|
||||
saves = new Saves();
|
||||
unlocks = new Unlocks();
|
||||
|
||||
@ -373,7 +372,7 @@ public class Control extends Module{
|
||||
}
|
||||
}
|
||||
|
||||
if(Inputs.keyTap("screenshot")){
|
||||
if(Inputs.keyTap("screenshot") && !ui.chatfrag.chatOpen()){
|
||||
renderer.takeMapScreenshot();
|
||||
}
|
||||
|
||||
|
@ -79,7 +79,9 @@ public class NetServer extends Module{
|
||||
|
||||
public NetServer(){
|
||||
Events.on(WorldLoadEvent.class, event -> {
|
||||
connections.clear();
|
||||
if(!headless){
|
||||
connections.clear();
|
||||
}
|
||||
});
|
||||
|
||||
Net.handleServer(Connect.class, (id, connect) -> {
|
||||
@ -596,14 +598,18 @@ public class NetServer extends Module{
|
||||
}
|
||||
|
||||
void sync(){
|
||||
|
||||
try{
|
||||
|
||||
//iterate through each player
|
||||
for(Player player : connections.values()){
|
||||
for(int i = 0; i < playerGroup.size(); i ++){
|
||||
Player player = playerGroup.all().get(i);
|
||||
if(player.isLocal) continue;
|
||||
|
||||
NetConnection connection = player.con;
|
||||
|
||||
if(!connection.isConnected()){
|
||||
//player disconnected, ignore them
|
||||
if(!connection.isConnected() || !connections.containsKey(connection.id)){
|
||||
//player disconnected, call d/c event
|
||||
onDisconnect(player);
|
||||
return;
|
||||
}
|
||||
|
@ -32,9 +32,22 @@ public abstract class Platform {
|
||||
dialog.setFillParent(true);
|
||||
dialog.content().top();
|
||||
dialog.content().defaults().height(65f);
|
||||
|
||||
TextField[] use = {null};
|
||||
|
||||
dialog.content().addImageButton("icon-copy", "clear", 16*3, () -> use[0].copy())
|
||||
.visible(() -> !use[0].getSelection().isEmpty()).width(65f);
|
||||
|
||||
dialog.content().addImageButton("icon-paste", "clear", 16*3, () ->
|
||||
use[0].paste(Gdx.app.getClipboard().getContents(), false))
|
||||
.visible(() -> Gdx.app.getClipboard() != null && Gdx.app.getClipboard().getContents() != null && !Gdx.app.getClipboard().getContents().isEmpty()).width(65f);
|
||||
|
||||
TextField to = dialog.content().addField(field.getText(), t-> {}).pad(15).width(250f).get();
|
||||
to.setMaxLength(maxLength);
|
||||
to.keyDown(Keys.ENTER, () -> dialog.content().find("okb").fireClick());
|
||||
|
||||
use[0] = to;
|
||||
|
||||
dialog.content().addButton("$text.ok", () -> {
|
||||
field.clearText();
|
||||
field.appendText(to.getText());
|
||||
|
@ -30,8 +30,8 @@ public class World extends Module{
|
||||
public final Sectors sectors = new Sectors();
|
||||
public final WorldGenerator generator = new WorldGenerator();
|
||||
public final BlockIndexer indexer = new BlockIndexer();
|
||||
public final Pathfinder pathfinder = new Pathfinder();
|
||||
public final WaveSpawner spawner = new WaveSpawner();
|
||||
public final Pathfinder pathfinder = new Pathfinder();
|
||||
|
||||
private Map currentMap;
|
||||
private Sector currentSector;
|
||||
|
@ -4,6 +4,7 @@ import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.files.FileHandle;
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.Pixmap;
|
||||
import com.badlogic.gdx.graphics.g2d.Batch;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.utils.Align;
|
||||
@ -58,7 +59,9 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
private ButtonGroup<ImageButton> blockgroup;
|
||||
|
||||
public MapEditorDialog(){
|
||||
super("$text.mapeditor", "dialog");
|
||||
super("", "dialog");
|
||||
|
||||
background("dark");
|
||||
|
||||
editor = new MapEditor();
|
||||
view = new MapView(editor);
|
||||
@ -227,6 +230,11 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
});
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void drawBackground(Batch batch, float parentAlpha, float x, float y){
|
||||
drawDefaultBackground(batch, parentAlpha, x, y);
|
||||
}
|
||||
|
||||
private void save(){
|
||||
String name = editor.getTags().get("name", "");
|
||||
|
||||
@ -352,7 +360,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
table(cont -> {
|
||||
cont.left();
|
||||
|
||||
cont.table("button", mid -> {
|
||||
cont.table(mid -> {
|
||||
mid.top();
|
||||
|
||||
Table tools = new Table().top();
|
||||
@ -360,7 +368,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
||||
|
||||
Consumer<EditorTool> addTool = tool -> {
|
||||
ImageButton button = new ImageButton("icon-" + tool.name(), "toggle");
|
||||
ImageButton button = new ImageButton("icon-" + tool.name(), "clear-toggle");
|
||||
button.clicked(() -> view.setTool(tool));
|
||||
button.resizeImage(16 * 2f);
|
||||
button.update(() -> button.setChecked(view.getTool() == tool));
|
||||
@ -368,21 +376,21 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
if(tool == EditorTool.pencil)
|
||||
button.setChecked(true);
|
||||
|
||||
tools.add(button).padBottom(-5.1f);
|
||||
tools.add(button);
|
||||
};
|
||||
|
||||
tools.defaults().size(size, size + 4f).padBottom(-5.1f);
|
||||
tools.defaults().size(size, size);
|
||||
|
||||
tools.addImageButton("icon-menu-large", 16 * 2f, menu::show);
|
||||
tools.addImageButton("icon-menu-large", "clear", 16 * 2f, menu::show);
|
||||
|
||||
ImageButton grid = tools.addImageButton("icon-grid", "toggle", 16 * 2f, () -> view.setGrid(!view.isGrid())).get();
|
||||
ImageButton grid = tools.addImageButton("icon-grid", "clear-toggle", 16 * 2f, () -> view.setGrid(!view.isGrid())).get();
|
||||
|
||||
addTool.accept(EditorTool.zoom);
|
||||
|
||||
tools.row();
|
||||
|
||||
ImageButton undo = tools.addImageButton("icon-undo", 16 * 2f, () -> view.undo()).get();
|
||||
ImageButton redo = tools.addImageButton("icon-redo", 16 * 2f, () -> view.redo()).get();
|
||||
ImageButton undo = tools.addImageButton("icon-undo", "clear", 16 * 2f, () -> view.undo()).get();
|
||||
ImageButton redo = tools.addImageButton("icon-redo", "clear", 16 * 2f, () -> view.redo()).get();
|
||||
|
||||
addTool.accept(EditorTool.pick);
|
||||
|
||||
@ -404,7 +412,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
addTool.accept(EditorTool.fill);
|
||||
addTool.accept(EditorTool.elevation);
|
||||
|
||||
ImageButton rotate = tools.addImageButton("icon-arrow-16", 16 * 2f, () -> editor.setDrawRotation((editor.getDrawRotation() + 1) % 4)).get();
|
||||
ImageButton rotate = tools.addImageButton("icon-arrow-16", "clear", 16 * 2f, () -> editor.setDrawRotation((editor.getDrawRotation() + 1) % 4)).get();
|
||||
rotate.getImage().update(() -> {
|
||||
rotate.getImage().setRotation(editor.getDrawRotation() * 90);
|
||||
rotate.getImage().setOrigin(Align.center);
|
||||
@ -412,8 +420,8 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
|
||||
tools.row();
|
||||
|
||||
tools.table("button", t -> t.add("$text.editor.teams"))
|
||||
.colspan(3).height(40).width(size * 3f);
|
||||
tools.table("underline", t -> t.add("$text.editor.teams"))
|
||||
.colspan(3).height(40).width(size * 3f).padBottom(3);
|
||||
|
||||
tools.row();
|
||||
|
||||
@ -422,14 +430,14 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
int i = 0;
|
||||
|
||||
for(Team team : Team.all){
|
||||
ImageButton button = new ImageButton("white", "toggle");
|
||||
button.margin(4f, 4f, 10f, 4f);
|
||||
ImageButton button = new ImageButton("white", "clear-toggle-partial");
|
||||
button.margin(4f);
|
||||
button.getImageCell().grow();
|
||||
button.getStyle().imageUpColor = team.color;
|
||||
button.clicked(() -> editor.setDrawTeam(team));
|
||||
button.update(() -> button.setChecked(editor.getDrawTeam() == team));
|
||||
teamgroup.add(button);
|
||||
tools.add(button).padBottom(-5.1f);
|
||||
tools.add(button);
|
||||
|
||||
if(i++ % 3 == 2) tools.row();
|
||||
}
|
||||
@ -438,7 +446,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
|
||||
mid.row();
|
||||
|
||||
mid.table("button", t -> {
|
||||
mid.table("underline", t -> {
|
||||
Slider slider = new Slider(0, MapEditor.brushSizes.length - 1, 1, false);
|
||||
slider.moved(f -> editor.setBrushSize(MapEditor.brushSizes[(int) (float) f]));
|
||||
|
||||
@ -450,28 +458,27 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
|
||||
mid.row();
|
||||
|
||||
mid.table("button", t -> t.add("$text.editor.elevation"))
|
||||
mid.table("underline", t -> t.add("$text.editor.elevation"))
|
||||
.colspan(3).height(40).width(size * 3f);
|
||||
|
||||
mid.row();
|
||||
|
||||
mid.table("button", t -> {
|
||||
mid.table("underline", t -> {
|
||||
t.margin(0);
|
||||
t.addImageButton("icon-arrow-left", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() - 1))
|
||||
t.addImageButton("icon-arrow-left", "clear-partial", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() - 1))
|
||||
.disabled(b -> editor.getDrawElevation() <= -1).size(size);
|
||||
|
||||
t.label(() -> editor.getDrawElevation() == -1 ? "$text.editor.slope" : (editor.getDrawElevation() + ""))
|
||||
.size(size).get().setAlignment(Align.center, Align.center);
|
||||
|
||||
t.addImageButton("icon-arrow-right", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() + 1))
|
||||
t.addImageButton("icon-arrow-right", "clear-partial", 16 * 2f, () -> editor.setDrawElevation(editor.getDrawElevation() + 1))
|
||||
.disabled(b -> editor.getDrawElevation() >= 63).size(size);
|
||||
}).colspan(3).height(size).padTop(-5).width(size * 3f);
|
||||
}).colspan(3).height(size).width(size * 3f);
|
||||
|
||||
}).margin(0).left().growY();
|
||||
|
||||
|
||||
cont.table("button", t -> t.add(view).grow())
|
||||
.margin(5).marginBottom(10).grow();
|
||||
cont.table(t -> t.add(view).grow()).grow();
|
||||
|
||||
cont.table(this::addBlockSelection).right().growY();
|
||||
|
||||
@ -525,7 +532,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
|
||||
private void addBlockSelection(Table table){
|
||||
Table content = new Table();
|
||||
pane = new ScrollPane(content, "volume");
|
||||
pane = new ScrollPane(content);
|
||||
pane.setFadeScrollBars(false);
|
||||
pane.setOverscroll(true, false);
|
||||
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
||||
@ -552,7 +559,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
stack.add(new Image(region));
|
||||
}
|
||||
|
||||
ImageButton button = new ImageButton("white", "toggle");
|
||||
ImageButton button = new ImageButton("white", "clear-toggle");
|
||||
button.clicked(() -> editor.setDrawBlock(block));
|
||||
button.resizeImage(8 * 4f);
|
||||
button.getImageCell().setActor(stack);
|
||||
@ -560,7 +567,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
button.getImage().remove();
|
||||
button.update(() -> button.setChecked(editor.getDrawBlock() == block));
|
||||
group.add(button);
|
||||
content.add(button).pad(4f).size(53f, 58f);
|
||||
content.add(button).size(60f);
|
||||
|
||||
if(i++ % 3 == 2){
|
||||
content.row();
|
||||
@ -569,9 +576,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
||||
|
||||
group.getButtons().get(2).setChecked(true);
|
||||
|
||||
Table extra = new Table("button");
|
||||
extra.labelWrap(() -> editor.getDrawBlock().formalName).width(220f).center();
|
||||
table.add(extra).growX();
|
||||
table.table("underline", extra -> extra.labelWrap(() -> editor.getDrawBlock().formalName).width(220f).center()).growX();
|
||||
table.row();
|
||||
table.add(pane).growY().fillX();
|
||||
}
|
||||
|
@ -4,11 +4,9 @@ import com.badlogic.gdx.utils.Scaling;
|
||||
import io.anuke.mindustry.maps.Map;
|
||||
import io.anuke.mindustry.ui.BorderImage;
|
||||
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
|
||||
import io.anuke.ucore.core.Core;
|
||||
import io.anuke.ucore.function.Consumer;
|
||||
import io.anuke.ucore.scene.ui.ButtonGroup;
|
||||
import io.anuke.ucore.scene.ui.ScrollPane;
|
||||
import io.anuke.ucore.scene.ui.ScrollPane.ScrollPaneStyle;
|
||||
import io.anuke.ucore.scene.ui.TextButton;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
|
||||
@ -69,7 +67,6 @@ public class MapLoadDialog extends FloatingDialog{
|
||||
}
|
||||
|
||||
if(world.maps.all().size == 0){
|
||||
pane.setStyle(Core.skin.get("clear", ScrollPaneStyle.class));
|
||||
table.add("$text.maps.none").center();
|
||||
}else{
|
||||
content().add("$text.editor.loadmap");
|
||||
|
@ -74,6 +74,11 @@ public class MapRenderer implements Disposable{
|
||||
for(int y = 0; y < chunks[0].length; y++){
|
||||
IndexedRenderer mesh = chunks[x][y];
|
||||
|
||||
if(mesh == null){
|
||||
chunks[x][y] = new IndexedRenderer(chunksize * chunksize * 2);
|
||||
mesh = chunks[x][y];
|
||||
}
|
||||
|
||||
mesh.getTransformMatrix().setToTranslation(tx, ty, 0).scl(tw / (width * tilesize),
|
||||
th / (height * tilesize), 1f);
|
||||
mesh.setProjectionMatrix(Core.batch.getProjectionMatrix());
|
||||
|
@ -270,8 +270,8 @@ public class MapView extends Element implements GestureListener{
|
||||
|
||||
Graphics.beginClip(x, y, width, height);
|
||||
|
||||
Draw.color(Color.LIGHT_GRAY);
|
||||
Lines.stroke(-2f);
|
||||
Draw.color(Palette.remove);
|
||||
Lines.stroke(2f);
|
||||
Lines.rect(centerx - sclwidth / 2 - 1, centery - sclheight / 2 - 1, sclwidth + 2, sclheight + 2);
|
||||
editor.renderer().draw(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight);
|
||||
Draw.reset();
|
||||
|
@ -1,5 +1,6 @@
|
||||
package io.anuke.mindustry.entities.traits;
|
||||
|
||||
import com.badlogic.gdx.Gdx;
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.utils.Queue;
|
||||
import io.anuke.mindustry.Vars;
|
||||
@ -229,7 +230,7 @@ public interface BuilderTrait extends Entity{
|
||||
}
|
||||
|
||||
if(!current.initialized){
|
||||
Events.fire(new BuildSelectEvent(tile, unit.getTeam(), this, current.breaking));
|
||||
Gdx.app.postRunnable(() -> Events.fire(new BuildSelectEvent(tile, unit.getTeam(), this, current.breaking)));
|
||||
current.initialized = true;
|
||||
}
|
||||
}
|
||||
|
@ -97,7 +97,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
|
||||
}
|
||||
|
||||
public boolean isCommanded(){
|
||||
return !isWave && world.indexer.getAllied(team, BlockFlag.comandCenter).size != 0;
|
||||
return !isWave && world.indexer.getAllied(team, BlockFlag.comandCenter).size != 0 && world.indexer.getAllied(team, BlockFlag.comandCenter).first().entity instanceof CommandCenterEntity;
|
||||
}
|
||||
|
||||
public UnitCommand getCommand(){
|
||||
|
@ -41,7 +41,7 @@ public class UnitType extends UnlockableContent{
|
||||
public float carryWeight = 1f;
|
||||
public int itemCapacity = 30;
|
||||
public ObjectSet<Item> toMine = ObjectSet.with(Items.lead, Items.copper);
|
||||
public float buildPower = 0.3f, minePower = 0.7f, healSpeed = 2f;
|
||||
public float buildPower = 0.3f, minePower = 0.7f;
|
||||
public Weapon weapon = Weapons.blaster;
|
||||
public float weaponOffsetX, weaponOffsetY;
|
||||
public Color trailColor = Color.valueOf("ffa665");
|
||||
|
@ -1,8 +1,6 @@
|
||||
package io.anuke.mindustry.game;
|
||||
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import com.badlogic.gdx.utils.ObjectMap;
|
||||
import com.badlogic.gdx.utils.ObjectMap.Entry;
|
||||
import com.badlogic.gdx.utils.ObjectSet;
|
||||
import io.anuke.mindustry.game.EventType.UnlockEvent;
|
||||
import io.anuke.mindustry.type.ContentType;
|
||||
@ -67,27 +65,8 @@ public class Unlocks{
|
||||
save();
|
||||
}
|
||||
|
||||
/**Loads 'legacy' unlocks. Will be removed in final release.*/
|
||||
public void tryLoadLegacy(){
|
||||
try{
|
||||
ObjectMap<String, ObjectMap<ContentType, Array<String>>> sets = Settings.getObject("content-sets", ObjectMap.class, ObjectMap::new);
|
||||
for(Entry<ContentType, Array<String>> entry : sets.get("root").entries()){
|
||||
unlocked.put(entry.key, new ObjectSet<>());
|
||||
unlocked.get(entry.key).addAll(entry.value);
|
||||
}
|
||||
}catch(Throwable t){
|
||||
t.printStackTrace();
|
||||
}
|
||||
Settings.prefs().remove("content-sets");
|
||||
Settings.save();
|
||||
}
|
||||
|
||||
public void load(){
|
||||
unlocked = Settings.getObject("unlockset", ObjectMap.class, ObjectMap::new);
|
||||
|
||||
if(Settings.has("content-sets")){
|
||||
tryLoadLegacy();
|
||||
}
|
||||
}
|
||||
|
||||
public void save(){
|
||||
|
@ -17,6 +17,8 @@ public class Version{
|
||||
public static int number;
|
||||
/**Build number, e.g. '43'. set to '-1' for custom builds.*/
|
||||
public static int build = 0;
|
||||
/**Revision number. Used for hotfixes. Does not affect server compatibility.*/
|
||||
public static int revision = 0;
|
||||
|
||||
public static void init(){
|
||||
try{
|
||||
@ -28,7 +30,18 @@ public class Version{
|
||||
type = map.get("type");
|
||||
number = Integer.parseInt(map.get("number"));
|
||||
modifier = map.get("modifier");
|
||||
build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1;
|
||||
if(map.get("build").contains(".")){
|
||||
String[] split = map.get("build").split("\\.");
|
||||
try{
|
||||
build = Integer.parseInt(split[0]);
|
||||
revision = Integer.parseInt(split[1]);
|
||||
}catch(Throwable e){
|
||||
e.printStackTrace();
|
||||
build = -1;
|
||||
}
|
||||
}else{
|
||||
build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1;
|
||||
}
|
||||
}catch(IOException e){
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
|
@ -2,6 +2,7 @@ package io.anuke.mindustry.graphics;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.math.MathUtils;
|
||||
import com.badlogic.gdx.math.Rectangle;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.content.blocks.Blocks;
|
||||
@ -12,16 +13,21 @@ import io.anuke.mindustry.input.InputHandler;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.ucore.core.Core;
|
||||
import io.anuke.ucore.core.Graphics;
|
||||
import io.anuke.ucore.core.Settings;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.graphics.Fill;
|
||||
import io.anuke.ucore.graphics.Lines;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Tmp;
|
||||
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
|
||||
public class OverlayRenderer{
|
||||
private static final float indicatorLength = 14f;
|
||||
private static final Rectangle rect = new Rectangle();
|
||||
private float buildFadeTime;
|
||||
|
||||
public void drawBottom(){
|
||||
@ -45,6 +51,21 @@ public class OverlayRenderer{
|
||||
|
||||
public void drawTop(){
|
||||
|
||||
for(Player player : playerGroup.all()){
|
||||
if(Settings.getBool("indicators") && player != players[0] && player.getTeam() == players[0].getTeam()){
|
||||
if(!rect.setSize(Core.camera.viewportWidth * Core.camera.zoom * 0.9f, Core.camera.viewportHeight * Core.camera.zoom * 0.9f)
|
||||
.setCenter(Core.camera.position.x, Core.camera.position.y).contains(player.x, player.y)){
|
||||
|
||||
Tmp.v1.set(player.x, player.y).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength);
|
||||
|
||||
Draw.color(player.getTeam().color);
|
||||
Lines.stroke(2f);
|
||||
Lines.lineAngle(Core.camera.position.x + Tmp.v1.x, Core.camera.position.y + Tmp.v1.y, Tmp.v1.angle(), 4f);
|
||||
Draw.reset();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
for(Player player : players){
|
||||
if(player.isDead()) continue; //dead players don't draw
|
||||
|
||||
|
@ -45,6 +45,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
||||
|
||||
//gesture data
|
||||
private Vector2 vector = new Vector2();
|
||||
private boolean canPan;
|
||||
private boolean zoomed = false;
|
||||
/** Set of completed guides. */
|
||||
private ObjectSet<String> guides = new ObjectSet<>();
|
||||
@ -241,8 +242,10 @@ public class MobileInput extends InputHandler implements GestureListener{
|
||||
if(tile != null){
|
||||
if(!request.remove){
|
||||
rotation = request.rotation;
|
||||
Recipe before = recipe;
|
||||
recipe = request.recipe;
|
||||
tryPlaceBlock(tile.x, tile.y);
|
||||
recipe = before;
|
||||
}else{
|
||||
tryBreakBlock(tile.x, tile.y);
|
||||
}
|
||||
@ -650,7 +653,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
||||
|
||||
@Override
|
||||
public boolean pan(float x, float y, float deltaX, float deltaY){
|
||||
if(ui.hasMouse()) return false;
|
||||
if(!canPan) return false;
|
||||
|
||||
//can't pan in line mode with one finger or while dropping items!
|
||||
if((lineMode && !Gdx.input.isTouched(1)) || droppingItem){
|
||||
@ -704,6 +707,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
||||
|
||||
@Override
|
||||
public boolean touchDown(float x, float y, int pointer, int button){
|
||||
canPan = !ui.hasMouse();
|
||||
return false;
|
||||
}
|
||||
|
||||
|
@ -356,13 +356,12 @@ public class Net{
|
||||
Gdx.net.sendHttpRequest(req, new HttpResponseListener(){
|
||||
@Override
|
||||
public void handleHttpResponse(HttpResponse httpResponse){
|
||||
String result = httpResponse.getResultAsString();
|
||||
Gdx.app.postRunnable(() -> listener.accept(result));
|
||||
listener.accept(httpResponse.getResultAsString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void failed(Throwable t){
|
||||
Gdx.app.postRunnable(() -> failure.accept(t));
|
||||
failure.accept(t);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -298,7 +298,7 @@ public class NetworkIO{
|
||||
int maxlen = 32;
|
||||
|
||||
String host = (headless ? "Server" : players[0].name);
|
||||
String map = world.getMap().name;
|
||||
String map = world.getMap() == null ? "None" : world.getMap().name;
|
||||
|
||||
host = host.substring(0, Math.min(host.length(), maxlen));
|
||||
map = map.substring(0, Math.min(map.length(), maxlen));
|
||||
|
@ -22,7 +22,7 @@ public class MenuButton extends TextButton{
|
||||
|
||||
table(t -> {
|
||||
t.addImage(icon).size(14 * 3);
|
||||
t.update(() -> t.setBackground(getClickListener().isOver() || getClickListener().isVisualPressed() ? "button-over" : "button"));
|
||||
t.update(() -> t.setBackground(getClickListener().isVisualPressed() ? "button-down" : getClickListener().isOver() ? "button-over" : "button"));
|
||||
}).size(s - 5, s);
|
||||
|
||||
|
||||
|
@ -16,10 +16,9 @@ import static io.anuke.mindustry.Vars.*;
|
||||
public class Minimap extends Table{
|
||||
|
||||
public Minimap(){
|
||||
super("button");
|
||||
super("pane");
|
||||
|
||||
margin(5);
|
||||
marginBottom(10);
|
||||
|
||||
TextureRegion r = new TextureRegion();
|
||||
|
||||
|
@ -42,14 +42,14 @@ public class AboutDialog extends FloatingDialog{
|
||||
float w = UIUtils.portrait() ? 330f : 600f;
|
||||
|
||||
Table in = new Table();
|
||||
ScrollPane pane = new ScrollPane(in, "clear");
|
||||
ScrollPane pane = new ScrollPane(in);
|
||||
|
||||
for(LinkEntry link : Links.getLinks()){
|
||||
if((ios || OS.isMac) && bannedItems.contains(link.name)){ //because Apple doesn't like me mentioning things
|
||||
continue;
|
||||
}
|
||||
|
||||
Table table = new Table("button");
|
||||
Table table = new Table("underline-2");
|
||||
table.margin(0);
|
||||
table.table(img -> {
|
||||
img.addImage("white").height(h - 5).width(40f).color(link.color);
|
||||
@ -58,7 +58,7 @@ public class AboutDialog extends FloatingDialog{
|
||||
}).expandY();
|
||||
|
||||
table.table(i -> {
|
||||
i.background("button");
|
||||
i.background("button-edge-3");
|
||||
i.addImage("icon-" + link.name).size(14 * 3f);
|
||||
}).size(h - 5, h);
|
||||
|
||||
@ -108,7 +108,7 @@ public class AboutDialog extends FloatingDialog{
|
||||
dialog.content().row();
|
||||
dialog.content().add("$text.contributors");
|
||||
dialog.content().row();
|
||||
dialog.content().pane("clear", new Table(){{
|
||||
dialog.content().pane(new Table(){{
|
||||
int i = 0;
|
||||
left();
|
||||
for(Contributor c : contributors){
|
||||
|
@ -24,7 +24,7 @@ public class AdminsDialog extends FloatingDialog{
|
||||
|
||||
Table table = new Table();
|
||||
|
||||
ScrollPane pane = new ScrollPane(table, "clear");
|
||||
ScrollPane pane = new ScrollPane(table);
|
||||
pane.setFadeScrollBars(false);
|
||||
|
||||
if(netServer.admins.getAdmins().size == 0){
|
||||
@ -41,17 +41,10 @@ public class AdminsDialog extends FloatingDialog{
|
||||
ui.showConfirm("$text.confirm", "$text.confirmunadmin", () -> {
|
||||
netServer.admins.unAdminPlayer(info.id);
|
||||
playerGroup.forEach(player -> {
|
||||
if(player.uuid.equals(info.id)){
|
||||
if(player != null && player.uuid != null && player.uuid.equals(info.id)){
|
||||
player.isAdmin = false;
|
||||
}
|
||||
});
|
||||
/*
|
||||
for(Player player : playerGroup.all()){
|
||||
if(player.con != null){
|
||||
player.isAdmin = false;
|
||||
break;
|
||||
}
|
||||
}*/
|
||||
setup();
|
||||
});
|
||||
}).size(h).pad(-14f);
|
||||
|
@ -25,7 +25,7 @@ public class BansDialog extends FloatingDialog{
|
||||
|
||||
Table table = new Table();
|
||||
|
||||
ScrollPane pane = new ScrollPane(table, "clear");
|
||||
ScrollPane pane = new ScrollPane(table);
|
||||
pane.setFadeScrollBars(false);
|
||||
|
||||
if(netServer.admins.getBanned().size == 0){
|
||||
|
@ -38,7 +38,7 @@ public class ChangelogDialog extends FloatingDialog{
|
||||
|
||||
void setup(){
|
||||
Table table = new Table();
|
||||
ScrollPane pane = new ScrollPane(table, "clear");
|
||||
ScrollPane pane = new ScrollPane(table);
|
||||
|
||||
content().clear();
|
||||
content().add(pane).grow();
|
||||
@ -60,7 +60,7 @@ public class ChangelogDialog extends FloatingDialog{
|
||||
|
||||
desc = desc.replace("Android", "Mobile");
|
||||
|
||||
Table in = new Table("clear");
|
||||
Table in = new Table("underline");
|
||||
in.top().left().margin(10);
|
||||
|
||||
in.add("[accent]" + info.name + "[LIGHT_GRAY] | " + info.date);
|
||||
|
@ -25,10 +25,10 @@ public class ColorPickDialog extends Dialog{
|
||||
for(int i = 0; i < playerColors.length; i++){
|
||||
Color color = playerColors[i];
|
||||
|
||||
ImageButton button = table.addImageButton("white", "toggle", 34, () -> {
|
||||
ImageButton button = table.addImageButton("white", "clear-toggle", 34, () -> {
|
||||
cons.accept(color);
|
||||
hide();
|
||||
}).size(44, 48).pad(0).padBottom(-5.1f).get();
|
||||
}).size(48).get();
|
||||
button.setChecked(players[0].color.equals(color));
|
||||
button.getStyle().imageUpColor = color;
|
||||
|
||||
|
@ -20,7 +20,7 @@ public class ContentInfoDialog extends FloatingDialog{
|
||||
|
||||
content.displayInfo(table);
|
||||
|
||||
ScrollPane pane = new ScrollPane(table, "clear-black");
|
||||
ScrollPane pane = new ScrollPane(table);
|
||||
content().add(pane);
|
||||
|
||||
show();
|
||||
|
@ -23,7 +23,7 @@ import static io.anuke.mindustry.Vars.*;
|
||||
public class CustomGameDialog extends FloatingDialog{
|
||||
|
||||
public CustomGameDialog(){
|
||||
super("$text.level.select");
|
||||
super("$text.customgame");
|
||||
addCloseButton();
|
||||
shown(this::setup);
|
||||
|
||||
@ -35,7 +35,7 @@ public class CustomGameDialog extends FloatingDialog{
|
||||
|
||||
Table maps = new Table();
|
||||
maps.marginRight(14);
|
||||
ScrollPane pane = new ScrollPane(maps, "clear-black");
|
||||
ScrollPane pane = new ScrollPane(maps);
|
||||
pane.setFadeScrollBars(false);
|
||||
|
||||
int maxwidth = (Gdx.graphics.getHeight() > Gdx.graphics.getHeight() ? 2 : 4);
|
||||
@ -52,7 +52,7 @@ public class CustomGameDialog extends FloatingDialog{
|
||||
if(mode.hidden) continue;
|
||||
|
||||
modes.addButton("$mode." + mode.name() + ".name", "toggle", () -> state.mode = mode)
|
||||
.update(b -> b.setChecked(state.mode == mode)).group(group).size(140f, 54f).padBottom(-5);
|
||||
.update(b -> b.setChecked(state.mode == mode)).group(group).size(140f, 54f);
|
||||
if(i++ % 2 == 1) modes.row();
|
||||
}
|
||||
selmode.add(modes);
|
||||
@ -139,7 +139,7 @@ public class CustomGameDialog extends FloatingDialog{
|
||||
d.setFillParent(false);
|
||||
Table table = new Table();
|
||||
table.defaults().pad(1f);
|
||||
ScrollPane pane = new ScrollPane(table, "clear");
|
||||
ScrollPane pane = new ScrollPane(table);
|
||||
pane.setFadeScrollBars(false);
|
||||
table.row();
|
||||
for(GameMode mode : GameMode.values()){
|
||||
|
@ -34,13 +34,13 @@ public class HostDialog extends FloatingDialog{
|
||||
ui.listfrag.rebuild();
|
||||
}).grow().pad(8).get().setMaxLength(40);
|
||||
|
||||
ImageButton button = t.addImageButton("white", 40, () -> {
|
||||
ImageButton button = t.addImageButton("white", "clear-full", 40, () -> {
|
||||
new ColorPickDialog().show(color -> {
|
||||
player.color.set(color);
|
||||
Settings.putInt("color-0", Color.rgba8888(color));
|
||||
Settings.save();
|
||||
});
|
||||
}).size(50f, 54f).get();
|
||||
}).size(54f).get();
|
||||
button.update(() -> button.getStyle().imageUpColor = player.color);
|
||||
}).width(w).height(70f).pad(4).colspan(3);
|
||||
|
||||
|
@ -100,7 +100,7 @@ public class JoinDialog extends FloatingDialog{
|
||||
if(!buttons[0].childrenPressed()){
|
||||
connect(server.ip, server.port);
|
||||
}
|
||||
}).width(targetWidth()).height(150f).pad(4f).get();
|
||||
}).width(targetWidth()).height(155f).pad(4f).get();
|
||||
|
||||
button.getLabel().setWrap(true);
|
||||
|
||||
@ -156,10 +156,10 @@ public class JoinDialog extends FloatingDialog{
|
||||
versionString = Bundles.get("text.server.outdated");
|
||||
}else if(host.version < Version.build && Version.build != -1){
|
||||
versionString = Bundles.get("text.server.outdated") + "\n" +
|
||||
Bundles.format("text.server.version", host.version);
|
||||
Bundles.format("text.server.version", host.version, "");
|
||||
}else if(host.version > Version.build && Version.build != -1){
|
||||
versionString = Bundles.get("text.server.outdated.client") + "\n" +
|
||||
Bundles.format("text.server.version", host.version);
|
||||
Bundles.format("text.server.version", host.version, "");
|
||||
}else{
|
||||
versionString = Bundles.format("text.server.version", host.version, host.versionType);
|
||||
}
|
||||
@ -194,7 +194,7 @@ public class JoinDialog extends FloatingDialog{
|
||||
hosts.row();
|
||||
hosts.add(local).width(w);
|
||||
|
||||
ScrollPane pane = new ScrollPane(hosts, "clear");
|
||||
ScrollPane pane = new ScrollPane(hosts);
|
||||
pane.setFadeScrollBars(false);
|
||||
pane.setScrollingDisabled(true, false);
|
||||
|
||||
@ -210,19 +210,19 @@ public class JoinDialog extends FloatingDialog{
|
||||
Settings.save();
|
||||
}).grow().pad(8).get().setMaxLength(maxNameLength);
|
||||
|
||||
ImageButton button = t.addImageButton("white", 40, () -> {
|
||||
ImageButton button = t.addImageButton("white", "clear-full", 40, () -> {
|
||||
new ColorPickDialog().show(color -> {
|
||||
player.color.set(color);
|
||||
Settings.putInt("color-0", Color.rgba8888(color));
|
||||
Settings.save();
|
||||
});
|
||||
}).size(50f, 54f).get();
|
||||
}).size(54f).get();
|
||||
button.update(() -> button.getStyle().imageUpColor = player.color);
|
||||
}).width(w).height(70f).pad(4);
|
||||
content().row();
|
||||
content().add(pane).width(w + 38).pad(0);
|
||||
content().row();
|
||||
content().addCenteredImageTextButton("$text.server.add", "icon-add", "clear", 14 * 3, () -> {
|
||||
content().addCenteredImageTextButton("$text.server.add", "icon-add", 14 * 3, () -> {
|
||||
renaming = null;
|
||||
add.show();
|
||||
}).marginLeft(6).width(w).height(80f).update(button -> {
|
||||
@ -258,7 +258,7 @@ public class JoinDialog extends FloatingDialog{
|
||||
local.background("button");
|
||||
local.add("$text.hosts.none").pad(10f);
|
||||
local.add().growX();
|
||||
local.addImageButton("icon-loading", 16 * 2f, this::refreshLocal).pad(-10f).padLeft(0).padTop(-6).size(70f, 74f);
|
||||
local.addImageButton("icon-loading", 16 * 2f, this::refreshLocal).pad(-12f).padLeft(0).size(70f);
|
||||
}else{
|
||||
local.background((Drawable) null);
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ public class LanguageDialog extends FloatingDialog{
|
||||
private void setup(){
|
||||
Table langs = new Table();
|
||||
langs.marginRight(24f).marginLeft(24f);
|
||||
ScrollPane pane = new ScrollPane(langs, "clear");
|
||||
ScrollPane pane = new ScrollPane(langs);
|
||||
pane.setFadeScrollBars(false);
|
||||
|
||||
ButtonGroup<TextButton> group = new ButtonGroup<>();
|
||||
@ -38,7 +38,7 @@ public class LanguageDialog extends FloatingDialog{
|
||||
Log.info("Setting locale: {0}", loc.toString());
|
||||
ui.showInfo("$text.language.restart");
|
||||
});
|
||||
langs.add(button).group(group).update(t -> t.setChecked(loc.equals(getLocale()))).size(400f, 50f).row();
|
||||
langs.add(button).group(group).update(t -> t.setChecked(loc.equals(getLocale()))).size(400f, 50f).pad(2).row();
|
||||
}
|
||||
|
||||
content().add(pane);
|
||||
|
@ -45,7 +45,7 @@ public class LoadDialog extends FloatingDialog{
|
||||
content().clear();
|
||||
|
||||
slots = new Table();
|
||||
pane = new ScrollPane(slots, "clear-black");
|
||||
pane = new ScrollPane(slots);
|
||||
pane.setFadeScrollBars(false);
|
||||
pane.setScrollingDisabled(true, false);
|
||||
|
||||
@ -146,7 +146,7 @@ public class LoadDialog extends FloatingDialog{
|
||||
if(!valids){
|
||||
|
||||
slots.row();
|
||||
slots.addButton("$text.save.none", "clear", () -> {
|
||||
slots.addButton("$text.save.none", () -> {
|
||||
}).disabled(true).fillX().margin(20f).minWidth(340f).height(80f).pad(4f);
|
||||
}
|
||||
|
||||
@ -154,7 +154,7 @@ public class LoadDialog extends FloatingDialog{
|
||||
|
||||
if(ios) return;
|
||||
|
||||
slots.addImageTextButton("$text.save.import", "icon-add", "clear", 14 * 3, () -> {
|
||||
slots.addImageTextButton("$text.save.import", "icon-add", 14 * 3, () -> {
|
||||
Platform.instance.showFileChooser(Bundles.get("text.save.import"), "Mindustry Save", file -> {
|
||||
if(SaveIO.isSaveValid(file)){
|
||||
try{
|
||||
|
@ -4,8 +4,8 @@ import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.utils.Scaling;
|
||||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.core.Platform;
|
||||
import io.anuke.mindustry.maps.Map;
|
||||
import io.anuke.mindustry.io.MapIO;
|
||||
import io.anuke.mindustry.maps.Map;
|
||||
import io.anuke.mindustry.maps.MapMeta;
|
||||
import io.anuke.mindustry.maps.MapTileData;
|
||||
import io.anuke.mindustry.ui.BorderImage;
|
||||
@ -73,7 +73,7 @@ public class MapsDialog extends FloatingDialog{
|
||||
Table maps = new Table();
|
||||
maps.marginRight(24);
|
||||
|
||||
ScrollPane pane = new ScrollPane(maps, "clear-black");
|
||||
ScrollPane pane = new ScrollPane(maps);
|
||||
pane.setFadeScrollBars(false);
|
||||
|
||||
int maxwidth = 4;
|
||||
@ -88,7 +88,7 @@ public class MapsDialog extends FloatingDialog{
|
||||
|
||||
TextButton button = maps.addButton("", "clear", () -> showMapInfo(map)).width(mapsize).pad(8).get();
|
||||
button.clearChildren();
|
||||
button.margin(6);
|
||||
button.margin(9);
|
||||
button.add(map.meta.tags.get("name", map.name)).growX().center().get().setEllipsis(true);
|
||||
button.row();
|
||||
button.addImage("white").growX().pad(4).color(Color.GRAY);
|
||||
@ -116,12 +116,12 @@ public class MapsDialog extends FloatingDialog{
|
||||
|
||||
table.stack(new Image(map.texture).setScaling(Scaling.fit), new BorderImage(map.texture).setScaling(Scaling.fit)).size(mapsize);
|
||||
|
||||
table.table("clear", desc -> {
|
||||
table.table("flat", desc -> {
|
||||
desc.top();
|
||||
Table t = new Table();
|
||||
t.margin(6);
|
||||
|
||||
ScrollPane pane = new ScrollPane(t, "clear-black");
|
||||
ScrollPane pane = new ScrollPane(t);
|
||||
desc.add(pane).grow();
|
||||
|
||||
t.top();
|
||||
@ -146,7 +146,7 @@ public class MapsDialog extends FloatingDialog{
|
||||
|
||||
table.row();
|
||||
|
||||
table.addImageTextButton("$text.editor.openin", "icon-load-map", "clear", 16 * 2, () -> {
|
||||
table.addImageTextButton("$text.editor.openin", "icon-load-map", 16 * 2, () -> {
|
||||
try{
|
||||
Vars.ui.editor.beginEditMap(map.stream.get());
|
||||
dialog.hide();
|
||||
@ -155,15 +155,15 @@ public class MapsDialog extends FloatingDialog{
|
||||
e.printStackTrace();
|
||||
ui.showError("$text.error.mapnotfound");
|
||||
}
|
||||
}).fillX().height(50f).marginLeft(6);
|
||||
}).fillX().height(54f).marginLeft(10);
|
||||
|
||||
table.addImageTextButton("$text.delete", "icon-trash-16", "clear", 16 * 2, () -> {
|
||||
table.addImageTextButton("$text.delete", "icon-trash-16", 16 * 2, () -> {
|
||||
ui.showConfirm("$text.confirm", Bundles.format("text.map.delete", map.name), () -> {
|
||||
world.maps.removeMap(map);
|
||||
dialog.hide();
|
||||
setup();
|
||||
});
|
||||
}).fillX().height(50f).marginLeft(6).disabled(!map.custom).touchable(map.custom ? Touchable.enabled : Touchable.disabled);
|
||||
}).fillX().height(54f).marginLeft(10).disabled(!map.custom).touchable(map.custom ? Touchable.enabled : Touchable.disabled);
|
||||
|
||||
dialog.show();
|
||||
}
|
||||
|
@ -3,6 +3,7 @@ package io.anuke.mindustry.ui.dialogs;
|
||||
import com.badlogic.gdx.Input.Keys;
|
||||
import io.anuke.mindustry.core.GameState.State;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.ucore.scene.style.Drawable;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
|
||||
@ -29,13 +30,9 @@ public class PausedDialog extends FloatingDialog{
|
||||
|
||||
void rebuild(){
|
||||
missionTable.clear();
|
||||
if(world.getSector() != null && !world.getSector().complete){
|
||||
missionTable.add("[LIGHT_GRAY]" + Bundles.format("text.mission", ""));
|
||||
missionTable.row();
|
||||
missionTable.table(t -> {
|
||||
world.getSector().currentMission().display(t);
|
||||
});
|
||||
missionTable.row();
|
||||
missionTable.background((Drawable) null);
|
||||
if(world.getSector() != null){
|
||||
missionTable.background("underline");
|
||||
missionTable.add(Bundles.format("text.sector", world.getSector().x + ", " + world.getSector().y));
|
||||
}
|
||||
}
|
||||
@ -47,31 +44,26 @@ public class PausedDialog extends FloatingDialog{
|
||||
}
|
||||
});
|
||||
|
||||
content().table(t -> missionTable = t).colspan(mobile ? 3 : 1);
|
||||
content().table(t -> missionTable = t).colspan(mobile ? 3 : 2);
|
||||
content().row();
|
||||
|
||||
if(!mobile){
|
||||
content().defaults().width(220).height(50);
|
||||
float dw = 210f;
|
||||
content().defaults().width(dw).height(50).pad(5f);
|
||||
|
||||
content().addButton("$text.back", () -> {
|
||||
hide();
|
||||
});
|
||||
content().addButton("$text.back", this::hide).colspan(2).width(dw*2 + 20f);
|
||||
|
||||
content().row();
|
||||
content().addButton("$text.unlocks", ui.unlocks::show);
|
||||
|
||||
content().row();
|
||||
content().addButton("$text.settings", ui.settings::show);
|
||||
|
||||
content().row();
|
||||
content().addButton("$text.savegame", save::show).disabled(s -> world.getSector() != null);
|
||||
|
||||
content().row();
|
||||
content().addButton("$text.loadgame", load::show).disabled(b -> Net.active());
|
||||
|
||||
content().row();
|
||||
|
||||
content().addButton("$text.hostserver", ui.host::show).disabled(b -> Net.active());
|
||||
content().addButton("$text.hostserver", ui.host::show).disabled(b -> Net.active()).colspan(2).width(dw*2 + 20f);
|
||||
|
||||
content().row();
|
||||
|
||||
@ -81,7 +73,7 @@ public class PausedDialog extends FloatingDialog{
|
||||
runExitSave();
|
||||
hide();
|
||||
});
|
||||
});
|
||||
}).colspan(2).width(dw + 10f);
|
||||
|
||||
}else{
|
||||
content().defaults().size(120f).pad(5);
|
||||
|
@ -22,7 +22,7 @@ public class SaveDialog extends LoadDialog{
|
||||
|
||||
public void addSetup(){
|
||||
slots.row();
|
||||
slots.addImageTextButton("$text.save.new", "icon-add", "clear", 14 * 3, () ->
|
||||
slots.addImageTextButton("$text.save.new", "icon-add",14 * 3, () ->
|
||||
ui.showTextInput("$text.save", "$text.save.newslot", "", text -> {
|
||||
ui.loadGraphics("$text.saving", () -> {
|
||||
control.saves.addSave(text);
|
||||
|
@ -95,7 +95,7 @@ public class SettingsMenuDialog extends SettingsDialog{
|
||||
prefs.clearChildren();
|
||||
prefs.add(menu);
|
||||
|
||||
ScrollPane pane = new ScrollPane(prefs, "clear");
|
||||
ScrollPane pane = new ScrollPane(prefs);
|
||||
pane.addCaptureListener(new InputListener(){
|
||||
@Override
|
||||
public boolean touchDown(InputEvent event, float x, float y, int pointer, int button){
|
||||
@ -148,21 +148,21 @@ public class SettingsMenuDialog extends SettingsDialog{
|
||||
dialog.setFillParent(false);
|
||||
dialog.content().defaults().size(230f, 60f).pad(3);
|
||||
dialog.addCloseButton();
|
||||
dialog.content().addButton("$text.settings.clearsectors", "clear", () -> {
|
||||
dialog.content().addButton("$text.settings.clearsectors", () -> {
|
||||
ui.showConfirm("$text.confirm", "$text.settings.clear.confirm", () -> {
|
||||
world.sectors.clear();
|
||||
dialog.hide();
|
||||
});
|
||||
});
|
||||
dialog.content().row();
|
||||
dialog.content().addButton("$text.settings.clearunlocks", "clear", () -> {
|
||||
dialog.content().addButton("$text.settings.clearunlocks", () -> {
|
||||
ui.showConfirm("$text.confirm", "$text.settings.clear.confirm", () -> {
|
||||
control.unlocks.reset();
|
||||
dialog.hide();
|
||||
});
|
||||
});
|
||||
dialog.content().row();
|
||||
dialog.content().addButton("$text.settings.clearall", "clear", () -> {
|
||||
dialog.content().addButton("$text.settings.clearall", () -> {
|
||||
ui.showConfirm("$text.confirm", "$text.settings.clearall.confirm", () -> {
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
for(String value : Settings.prefs().get().keySet()){
|
||||
@ -208,6 +208,7 @@ public class SettingsMenuDialog extends SettingsDialog{
|
||||
}
|
||||
|
||||
graphics.checkPref("fps", false);
|
||||
graphics.checkPref("indicators", true);
|
||||
graphics.checkPref("lasers", true);
|
||||
graphics.checkPref("minimap", !mobile); //minimap is disabled by default on mobile devices
|
||||
}
|
||||
|
@ -32,7 +32,7 @@ public class UnlocksDialog extends FloatingDialog{
|
||||
|
||||
Table table = new Table();
|
||||
table.margin(20);
|
||||
ScrollPane pane = new ScrollPane(table, "clear-black");
|
||||
ScrollPane pane = new ScrollPane(table);
|
||||
|
||||
Array<Content>[] allContent = content.getContentMap();
|
||||
|
||||
@ -65,9 +65,8 @@ public class UnlocksDialog extends FloatingDialog{
|
||||
|
||||
if(control.unlocks.isUnlocked(unlock)){
|
||||
image.clicked(() -> Vars.ui.content.show(unlock));
|
||||
image.addListener(new Tooltip<>(new Table("clear"){{
|
||||
image.addListener(new Tooltip<>(new Table("button"){{
|
||||
add(unlock.localizedName());
|
||||
margin(4);
|
||||
}}));
|
||||
}
|
||||
|
||||
|
@ -11,6 +11,7 @@ import io.anuke.mindustry.core.GameState.State;
|
||||
import io.anuke.mindustry.game.EventType.StateChangeEvent;
|
||||
import io.anuke.mindustry.game.Team;
|
||||
import io.anuke.mindustry.gen.Call;
|
||||
import io.anuke.mindustry.graphics.Palette;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.mindustry.net.Packets.AdminAction;
|
||||
import io.anuke.mindustry.type.Recipe;
|
||||
@ -23,9 +24,13 @@ import io.anuke.ucore.scene.Element;
|
||||
import io.anuke.ucore.scene.Group;
|
||||
import io.anuke.ucore.scene.actions.Actions;
|
||||
import io.anuke.ucore.scene.event.Touchable;
|
||||
import io.anuke.ucore.scene.ui.*;
|
||||
import io.anuke.ucore.scene.ui.Image;
|
||||
import io.anuke.ucore.scene.ui.ImageButton;
|
||||
import io.anuke.ucore.scene.ui.Label;
|
||||
import io.anuke.ucore.scene.ui.TextButton;
|
||||
import io.anuke.ucore.scene.ui.layout.Stack;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
import io.anuke.ucore.scene.ui.layout.Unit;
|
||||
import io.anuke.ucore.util.Bundles;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
@ -59,10 +64,10 @@ public class HudFragment extends Fragment{
|
||||
select.left();
|
||||
select.defaults().size(dsize).left();
|
||||
|
||||
menu = select.addImageButton("icon-menu", isize, ui.paused::show).get();
|
||||
flip = select.addImageButton("icon-arrow-up", isize, this::toggleMenus).get();
|
||||
menu = select.addImageButton("icon-menu", "clear", isize, ui.paused::show).get();
|
||||
flip = select.addImageButton("icon-arrow-up", "clear", isize, this::toggleMenus).get();
|
||||
|
||||
select.addImageButton("icon-pause", isize, () -> {
|
||||
select.addImageButton("icon-pause", "clear", isize, () -> {
|
||||
if(Net.active()){
|
||||
ui.listfrag.toggle();
|
||||
}else{
|
||||
@ -77,7 +82,7 @@ public class HudFragment extends Fragment{
|
||||
}
|
||||
}).get();
|
||||
|
||||
select.addImageButton("icon-settings", isize, () -> {
|
||||
select.addImageButton("icon-settings", "clear", isize, () -> {
|
||||
if(Net.active() && mobile){
|
||||
if(ui.chatfrag.chatOpen()){
|
||||
ui.chatfrag.hide();
|
||||
@ -94,9 +99,13 @@ public class HudFragment extends Fragment{
|
||||
i.getStyle().imageUp = Core.skin.getDrawable("icon-unlocks");
|
||||
}
|
||||
}).get();
|
||||
|
||||
select.addImage("blank").color(Palette.accent).width(6f).fillY();
|
||||
});
|
||||
|
||||
cont.row();
|
||||
cont.addImage("blank").height(6f).color(Palette.accent).fillX();
|
||||
cont.row();
|
||||
}
|
||||
|
||||
cont.update(() -> {
|
||||
@ -106,7 +115,7 @@ public class HudFragment extends Fragment{
|
||||
});
|
||||
|
||||
Stack stack = new Stack();
|
||||
TextButton waves = new TextButton("");
|
||||
TextButton waves = new TextButton("", "wave");
|
||||
Table btable = new Table().margin(0);
|
||||
|
||||
stack.add(waves);
|
||||
@ -116,7 +125,7 @@ public class HudFragment extends Fragment{
|
||||
|
||||
addWaveTable(waves);
|
||||
addPlayButton(btable);
|
||||
cont.add(stack).width(dsize * 4);
|
||||
cont.add(stack).width(dsize * 4 + 6f);
|
||||
|
||||
cont.row();
|
||||
|
||||
@ -145,12 +154,12 @@ public class HudFragment extends Fragment{
|
||||
//paused table
|
||||
parent.fill(t -> {
|
||||
t.top().visible(() -> state.is(State.paused) && !Net.active());
|
||||
t.table("clear", top -> top.add("$text.paused").pad(6).get().setFontScale(1.5f));
|
||||
t.table("button", top -> top.add("$text.paused").pad(6f));
|
||||
});
|
||||
|
||||
parent.fill(t -> {
|
||||
t.visible(() -> netServer.isWaitingForPlayers() && !state.is(State.menu));
|
||||
t.table("clear", c -> c.margin(10).add("$text.waiting.players"));
|
||||
t.table("button", c -> c.add("$text.waiting.players"));
|
||||
});
|
||||
|
||||
//'core is under attack' table
|
||||
@ -188,7 +197,7 @@ public class HudFragment extends Fragment{
|
||||
|
||||
return coreAttackOpacity > 0;
|
||||
});
|
||||
t.table("clear", top -> top.add("$text.coreattack").pad(6)
|
||||
t.table("button", top -> top.add("$text.coreattack").pad(2)
|
||||
.update(label -> label.setColor(Hue.mix(Color.ORANGE, Color.SCARLET, Mathf.absin(Timers.time(), 2f, 1f)))));
|
||||
});
|
||||
|
||||
@ -342,7 +351,7 @@ public class HudFragment extends Fragment{
|
||||
if(shown){
|
||||
shown = false;
|
||||
blockfrag.toggle(dur, in);
|
||||
wavetable.actions(Actions.translateBy(0, (wavetable.getHeight() + dsize) - wavetable.getTranslation().y, dur, in));
|
||||
wavetable.actions(Actions.translateBy(0, (wavetable.getHeight() + Unit.dp.scl(dsize) + Unit.dp.scl(6)) - wavetable.getTranslation().y, dur, in));
|
||||
infolabel.actions(Actions.translateBy(0, (wavetable.getHeight()) - wavetable.getTranslation().y, dur, in));
|
||||
}else{
|
||||
shown = true;
|
||||
@ -361,8 +370,6 @@ public class HudFragment extends Fragment{
|
||||
table.clearChildren();
|
||||
table.setTouchable(Touchable.enabled);
|
||||
|
||||
table.background("button");
|
||||
|
||||
table.labelWrap(() ->
|
||||
world.getSector() == null ?
|
||||
(state.enemies() > 0 && state.mode.disableWaveTimer ?
|
||||
@ -386,7 +393,7 @@ public class HudFragment extends Fragment{
|
||||
}
|
||||
|
||||
private void addPlayButton(Table table){
|
||||
table.right().addImageButton("icon-play", 30f, () -> {
|
||||
table.right().addImageButton("icon-play", "right", 30f, () -> {
|
||||
if(Net.client() && players[0].isAdmin){
|
||||
Call.onAdminRequest(players[0], AdminAction.wave);
|
||||
}else{
|
||||
|
@ -43,7 +43,8 @@ public class MenuFragment extends Fragment{
|
||||
}
|
||||
|
||||
//version info
|
||||
parent.fill(c -> c.bottom().left().add(Strings.formatArgs("Mindustry v{0} {1}-{2} {3}", Version.number, Version.modifier, Version.type, (Version.build == -1 ? "custom build" : "build " + Version.build)))
|
||||
parent.fill(c -> c.bottom().left().add(Strings.formatArgs("Mindustry v{0} {1}-{2} {3}{4}", Version.number, Version.modifier, Version.type,
|
||||
(Version.build == -1 ? "custom build" : "build " + Version.build), Version.revision == 0 ? "" : "." + Version.revision))
|
||||
.visible(() -> state.is(State.menu)));
|
||||
}
|
||||
|
||||
|
@ -106,7 +106,7 @@ public class PlacementFragment extends Fragment{
|
||||
};
|
||||
|
||||
//top table with hover info
|
||||
frame.table("clear", top -> {
|
||||
frame.table("button-edge-2", top -> {
|
||||
topTable = top;
|
||||
top.add(new Table()).growX().update(topTable -> {
|
||||
if((tileDisplayBlock() == null && lastDisplay == getSelected()) ||
|
||||
@ -160,16 +160,16 @@ public class PlacementFragment extends Fragment{
|
||||
topTable.labelWrap(lastDisplay.getDisplayName(hoverTile)).left().width(190f).padLeft(5);
|
||||
}
|
||||
});
|
||||
top.row();
|
||||
top.addImage("blank").growX().color(Palette.accent).height(3f);
|
||||
}).colspan(3).fillX().visible(() -> getSelected() != null || tileDisplayBlock() != null).touchable(Touchable.enabled);
|
||||
frame.row();
|
||||
frame.table("clear", blocksSelect -> {
|
||||
frame.addImage("blank").color(Palette.accent).colspan(3).height(3*2).growX();
|
||||
frame.row();
|
||||
frame.table("pane-2", blocksSelect -> {
|
||||
blocksSelect.margin(4).marginTop(0);
|
||||
blocksSelect.table(blocks -> blockTable = blocks).grow();
|
||||
blocksSelect.row();
|
||||
blocksSelect.table(input::buildUI).growX();
|
||||
}).fillY().bottom().touchable(Touchable.enabled);
|
||||
frame.addImage("blank").width(3f).fillY().color(Palette.accent);
|
||||
frame.table(categories -> {
|
||||
categories.defaults().size(50f);
|
||||
|
||||
|
@ -45,13 +45,13 @@ public class PlayerListFragment extends Fragment{
|
||||
}
|
||||
});
|
||||
|
||||
cont.table("pane", pane -> {
|
||||
cont.table("button", pane -> {
|
||||
pane.label(() -> Bundles.format(playerGroup.size() == 1 ? "text.players.single" : "text.players", playerGroup.size()));
|
||||
pane.row();
|
||||
pane.pane("clear", content).grow().get().setScrollingDisabled(true, false);
|
||||
pane.pane(content).grow().get().setScrollingDisabled(true, false);
|
||||
pane.row();
|
||||
|
||||
pane.table("pane", menu -> {
|
||||
pane.table(menu -> {
|
||||
menu.defaults().growX().height(50f).fillY();
|
||||
|
||||
menu.addButton("$text.server.bans", ui.bans::show).disabled(b -> Net.client());
|
||||
@ -70,12 +70,14 @@ public class PlayerListFragment extends Fragment{
|
||||
|
||||
float h = 74f;
|
||||
|
||||
playerGroup.all().sort((p1, p2) -> p1.getTeam().compareTo(p2.getTeam()));
|
||||
|
||||
playerGroup.forEach(player -> {
|
||||
NetConnection connection = player.con;
|
||||
|
||||
if(connection == null && Net.server() && !player.isLocal) return;
|
||||
|
||||
Table button = new Table("button");
|
||||
Table button = new Table();
|
||||
button.left();
|
||||
button.margin(5).marginBottom(10);
|
||||
|
||||
@ -102,19 +104,19 @@ public class PlayerListFragment extends Fragment{
|
||||
if((Net.server() || players[0].isAdmin) && !player.isLocal && (!player.isAdmin || Net.server())){
|
||||
button.add().growY();
|
||||
|
||||
float bs = (h + 14) / 2f;
|
||||
float bs = (h) / 2f;
|
||||
|
||||
button.table(t -> {
|
||||
t.defaults().size(bs - 1, bs + 3);
|
||||
t.defaults().size(bs);
|
||||
|
||||
t.addImageButton("icon-ban", 14 * 2,
|
||||
() -> ui.showConfirm("$text.confirm", "$text.confirmban", () -> Call.onAdminRequest(player, AdminAction.ban))).padBottom(-5.1f);
|
||||
t.addImageButton("icon-cancel", 16 * 2,
|
||||
() -> ui.showConfirm("$text.confirm", "$text.confirmkick", () -> Call.onAdminRequest(player, AdminAction.kick))).padBottom(-5.1f);
|
||||
t.addImageButton("icon-ban", "clear-partial", 14 * 2,
|
||||
() -> ui.showConfirm("$text.confirm", "$text.confirmban", () -> Call.onAdminRequest(player, AdminAction.ban)));
|
||||
t.addImageButton("icon-cancel", "clear-partial", 16 * 2,
|
||||
() -> ui.showConfirm("$text.confirm", "$text.confirmkick", () -> Call.onAdminRequest(player, AdminAction.kick)));
|
||||
|
||||
t.row();
|
||||
|
||||
t.addImageButton("icon-admin", "toggle", 14 * 2, () -> {
|
||||
t.addImageButton("icon-admin", "clear-toggle", 14 * 2, () -> {
|
||||
if(Net.client()) return;
|
||||
|
||||
String id = player.uuid;
|
||||
@ -130,15 +132,15 @@ public class PlayerListFragment extends Fragment{
|
||||
.touchable(() -> Net.client() ? Touchable.disabled : Touchable.enabled)
|
||||
.checked(player.isAdmin);
|
||||
|
||||
t.addImageButton("icon-zoom-small", 14 * 2, () -> ui.showError("Currently unimplemented.")/*Call.onAdminRequest(player, AdminAction.trace)*/);
|
||||
|
||||
}).padRight(12).padTop(-5).padLeft(0).padBottom(-10).size(bs + 10f, bs);
|
||||
|
||||
t.addImageButton("icon-zoom-small", "clear-partial", 14 * 2, () -> ui.showError("Currently unimplemented.")/*Call.onAdminRequest(player, AdminAction.trace)*/);
|
||||
|
||||
}).padRight(12).size(bs + 10f, bs);
|
||||
}
|
||||
|
||||
content.add(button).padBottom(-6).width(350f).maxHeight(h + 14);
|
||||
content.row();
|
||||
content.addImage("blank").height(3f).color(state.mode.isPvp ? player.getTeam().color : Palette.accent).growX();
|
||||
content.row();
|
||||
});
|
||||
|
||||
content.marginBottom(5);
|
||||
|
@ -387,10 +387,11 @@ public class Block extends BaseBlock {
|
||||
tempColor.set(Palette.darkFlame);
|
||||
|
||||
if(hasItems){
|
||||
float scaling = inventoryScaling(tile);
|
||||
for(Item item : content.items()){
|
||||
int amount = tile.entity.items.get(item);
|
||||
explosiveness += item.explosiveness * amount;
|
||||
flammability += item.flammability * amount;
|
||||
explosiveness += item.explosiveness * amount * scaling;
|
||||
flammability += item.flammability * amount * scaling;
|
||||
|
||||
if(item.flammability * amount > 0.5){
|
||||
units++;
|
||||
@ -416,7 +417,7 @@ public class Block extends BaseBlock {
|
||||
float splash = Mathf.clamp(amount / 4f, 0f, 10f);
|
||||
|
||||
for(int i = 0; i < Mathf.clamp(amount / 5, 0, 30); i++){
|
||||
Timers.run(i / 2, () -> {
|
||||
Timers.run(i / 2f, () -> {
|
||||
Tile other = world.tile(tile.x + Mathf.range(size / 2), tile.y + Mathf.range(size / 2));
|
||||
if(other != null){
|
||||
Puddle.deposit(other, liquid, splash);
|
||||
@ -432,6 +433,11 @@ public class Block extends BaseBlock {
|
||||
}
|
||||
}
|
||||
|
||||
/**Returns scaled # of inventories in this block.*/
|
||||
public float inventoryScaling(Tile tile){
|
||||
return 1f;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the flammability of the tile. Used for fire calculations.
|
||||
* Takes flammability of floor liquid into account.
|
||||
|
@ -4,43 +4,32 @@ import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.ucore.function.Consumer;
|
||||
import io.anuke.ucore.function.Supplier;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.scene.style.TextureRegionDrawable;
|
||||
import io.anuke.ucore.scene.ui.ButtonGroup;
|
||||
import io.anuke.ucore.scene.ui.ImageButton;
|
||||
import io.anuke.ucore.scene.ui.layout.Table;
|
||||
|
||||
import static io.anuke.mindustry.Vars.*;
|
||||
import static io.anuke.mindustry.Vars.content;
|
||||
import static io.anuke.mindustry.Vars.control;
|
||||
|
||||
public interface SelectionTrait{
|
||||
|
||||
default void buildItemTable(Table table, Supplier<Item> holder, Consumer<Item> consumer){
|
||||
buildItemTable(table, false, holder, consumer);
|
||||
}
|
||||
|
||||
default void buildItemTable(Table table, boolean nullItem, Supplier<Item> holder, Consumer<Item> consumer){
|
||||
|
||||
Array<Item> items = content.items();
|
||||
|
||||
ButtonGroup<ImageButton> group = new ButtonGroup<>();
|
||||
group.setMinCheckCount(0);
|
||||
Table cont = new Table();
|
||||
cont.defaults().size(38, 42).padBottom(-5.1f);
|
||||
cont.defaults().size(38);
|
||||
|
||||
int i = 0;
|
||||
|
||||
if(nullItem){
|
||||
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> consumer.accept(null)).group(group).get();
|
||||
button.getStyle().imageUp = new TextureRegionDrawable(Draw.region("icon-nullitem"));
|
||||
button.setChecked(holder.get() == null);
|
||||
|
||||
i ++;
|
||||
}
|
||||
|
||||
for(Item item : items){
|
||||
if(!control.unlocks.isUnlocked(item)) continue;
|
||||
|
||||
ImageButton button = cont.addImageButton("white", "toggle", 24, () -> consumer.accept(item))
|
||||
.group(group).get();
|
||||
ImageButton button = cont.addImageButton("white", "clear-toggle", 24, () -> {}).group(group).get();
|
||||
button.changed(() -> consumer.accept(button.isChecked() ? item : null));
|
||||
button.getStyle().imageUp = new TextureRegionDrawable(item.region);
|
||||
button.setChecked(holder.get() == item);
|
||||
|
||||
|
@ -40,15 +40,15 @@ public class Sorter extends Block implements SelectionTrait{
|
||||
|
||||
@Override
|
||||
public void playerPlaced(Tile tile){
|
||||
if(lastItem != null){
|
||||
threads.runDelay(() -> Call.setSorterItem(null, tile, lastItem));
|
||||
}
|
||||
threads.runDelay(() -> Call.setSorterItem(null, tile, lastItem));
|
||||
}
|
||||
|
||||
@Remote(targets = Loc.both, called = Loc.both, forward = true)
|
||||
public static void setSorterItem(Player player, Tile tile, Item item){
|
||||
SorterEntity entity = tile.entity();
|
||||
if(entity != null) entity.sortItem = item;
|
||||
if(entity != null){
|
||||
entity.sortItem = item;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -56,6 +56,7 @@ public class Sorter extends Block implements SelectionTrait{
|
||||
super.draw(tile);
|
||||
|
||||
SorterEntity entity = tile.entity();
|
||||
if(entity.sortItem == null) return;
|
||||
|
||||
Draw.color(entity.sortItem.color);
|
||||
Draw.rect("blank", tile.worldx(), tile.worldy(), 4f, 4f);
|
||||
@ -130,16 +131,17 @@ public class Sorter extends Block implements SelectionTrait{
|
||||
}
|
||||
|
||||
public static class SorterEntity extends TileEntity{
|
||||
public Item sortItem = content.item(0);
|
||||
public Item sortItem;
|
||||
|
||||
@Override
|
||||
public void writeConfig(DataOutput stream) throws IOException{
|
||||
stream.writeByte(sortItem.id);
|
||||
stream.writeByte(sortItem == null ? -1 : sortItem.id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readConfig(DataInput stream) throws IOException{
|
||||
sortItem = content.items().get(stream.readByte());
|
||||
byte b = stream.readByte();
|
||||
sortItem = b == -1 ? null : content.items().get(b);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -66,7 +66,7 @@ public class PowerNode extends PowerBlock{
|
||||
|
||||
@Remote(targets = Loc.both, called = Loc.server, forward = true)
|
||||
public static void unlinkPowerNodes(Player player, Tile tile, Tile other){
|
||||
if(tile.entity.power == null) return;
|
||||
if(tile.entity.power == null || other.entity == null || other.entity.power == null) return;
|
||||
|
||||
TileEntity entity = tile.entity();
|
||||
|
||||
@ -248,23 +248,10 @@ public class PowerNode extends PowerBlock{
|
||||
x2 += t2.x;
|
||||
y2 += t2.y;
|
||||
|
||||
float space = Vector2.dst(x1, y1, x2, y2);
|
||||
float scl = 4f, mag = 2f, tscl = 4f, segscl = 3f;
|
||||
Draw.color(Palette.powerLight, Palette.power, Mathf.absin(Timers.time(), 8f, 1f));
|
||||
Lines.stroke(2f);
|
||||
Lines.line(x1, y1, x2, y2);
|
||||
|
||||
int segments = Mathf.ceil(space / segscl);
|
||||
|
||||
Draw.color(Palette.power, Palette.powerLight, Mathf.absin(Timers.time(), 5f, 1f));
|
||||
Lines.stroke(1f);
|
||||
|
||||
for(int i = 0; i < segments; i++){
|
||||
float f1 = (float)i / segments;
|
||||
float f2 = (float)(i+1) / segments;
|
||||
t1.trns(angle1 + 90f, Mathf.lerp(Mathf.sin(tile.entity.id * 124f + Timers.time()/tscl + f1 * space, scl, mag), 0f, Math.abs(f1 - 0.5f)*2f));
|
||||
t2.trns(angle1 + 90f, Mathf.lerp(Mathf.sin(tile.entity.id * 124f + Timers.time()/tscl + f2 * space, scl, mag), 0f, Math.abs(f2 - 0.5f)*2f));
|
||||
|
||||
Lines.line(x1 + (x2 - x1) * f1 + t1.x, y1 + (y2 - y1) * f1 + t1.y,
|
||||
x1 + (x2 - x1) * f2 + t2.x, y1 + (y2 - y1) * f2 + t2.y);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -65,7 +65,7 @@ public class SortedUnloader extends Unloader implements SelectionTrait{
|
||||
@Override
|
||||
public void buildTable(Tile tile, Table table){
|
||||
SortedUnloaderEntity entity = tile.entity();
|
||||
buildItemTable(table, true, () -> entity.sortItem, item -> Call.setSortedUnloaderItem(null, tile, item));
|
||||
buildItemTable(table, () -> entity.sortItem, item -> Call.setSortedUnloaderItem(null, tile, item));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -89,6 +89,12 @@ public abstract class StorageBlock extends Block{
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public float inventoryScaling(Tile tile){
|
||||
StorageEntity entity = tile.entity();
|
||||
return 1f / entity.graph.getTiles().size;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity newEntity(){
|
||||
return new StorageEntity();
|
||||
|
@ -3,7 +3,6 @@ package io.anuke.mindustry.world.blocks.storage;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockGroup;
|
||||
|
||||
public abstract class Unloader extends Block{
|
||||
protected final int timerUnload = timers++;
|
||||
@ -13,7 +12,6 @@ public abstract class Unloader extends Block{
|
||||
update = true;
|
||||
solid = true;
|
||||
health = 70;
|
||||
group = BlockGroup.transportation;
|
||||
hasItems = true;
|
||||
}
|
||||
|
||||
@ -24,6 +22,5 @@ public abstract class Unloader extends Block{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setBars(){
|
||||
}
|
||||
public void setBars(){}
|
||||
}
|
||||
|
@ -84,12 +84,12 @@ public class CommandCenter extends Block{
|
||||
Table buttons = new Table();
|
||||
|
||||
for(UnitCommand cmd : UnitCommand.values()){
|
||||
buttons.addImageButton("command-" + cmd.name(), "toggle", 8*3, () -> threads.run(() -> Call.onCommandCenterSet(players[0], tile, cmd))).size(40f, 44f)
|
||||
.checked(entity.command == cmd).group(group);
|
||||
buttons.addImageButton("command-" + cmd.name(), "clear-toggle", 8*3, () -> threads.run(() -> Call.onCommandCenterSet(players[0], tile, cmd)))
|
||||
.size(38f).checked(entity.command == cmd).group(group);
|
||||
}
|
||||
table.add(buttons);
|
||||
table.row();
|
||||
table.table("button", t -> t.label(() -> entity.command.localized()).center().growX()).growX().padTop(-5);
|
||||
table.table("pane", t -> t.label(() -> entity.command.localized()).center().growX()).growX();
|
||||
}
|
||||
|
||||
@Remote(called = Loc.server, forward = true, targets = Loc.both)
|
||||
|
@ -33,7 +33,7 @@ public abstract class Consume{
|
||||
}
|
||||
|
||||
public void build(Table table){
|
||||
Table t = new Table("clear");
|
||||
Table t = new Table("flat");
|
||||
t.margin(4);
|
||||
buildTooltip(t);
|
||||
|
||||
|
@ -71,7 +71,6 @@ public class KryoServer implements ServerProvider {
|
||||
@Override
|
||||
public void disconnected (Connection connection) {
|
||||
KryoConnection k = getByKryoID(connection.getID());
|
||||
Log.info("&bLost kryonet connection {0}", connection.getID());
|
||||
if(k == null) return;
|
||||
|
||||
Disconnect c = new Disconnect();
|
||||
|