Merge remote-tracking branch 'upstream/master'
# Conflicts: # core/assets/bundles/bundle_ja.properties
BIN
core/assets-raw/sprites/blocks/environment/snowrock1.png
Normal file
|
After Width: | Height: | Size: 3.8 KiB |
BIN
core/assets-raw/sprites/blocks/environment/snowrock2.png
Normal file
|
After Width: | Height: | Size: 4.0 KiB |
BIN
core/assets-raw/sprites/blocks/environment/sporerocks-large.png
Normal file
|
After Width: | Height: | Size: 1.6 KiB |
BIN
core/assets-raw/sprites/blocks/environment/sporerocks1.png
Normal file
|
After Width: | Height: | Size: 1.4 KiB |
BIN
core/assets-raw/sprites/blocks/environment/sporerocks2.png
Normal file
|
After Width: | Height: | Size: 1.3 KiB |
@@ -203,6 +203,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Name:
|
editor.name = Name:
|
||||||
@@ -250,14 +256,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Width:
|
width = Width:
|
||||||
height = Height:
|
height = Height:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -289,7 +299,7 @@ uncover = Uncover
|
|||||||
configure = Configure Loadout
|
configure = Configure Loadout
|
||||||
configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}.
|
configure.locked = [LIGHT_GRAY]Unlock configuring loadout:\nWave {0}.
|
||||||
zone.unlocked = [LIGHT_GRAY]{0} unlocked.
|
zone.unlocked = [LIGHT_GRAY]{0} unlocked.
|
||||||
zone.complete = Wave {0} reached:\nNew zone requirements met.
|
zone.complete = Wave {0} reached:\nNext zone requirements met.
|
||||||
zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
|
zone.config.complete = Wave {0} reached:\nLoadout config unlocked.
|
||||||
zone.resources = Resources Detected:
|
zone.resources = Resources Detected:
|
||||||
add = Add...
|
add = Add...
|
||||||
@@ -340,6 +350,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Power Capacity
|
blocks.powercapacity = Power Capacity
|
||||||
blocks.powershot = Power/Shot
|
blocks.powershot = Power/Shot
|
||||||
blocks.targetsair = Targets Air
|
blocks.targetsair = Targets Air
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Range
|
blocks.shootrange = Range
|
||||||
@@ -409,6 +420,7 @@ setting.autotarget.name = Auto-Target
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = None
|
setting.fpscap.none = None
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = training
|
setting.difficulty.training = training
|
||||||
setting.difficulty.easy = easy
|
setting.difficulty.easy = easy
|
||||||
setting.difficulty.normal = normal
|
setting.difficulty.normal = normal
|
||||||
@@ -445,6 +457,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = Move x
|
keybind.move_x.name = Move x
|
||||||
keybind.move_y.name = Move y
|
keybind.move_y.name = Move y
|
||||||
keybind.select.name = Select/Shoot
|
keybind.select.name = Select/Shoot
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
@@ -563,6 +576,9 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
|
block.snowrock.name = Snow Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Jméno:
|
editor.name = Jméno:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Jméno mapy:
|
|||||||
editor.overwrite = [accent]Varování!\nToto přepíše již existující mapu.
|
editor.overwrite = [accent]Varování!\nToto přepíše již existující mapu.
|
||||||
editor.overwrite.confirm = [scarlet]Varování![] Mapa s tímto jménem již existuje. Jsi si jistý že ji chceš přepsat?
|
editor.overwrite.confirm = [scarlet]Varování![] Mapa s tímto jménem již existuje. Jsi si jistý že ji chceš přepsat?
|
||||||
editor.selectmap = Vyber mapu k načtení:
|
editor.selectmap = Vyber mapu k načtení:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Šířka:
|
width = Šířka:
|
||||||
height = Výška:
|
height = Výška:
|
||||||
menu = Hlavní menu
|
menu = Hlavní menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Kapacita energie
|
blocks.powercapacity = Kapacita energie
|
||||||
blocks.powershot = Energie na výstřel
|
blocks.powershot = Energie na výstřel
|
||||||
blocks.targetsair = Zaměřuje vzdušné jednotky
|
blocks.targetsair = Zaměřuje vzdušné jednotky
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Dostřel
|
blocks.shootrange = Dostřel
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Automaticky zaměřuje
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = žádný
|
setting.fpscap.none = žádný
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = Trénink
|
setting.difficulty.training = Trénink
|
||||||
setting.difficulty.easy = lehká
|
setting.difficulty.easy = lehká
|
||||||
setting.difficulty.normal = normální
|
setting.difficulty.normal = normální
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Sníměk mapy
|
|||||||
keybind.move_x.name = Pohyb na X
|
keybind.move_x.name = Pohyb na X
|
||||||
keybind.move_y.name = Pohyb na Y
|
keybind.move_y.name = Pohyb na Y
|
||||||
keybind.select.name = Vybrat/Střílet
|
keybind.select.name = Vybrat/Střílet
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Odznačit
|
keybind.deselect.name = Odznačit
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Name:
|
editor.name = Name:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Karten Name
|
|||||||
editor.overwrite = [accent] Warnung! Dies überschreibt eine vorhandene Karte.
|
editor.overwrite = [accent] Warnung! Dies überschreibt eine vorhandene Karte.
|
||||||
editor.overwrite.confirm = [scarlet]Warnung![] Eine Karte mit diesem Namen existiert bereits. Bist du sicher, dass du sie überschreiben willst?
|
editor.overwrite.confirm = [scarlet]Warnung![] Eine Karte mit diesem Namen existiert bereits. Bist du sicher, dass du sie überschreiben willst?
|
||||||
editor.selectmap = Wähle eine Karte zum Laden:
|
editor.selectmap = Wähle eine Karte zum Laden:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Breite:
|
width = Breite:
|
||||||
height = Höhe:
|
height = Höhe:
|
||||||
menu = Menü
|
menu = Menü
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Kapazität
|
blocks.powercapacity = Kapazität
|
||||||
blocks.powershot = Stromverbrauch/Schuss
|
blocks.powershot = Stromverbrauch/Schuss
|
||||||
blocks.targetsair = Visiert Luft Einheiten an
|
blocks.targetsair = Visiert Luft Einheiten an
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Reichweite
|
blocks.shootrange = Reichweite
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Auto-Zielauswahl
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = kein
|
setting.fpscap.none = kein
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = Training
|
setting.difficulty.training = Training
|
||||||
setting.difficulty.easy = Leicht
|
setting.difficulty.easy = Leicht
|
||||||
setting.difficulty.normal = Normal
|
setting.difficulty.normal = Normal
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = X-Achse
|
keybind.move_x.name = X-Achse
|
||||||
keybind.move_y.name = Y-Achse
|
keybind.move_y.name = Y-Achse
|
||||||
keybind.select.name = Auswählen/Schießen
|
keybind.select.name = Auswählen/Schießen
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Auswahl aufheben
|
keybind.deselect.name = Auswahl aufheben
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Nombre:
|
editor.name = Nombre:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Nombre del Mapa:
|
|||||||
editor.overwrite = [accent]¡Advertencia!\nEsto sobrescribe un mapa ya existente.
|
editor.overwrite = [accent]¡Advertencia!\nEsto sobrescribe un mapa ya existente.
|
||||||
editor.overwrite.confirm = [scarlet]¡Advertencia![] Un mapa con ese nombre ya existe. ¿Estás seguro de querer sobrescribirlo?
|
editor.overwrite.confirm = [scarlet]¡Advertencia![] Un mapa con ese nombre ya existe. ¿Estás seguro de querer sobrescribirlo?
|
||||||
editor.selectmap = Selecciona un mapa para cargar:
|
editor.selectmap = Selecciona un mapa para cargar:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Ancho:
|
width = Ancho:
|
||||||
height = Alto:
|
height = Alto:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Capacidad de Energía
|
blocks.powercapacity = Capacidad de Energía
|
||||||
blocks.powershot = Energía/Disparo
|
blocks.powershot = Energía/Disparo
|
||||||
blocks.targetsair = Apunta al Aire
|
blocks.targetsair = Apunta al Aire
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Rango
|
blocks.shootrange = Rango
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Auto apuntado
|
|||||||
setting.fpscap.name = Máx FPS
|
setting.fpscap.name = Máx FPS
|
||||||
setting.fpscap.none = Nada
|
setting.fpscap.none = Nada
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = entrenamiento
|
setting.difficulty.training = entrenamiento
|
||||||
setting.difficulty.easy = fácil
|
setting.difficulty.easy = fácil
|
||||||
setting.difficulty.normal = normal
|
setting.difficulty.normal = normal
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = Mover x
|
keybind.move_x.name = Mover x
|
||||||
keybind.move_y.name = Mover y
|
keybind.move_y.name = Mover y
|
||||||
keybind.select.name = Seleccionar
|
keybind.select.name = Seleccionar
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deseleccionar
|
keybind.deselect.name = Deseleccionar
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Nom:
|
editor.name = Nom:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Nom de la carte²:
|
|||||||
editor.overwrite = [accent]Attention !\nCeci réécrit une carte existante .
|
editor.overwrite = [accent]Attention !\nCeci réécrit une carte existante .
|
||||||
editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire?
|
editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire?
|
||||||
editor.selectmap = Séléctionnez une carte:
|
editor.selectmap = Séléctionnez une carte:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Largeur:
|
width = Largeur:
|
||||||
height = Hauteur:
|
height = Hauteur:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = capacité d'énergie
|
blocks.powercapacity = capacité d'énergie
|
||||||
blocks.powershot = Énergie/Tir
|
blocks.powershot = Énergie/Tir
|
||||||
blocks.targetsair = Cible les unités aériennes
|
blocks.targetsair = Cible les unités aériennes
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Portée
|
blocks.shootrange = Portée
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Visée automatique
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = None
|
setting.fpscap.none = None
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = entraînement
|
setting.difficulty.training = entraînement
|
||||||
setting.difficulty.easy = facile
|
setting.difficulty.easy = facile
|
||||||
setting.difficulty.normal = normal
|
setting.difficulty.normal = normal
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = mouvement x
|
keybind.move_x.name = mouvement x
|
||||||
keybind.move_y.name = mouvement y
|
keybind.move_y.name = mouvement y
|
||||||
keybind.select.name = sélectionner
|
keybind.select.name = sélectionner
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Déselectionner
|
keybind.deselect.name = Déselectionner
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Nom:
|
editor.name = Nom:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Nom de la carte:
|
|||||||
editor.overwrite = [accent]Attention!\nCela écrasera une carte existante.
|
editor.overwrite = [accent]Attention!\nCela écrasera une carte existante.
|
||||||
editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire?
|
editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire?
|
||||||
editor.selectmap = Sélectionnez une carte à charger:
|
editor.selectmap = Sélectionnez une carte à charger:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Largeur:
|
width = Largeur:
|
||||||
height = Hauteur:
|
height = Hauteur:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Capacité d'énergie
|
blocks.powercapacity = Capacité d'énergie
|
||||||
blocks.powershot = Énergie/Tir
|
blocks.powershot = Énergie/Tir
|
||||||
blocks.targetsair = Cible les unités aériennes
|
blocks.targetsair = Cible les unités aériennes
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Portée
|
blocks.shootrange = Portée
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Visée automatique
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = Vide
|
setting.fpscap.none = Vide
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = Entraînement
|
setting.difficulty.training = Entraînement
|
||||||
setting.difficulty.easy = Facile
|
setting.difficulty.easy = Facile
|
||||||
setting.difficulty.normal = Normal
|
setting.difficulty.normal = Normal
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = Mouvement X
|
keybind.move_x.name = Mouvement X
|
||||||
keybind.move_y.name = Mouvement Y
|
keybind.move_y.name = Mouvement Y
|
||||||
keybind.select.name = Sélectionner/Tirer
|
keybind.select.name = Sélectionner/Tirer
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Déselectionner
|
keybind.deselect.name = Déselectionner
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Name:
|
editor.name = Name:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Nama Peta:
|
|||||||
editor.overwrite = [accent]Peringatan!\nIni akan mengganti peta yang ada.
|
editor.overwrite = [accent]Peringatan!\nIni akan mengganti peta yang ada.
|
||||||
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||||
editor.selectmap = Pilih peta yang akan dimuat:
|
editor.selectmap = Pilih peta yang akan dimuat:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Lebar:
|
width = Lebar:
|
||||||
height = Tinggi:
|
height = Tinggi:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Kapasitas Tenaga
|
blocks.powercapacity = Kapasitas Tenaga
|
||||||
blocks.powershot = Tenaga/tembakan
|
blocks.powershot = Tenaga/tembakan
|
||||||
blocks.targetsair = Targets Air
|
blocks.targetsair = Targets Air
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Range
|
blocks.shootrange = Range
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Auto-Target
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = None
|
setting.fpscap.none = None
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = training
|
setting.difficulty.training = training
|
||||||
setting.difficulty.easy = mudah
|
setting.difficulty.easy = mudah
|
||||||
setting.difficulty.normal = normal
|
setting.difficulty.normal = normal
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = gerak_x
|
keybind.move_x.name = gerak_x
|
||||||
keybind.move_y.name = gerak_y
|
keybind.move_y.name = gerak_y
|
||||||
keybind.select.name = pilih
|
keybind.select.name = pilih
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Nome:
|
editor.name = Nome:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Nome Mappa:
|
|||||||
editor.overwrite = [Accent]Attenzione!\nQuesto sovrascrive una mappa esistente.
|
editor.overwrite = [Accent]Attenzione!\nQuesto sovrascrive una mappa esistente.
|
||||||
editor.overwrite.confirm = [scarlet]Attenzione![] Una mappa con questo nome esiste già. Sei sicuro di volerla sovrascrivere?
|
editor.overwrite.confirm = [scarlet]Attenzione![] Una mappa con questo nome esiste già. Sei sicuro di volerla sovrascrivere?
|
||||||
editor.selectmap = Seleziona una mappa da caricare:
|
editor.selectmap = Seleziona una mappa da caricare:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Larghezza:
|
width = Larghezza:
|
||||||
height = Altezza:
|
height = Altezza:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Capacità Energetica
|
blocks.powercapacity = Capacità Energetica
|
||||||
blocks.powershot = Danno/Colpo
|
blocks.powershot = Danno/Colpo
|
||||||
blocks.targetsair = Attacca nemici aerei
|
blocks.targetsair = Attacca nemici aerei
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Raggio
|
blocks.shootrange = Raggio
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Auto-Target
|
|||||||
setting.fpscap.name = Limite FPS
|
setting.fpscap.name = Limite FPS
|
||||||
setting.fpscap.none = Niente
|
setting.fpscap.none = Niente
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = training
|
setting.difficulty.training = training
|
||||||
setting.difficulty.easy = facile
|
setting.difficulty.easy = facile
|
||||||
setting.difficulty.normal = medio
|
setting.difficulty.normal = medio
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = Sposta_x
|
keybind.move_x.name = Sposta_x
|
||||||
keybind.move_y.name = Sposta_y
|
keybind.move_y.name = Sposta_y
|
||||||
keybind.select.name = seleziona
|
keybind.select.name = seleziona
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -194,17 +194,23 @@ editor.oregen.info = 鉱石の生成:
|
|||||||
editor.mapinfo = マップ情報
|
editor.mapinfo = マップ情報
|
||||||
editor.author = 作者:
|
editor.author = 作者:
|
||||||
editor.description = 説明:
|
editor.description = 説明:
|
||||||
editor.waves = ウェーブ:
|
editor.waves = Waves:
|
||||||
waves.title = ウェーブ
|
waves.title = Waves
|
||||||
waves.remove = 削除
|
waves.remove = Remove
|
||||||
waves.never = <永久>
|
waves.never = <never>
|
||||||
waves.every =
|
waves.every = every
|
||||||
waves.waves = ウェーブごとに出現
|
waves.waves = wave(s)
|
||||||
waves.perspawn = スポーン
|
waves.perspawn = per spawn
|
||||||
waves.to = から
|
waves.to = to
|
||||||
waves.boss = ボス
|
waves.boss = Boss
|
||||||
editor.default = [LIGHT_GRAY]<デフォルト>
|
waves.preview = Preview
|
||||||
edit = 編集...
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
|
edit = Edit...
|
||||||
editor.name = 名前:
|
editor.name = 名前:
|
||||||
editor.teams = チーム
|
editor.teams = チーム
|
||||||
editor.elevation = 標高
|
editor.elevation = 標高
|
||||||
@@ -242,22 +248,26 @@ editor.mapname = マップ名:
|
|||||||
editor.overwrite = [accent]警告!\n存在するマップを上書きします。
|
editor.overwrite = [accent]警告!\n存在するマップを上書きします。
|
||||||
editor.overwrite.confirm = [scarlet]警告![] この名前のマップがすでに存在します。上書きしてもよろしいですか?
|
editor.overwrite.confirm = [scarlet]警告![] この名前のマップがすでに存在します。上書きしてもよろしいですか?
|
||||||
editor.selectmap = 読み込むマップを選択:
|
editor.selectmap = 読み込むマップを選択:
|
||||||
filters.empty = [LIGHT_GRAY]フィルターが設定されていません!下のボタンからフィルターを追加してください。
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = ゆがみ
|
filter.distort = Distort
|
||||||
filter.noise = ノイズ
|
filter.noise = Noise
|
||||||
filter.ore = 鉱石
|
filter.ore = Ore
|
||||||
filter.rivernoise = リバーノイズ
|
filter.rivernoise = River Noise
|
||||||
filter.scatter = 分散
|
filter.scatter = Scatter
|
||||||
filter.terrain = 地形
|
filter.terrain = Terrain
|
||||||
filter.option.scale = スケール
|
filter.option.scale = Scale
|
||||||
filter.option.mag = マグニチュード
|
filter.option.chance = Chance
|
||||||
filter.option.threshold = スレッシュホールド
|
filter.option.mag = Magnitude
|
||||||
filter.option.circle-scale = サークルスケール
|
filter.option.threshold = Threshold
|
||||||
filter.option.octaves = オクターブ
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.falloff = フォールオフ
|
filter.option.octaves = Octaves
|
||||||
filter.option.floor = 地面
|
filter.option.falloff = Falloff
|
||||||
filter.option.wall = 壁
|
filter.option.block = Block
|
||||||
filter.option.ore = 鉱石
|
filter.option.floor = Floor
|
||||||
|
filter.option.wall = Wall
|
||||||
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = 幅:
|
width = 幅:
|
||||||
height = 高さ:
|
height = 高さ:
|
||||||
menu = メニュー
|
menu = メニュー
|
||||||
@@ -336,8 +346,9 @@ blocks.poweroutput = 電力発電量: {0}
|
|||||||
blocks.powercapacity = 電力容量
|
blocks.powercapacity = 電力容量
|
||||||
blocks.powershot = 電力/ショット
|
blocks.powershot = 電力/ショット
|
||||||
blocks.targetsair = 対空攻撃
|
blocks.targetsair = 対空攻撃
|
||||||
blocks.items = アイテム: {0}
|
blocks.targetsground = Targets Ground
|
||||||
blocks.itemsmoved = 輸送速度
|
blocks.items = Items: {0}
|
||||||
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = 範囲
|
blocks.shootrange = 範囲
|
||||||
blocks.size = 大きさ
|
blocks.size = 大きさ
|
||||||
blocks.liquidcapacity = 液体容量
|
blocks.liquidcapacity = 液体容量
|
||||||
@@ -405,6 +416,7 @@ setting.autotarget.name = 自動ターゲット
|
|||||||
setting.fpscap.name = 最大FPS
|
setting.fpscap.name = 最大FPS
|
||||||
setting.fpscap.none = なし
|
setting.fpscap.none = なし
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = トレーニング
|
setting.difficulty.training = トレーニング
|
||||||
setting.difficulty.easy = イージー
|
setting.difficulty.easy = イージー
|
||||||
setting.difficulty.normal = ノーマル
|
setting.difficulty.normal = ノーマル
|
||||||
@@ -441,8 +453,9 @@ keybind.screenshot.name = スクリーンショット
|
|||||||
keybind.move_x.name = 左右移動
|
keybind.move_x.name = 左右移動
|
||||||
keybind.move_y.name = 上下移動
|
keybind.move_y.name = 上下移動
|
||||||
keybind.select.name = 選択/ショット
|
keybind.select.name = 選択/ショット
|
||||||
keybind.pick.name = ブロックを選ぶ
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.break_block.name = ブロックを破壊
|
keybind.pick.name = Pick Block
|
||||||
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = 選択解除
|
keybind.deselect.name = 選択解除
|
||||||
keybind.shoot.name = ショット
|
keybind.shoot.name = ショット
|
||||||
keybind.zoom_hold.name = ズーム長押し
|
keybind.zoom_hold.name = ズーム長押し
|
||||||
@@ -554,24 +567,26 @@ mech.ability = [LIGHT_GRAY]能力: {0}
|
|||||||
liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0}
|
liquid.heatcapacity = [LIGHT_GRAY]熱容量: {0}
|
||||||
liquid.viscosity = [LIGHT_GRAY]粘度: {0}
|
liquid.viscosity = [LIGHT_GRAY]粘度: {0}
|
||||||
liquid.temperature = [LIGHT_GRAY]温度: {0}
|
liquid.temperature = [LIGHT_GRAY]温度: {0}
|
||||||
block.grass.name = 草
|
block.grass.name = Grass
|
||||||
block.salt.name = 岩塩氷河
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = 砂岩
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = 胞子の松の木
|
block.spore-pine.name = Spore Pine
|
||||||
block.shale.name = 泥板岩
|
block.sporerocks.name = Spore Rocks
|
||||||
block.shale-boulder.name = 泥板岩の丸石
|
block.rock.name = Rock
|
||||||
block.moss.name = コケ
|
block.shale.name = Shale
|
||||||
block.spore-moss.name = 胞子のコケ
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.shalerocks.name = 泥板岩の岩
|
block.moss.name = Moss
|
||||||
block.scrap-wall.name = スクラップの壁
|
block.spore-moss.name = Spore Moss
|
||||||
block.scrap-wall-large.name = 大きなスクラップの壁
|
block.shalerocks.name = Shale Rocks
|
||||||
block.scrap-wall-huge.name = とても大きなスクラップの壁
|
block.scrap-wall.name = Scrap Wall
|
||||||
block.scrap-wall-gigantic.name = 巨大なスクラップの壁
|
block.scrap-wall-large.name = Large Scrap Wall
|
||||||
block.thruster.name = スラスター
|
block.scrap-wall-huge.name = Huge Scrap Wall
|
||||||
block.kiln.name = かまど
|
block.scrap-wall-gigantic.name = Gigantic Scrap Wall
|
||||||
block.kiln.description = 砂と鉛を溶かしてメタガラスを生成します。少量の電力が必要です。
|
block.thruster.name = Thruster
|
||||||
block.graphite-press.name = 黒鉛圧縮機
|
block.kiln.name = Kiln
|
||||||
block.multi-press.name = 複合圧縮機
|
block.kiln.description = Smelts sand and lead into metaglass. Requires small amounts of power.
|
||||||
|
block.graphite-press.name = Graphite Press
|
||||||
|
block.multi-press.name = Multi-Press
|
||||||
block.constructing = {0}\n[LIGHT_GRAY](建設中)
|
block.constructing = {0}\n[LIGHT_GRAY](建設中)
|
||||||
block.spawn.name = 敵のスポーン
|
block.spawn.name = 敵のスポーン
|
||||||
block.core-shard.name = コア: シャード
|
block.core-shard.name = コア: シャード
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = 이름:
|
editor.name = 이름:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = 맵 이름:
|
|||||||
editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다.
|
editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다.
|
||||||
editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까?
|
editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까?
|
||||||
editor.selectmap = 불러올 맵 선택:
|
editor.selectmap = 불러올 맵 선택:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = 넓이:
|
width = 넓이:
|
||||||
height = 높이:
|
height = 높이:
|
||||||
menu = 메뉴
|
menu = 메뉴
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = 전력 출력: {0}
|
|||||||
blocks.powercapacity = 전력 용량
|
blocks.powercapacity = 전력 용량
|
||||||
blocks.powershot = 1발당 전력 소모량
|
blocks.powershot = 1발당 전력 소모량
|
||||||
blocks.targetsair = 공중공격 가능
|
blocks.targetsair = 공중공격 가능
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = 이동 속도
|
blocks.itemsmoved = 이동 속도
|
||||||
blocks.shootrange = 사거리
|
blocks.shootrange = 사거리
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = 자동 조준
|
|||||||
setting.fpscap.name = 최대 FPS
|
setting.fpscap.name = 최대 FPS
|
||||||
setting.fpscap.none = 없음
|
setting.fpscap.none = 없음
|
||||||
setting.fpscap.text = FPS
|
setting.fpscap.text = FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = 훈련
|
setting.difficulty.training = 훈련
|
||||||
setting.difficulty.easy = 쉬움
|
setting.difficulty.easy = 쉬움
|
||||||
setting.difficulty.normal = 보통
|
setting.difficulty.normal = 보통
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = 맵 스크린샷
|
|||||||
keybind.move_x.name = 오른쪽/왼쪽 이동
|
keybind.move_x.name = 오른쪽/왼쪽 이동
|
||||||
keybind.move_y.name = 위 / 아래 중간
|
keybind.move_y.name = 위 / 아래 중간
|
||||||
keybind.select.name = 선택
|
keybind.select.name = 선택
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = 블록 선택
|
keybind.pick.name = 블록 선택
|
||||||
keybind.break_block.name = 블록 파괴
|
keybind.break_block.name = 블록 파괴
|
||||||
keybind.deselect.name = 선택해제
|
keybind.deselect.name = 선택해제
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Name:
|
editor.name = Name:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Map Name:
|
|||||||
editor.overwrite = [accent]Warning!\nThis overwrites an existing map.
|
editor.overwrite = [accent]Warning!\nThis overwrites an existing map.
|
||||||
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||||
editor.selectmap = Select a map to load:
|
editor.selectmap = Select a map to load:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Width:
|
width = Width:
|
||||||
height = Height:
|
height = Height:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Power Capacity
|
blocks.powercapacity = Power Capacity
|
||||||
blocks.powershot = Power/Shot
|
blocks.powershot = Power/Shot
|
||||||
blocks.targetsair = Targets Air
|
blocks.targetsair = Targets Air
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Range
|
blocks.shootrange = Range
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Auto-Target
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = None
|
setting.fpscap.none = None
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = training
|
setting.difficulty.training = training
|
||||||
setting.difficulty.easy = easy
|
setting.difficulty.easy = easy
|
||||||
setting.difficulty.normal = normal
|
setting.difficulty.normal = normal
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = Move x
|
keybind.move_x.name = Move x
|
||||||
keybind.move_y.name = Move y
|
keybind.move_y.name = Move y
|
||||||
keybind.select.name = Select/Shoot
|
keybind.select.name = Select/Shoot
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Nazwa:
|
editor.name = Nazwa:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Nazwa mapy:
|
|||||||
editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy.
|
editor.overwrite = [accent]Uwaga!\nSpowoduje to nadpisanie istniejącej mapy.
|
||||||
editor.overwrite.confirm = [scarlet]Uwaga![] Mapa pod tą nazwą już istnieje. Jesteś pewny, że chcesz ją nadpisać?
|
editor.overwrite.confirm = [scarlet]Uwaga![] Mapa pod tą nazwą już istnieje. Jesteś pewny, że chcesz ją nadpisać?
|
||||||
editor.selectmap = Wybierz mapę do załadowania:
|
editor.selectmap = Wybierz mapę do załadowania:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Szerokość:
|
width = Szerokość:
|
||||||
height = Wysokość:
|
height = Wysokość:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Pojemność mocy
|
blocks.powercapacity = Pojemność mocy
|
||||||
blocks.powershot = moc/strzał
|
blocks.powershot = moc/strzał
|
||||||
blocks.targetsair = Może namierzać wrogów powietrznych
|
blocks.targetsair = Może namierzać wrogów powietrznych
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Zasięg
|
blocks.shootrange = Zasięg
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Automatyczne Celowanie
|
|||||||
setting.fpscap.name = Maksymalny FPS
|
setting.fpscap.name = Maksymalny FPS
|
||||||
setting.fpscap.none = Nieograniczone
|
setting.fpscap.none = Nieograniczone
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = trening
|
setting.difficulty.training = trening
|
||||||
setting.difficulty.easy = łatwy
|
setting.difficulty.easy = łatwy
|
||||||
setting.difficulty.normal = normalny
|
setting.difficulty.normal = normalny
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Zrzut ekranu mapy
|
|||||||
keybind.move_x.name = Poruszanie w poziomie
|
keybind.move_x.name = Poruszanie w poziomie
|
||||||
keybind.move_y.name = Poruszanie w pionie
|
keybind.move_y.name = Poruszanie w pionie
|
||||||
keybind.select.name = Zaznacz
|
keybind.select.name = Zaznacz
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Wybierz Blok
|
keybind.pick.name = Wybierz Blok
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Odznacz
|
keybind.deselect.name = Odznacz
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Nome:
|
editor.name = Nome:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Nome do Mapa:
|
|||||||
editor.overwrite = [accent]Aviso!\nIsso Subistitui um mapa existente.
|
editor.overwrite = [accent]Aviso!\nIsso Subistitui um mapa existente.
|
||||||
editor.overwrite.confirm = [scarlet]Aviso![] Um mapa com esse nome já existe. Tem certeza que deseja substituir?
|
editor.overwrite.confirm = [scarlet]Aviso![] Um mapa com esse nome já existe. Tem certeza que deseja substituir?
|
||||||
editor.selectmap = Selecione uma mapa para carregar:
|
editor.selectmap = Selecione uma mapa para carregar:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Largura:
|
width = Largura:
|
||||||
height = Altura:
|
height = Altura:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Capacidade de Energia
|
blocks.powercapacity = Capacidade de Energia
|
||||||
blocks.powershot = Energia/tiro
|
blocks.powershot = Energia/tiro
|
||||||
blocks.targetsair = Mirar no ar
|
blocks.targetsair = Mirar no ar
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Alcance
|
blocks.shootrange = Alcance
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Alvo automatico
|
|||||||
setting.fpscap.name = FPS Maximo
|
setting.fpscap.name = FPS Maximo
|
||||||
setting.fpscap.none = Nenhum
|
setting.fpscap.none = Nenhum
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = treinamento
|
setting.difficulty.training = treinamento
|
||||||
setting.difficulty.easy = Fácil
|
setting.difficulty.easy = Fácil
|
||||||
setting.difficulty.normal = Normal
|
setting.difficulty.normal = Normal
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = mover_x
|
keybind.move_x.name = mover_x
|
||||||
keybind.move_y.name = mover_y
|
keybind.move_y.name = mover_y
|
||||||
keybind.select.name = selecionar
|
keybind.select.name = selecionar
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselecionar
|
keybind.deselect.name = Deselecionar
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Название:
|
editor.name = Название:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Название карты:
|
|||||||
editor.overwrite = [accent]Внимание! \nЭто перезапишет уже существующую карту.
|
editor.overwrite = [accent]Внимание! \nЭто перезапишет уже существующую карту.
|
||||||
editor.overwrite.confirm = [scarlet]Осторожно![] Карта с таким названием уже существует. Вы действительно хотите её перезаписать?
|
editor.overwrite.confirm = [scarlet]Осторожно![] Карта с таким названием уже существует. Вы действительно хотите её перезаписать?
|
||||||
editor.selectmap = Выберите карту для загрузки:
|
editor.selectmap = Выберите карту для загрузки:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Ширина:
|
width = Ширина:
|
||||||
height = Высота:
|
height = Высота:
|
||||||
menu = Меню
|
menu = Меню
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Выходная энергия: {0}
|
|||||||
blocks.powercapacity = Вместимость энергии
|
blocks.powercapacity = Вместимость энергии
|
||||||
blocks.powershot = Энергия/выстрел
|
blocks.powershot = Энергия/выстрел
|
||||||
blocks.targetsair = Атакует воздуш. юнитов
|
blocks.targetsair = Атакует воздуш. юнитов
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Скорость перемещения
|
blocks.itemsmoved = Скорость перемещения
|
||||||
blocks.shootrange = Радиус действия
|
blocks.shootrange = Радиус действия
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Авто-цель
|
|||||||
setting.fpscap.name = Макс. FPS
|
setting.fpscap.name = Макс. FPS
|
||||||
setting.fpscap.none = Неограниченный
|
setting.fpscap.none = Неограниченный
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = обучение
|
setting.difficulty.training = обучение
|
||||||
setting.difficulty.easy = легко
|
setting.difficulty.easy = легко
|
||||||
setting.difficulty.normal = нормально
|
setting.difficulty.normal = нормально
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Скриншот карты
|
|||||||
keybind.move_x.name = Движение по оси x
|
keybind.move_x.name = Движение по оси x
|
||||||
keybind.move_y.name = Движение по оси y
|
keybind.move_y.name = Движение по оси y
|
||||||
keybind.select.name = Выбор/Выстрел
|
keybind.select.name = Выбор/Выстрел
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Выбрать блок
|
keybind.pick.name = Выбрать блок
|
||||||
keybind.break_block.name = Разрушить блок
|
keybind.break_block.name = Разрушить блок
|
||||||
keybind.deselect.name = Отмена
|
keybind.deselect.name = Отмена
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = isim:
|
editor.name = isim:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Harita ismi:
|
|||||||
editor.overwrite = [accent]Dikkat et!\nBu bir haritanin uzerinden cececek.
|
editor.overwrite = [accent]Dikkat et!\nBu bir haritanin uzerinden cececek.
|
||||||
editor.overwrite.confirm = [scarlet]uyari![] bu isimde bir harita zaten var. Uzerinden gececek misin?
|
editor.overwrite.confirm = [scarlet]uyari![] bu isimde bir harita zaten var. Uzerinden gececek misin?
|
||||||
editor.selectmap = Yukleyecek bir harita sec:
|
editor.selectmap = Yukleyecek bir harita sec:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Genislik:
|
width = Genislik:
|
||||||
height = Yukseklik:
|
height = Yukseklik:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Guc kapasitesi
|
blocks.powercapacity = Guc kapasitesi
|
||||||
blocks.powershot = Guc/Saldiri hizi
|
blocks.powershot = Guc/Saldiri hizi
|
||||||
blocks.targetsair = Havayi hedef alir mi?
|
blocks.targetsair = Havayi hedef alir mi?
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Menzil
|
blocks.shootrange = Menzil
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Auto-Target
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = Yok
|
setting.fpscap.none = Yok
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = training
|
setting.difficulty.training = training
|
||||||
setting.difficulty.easy = kolay
|
setting.difficulty.easy = kolay
|
||||||
setting.difficulty.normal = orta
|
setting.difficulty.normal = orta
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = Sol/Sag hareket
|
keybind.move_x.name = Sol/Sag hareket
|
||||||
keybind.move_y.name = Yukari/asagi hareket
|
keybind.move_y.name = Yukari/asagi hareket
|
||||||
keybind.select.name = Sec/silahi sik
|
keybind.select.name = Sec/silahi sik
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Eldeki yapiyi birak
|
keybind.deselect.name = Eldeki yapiyi birak
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Name:
|
editor.name = Name:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Harita Adı
|
|||||||
editor.overwrite = [Vurgu] Uyarı! Bu mevcut bir haritanın üzerine yazar.
|
editor.overwrite = [Vurgu] Uyarı! Bu mevcut bir haritanın üzerine yazar.
|
||||||
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||||
editor.selectmap = Yüklenecek bir harita seçin:
|
editor.selectmap = Yüklenecek bir harita seçin:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Genişliği:
|
width = Genişliği:
|
||||||
height = Boy:
|
height = Boy:
|
||||||
menu = Menü
|
menu = Menü
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = Güç kapasitesi
|
blocks.powercapacity = Güç kapasitesi
|
||||||
blocks.powershot = Güç / atış
|
blocks.powershot = Güç / atış
|
||||||
blocks.targetsair = Targets Air
|
blocks.targetsair = Targets Air
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = Range
|
blocks.shootrange = Range
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Auto-Target
|
|||||||
setting.fpscap.name = Max FPS
|
setting.fpscap.name = Max FPS
|
||||||
setting.fpscap.none = None
|
setting.fpscap.none = None
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = training
|
setting.difficulty.training = training
|
||||||
setting.difficulty.easy = kolay
|
setting.difficulty.easy = kolay
|
||||||
setting.difficulty.normal = orta
|
setting.difficulty.normal = orta
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Map Screenshot
|
|||||||
keybind.move_x.name = sağ / sol
|
keybind.move_x.name = sağ / sol
|
||||||
keybind.move_y.name = yukarı / aşağı
|
keybind.move_y.name = yukarı / aşağı
|
||||||
keybind.select.name = seçmek
|
keybind.select.name = seçmek
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = Назва:
|
editor.name = Назва:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = Название карты:
|
|||||||
editor.overwrite = [accent]Попередження!\nЦе перезаписує існуючу карту.
|
editor.overwrite = [accent]Попередження!\nЦе перезаписує існуючу карту.
|
||||||
editor.overwrite.confirm = [scarlet]Попередження![] Карта з такою назвою вже існує. Ви впевнені, що хочете переписати її?
|
editor.overwrite.confirm = [scarlet]Попередження![] Карта з такою назвою вже існує. Ви впевнені, що хочете переписати її?
|
||||||
editor.selectmap = Виберіть мапу для завантаження:
|
editor.selectmap = Виберіть мапу для завантаження:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = Ширина:
|
width = Ширина:
|
||||||
height = Висота:
|
height = Висота:
|
||||||
menu = Меню
|
menu = Меню
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Вихідна енергія: {0}
|
|||||||
blocks.powercapacity = Місткість енергії
|
blocks.powercapacity = Місткість енергії
|
||||||
blocks.powershot = Енергія/постріл
|
blocks.powershot = Енергія/постріл
|
||||||
blocks.targetsair = Атакуе повітряних ворогів
|
blocks.targetsair = Атакуе повітряних ворогів
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Швидкість переміщення
|
blocks.itemsmoved = Швидкість переміщення
|
||||||
blocks.shootrange = Діапазон дії
|
blocks.shootrange = Діапазон дії
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = Авто-ціль
|
|||||||
setting.fpscap.name = Макс. FPS
|
setting.fpscap.name = Макс. FPS
|
||||||
setting.fpscap.none = Необмежений
|
setting.fpscap.none = Необмежений
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = навчання
|
setting.difficulty.training = навчання
|
||||||
setting.difficulty.easy = легка
|
setting.difficulty.easy = легка
|
||||||
setting.difficulty.normal = нормальна
|
setting.difficulty.normal = нормальна
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = Скріншот мапи
|
|||||||
keybind.move_x.name = Рух по осі x
|
keybind.move_x.name = Рух по осі x
|
||||||
keybind.move_y.name = Рух по осі x
|
keybind.move_y.name = Рух по осі x
|
||||||
keybind.select.name = Вибір/Постріл
|
keybind.select.name = Вибір/Постріл
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Вибрати блок
|
keybind.pick.name = Вибрати блок
|
||||||
keybind.break_block.name = Зламати блок
|
keybind.break_block.name = Зламати блок
|
||||||
keybind.deselect.name = Скасувати
|
keybind.deselect.name = Скасувати
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = 名字:
|
editor.name = 名字:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = 地图名字:
|
|||||||
editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。
|
editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。
|
||||||
editor.overwrite.confirm = [scarlet]警告![] 存在同名地图,确定要覆盖?
|
editor.overwrite.confirm = [scarlet]警告![] 存在同名地图,确定要覆盖?
|
||||||
editor.selectmap = 选择一个地图加载:
|
editor.selectmap = 选择一个地图加载:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = 宽度:
|
width = 宽度:
|
||||||
height = 高度:
|
height = 高度:
|
||||||
menu = 菜单
|
menu = 菜单
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = 能量容量
|
blocks.powercapacity = 能量容量
|
||||||
blocks.powershot = 能量/发射
|
blocks.powershot = 能量/发射
|
||||||
blocks.targetsair = 攻击空中单位
|
blocks.targetsair = 攻击空中单位
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = 移动速度
|
blocks.itemsmoved = 移动速度
|
||||||
blocks.shootrange = 范围
|
blocks.shootrange = 范围
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = 自动发射
|
|||||||
setting.fpscap.name = 最高 FPS
|
setting.fpscap.name = 最高 FPS
|
||||||
setting.fpscap.none = 无
|
setting.fpscap.none = 无
|
||||||
setting.fpscap.text = {0} FPS
|
setting.fpscap.text = {0} FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = 训练
|
setting.difficulty.training = 训练
|
||||||
setting.difficulty.easy = 简单
|
setting.difficulty.easy = 简单
|
||||||
setting.difficulty.normal = 普通
|
setting.difficulty.normal = 普通
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = 地图截图
|
|||||||
keybind.move_x.name = 水平移动
|
keybind.move_x.name = 水平移动
|
||||||
keybind.move_y.name = 垂直移动
|
keybind.move_y.name = 垂直移动
|
||||||
keybind.select.name = 选择
|
keybind.select.name = 选择
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = 选择方块
|
keybind.pick.name = 选择方块
|
||||||
keybind.break_block.name = 破坏方块
|
keybind.break_block.name = 破坏方块
|
||||||
keybind.deselect.name = 取消
|
keybind.deselect.name = 取消
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
@@ -201,6 +201,12 @@ waves.waves = wave(s)
|
|||||||
waves.perspawn = per spawn
|
waves.perspawn = per spawn
|
||||||
waves.to = to
|
waves.to = to
|
||||||
waves.boss = Boss
|
waves.boss = Boss
|
||||||
|
waves.preview = Preview
|
||||||
|
waves.edit = Edit...
|
||||||
|
waves.copy = Copy to Clipboard
|
||||||
|
waves.load = Load from Clipboard
|
||||||
|
waves.invalid = Invalid waves in clipboard.
|
||||||
|
waves.copied = Waves copied.
|
||||||
editor.default = [LIGHT_GRAY]<Default>
|
editor.default = [LIGHT_GRAY]<Default>
|
||||||
edit = Edit...
|
edit = Edit...
|
||||||
editor.name = 名稱:
|
editor.name = 名稱:
|
||||||
@@ -240,6 +246,7 @@ editor.mapname = 地圖名稱:
|
|||||||
editor.overwrite = [accent]警告!這將會覆蓋現有的地圖。
|
editor.overwrite = [accent]警告!這將會覆蓋現有的地圖。
|
||||||
editor.overwrite.confirm = [scarlet]警告![]同名地圖存在,確定要覆蓋現有地圖?
|
editor.overwrite.confirm = [scarlet]警告![]同名地圖存在,確定要覆蓋現有地圖?
|
||||||
editor.selectmap = 選取要載入的地圖:
|
editor.selectmap = 選取要載入的地圖:
|
||||||
|
filters.empty = [LIGHT_GRAY]No filters! Add one with the button below.
|
||||||
filter.distort = Distort
|
filter.distort = Distort
|
||||||
filter.noise = Noise
|
filter.noise = Noise
|
||||||
filter.ore = Ore
|
filter.ore = Ore
|
||||||
@@ -247,14 +254,18 @@ filter.rivernoise = River Noise
|
|||||||
filter.scatter = Scatter
|
filter.scatter = Scatter
|
||||||
filter.terrain = Terrain
|
filter.terrain = Terrain
|
||||||
filter.option.scale = Scale
|
filter.option.scale = Scale
|
||||||
|
filter.option.chance = Chance
|
||||||
filter.option.mag = Magnitude
|
filter.option.mag = Magnitude
|
||||||
filter.option.threshold = Threshold
|
filter.option.threshold = Threshold
|
||||||
filter.option.circle-scale = Circle Scale
|
filter.option.circle-scale = Circle Scale
|
||||||
filter.option.octaves = Octaves
|
filter.option.octaves = Octaves
|
||||||
filter.option.falloff = Falloff
|
filter.option.falloff = Falloff
|
||||||
|
filter.option.block = Block
|
||||||
filter.option.floor = Floor
|
filter.option.floor = Floor
|
||||||
filter.option.wall = Wall
|
filter.option.wall = Wall
|
||||||
filter.option.ore = Ore
|
filter.option.ore = Ore
|
||||||
|
filter.option.floor2 = Secondary Floor
|
||||||
|
filter.option.threshold2 = Secondary Threshold
|
||||||
width = 寬度:
|
width = 寬度:
|
||||||
height = 長度:
|
height = 長度:
|
||||||
menu = 主選單
|
menu = 主選單
|
||||||
@@ -333,6 +344,7 @@ blocks.poweroutput = Power Output: {0}
|
|||||||
blocks.powercapacity = 蓄電量
|
blocks.powercapacity = 蓄電量
|
||||||
blocks.powershot = 能量/射擊
|
blocks.powershot = 能量/射擊
|
||||||
blocks.targetsair = 攻擊空中目標
|
blocks.targetsair = 攻擊空中目標
|
||||||
|
blocks.targetsground = Targets Ground
|
||||||
blocks.items = Items: {0}
|
blocks.items = Items: {0}
|
||||||
blocks.itemsmoved = Move Speed
|
blocks.itemsmoved = Move Speed
|
||||||
blocks.shootrange = 範圍
|
blocks.shootrange = 範圍
|
||||||
@@ -402,6 +414,7 @@ setting.autotarget.name = 自動射擊
|
|||||||
setting.fpscap.name = 最大FPS
|
setting.fpscap.name = 最大FPS
|
||||||
setting.fpscap.none = 没有
|
setting.fpscap.none = 没有
|
||||||
setting.fpscap.text = {0}FPS
|
setting.fpscap.text = {0}FPS
|
||||||
|
setting.swapdiagonal.name = Always Diagonal Placement
|
||||||
setting.difficulty.training = 訓練
|
setting.difficulty.training = 訓練
|
||||||
setting.difficulty.easy = 簡單
|
setting.difficulty.easy = 簡單
|
||||||
setting.difficulty.normal = 普通
|
setting.difficulty.normal = 普通
|
||||||
@@ -438,6 +451,7 @@ keybind.screenshot.name = 地圖截圖
|
|||||||
keybind.move_x.name = 水平移動
|
keybind.move_x.name = 水平移動
|
||||||
keybind.move_y.name = 垂直移動
|
keybind.move_y.name = 垂直移動
|
||||||
keybind.select.name = 選取
|
keybind.select.name = 選取
|
||||||
|
keybind.diagonal_placement.name = Diagonal Placement
|
||||||
keybind.pick.name = Pick Block
|
keybind.pick.name = Pick Block
|
||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = 取消選取
|
keybind.deselect.name = 取消選取
|
||||||
@@ -555,6 +569,8 @@ block.grass.name = Grass
|
|||||||
block.salt.name = Salt
|
block.salt.name = Salt
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Sand Rocks
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
|
block.sporerocks.name = Spore Rocks
|
||||||
|
block.rock.name = Rock
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Moss
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 500 B After Width: | Height: | Size: 501 B |
|
Before Width: | Height: | Size: 1.0 MiB After Width: | Height: | Size: 1.1 MiB |
|
Before Width: | Height: | Size: 238 KiB After Width: | Height: | Size: 239 KiB |
|
Before Width: | Height: | Size: 192 KiB After Width: | Height: | Size: 209 KiB |
@@ -66,6 +66,8 @@ public class Vars{
|
|||||||
public static final float finalWorldBounds = worldBounds + 500;
|
public static final float finalWorldBounds = worldBounds + 500;
|
||||||
/**ticks spent out of bound until self destruct.*/
|
/**ticks spent out of bound until self destruct.*/
|
||||||
public static final float boundsCountdown = 60*7;
|
public static final float boundsCountdown = 60*7;
|
||||||
|
/**for map generator dialog*/
|
||||||
|
public static boolean updateEditorOnChange = false;
|
||||||
/**size of tiles in units*/
|
/**size of tiles in units*/
|
||||||
public static final int tilesize = 8;
|
public static final int tilesize = 8;
|
||||||
/**all choosable player colors in join/host dialog*/
|
/**all choosable player colors in join/host dialog*/
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ public class WaveSpawner{
|
|||||||
private Array<FlyerSpawn> flySpawns = new Array<>();
|
private Array<FlyerSpawn> flySpawns = new Array<>();
|
||||||
private Array<GroundSpawn> groundSpawns = new Array<>();
|
private Array<GroundSpawn> groundSpawns = new Array<>();
|
||||||
private IntArray loadedSpawns = new IntArray();
|
private IntArray loadedSpawns = new IntArray();
|
||||||
|
private boolean spawning = false;
|
||||||
|
|
||||||
public WaveSpawner(){
|
public WaveSpawner(){
|
||||||
Events.on(WorldLoadEvent.class, e -> reset());
|
Events.on(WorldLoadEvent.class, e -> reset());
|
||||||
@@ -57,6 +58,7 @@ public class WaveSpawner{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void spawnEnemies(){
|
public void spawnEnemies(){
|
||||||
|
spawning = true;
|
||||||
|
|
||||||
for(SpawnGroup group : state.rules.spawns){
|
for(SpawnGroup group : state.rules.spawns){
|
||||||
int spawned = group.getUnitsSpawned(state.wave);
|
int spawned = group.getUnitsSpawned(state.wave);
|
||||||
@@ -90,7 +92,7 @@ public class WaveSpawner{
|
|||||||
BaseUnit unit = group.createUnit(waveTeam);
|
BaseUnit unit = group.createUnit(waveTeam);
|
||||||
unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y);
|
unit.set(spawnX + Tmp.v1.x, spawnY + Tmp.v1.y);
|
||||||
|
|
||||||
Time.run(i*5, () -> shockwave(unit));
|
Time.run(Math.min(i*5, 60*2), () -> shockwave(unit));
|
||||||
}
|
}
|
||||||
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawn.x * tilesize, spawn.y * tilesize));
|
Time.run(20f, () -> Effects.effect(Fx.spawnShockwave, spawn.x * tilesize, spawn.y * tilesize));
|
||||||
//would be interesting to see player structures survive this without hacks
|
//would be interesting to see player structures survive this without hacks
|
||||||
@@ -98,6 +100,12 @@ public class WaveSpawner{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Time.runTask(121f, () -> spawning = false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isSpawning(){
|
||||||
|
return spawning;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void reset(){
|
private void reset(){
|
||||||
|
|||||||
@@ -36,9 +36,9 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
//environment
|
//environment
|
||||||
air, part, spawn, deepwater, water, tar, stone, craters, charr, sand, ice, snow,
|
air, part, spawn, deepwater, water, tar, stone, craters, charr, sand, ice, snow,
|
||||||
holostone, rocks, icerocks, cliffs, sporePine, pine, whiteTree, whiteTreeDead, sporeCluster,
|
holostone, rocks, sporerocks, icerocks, cliffs, sporePine, pine, whiteTree, whiteTreeDead, sporeCluster,
|
||||||
iceSnow, sandWater, duneRocks, sandRocks, moss, sporeMoss, shale, shaleRocks, shaleBoulder, grass, salt,
|
iceSnow, sandWater, duneRocks, sandRocks, moss, sporeMoss, shale, shaleRocks, shaleBoulder, grass, salt,
|
||||||
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, ignarock, magmarock, hotrock, snowrocks,
|
metalFloor, metalFloorDamaged, metalFloor2, metalFloor3, metalFloor5, ignarock, magmarock, hotrock, snowrocks, rock, snowrock,
|
||||||
|
|
||||||
//ores
|
//ores
|
||||||
oreCopper, oreLead, oreScrap, oreCoal, oreTitanium, oreThorium,
|
oreCopper, oreLead, oreScrap, oreCoal, oreTitanium, oreThorium,
|
||||||
@@ -189,11 +189,6 @@ public class Blocks implements ContentList{
|
|||||||
variants = 0;
|
variants = 0;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
iceSnow = new Floor("ice-snow"){{
|
|
||||||
variants = 3;
|
|
||||||
attributes.set(Attribute.water, 0.3f);
|
|
||||||
}};
|
|
||||||
|
|
||||||
snow = new Floor("snow"){{
|
snow = new Floor("snow"){{
|
||||||
attributes.set(Attribute.water, 0.2f);
|
attributes.set(Attribute.water, 0.2f);
|
||||||
}};
|
}};
|
||||||
@@ -205,6 +200,12 @@ public class Blocks implements ContentList{
|
|||||||
attributes.set(Attribute.water, 0.4f);
|
attributes.set(Attribute.water, 0.4f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
iceSnow = new Floor("ice-snow"){{
|
||||||
|
variants = 3;
|
||||||
|
attributes.set(Attribute.water, 0.3f);
|
||||||
|
edgeStyle = "blocky";
|
||||||
|
}};
|
||||||
|
|
||||||
cliffs = new StaticWall("cliffs"){{
|
cliffs = new StaticWall("cliffs"){{
|
||||||
variants = 1;
|
variants = 1;
|
||||||
fillsTile = false;
|
fillsTile = false;
|
||||||
@@ -214,6 +215,18 @@ public class Blocks implements ContentList{
|
|||||||
variants = 2;
|
variants = 2;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
sporerocks = new StaticWall("sporerocks"){{
|
||||||
|
variants = 2;
|
||||||
|
}};
|
||||||
|
|
||||||
|
rock = new Rock("rock"){{
|
||||||
|
variants = 2;
|
||||||
|
}};
|
||||||
|
|
||||||
|
snowrock = new Rock("snowrock"){{
|
||||||
|
variants = 2;
|
||||||
|
}};
|
||||||
|
|
||||||
icerocks = new StaticWall("icerocks"){{
|
icerocks = new StaticWall("icerocks"){{
|
||||||
variants = 2;
|
variants = 2;
|
||||||
}};
|
}};
|
||||||
@@ -269,6 +282,7 @@ public class Blocks implements ContentList{
|
|||||||
sporeMoss = new Floor("spore-moss"){{
|
sporeMoss = new Floor("spore-moss"){{
|
||||||
variants = 3;
|
variants = 3;
|
||||||
attributes.set(Attribute.spores, 0.3f);
|
attributes.set(Attribute.spores, 0.3f);
|
||||||
|
edgeStyle = "blocky";
|
||||||
}};
|
}};
|
||||||
|
|
||||||
metalFloor = new Floor("metal-floor"){{
|
metalFloor = new Floor("metal-floor"){{
|
||||||
@@ -694,7 +708,7 @@ public class Blocks implements ContentList{
|
|||||||
}};
|
}};
|
||||||
|
|
||||||
junction = new Junction("junction"){{
|
junction = new Junction("junction"){{
|
||||||
requirements(Category.distribution, ItemStack.with(Items.copper, 3));
|
requirements(Category.distribution, ItemStack.with(Items.copper, 3), true);
|
||||||
speed = 26;
|
speed = 26;
|
||||||
capacity = 32;
|
capacity = 32;
|
||||||
health = 25;
|
health = 25;
|
||||||
@@ -1061,29 +1075,30 @@ public class Blocks implements ContentList{
|
|||||||
range = 95f;
|
range = 95f;
|
||||||
shootCone = 15f;
|
shootCone = 15f;
|
||||||
ammoUseEffect = Fx.shellEjectSmall;
|
ammoUseEffect = Fx.shellEjectSmall;
|
||||||
health = 210;
|
health = 250;
|
||||||
inaccuracy = 2f;
|
inaccuracy = 2f;
|
||||||
rotatespeed = 10f;
|
rotatespeed = 10f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
scatter = new BurstTurret("scatter"){{
|
scatter = new BurstTurret("scatter"){{
|
||||||
requirements(Category.turret, ItemStack.with(Items.copper, 170, Items.lead, 90), true);
|
requirements(Category.turret, ItemStack.with(Items.copper, 170, Items.lead, 90));
|
||||||
ammo(
|
ammo(
|
||||||
Items.scrap, Bullets.flakScrap,
|
Items.scrap, Bullets.flakScrap,
|
||||||
Items.lead, Bullets.flakLead
|
Items.lead, Bullets.flakLead
|
||||||
);
|
);
|
||||||
reload = 45f;
|
reload = 43f;
|
||||||
range = 160f;
|
range = 160f;
|
||||||
size = 2;
|
size = 2;
|
||||||
burstSpacing = 5f;
|
burstSpacing = 5f;
|
||||||
shots = 2;
|
shots = 2;
|
||||||
|
targetGround = false;
|
||||||
|
|
||||||
recoil = 2f;
|
recoil = 2f;
|
||||||
rotatespeed = 10f;
|
rotatespeed = 10f;
|
||||||
inaccuracy = 18f;
|
inaccuracy = 17f;
|
||||||
shootCone = 35f;
|
shootCone = 35f;
|
||||||
|
|
||||||
health = 220*size*size;
|
health = 260*size*size;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
hail = new ArtilleryTurret("hail"){{
|
hail = new ArtilleryTurret("hail"){{
|
||||||
@@ -1098,7 +1113,7 @@ public class Blocks implements ContentList{
|
|||||||
range = 230f;
|
range = 230f;
|
||||||
inaccuracy = 1f;
|
inaccuracy = 1f;
|
||||||
shootCone = 10f;
|
shootCone = 10f;
|
||||||
health = 120;
|
health = 260;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
wave = new LiquidTurret("wave"){{
|
wave = new LiquidTurret("wave"){{
|
||||||
@@ -1116,7 +1131,7 @@ public class Blocks implements ContentList{
|
|||||||
shootCone = 50f;
|
shootCone = 50f;
|
||||||
shootEffect = Fx.shootLiquid;
|
shootEffect = Fx.shootLiquid;
|
||||||
range = 100f;
|
range = 100f;
|
||||||
health = 360;
|
health = 250*size*size;
|
||||||
|
|
||||||
drawer = (tile, entity) -> {
|
drawer = (tile, entity) -> {
|
||||||
Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
Draw.rect(region, tile.drawx() + tr2.x, tile.drawy() + tr2.y, entity.rotation - 90);
|
||||||
@@ -1147,7 +1162,7 @@ public class Blocks implements ContentList{
|
|||||||
chargeBeginEffect = Fx.lancerLaserChargeBegin;
|
chargeBeginEffect = Fx.lancerLaserChargeBegin;
|
||||||
heatColor = Color.RED;
|
heatColor = Color.RED;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 320;
|
health = 280*size*size;
|
||||||
targetAir = false;
|
targetAir = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1165,6 +1180,7 @@ public class Blocks implements ContentList{
|
|||||||
heatColor = Color.RED;
|
heatColor = Color.RED;
|
||||||
recoil = 1f;
|
recoil = 1f;
|
||||||
size = 1;
|
size = 1;
|
||||||
|
health = 260;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
swarmer = new BurstTurret("swarmer"){{
|
swarmer = new BurstTurret("swarmer"){{
|
||||||
@@ -1181,7 +1197,7 @@ public class Blocks implements ContentList{
|
|||||||
range = 140f;
|
range = 140f;
|
||||||
xRand = 6f;
|
xRand = 6f;
|
||||||
size = 2;
|
size = 2;
|
||||||
health = 380;
|
health = 300*size*size;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
salvo = new BurstTurret("salvo"){{
|
salvo = new BurstTurret("salvo"){{
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ public class Mechs implements ContentList{
|
|||||||
speed = 0.5f;
|
speed = 0.5f;
|
||||||
boostSpeed = 0.85f;
|
boostSpeed = 0.85f;
|
||||||
engineColor = Color.valueOf("ffd37f");
|
engineColor = Color.valueOf("ffd37f");
|
||||||
health = 250f;
|
health = 300f;
|
||||||
|
|
||||||
weapon = new Weapon("blaster"){{
|
weapon = new Weapon("blaster"){{
|
||||||
length = 1.5f;
|
length = 1.5f;
|
||||||
@@ -62,7 +62,7 @@ public class Mechs implements ContentList{
|
|||||||
boostSpeed = 0.95f;
|
boostSpeed = 0.95f;
|
||||||
itemCapacity = 15;
|
itemCapacity = 15;
|
||||||
mass = 0.9f;
|
mass = 0.9f;
|
||||||
health = 220f;
|
health = 250f;
|
||||||
weaponOffsetX = -1;
|
weaponOffsetX = -1;
|
||||||
weaponOffsetY = -1;
|
weaponOffsetY = -1;
|
||||||
engineColor = Color.valueOf("d3ddff");
|
engineColor = Color.valueOf("d3ddff");
|
||||||
|
|||||||
@@ -43,20 +43,22 @@ public class TechTree implements ContentList{
|
|||||||
});
|
});
|
||||||
|
|
||||||
node(duo, () -> {
|
node(duo, () -> {
|
||||||
node(hail, () -> {
|
node(scatter, () -> {
|
||||||
|
node(hail, () -> {
|
||||||
|
|
||||||
node(salvo, () -> {
|
node(salvo, () -> {
|
||||||
node(swarmer, () -> {
|
node(swarmer, () -> {
|
||||||
node(cyclone, () -> {
|
node(cyclone, () -> {
|
||||||
node(spectre, () -> {
|
node(spectre, () -> {
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
|
||||||
|
|
||||||
node(ripple, () -> {
|
node(ripple, () -> {
|
||||||
node(fuse, () -> {
|
node(fuse, () -> {
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -257,7 +259,7 @@ public class TechTree implements ContentList{
|
|||||||
private TechNode node(Block block, Runnable children){
|
private TechNode node(Block block, Runnable children){
|
||||||
ItemStack[] requirements = new ItemStack[block.buildRequirements.length];
|
ItemStack[] requirements = new ItemStack[block.buildRequirements.length];
|
||||||
for(int i = 0; i < requirements.length; i++){
|
for(int i = 0; i < requirements.length; i++){
|
||||||
requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 10);
|
requirements[i] = new ItemStack(block.buildRequirements[i].item, block.buildRequirements[i].amount * 8);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new TechNode(block, requirements, children);
|
return new TechNode(block, requirements, children);
|
||||||
|
|||||||
@@ -16,13 +16,13 @@ public class Zones implements ContentList{
|
|||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
|
|
||||||
groundZero = new Zone("groundZero", new MapGenerator("groundZero", 1)){{
|
groundZero = new Zone("groundZero", new MapGenerator("groundZero", 1).decor(new Decoration(Blocks.snow, Blocks.snowrock, 0.01))){{
|
||||||
baseLaunchCost = ItemStack.with(Items.copper, -100);
|
baseLaunchCost = ItemStack.with(Items.copper, -100);
|
||||||
startingItems = ItemStack.list(Items.copper, 100);
|
startingItems = ItemStack.list(Items.copper, 100);
|
||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
conditionWave = 5;
|
conditionWave = 5;
|
||||||
launchPeriod = 5;
|
launchPeriod = 5;
|
||||||
resources = new Item[]{Items.copper, Items.scrap};
|
resources = new Item[]{Items.copper, Items.scrap, Items.lead};
|
||||||
rules = () -> new Rules(){{
|
rules = () -> new Rules(){{
|
||||||
waves = true;
|
waves = true;
|
||||||
waveTimer = true;
|
waveTimer = true;
|
||||||
@@ -30,7 +30,7 @@ public class Zones implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
craters = new Zone("craters", new MapGenerator("craters", 1).dist(0)){{
|
craters = new Zone("craters", new MapGenerator("craters", 1).dist(0).decor(new Decoration(Blocks.snow, Blocks.sporeCluster, 0.01))){{
|
||||||
startingItems = ItemStack.list(Items.copper, 200);
|
startingItems = ItemStack.list(Items.copper, 200);
|
||||||
conditionWave = 10;
|
conditionWave = 10;
|
||||||
itemRequirements = ItemStack.with(Items.copper, 2000);
|
itemRequirements = ItemStack.with(Items.copper, 2000);
|
||||||
|
|||||||
@@ -212,7 +212,7 @@ public class MapEditor{
|
|||||||
|
|
||||||
if(tile.block().isMultiblock()){
|
if(tile.block().isMultiblock()){
|
||||||
removeLinked(wx, wy);
|
removeLinked(wx, wy);
|
||||||
}else if(link != 0 && tiles[x][y].block() == Blocks.part){
|
}else if(link != 0 && tiles[wx][wy].block() == Blocks.part){
|
||||||
removeLinked(wx - (Pack.leftByte(link) - 8), wy - (Pack.rightByte(link) - 8));
|
removeLinked(wx - (Pack.leftByte(link) - 8), wy - (Pack.rightByte(link) - 8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,10 +6,12 @@ import io.anuke.arc.function.Supplier;
|
|||||||
import io.anuke.arc.graphics.Pixmap;
|
import io.anuke.arc.graphics.Pixmap;
|
||||||
import io.anuke.arc.graphics.Pixmap.Format;
|
import io.anuke.arc.graphics.Pixmap.Format;
|
||||||
import io.anuke.arc.graphics.Texture;
|
import io.anuke.arc.graphics.Texture;
|
||||||
|
import io.anuke.arc.scene.ui.Image;
|
||||||
|
import io.anuke.arc.scene.ui.layout.Stack;
|
||||||
import io.anuke.arc.scene.ui.layout.Table;
|
import io.anuke.arc.scene.ui.layout.Table;
|
||||||
|
import io.anuke.arc.util.Scaling;
|
||||||
import io.anuke.arc.util.async.AsyncExecutor;
|
import io.anuke.arc.util.async.AsyncExecutor;
|
||||||
import io.anuke.arc.util.async.AsyncResult;
|
import io.anuke.arc.util.async.AsyncResult;
|
||||||
import io.anuke.mindustry.content.Blocks;
|
|
||||||
import io.anuke.mindustry.editor.generation.*;
|
import io.anuke.mindustry.editor.generation.*;
|
||||||
import io.anuke.mindustry.editor.generation.GenerateFilter.GenerateInput;
|
import io.anuke.mindustry.editor.generation.GenerateFilter.GenerateInput;
|
||||||
import io.anuke.mindustry.game.Team;
|
import io.anuke.mindustry.game.Team;
|
||||||
@@ -21,7 +23,7 @@ import io.anuke.mindustry.world.Block;
|
|||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.mobile;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class MapGenerateDialog extends FloatingDialog{
|
public class MapGenerateDialog extends FloatingDialog{
|
||||||
@@ -48,8 +50,10 @@ public class MapGenerateDialog extends FloatingDialog{
|
|||||||
shown(this::setup);
|
shown(this::setup);
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
buttons.addButton("$editor.apply", () -> {
|
buttons.addButton("$editor.apply", () -> {
|
||||||
apply();
|
ui.loadAnd(() -> {
|
||||||
hide();
|
apply();
|
||||||
|
hide();
|
||||||
|
});
|
||||||
}).size(160f, 64f);
|
}).size(160f, 64f);
|
||||||
buttons.addButton("$editor.randomize", () -> {
|
buttons.addButton("$editor.randomize", () -> {
|
||||||
for(GenerateFilter filter : filters){
|
for(GenerateFilter filter : filters){
|
||||||
@@ -75,15 +79,20 @@ public class MapGenerateDialog extends FloatingDialog{
|
|||||||
cont.clear();
|
cont.clear();
|
||||||
cont.table("flat", t -> {
|
cont.table("flat", t -> {
|
||||||
t.margin(8f);
|
t.margin(8f);
|
||||||
t.add(new BorderImage(texture)).size(400f).padRight(6);
|
t.stack(new BorderImage(texture), new Stack(){{
|
||||||
|
add(new Image("loadDim"));
|
||||||
|
add(new Image("icon-refresh"){{
|
||||||
|
setScaling(Scaling.none);
|
||||||
|
}});
|
||||||
|
visible(() -> generating);
|
||||||
|
}}).size(mobile ? 300f : 400f).padRight(6);
|
||||||
t.pane(p -> filterTable = p).width(300f).get().setScrollingDisabled(true, false);
|
t.pane(p -> filterTable = p).width(300f).get().setScrollingDisabled(true, false);
|
||||||
}).grow();
|
}).grow();
|
||||||
|
|
||||||
update();
|
|
||||||
|
|
||||||
buffer1 = create();
|
buffer1 = create();
|
||||||
buffer2 = create();
|
buffer2 = create();
|
||||||
|
|
||||||
|
update();
|
||||||
rebuildFilters();
|
rebuildFilters();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -186,6 +195,16 @@ public class MapGenerateDialog extends FloatingDialog{
|
|||||||
result.get();
|
result.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
buffer1 = null;
|
||||||
|
buffer2 = null;
|
||||||
|
generating = false;
|
||||||
|
if(pixmap != null){
|
||||||
|
pixmap.dispose();
|
||||||
|
texture.dispose();
|
||||||
|
pixmap = null;
|
||||||
|
texture = null;
|
||||||
|
}
|
||||||
|
|
||||||
//writeback buffer
|
//writeback buffer
|
||||||
DummyTile[][] writeTiles = new DummyTile[editor.width()][editor.height()];
|
DummyTile[][] writeTiles = new DummyTile[editor.width()][editor.height()];
|
||||||
|
|
||||||
@@ -196,7 +215,7 @@ public class MapGenerateDialog extends FloatingDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(GenerateFilter filter : filters){
|
for(GenerateFilter filter : filters){
|
||||||
input.setFilter(filter, (x, y) -> dset(editor.tile(x, y)));
|
input.setFilter(filter, editor.width(), editor.height(), 1, (x, y) -> dset(editor.tile(x, y)));
|
||||||
//write to buffer
|
//write to buffer
|
||||||
for(int x = 0; x < editor.width(); x++){
|
for(int x = 0; x < editor.width(); x++){
|
||||||
for(int y = 0; y < editor.height(); y++){
|
for(int y = 0; y < editor.height(); y++){
|
||||||
@@ -215,10 +234,10 @@ public class MapGenerateDialog extends FloatingDialog{
|
|||||||
DummyTile write = writeTiles[x][y];
|
DummyTile write = writeTiles[x][y];
|
||||||
|
|
||||||
tile.setRotation((byte)write.rotation);
|
tile.setRotation((byte)write.rotation);
|
||||||
tile.setFloor((Floor)write.floor);
|
tile.setFloor((Floor)content.block(write.floor));
|
||||||
tile.setBlock(write.block);
|
tile.setBlock(content.block(write.block));
|
||||||
tile.setTeam(write.team);
|
tile.setTeam(Team.all[write.team]);
|
||||||
tile.setOre(write.ore);
|
tile.setOre(content.block(write.ore));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
@@ -239,74 +258,81 @@ public class MapGenerateDialog extends FloatingDialog{
|
|||||||
Array<GenerateFilter> copy = new Array<>(filters);
|
Array<GenerateFilter> copy = new Array<>(filters);
|
||||||
|
|
||||||
result = executor.submit(() -> {
|
result = executor.submit(() -> {
|
||||||
generating = true;
|
try{
|
||||||
|
generating = true;
|
||||||
|
|
||||||
|
if(!filters.isEmpty()){
|
||||||
|
//write to buffer1 for reading
|
||||||
|
for(int px = 0; px < pixmap.getWidth(); px++){
|
||||||
|
for(int py = 0; py < pixmap.getHeight(); py++){
|
||||||
|
buffer1[px][py].set(editor.tile(px * scaling, py * scaling));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
for(GenerateFilter filter : copy){
|
||||||
|
input.setFilter(filter, pixmap.getWidth(), pixmap.getHeight(), scaling, (x, y) -> buffer1[x][y]);
|
||||||
|
//read from buffer1 and write to buffer2
|
||||||
|
for(int px = 0; px < pixmap.getWidth(); px++){
|
||||||
|
for(int py = 0; py < pixmap.getHeight(); py++){
|
||||||
|
int x = px * scaling, y = py * scaling;
|
||||||
|
DummyTile tile = buffer1[px][py];
|
||||||
|
input.begin(editor, x, y, content.block(tile.floor), content.block(tile.block), content.block(tile.ore));
|
||||||
|
filter.apply(input);
|
||||||
|
buffer2[px][py].set(input.floor, input.block, input.ore, Team.all[tile.team], tile.rotation);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for(int px = 0; px < pixmap.getWidth(); px++){
|
||||||
|
for(int py = 0; py < pixmap.getHeight(); py++){
|
||||||
|
buffer1[px][py].set(buffer2[px][py]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!filters.isEmpty()){
|
|
||||||
//write to buffer1 for reading
|
|
||||||
for(int px = 0; px < pixmap.getWidth(); px++){
|
for(int px = 0; px < pixmap.getWidth(); px++){
|
||||||
for(int py = 0; py < pixmap.getHeight(); py++){
|
for(int py = 0; py < pixmap.getHeight(); py++){
|
||||||
buffer1[px][py].set(editor.tile(px * scaling, py * scaling));
|
int color;
|
||||||
|
//get result from buffer1 if there's filters left, otherwise get from editor directly
|
||||||
|
if(filters.isEmpty()){
|
||||||
|
Tile tile = editor.tile(px * scaling, py * scaling);
|
||||||
|
color = MapIO.colorFor(tile.floor(), tile.block(), tile.ore(), Team.none);
|
||||||
|
}else{
|
||||||
|
DummyTile tile = buffer1[px][py];
|
||||||
|
color = MapIO.colorFor(content.block(tile.floor), content.block(tile.block), content.block(tile.ore), Team.none);
|
||||||
|
}
|
||||||
|
pixmap.drawPixel(px, pixmap.getHeight() - 1 - py, color);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
for(GenerateFilter filter : copy){
|
Core.app.post(() -> {
|
||||||
input.setFilter(filter, (x, y) -> buffer1[x][y]);
|
texture.draw(pixmap, 0, 0);
|
||||||
//read from buffer1 and write to buffer2
|
generating = false;
|
||||||
for(int px = 0; px < pixmap.getWidth(); px++){
|
});
|
||||||
for(int py = 0; py < pixmap.getHeight(); py++){
|
}catch(Exception e){
|
||||||
int x = px*scaling, y = py*scaling;
|
|
||||||
DummyTile tile = buffer1[px][py];
|
|
||||||
input.begin(editor, x, y, tile.floor, tile.block, tile.ore);
|
|
||||||
filter.apply(input);
|
|
||||||
buffer2[px][py].set(input.floor, input.block, input.ore, tile.team, tile.rotation);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
for(int px = 0; px < pixmap.getWidth(); px++){
|
|
||||||
for(int py = 0; py < pixmap.getHeight(); py++){
|
|
||||||
buffer1[px][py].set(buffer2[px][py]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
for(int px = 0; px < pixmap.getWidth(); px++){
|
|
||||||
for(int py = 0; py < pixmap.getHeight(); py++){
|
|
||||||
int color;
|
|
||||||
//get result from buffer1 if there's filters left, otherwise get from editor directly
|
|
||||||
if(filters.isEmpty()){
|
|
||||||
Tile tile = editor.tile(px * scaling, py * scaling);
|
|
||||||
color = MapIO.colorFor(tile.floor(), tile.block(), tile.ore(), Team.none);
|
|
||||||
}else{
|
|
||||||
DummyTile tile = buffer1[px][py];
|
|
||||||
color = MapIO.colorFor(tile.floor, tile.block, tile.ore, Team.none);
|
|
||||||
}
|
|
||||||
pixmap.drawPixel(px, pixmap.getHeight() - 1 - py, color);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Core.app.post(() -> {
|
|
||||||
texture.draw(pixmap, 0, 0);
|
|
||||||
generating = false;
|
generating = false;
|
||||||
});
|
e.printStackTrace();
|
||||||
|
}
|
||||||
return null;
|
return null;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class DummyTile{
|
public static class DummyTile{
|
||||||
public Block block = Blocks.air, ore = Blocks.air, floor = Blocks.air;
|
public byte block, floor, ore, team, rotation;
|
||||||
public Team team = Team.none;
|
|
||||||
public int rotation;
|
|
||||||
|
|
||||||
void set(Block floor, Block wall, Block ore, Team team, int rotation){
|
void set(Block floor, Block wall, Block ore, Team team, int rotation){
|
||||||
this.floor = floor;
|
this.floor = floor.id;
|
||||||
this.block = wall;
|
this.block = wall.id;
|
||||||
this.ore = ore;
|
this.ore = ore.id;
|
||||||
this.team = team;
|
this.team = (byte)team.ordinal();
|
||||||
this.rotation = rotation;
|
this.rotation = (byte)rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set(DummyTile other){
|
void set(DummyTile other){
|
||||||
set(other.floor, other.block, other.ore, other.team, other.rotation);
|
this.floor = other.floor;
|
||||||
|
this.block = other.block;
|
||||||
|
this.ore = other.ore;
|
||||||
|
this.team = other.team;
|
||||||
|
this.rotation = other.rotation;
|
||||||
}
|
}
|
||||||
|
|
||||||
void set(Tile other){
|
void set(Tile other){
|
||||||
|
|||||||
@@ -267,7 +267,9 @@ public class MapView extends Element implements GestureListener{
|
|||||||
Draw.color(Pal.remove);
|
Draw.color(Pal.remove);
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.rect(centerx - sclwidth / 2 - 1, centery - sclheight / 2 - 1, sclwidth + 2, sclheight + 2);
|
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);
|
if(Core.scene.getKeyboardFocus() != null && isDescendantOf(Core.scene.getKeyboardFocus())){
|
||||||
|
editor.renderer().draw(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight);
|
||||||
|
}
|
||||||
Draw.reset();
|
Draw.reset();
|
||||||
|
|
||||||
if(!ScissorStack.pushScissors(rect.set(x, y, width, height))){
|
if(!ScissorStack.pushScissors(rect.set(x, y, width, height))){
|
||||||
|
|||||||
@@ -3,6 +3,7 @@ package io.anuke.mindustry.editor;
|
|||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.Core;
|
||||||
import io.anuke.arc.collection.Array;
|
import io.anuke.arc.collection.Array;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.Color;
|
||||||
|
import io.anuke.arc.input.KeyCode;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.arc.scene.ui.TextField.TextFieldFilter;
|
import io.anuke.arc.scene.ui.TextField.TextFieldFilter;
|
||||||
import io.anuke.arc.scene.ui.layout.Table;
|
import io.anuke.arc.scene.ui.layout.Table;
|
||||||
@@ -37,13 +38,49 @@ public class WaveInfoDialog extends FloatingDialog{
|
|||||||
this.editor = editor;
|
this.editor = editor;
|
||||||
|
|
||||||
shown(this::setup);
|
shown(this::setup);
|
||||||
hidden(() -> editor.getTags().put("waves", world.maps.writeWaves(groups)));
|
hidden(() -> {
|
||||||
|
if(groups == null){
|
||||||
|
editor.getTags().remove("waves");
|
||||||
|
}else{
|
||||||
|
editor.getTags().put("waves", world.maps.writeWaves(groups));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
keyDown(key -> {
|
||||||
|
if(key == KeyCode.ESCAPE || key == KeyCode.BACK) {
|
||||||
|
Core.app.post(this::hide);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
buttons.addButton("$settings.reset", () -> ui.showConfirm("$confirm", "$settings.clear.confirm", () ->{
|
buttons.addButton("$waves.edit", () -> {
|
||||||
groups = null;
|
FloatingDialog dialog = new FloatingDialog("$waves.edit");
|
||||||
buildGroups();
|
dialog.addCloseButton();
|
||||||
})).size(270f, 64f);
|
dialog.setFillParent(false);
|
||||||
|
dialog.cont.defaults().size(210f, 64f);
|
||||||
|
dialog.cont.addButton("$waves.copy", () -> {
|
||||||
|
ui.showInfoFade("$waves.copied");
|
||||||
|
Core.app.getClipboard().setContents(world.maps.writeWaves(groups));
|
||||||
|
dialog.hide();
|
||||||
|
}).disabled(b -> groups == null);
|
||||||
|
dialog.cont.row();
|
||||||
|
dialog.cont.addButton("$waves.load", () -> {
|
||||||
|
try{
|
||||||
|
groups = world.maps.readWaves(Core.app.getClipboard().getContents());
|
||||||
|
buildGroups();
|
||||||
|
}catch(Exception e){
|
||||||
|
ui.showError("$waves.invalid");
|
||||||
|
}
|
||||||
|
dialog.hide();
|
||||||
|
}).disabled(b -> Core.app.getClipboard().getContents() == null || Core.app.getClipboard().getContents().isEmpty());
|
||||||
|
dialog.cont.row();
|
||||||
|
dialog.cont.addButton("$settings.reset", () -> ui.showConfirm("$confirm", "$settings.clear.confirm", () ->{
|
||||||
|
groups = null;
|
||||||
|
buildGroups();
|
||||||
|
dialog.hide();
|
||||||
|
}));
|
||||||
|
dialog.show();
|
||||||
|
}).size(270f, 64f);
|
||||||
}
|
}
|
||||||
|
|
||||||
void setup(){
|
void setup(){
|
||||||
@@ -61,7 +98,7 @@ public class WaveInfoDialog extends FloatingDialog{
|
|||||||
}).growX().height(70f);
|
}).growX().height(70f);
|
||||||
}).width(390f).growY();
|
}).width(390f).growY();
|
||||||
cont.table("clear", m -> {
|
cont.table("clear", m -> {
|
||||||
m.add("Preview").color(Color.LIGHT_GRAY).growX().center().get().setAlignment(Align.center, Align.center);
|
m.add("$waves.preview").color(Color.LIGHT_GRAY).growX().center().get().setAlignment(Align.center, Align.center);
|
||||||
m.row();
|
m.row();
|
||||||
m.addButton("-", () -> {}).update(t -> {
|
m.addButton("-", () -> {}).update(t -> {
|
||||||
if(t.getClickListener().isPressed()){
|
if(t.getClickListener().isPressed()){
|
||||||
@@ -108,16 +145,16 @@ public class WaveInfoDialog extends FloatingDialog{
|
|||||||
|
|
||||||
t.row();
|
t.row();
|
||||||
t.table(spawns -> {
|
t.table(spawns -> {
|
||||||
spawns.addField("" + group.begin, TextFieldFilter.digitsOnly, text -> {
|
spawns.addField("" + (group.begin + 1), TextFieldFilter.digitsOnly, text -> {
|
||||||
if(Strings.canParsePostiveInt(text)){
|
if(Strings.canParsePostiveInt(text)){
|
||||||
group.begin = Strings.parseInt(text);
|
group.begin = Strings.parseInt(text) - 1;
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}
|
}
|
||||||
}).width(100f);
|
}).width(100f);
|
||||||
spawns.add("$waves.to").padLeft(4).padRight(4);
|
spawns.add("$waves.to").padLeft(4).padRight(4);
|
||||||
spawns.addField(group.end == never ? "" : group.end + "", TextFieldFilter.digitsOnly, text -> {
|
spawns.addField(group.end == never ? "" : (group.end + 1) + "", TextFieldFilter.digitsOnly, text -> {
|
||||||
if(Strings.canParsePostiveInt(text)){
|
if(Strings.canParsePostiveInt(text)){
|
||||||
group.end = Strings.parseInt(text);
|
group.end = Strings.parseInt(text) - 1;
|
||||||
updateWaves();
|
updateWaves();
|
||||||
}else if(text.isEmpty()){
|
}else if(text.isEmpty()){
|
||||||
group.end = never;
|
group.end = never;
|
||||||
@@ -205,7 +242,7 @@ public class WaveInfoDialog extends FloatingDialog{
|
|||||||
for(int i = start; i < displayed + start; i ++){
|
for(int i = start; i < displayed + start; i ++){
|
||||||
int wave = i;
|
int wave = i;
|
||||||
preview.table("underline", table -> {
|
preview.table("underline", table -> {
|
||||||
table.add(wave + "").color(Pal.accent).center().colspan(2).get().setAlignment(Align.center, Align.center);
|
table.add((wave+1) + "").color(Pal.accent).center().colspan(2).get().setAlignment(Align.center, Align.center);
|
||||||
table.row();
|
table.row();
|
||||||
|
|
||||||
int[] spawned = new int[Vars.content.getBy(ContentType.unit).size];
|
int[] spawned = new int[Vars.content.getBy(ContentType.unit).size];
|
||||||
|
|||||||
@@ -4,6 +4,8 @@ import io.anuke.mindustry.editor.MapGenerateDialog.DummyTile;
|
|||||||
import io.anuke.mindustry.editor.generation.FilterOption.SliderOption;
|
import io.anuke.mindustry.editor.generation.FilterOption.SliderOption;
|
||||||
import io.anuke.mindustry.world.blocks.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
|
|
||||||
|
import static io.anuke.mindustry.Vars.content;
|
||||||
|
|
||||||
public class DistortFilter extends GenerateFilter{
|
public class DistortFilter extends GenerateFilter{
|
||||||
float scl = 40, mag = 5;
|
float scl = 40, mag = 5;
|
||||||
|
|
||||||
@@ -16,10 +18,10 @@ public class DistortFilter extends GenerateFilter{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void apply(){
|
public void apply(){
|
||||||
DummyTile tile = in.tile(in.x + noise(in.x, in.y, scl, mag)-mag/2f, in.y + noise(in.x, in.y+o, scl, mag)-mag/2f);
|
DummyTile tile = in.tile(in.x / (in.scaling) + (noise(in.x, in.y, scl, mag)-mag/2f)/in.scaling, in.y / (in.scaling) + (noise(in.x, in.y+o, scl, mag)-mag/2f)/in.scaling);
|
||||||
|
|
||||||
in.floor = tile.floor;
|
in.floor = content.block(tile.floor);
|
||||||
if(!tile.block.synthetic() && !in.block.synthetic()) in.block = tile.block;
|
if(!content.block(tile.block).synthetic() && !in.block.synthetic()) in.block = content.block(tile.block);
|
||||||
if(!((Floor)in.floor).isLiquid) in.ore = tile.ore;
|
if(!((Floor)in.floor).isLiquid) in.ore = content.block(tile.ore);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,6 +12,8 @@ import io.anuke.mindustry.world.Block.Icon;
|
|||||||
import io.anuke.mindustry.world.blocks.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
import io.anuke.mindustry.world.blocks.OreBlock;
|
import io.anuke.mindustry.world.blocks.OreBlock;
|
||||||
|
|
||||||
|
import static io.anuke.mindustry.Vars.updateEditorOnChange;
|
||||||
|
|
||||||
public abstract class FilterOption{
|
public abstract class FilterOption{
|
||||||
public static final Predicate<Block> floorsOnly = b -> (b instanceof Floor && !(b instanceof OreBlock)) && Core.atlas.isFound(b.icon(Icon.full));
|
public static final Predicate<Block> floorsOnly = b -> (b instanceof Floor && !(b instanceof OreBlock)) && Core.atlas.isFound(b.icon(Icon.full));
|
||||||
public static final Predicate<Block> wallsOnly = b -> (!b.synthetic() && !(b instanceof Floor)) && Core.atlas.isFound(b.icon(Icon.full));
|
public static final Predicate<Block> wallsOnly = b -> (!b.synthetic() && !(b instanceof Floor)) && Core.atlas.isFound(b.icon(Icon.full));
|
||||||
@@ -40,7 +42,11 @@ public abstract class FilterOption{
|
|||||||
table.row();
|
table.row();
|
||||||
Slider slider = table.addSlider(min, max, (max-min)/200f, setter).growX().get();
|
Slider slider = table.addSlider(min, max, (max-min)/200f, setter).growX().get();
|
||||||
slider.setValue(getter.get());
|
slider.setValue(getter.get());
|
||||||
slider.changed(changed);
|
if(updateEditorOnChange){
|
||||||
|
slider.changed(changed);
|
||||||
|
}else{
|
||||||
|
slider.released(changed);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public abstract class GenerateFilter{
|
|||||||
public Floor srcfloor;
|
public Floor srcfloor;
|
||||||
public Block srcblock;
|
public Block srcblock;
|
||||||
public Block srcore;
|
public Block srcore;
|
||||||
public int x, y;
|
public int x, y, width, height, scaling;
|
||||||
|
|
||||||
public MapEditor editor;
|
public MapEditor editor;
|
||||||
public Block floor, block, ore;
|
public Block floor, block, ore;
|
||||||
@@ -74,14 +74,17 @@ public abstract class GenerateFilter{
|
|||||||
this.y = y;
|
this.y = y;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setFilter(GenerateFilter filter, TileProvider buffer){
|
public void setFilter(GenerateFilter filter, int width, int height, int scaling, TileProvider buffer){
|
||||||
this.buffer = buffer;
|
this.buffer = buffer;
|
||||||
|
this.width = width;
|
||||||
|
this.height = height;
|
||||||
|
this.scaling = scaling;
|
||||||
noise.setSeed(filter.seed);
|
noise.setSeed(filter.seed);
|
||||||
pnoise.setSeed((int)(filter.seed + 1));
|
pnoise.setSeed((int)(filter.seed + 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
DummyTile tile(float x, float y){
|
DummyTile tile(float x, float y){
|
||||||
return buffer.get(Mathf.clamp((int)x, 0, editor.width() - 1), Mathf.clamp((int)y, 0, editor.height() - 1));
|
return buffer.get(Mathf.clamp((int)x, 0, width - 1), Mathf.clamp((int)y, 0, height - 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
public interface TileProvider{
|
public interface TileProvider{
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ import static io.anuke.mindustry.Vars.*;
|
|||||||
public interface BuilderTrait extends Entity, TeamTrait{
|
public interface BuilderTrait extends Entity, TeamTrait{
|
||||||
//these are not instance variables!
|
//these are not instance variables!
|
||||||
Vector2[] tmptr = new Vector2[]{new Vector2(), new Vector2(), new Vector2(), new Vector2()};
|
Vector2[] tmptr = new Vector2[]{new Vector2(), new Vector2(), new Vector2(), new Vector2()};
|
||||||
float placeDistance = 150f;
|
float placeDistance = 220f;
|
||||||
float mineDistance = 70f;
|
float mineDistance = 70f;
|
||||||
Array<BuildRequest> removal = new Array<>();
|
Array<BuildRequest> removal = new Array<>();
|
||||||
|
|
||||||
|
|||||||
@@ -32,20 +32,18 @@ public abstract class FlyingUnit extends BaseUnit{
|
|||||||
target = null;
|
target = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(target == null){
|
retarget(() -> {
|
||||||
|
targetClosest();
|
||||||
|
|
||||||
retarget(() -> {
|
if(target == null) targetClosestEnemyFlag(BlockFlag.producer);
|
||||||
targetClosest();
|
if(target == null) targetClosestEnemyFlag(BlockFlag.turret);
|
||||||
|
|
||||||
if(target == null) targetClosestEnemyFlag(BlockFlag.producer);
|
if(target == null){
|
||||||
if(target == null) targetClosestEnemyFlag(BlockFlag.turret);
|
setState(patrol);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
if(target == null){
|
if(target != null){
|
||||||
setState(patrol);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
}else{
|
|
||||||
attack(type.attackLength);
|
attack(type.attackLength);
|
||||||
|
|
||||||
if((Angles.near(angleTo(target), rotation, type.shootCone) || getWeapon().ignoreRotation) //bombers and such don't care about rotation
|
if((Angles.near(angleTo(target), rotation, type.shootCone) || getWeapon().ignoreRotation) //bombers and such don't care about rotation
|
||||||
|
|||||||
@@ -9,9 +9,13 @@ import io.anuke.arc.graphics.g2d.*;
|
|||||||
import io.anuke.arc.math.Angles;
|
import io.anuke.arc.math.Angles;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.arc.math.geom.Geometry;
|
import io.anuke.arc.math.geom.Geometry;
|
||||||
|
import io.anuke.arc.math.geom.Point2;
|
||||||
import io.anuke.arc.math.geom.Rectangle;
|
import io.anuke.arc.math.geom.Rectangle;
|
||||||
import io.anuke.arc.math.geom.Vector2;
|
import io.anuke.arc.math.geom.Vector2;
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.Align;
|
||||||
|
import io.anuke.arc.util.Interval;
|
||||||
|
import io.anuke.arc.util.Pack;
|
||||||
|
import io.anuke.arc.util.Time;
|
||||||
import io.anuke.arc.util.pooling.Pools;
|
import io.anuke.arc.util.pooling.Pools;
|
||||||
import io.anuke.mindustry.content.Fx;
|
import io.anuke.mindustry.content.Fx;
|
||||||
import io.anuke.mindustry.content.Mechs;
|
import io.anuke.mindustry.content.Mechs;
|
||||||
@@ -24,12 +28,12 @@ import io.anuke.mindustry.game.Team;
|
|||||||
import io.anuke.mindustry.gen.Call;
|
import io.anuke.mindustry.gen.Call;
|
||||||
import io.anuke.mindustry.graphics.Pal;
|
import io.anuke.mindustry.graphics.Pal;
|
||||||
import io.anuke.mindustry.input.Binding;
|
import io.anuke.mindustry.input.Binding;
|
||||||
|
import io.anuke.mindustry.input.InputHandler.PlaceDraw;
|
||||||
import io.anuke.mindustry.io.TypeIO;
|
import io.anuke.mindustry.io.TypeIO;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
import io.anuke.mindustry.net.NetConnection;
|
import io.anuke.mindustry.net.NetConnection;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Block.Icon;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
import io.anuke.mindustry.world.blocks.Floor;
|
import io.anuke.mindustry.world.blocks.Floor;
|
||||||
|
|
||||||
@@ -407,6 +411,7 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
|
|||||||
|
|
||||||
/** Draw all current build requests. Does not draw the beam effect, only the positions. */
|
/** Draw all current build requests. Does not draw the beam effect, only the positions. */
|
||||||
public void drawBuildRequests(){
|
public void drawBuildRequests(){
|
||||||
|
BuildRequest last = null;
|
||||||
for(BuildRequest request : getPlaceQueue()){
|
for(BuildRequest request : getPlaceQueue()){
|
||||||
if(getCurrentRequest() == request && request.progress > 0.001f) continue;
|
if(getCurrentRequest() == request && request.progress > 0.001f) continue;
|
||||||
|
|
||||||
@@ -426,32 +431,37 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
|
|||||||
|
|
||||||
Lines.square(
|
Lines.square(
|
||||||
request.x * tilesize + block.offset(),
|
request.x * tilesize + block.offset(),
|
||||||
request.y * tilesize + block.offset(),
|
request.y * tilesize + block.offset(), rad);
|
||||||
rad);
|
|
||||||
}else{
|
}else{
|
||||||
float rad = Mathf.absin(Time.time(), 7f, 1f) - 1.5f + request.block.size * tilesize / 2f;
|
|
||||||
|
|
||||||
//draw place request
|
|
||||||
Lines.stroke(1f, Pal.accentBack);
|
|
||||||
|
|
||||||
Lines.square(
|
|
||||||
request.x * tilesize + request.block.offset(),
|
|
||||||
request.y * tilesize + request.block.offset() - 1,
|
|
||||||
rad);
|
|
||||||
|
|
||||||
Draw.color();
|
Draw.color();
|
||||||
|
PlaceDraw draw = PlaceDraw.instance;
|
||||||
|
|
||||||
Draw.rect(request.block.icon(Icon.full),
|
draw.scalex = 1;
|
||||||
request.x * tilesize + request.block.offset(),
|
draw.scaley = 1;
|
||||||
request.y * tilesize + request.block.offset(), rad*2, rad*2, request.block.rotate ? request.rotation * 90 : 0);
|
draw.rotation = request.rotation;
|
||||||
|
|
||||||
|
if(last == null){
|
||||||
|
request.block.getPlaceDraw(draw, request.rotation, request.x, request.y, request.rotation);
|
||||||
|
}else{
|
||||||
|
request.block.getPlaceDraw(draw, request.rotation, last.x - request.x, last.y - request.y, last.rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
TextureRegion region = draw.region;
|
||||||
|
|
||||||
|
Draw.rect(region,
|
||||||
|
request.x * tilesize + request.block.offset(), request.y * tilesize + request.block.offset(),
|
||||||
|
region.getWidth() * 1f * Draw.scl * draw.scalex,
|
||||||
|
region.getHeight() * 1f * Draw.scl * draw.scaley, request.block.rotate ? draw.rotation * 90 : 0);
|
||||||
|
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
Point2 p = Geometry.d8edge[i];
|
||||||
|
float offset = -Math.max(request.block.size-1, 0)/2f * tilesize;
|
||||||
|
if(i % 2 == 0) Draw.rect("block-select", request.x * tilesize + request.block.offset() + offset * p.x, request.y * tilesize + request.block.offset() + offset * p.y, i * 90);
|
||||||
|
}
|
||||||
|
Draw.color();
|
||||||
|
|
||||||
Lines.square(
|
last = request;
|
||||||
request.x * tilesize + request.block.offset(),
|
|
||||||
request.y * tilesize + request.block.offset(),
|
|
||||||
rad);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -584,6 +594,8 @@ public class Player extends Unit implements BuilderTrait, ShooterTrait{
|
|||||||
|
|
||||||
if(!ui.chatfrag.chatOpen()){
|
if(!ui.chatfrag.chatOpen()){
|
||||||
velocity.add(movement.x, movement.y);
|
velocity.add(movement.x, movement.y);
|
||||||
|
}else{
|
||||||
|
isShooting = false;
|
||||||
}
|
}
|
||||||
float prex = x, prey = y;
|
float prex = x, prey = y;
|
||||||
updateVelocityStatus();
|
updateVelocityStatus();
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class Stats{
|
|||||||
|
|
||||||
//each new launch period adds onto the rank 'points'
|
//each new launch period adds onto the rank 'points'
|
||||||
if(wavesLasted >= zone.conditionWave){
|
if(wavesLasted >= zone.conditionWave){
|
||||||
score += (float)((wavesLasted - zone.conditionWave) / zone.launchPeriod + 1) * 1.3f;
|
score += (float)((wavesLasted - zone.conditionWave) / zone.launchPeriod + 1) * 1.2f;
|
||||||
}
|
}
|
||||||
|
|
||||||
int capacity = zone.loadout.core().itemCapacity;
|
int capacity = zone.loadout.core().itemCapacity;
|
||||||
@@ -42,7 +42,7 @@ public class Stats{
|
|||||||
frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size;
|
frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size;
|
||||||
}
|
}
|
||||||
|
|
||||||
score += frac*2.0f;
|
score += frac*1.6f;
|
||||||
|
|
||||||
if(!launched){
|
if(!launched){
|
||||||
score *= 0.5f;
|
score *= 0.5f;
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ public enum Binding implements KeyBind{
|
|||||||
deselect(KeyCode.MOUSE_RIGHT),
|
deselect(KeyCode.MOUSE_RIGHT),
|
||||||
break_block(KeyCode.MOUSE_RIGHT),
|
break_block(KeyCode.MOUSE_RIGHT),
|
||||||
rotate(new Axis(KeyCode.SCROLL)),
|
rotate(new Axis(KeyCode.SCROLL)),
|
||||||
|
diagonal_placement(KeyCode.CONTROL_LEFT),
|
||||||
pick(KeyCode.MOUSE_MIDDLE),
|
pick(KeyCode.MOUSE_MIDDLE),
|
||||||
dash(KeyCode.SHIFT_LEFT),
|
dash(KeyCode.SHIFT_LEFT),
|
||||||
gridMode(KeyCode.GRAVE),
|
gridMode(KeyCode.GRAVE),
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ import io.anuke.arc.Graphics.Cursor;
|
|||||||
import io.anuke.arc.Graphics.Cursor.SystemCursor;
|
import io.anuke.arc.Graphics.Cursor.SystemCursor;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.arc.graphics.g2d.Draw;
|
||||||
import io.anuke.arc.graphics.g2d.Lines;
|
import io.anuke.arc.graphics.g2d.Lines;
|
||||||
import io.anuke.arc.graphics.g2d.TextureRegion;
|
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.arc.math.geom.Geometry;
|
import io.anuke.arc.math.geom.Geometry;
|
||||||
import io.anuke.arc.math.geom.Point2;
|
import io.anuke.arc.math.geom.Point2;
|
||||||
@@ -17,7 +16,6 @@ import io.anuke.mindustry.input.PlaceUtils.NormalizeDrawResult;
|
|||||||
import io.anuke.mindustry.input.PlaceUtils.NormalizeResult;
|
import io.anuke.mindustry.input.PlaceUtils.NormalizeResult;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Block.Icon;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
@@ -34,33 +32,35 @@ public class DesktopInput extends InputHandler{
|
|||||||
/**Animation scale for line.*/
|
/**Animation scale for line.*/
|
||||||
private float selectScale;
|
private float selectScale;
|
||||||
|
|
||||||
|
private int prevX, prevY, prevRotation;
|
||||||
|
|
||||||
public DesktopInput(Player player){
|
public DesktopInput(Player player){
|
||||||
super(player);
|
super(player);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**Draws a placement icon for a specific block.*/
|
/**Draws a placement icon for a specific block.*/
|
||||||
void drawPlace(int x, int y, Block block, int rotation){
|
void drawPlace(int x, int y, Block block, int rotation, int prevX, int prevY, int prevRotation){
|
||||||
if(validPlace(x, y, block, rotation)){
|
if(validPlace(x, y, block, rotation)){
|
||||||
|
block.getPlaceDraw(placeDraw, rotation, prevX, prevY, prevRotation);
|
||||||
|
|
||||||
Draw.color();
|
Draw.color();
|
||||||
|
Draw.rect(placeDraw.region, x * tilesize + block.offset(), y * tilesize + block.offset(),
|
||||||
TextureRegion region = block.icon(Icon.full);
|
placeDraw.region.getWidth() * selectScale * Draw.scl * placeDraw.scalex,
|
||||||
|
placeDraw.region.getHeight() * selectScale * Draw.scl * placeDraw.scaley,
|
||||||
Draw.rect(region, x * tilesize + block.offset(), y * tilesize + block.offset(),
|
block.rotate ? placeDraw.rotation * 90 : 0);
|
||||||
region.getWidth() * selectScale * Draw.scl,
|
|
||||||
region.getHeight() * selectScale * Draw.scl, block.rotate ? rotation * 90 : 0);
|
|
||||||
|
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
for(int i = 0; i < 4; i++){
|
for(int i = 0; i < 4; i++){
|
||||||
Point2 p = Geometry.d8edge[i];
|
Point2 p = Geometry.d8edge[i];
|
||||||
float offset = -Math.max(block.size-1, 0)/2f * tilesize;
|
float offset = -Math.max(block.size-1, 0)/2f * tilesize;
|
||||||
Draw.rect("block-select", x * tilesize + block.offset() + offset * p.x, y * tilesize + block.offset() + offset * p.y, i * 90);
|
if(i % 2 == 0)Draw.rect("block-select", x * tilesize + block.offset() + offset * p.x, y * tilesize + block.offset() + offset * p.y, i * 90);
|
||||||
}
|
}
|
||||||
Draw.color();
|
Draw.color();
|
||||||
}else{
|
}else{
|
||||||
Draw.color(Pal.removeBack);
|
Draw.color(Pal.removeBack);
|
||||||
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset() - 1, block.size * tilesize / 2f);
|
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset() - 1, block.size * tilesize / 2f - 1);
|
||||||
Draw.color(Pal.remove);
|
Draw.color(Pal.remove);
|
||||||
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset(), block.size * tilesize / 2f);
|
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset(), block.size * tilesize / 2f - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -77,32 +77,21 @@ public class DesktopInput extends InputHandler{
|
|||||||
|
|
||||||
//draw selection(s)
|
//draw selection(s)
|
||||||
if(mode == placing && block != null){
|
if(mode == placing && block != null){
|
||||||
NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, true, maxLength);
|
prevX = selectX;
|
||||||
|
prevY = selectY;
|
||||||
|
prevRotation = rotation;
|
||||||
|
|
||||||
for(int i = 0; i <= result.getLength(); i += block.size){
|
iterateLine(selectX, selectY, cursorX, cursorY, l -> {
|
||||||
int x = selectX + i * Mathf.sign(cursorX - selectX) * Mathf.num(result.isX());
|
if(l.last && block.rotate){
|
||||||
int y = selectY + i * Mathf.sign(cursorY - selectY) * Mathf.num(!result.isX());
|
drawArrow(block, l.x, l.y, l.rotation);
|
||||||
|
|
||||||
if(i + block.size > result.getLength() && block.rotate){
|
|
||||||
Draw.color(!validPlace(x, y, block, result.rotation) ? Pal.removeBack : Pal.accentBack);
|
|
||||||
Draw.rect(Core.atlas.find("place-arrow"),
|
|
||||||
x * tilesize + block.offset(),
|
|
||||||
y * tilesize + block.offset() - 1,
|
|
||||||
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
|
||||||
Core.atlas.find("place-arrow").getHeight() * Draw.scl, result.rotation * 90 - 90);
|
|
||||||
|
|
||||||
Draw.color(!validPlace(x, y, block, result.rotation) ? Pal.remove : Pal.accent);
|
|
||||||
Draw.rect(Core.atlas.find("place-arrow"),
|
|
||||||
x * tilesize + block.offset(),
|
|
||||||
y * tilesize + block.offset(),
|
|
||||||
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
|
||||||
Core.atlas.find("place-arrow").getHeight() * Draw.scl, result.rotation * 90 - 90);
|
|
||||||
}
|
}
|
||||||
|
drawPlace(l.x, l.y, block, l.rotation, prevX - l.x, prevY - l.y, prevRotation);
|
||||||
|
|
||||||
drawPlace(x, y, block, result.rotation);
|
prevX = l.x;
|
||||||
}
|
prevY = l.y;
|
||||||
|
prevRotation = l.rotation;
|
||||||
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
}else if(mode == breaking){
|
}else if(mode == breaking){
|
||||||
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, selectX, selectY, cursorX, cursorY, false, maxLength, 1f);
|
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, selectX, selectY, cursorX, cursorY, false, maxLength, 1f);
|
||||||
NormalizeResult dresult = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, false, maxLength);
|
NormalizeResult dresult = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, false, maxLength);
|
||||||
@@ -126,21 +115,9 @@ public class DesktopInput extends InputHandler{
|
|||||||
Lines.rect(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
|
Lines.rect(result.x, result.y, result.x2 - result.x, result.y2 - result.y);
|
||||||
}else if(isPlacing()){
|
}else if(isPlacing()){
|
||||||
if(block.rotate){
|
if(block.rotate){
|
||||||
Draw.color(!validPlace(cursorX, cursorY, block, rotation) ? Pal.removeBack : Pal.accentBack);
|
drawArrow(block, cursorX, cursorY, rotation);
|
||||||
Draw.rect(Core.atlas.find("place-arrow"),
|
|
||||||
cursorX * tilesize + block.offset(),
|
|
||||||
cursorY * tilesize + block.offset() - 1,
|
|
||||||
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
|
||||||
Core.atlas.find("place-arrow").getHeight() * Draw.scl, rotation * 90 - 90);
|
|
||||||
|
|
||||||
Draw.color(!validPlace(cursorX, cursorY, block, rotation) ? Pal.remove : Pal.accent);
|
|
||||||
Draw.rect(Core.atlas.find("place-arrow"),
|
|
||||||
cursorX * tilesize + block.offset(),
|
|
||||||
cursorY * tilesize + block.offset(),
|
|
||||||
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
|
||||||
Core.atlas.find("place-arrow").getHeight() * Draw.scl, rotation * 90 - 90);
|
|
||||||
}
|
}
|
||||||
drawPlace(cursorX, cursorY, block, rotation);
|
drawPlace(cursorX, cursorY, block, rotation, cursorX, cursorY, rotation);
|
||||||
block.drawPlace(cursorX, cursorY, rotation, validPlace(cursorX, cursorY, block, rotation));
|
block.drawPlace(cursorX, cursorY, rotation, validPlace(cursorX, cursorY, block, rotation));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,7 +143,10 @@ public class DesktopInput extends InputHandler{
|
|||||||
|
|
||||||
//renderer.minimap.zoomBy(-Core.input.axisTap(Binding.zoom_minimap));
|
//renderer.minimap.zoomBy(-Core.input.axisTap(Binding.zoom_minimap));
|
||||||
|
|
||||||
if(player.isDead()) return;
|
if(player.isDead()){
|
||||||
|
cursorType = SystemCursor.arrow;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
pollInput();
|
pollInput();
|
||||||
|
|
||||||
@@ -190,9 +170,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
|
|
||||||
Tile cursor = tileAt(Core.input.mouseX(), Core.input.mouseY());
|
Tile cursor = tileAt(Core.input.mouseX(), Core.input.mouseY());
|
||||||
|
|
||||||
if(player.isDead()){
|
if(cursor != null){
|
||||||
cursorType = SystemCursor.arrow;
|
|
||||||
}else if(cursor != null){
|
|
||||||
cursor = cursor.target();
|
cursor = cursor.target();
|
||||||
|
|
||||||
cursorType = cursor.block().getCursor(cursor);
|
cursorType = cursor.block().getCursor(cursor);
|
||||||
@@ -255,20 +233,13 @@ public class DesktopInput extends InputHandler{
|
|||||||
selectY = tileY(Core.input.mouseY());
|
selectY = tileY(Core.input.mouseY());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(Core.input.keyRelease(Binding.break_block) || Core.input.keyRelease(Binding.select)){
|
if(Core.input.keyRelease(Binding.break_block) || Core.input.keyRelease(Binding.select)){
|
||||||
|
|
||||||
if(mode == placing && block != null){ //touch up while placing, place everything in selection
|
if(mode == placing && block != null){ //touch up while placing, place everything in selection
|
||||||
NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, true, maxLength);
|
iterateLine(selectX, selectY, cursorX, cursorY, l -> {
|
||||||
|
rotation = l.rotation;
|
||||||
for(int i = 0; i <= result.getLength(); i += block.size){
|
tryPlaceBlock(l.x, l.y);
|
||||||
int x = selectX + i * Mathf.sign(cursorX - selectX) * Mathf.num(result.isX());
|
});
|
||||||
int y = selectY + i * Mathf.sign(cursorY - selectY) * Mathf.num(!result.isX());
|
|
||||||
|
|
||||||
rotation = result.rotation;
|
|
||||||
|
|
||||||
tryPlaceBlock(x, y);
|
|
||||||
}
|
|
||||||
}else if(mode == breaking){ //touch up while breaking, break everything in selection
|
}else if(mode == breaking){ //touch up while breaking, break everything in selection
|
||||||
NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, false, maxLength);
|
NormalizeResult result = PlaceUtils.normalizeArea(selectX, selectY, cursorX, cursorY, rotation, false, maxLength);
|
||||||
for(int x = 0; x <= Math.abs(result.x2 - result.x); x++){
|
for(int x = 0; x <= Math.abs(result.x2 - result.x); x++){
|
||||||
@@ -287,7 +258,6 @@ public class DesktopInput extends InputHandler{
|
|||||||
|
|
||||||
mode = none;
|
mode = none;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -312,5 +282,4 @@ public class DesktopInput extends InputHandler{
|
|||||||
droppingItem = false;
|
droppingItem = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,13 +3,19 @@ package io.anuke.mindustry.input;
|
|||||||
import io.anuke.annotations.Annotations.Loc;
|
import io.anuke.annotations.Annotations.Loc;
|
||||||
import io.anuke.annotations.Annotations.Remote;
|
import io.anuke.annotations.Annotations.Remote;
|
||||||
import io.anuke.arc.Core;
|
import io.anuke.arc.Core;
|
||||||
|
import io.anuke.arc.collection.Array;
|
||||||
|
import io.anuke.arc.function.Consumer;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.Color;
|
||||||
|
import io.anuke.arc.graphics.g2d.Draw;
|
||||||
|
import io.anuke.arc.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.arc.input.InputProcessor;
|
import io.anuke.arc.input.InputProcessor;
|
||||||
import io.anuke.arc.math.Angles;
|
import io.anuke.arc.math.Angles;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
|
import io.anuke.arc.math.geom.Point2;
|
||||||
import io.anuke.arc.math.geom.Vector2;
|
import io.anuke.arc.math.geom.Vector2;
|
||||||
import io.anuke.arc.scene.ui.layout.Table;
|
import io.anuke.arc.scene.ui.layout.Table;
|
||||||
import io.anuke.arc.util.Time;
|
import io.anuke.arc.util.Time;
|
||||||
|
import io.anuke.arc.util.Tmp;
|
||||||
import io.anuke.mindustry.content.Blocks;
|
import io.anuke.mindustry.content.Blocks;
|
||||||
import io.anuke.mindustry.content.Fx;
|
import io.anuke.mindustry.content.Fx;
|
||||||
import io.anuke.mindustry.entities.Effects;
|
import io.anuke.mindustry.entities.Effects;
|
||||||
@@ -17,6 +23,7 @@ import io.anuke.mindustry.entities.effect.ItemTransfer;
|
|||||||
import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
|
import io.anuke.mindustry.entities.traits.BuilderTrait.BuildRequest;
|
||||||
import io.anuke.mindustry.entities.type.Player;
|
import io.anuke.mindustry.entities.type.Player;
|
||||||
import io.anuke.mindustry.gen.Call;
|
import io.anuke.mindustry.gen.Call;
|
||||||
|
import io.anuke.mindustry.graphics.Pal;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
import io.anuke.mindustry.net.ValidateException;
|
import io.anuke.mindustry.net.ValidateException;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
@@ -44,6 +51,9 @@ public abstract class InputHandler implements InputProcessor{
|
|||||||
public int rotation;
|
public int rotation;
|
||||||
public boolean droppingItem;
|
public boolean droppingItem;
|
||||||
|
|
||||||
|
protected PlaceDraw placeDraw = new PlaceDraw();
|
||||||
|
private PlaceLine line = new PlaceLine();
|
||||||
|
|
||||||
public InputHandler(Player player){
|
public InputHandler(Player player){
|
||||||
this.player = player;
|
this.player = player;
|
||||||
}
|
}
|
||||||
@@ -337,4 +347,67 @@ public abstract class InputHandler implements InputProcessor{
|
|||||||
player.addBuildRequest(new BuildRequest(tile.x, tile.y));
|
player.addBuildRequest(new BuildRequest(tile.x, tile.y));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void drawArrow(Block block, int x, int y, int rotation){
|
||||||
|
Draw.color(!validPlace(x, y, block, rotation) ? Pal.removeBack : Pal.accentBack);
|
||||||
|
Draw.rect(Core.atlas.find("place-arrow"),
|
||||||
|
x * tilesize + block.offset(),
|
||||||
|
y * tilesize + block.offset() - 1,
|
||||||
|
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
||||||
|
Core.atlas.find("place-arrow").getHeight() * Draw.scl, rotation * 90 - 90);
|
||||||
|
|
||||||
|
Draw.color(!validPlace(x, y, block, rotation) ? Pal.remove : Pal.accent);
|
||||||
|
Draw.rect(Core.atlas.find("place-arrow"),
|
||||||
|
x * tilesize + block.offset(),
|
||||||
|
y * tilesize + block.offset(),
|
||||||
|
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
||||||
|
Core.atlas.find("place-arrow").getHeight() * Draw.scl, rotation * 90 - 90);
|
||||||
|
}
|
||||||
|
|
||||||
|
void iterateLine(int startX, int startY, int endX, int endY, Consumer<PlaceLine> cons){
|
||||||
|
Array<Point2> points;
|
||||||
|
boolean diagonal = Core.input.keyDown(Binding.diagonal_placement);
|
||||||
|
if(Core.settings.getBool("swapdiagonal")){
|
||||||
|
diagonal = !diagonal;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(diagonal){
|
||||||
|
points = PlaceUtils.normalizeDiagonal(startX, startY, endX, endY);
|
||||||
|
}else{
|
||||||
|
points = PlaceUtils.normalizeLine(startX, startY, endX, endY);
|
||||||
|
}
|
||||||
|
|
||||||
|
float angle = Angles.angle(startX, startY, endX, endY);
|
||||||
|
int baseRotation = (startX == endX && startY == endY) ? rotation : ((int)((angle + 45) / 90f)) % 4;
|
||||||
|
|
||||||
|
Tmp.r3.set(-1, -1, 0, 0);
|
||||||
|
|
||||||
|
for(int i = 0; i < points.size; i++){
|
||||||
|
Point2 point = points.get(i);
|
||||||
|
|
||||||
|
if(block != null && Tmp.r2.setSize(block.size * tilesize).setCenter(point.x*tilesize + block.offset(), point.y*tilesize + block.offset()).overlaps(Tmp.r3)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
Point2 next = i == points.size - 1 ? null : points.get(i + 1);
|
||||||
|
line.x = point.x;
|
||||||
|
line.y = point.y;
|
||||||
|
line.rotation = next != null ? Tile.relativeTo(point.x, point.y, next.x, next.y) : baseRotation;
|
||||||
|
line.last = next == null;
|
||||||
|
cons.accept(line);
|
||||||
|
|
||||||
|
Tmp.r3.setSize(block.size * tilesize).setCenter(point.x*tilesize + block.offset(), point.y*tilesize + block.offset());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static class PlaceDraw{
|
||||||
|
public int rotation, scalex, scaley;
|
||||||
|
public TextureRegion region;
|
||||||
|
|
||||||
|
public static final PlaceDraw instance = new PlaceDraw();
|
||||||
|
}
|
||||||
|
|
||||||
|
class PlaceLine{
|
||||||
|
public int x, y, rotation;
|
||||||
|
public boolean last;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -34,7 +34,6 @@ import io.anuke.mindustry.input.PlaceUtils.NormalizeDrawResult;
|
|||||||
import io.anuke.mindustry.input.PlaceUtils.NormalizeResult;
|
import io.anuke.mindustry.input.PlaceUtils.NormalizeResult;
|
||||||
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
|
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Block.Icon;
|
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
@@ -50,7 +49,6 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
//gesture data
|
//gesture data
|
||||||
private Vector2 vector = new Vector2();
|
private Vector2 vector = new Vector2();
|
||||||
private float lastDistance = -1f;
|
private float lastDistance = -1f;
|
||||||
private boolean canPan;
|
|
||||||
/** Set of completed guides. */
|
/** Set of completed guides. */
|
||||||
private ObjectSet<String> guides = new ObjectSet<>();
|
private ObjectSet<String> guides = new ObjectSet<>();
|
||||||
|
|
||||||
@@ -62,6 +60,8 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
/** Animation data for crosshair. */
|
/** Animation data for crosshair. */
|
||||||
private float crosshairScale;
|
private float crosshairScale;
|
||||||
private TargetTrait lastTarget;
|
private TargetTrait lastTarget;
|
||||||
|
/** Used for shifting build requests.*/
|
||||||
|
private float shiftDeltaX, shiftDeltaY;
|
||||||
|
|
||||||
/** List of currently selected tiles to place. */
|
/** List of currently selected tiles to place. */
|
||||||
private Array<PlaceRequest> selection = new Array<>();
|
private Array<PlaceRequest> selection = new Array<>();
|
||||||
@@ -78,6 +78,8 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
/** Last placed request. Used for drawing block overlay. */
|
/** Last placed request. Used for drawing block overlay. */
|
||||||
private PlaceRequest lastPlaced;
|
private PlaceRequest lastPlaced;
|
||||||
|
|
||||||
|
private int prevX, prevY, prevRotation;
|
||||||
|
|
||||||
public MobileInput(Player player){
|
public MobileInput(Player player){
|
||||||
super(player);
|
super(player);
|
||||||
Core.input.addProcessor(new GestureDetector(20, 0.5f, 0.4f, 0.15f, this));
|
Core.input.addProcessor(new GestureDetector(20, 0.5f, 0.4f, 0.15f, this));
|
||||||
@@ -167,42 +169,6 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
removals.add(request);
|
removals.add(request);
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawRequest(PlaceRequest request){
|
|
||||||
Tile tile = request.tile();
|
|
||||||
|
|
||||||
if(!request.remove){
|
|
||||||
//draw placing request
|
|
||||||
float offset = request.block.offset();
|
|
||||||
TextureRegion region = request.block.icon(Icon.full);
|
|
||||||
|
|
||||||
Draw.mixcol(Pal.accent, Mathf.clamp((1f - request.scale) / 0.5f));
|
|
||||||
Draw.tint(Color.WHITE, Pal.breakInvalid, request.redness);
|
|
||||||
|
|
||||||
Draw.rect(region, tile.worldx() + offset, tile.worldy() + offset,
|
|
||||||
region.getWidth() * request.scale * Draw.scl,
|
|
||||||
region.getHeight() * request.scale * Draw.scl,
|
|
||||||
request.block.rotate ? request.rotation * 90 : 0);
|
|
||||||
|
|
||||||
Draw.mixcol(Pal.accent, 1f);
|
|
||||||
for(int i = 0; i < 4; i++){
|
|
||||||
Point2 p = Geometry.d8edge[i];
|
|
||||||
float poffset = -Math.max(request.block.size-1, 0)/2f * tilesize;
|
|
||||||
TextureRegion find = Core.atlas.find("block-select");
|
|
||||||
Draw.rect("block-select", request.tile().x * tilesize + request.block.offset() + poffset * p.x, request.tile().y * tilesize + request.block.offset() + poffset * p.y,
|
|
||||||
find.getWidth() * Draw.scl * request.scale, find.getHeight() * Draw.scl * request.scale, i * 90);
|
|
||||||
}
|
|
||||||
Draw.color();
|
|
||||||
}else{
|
|
||||||
float rad = (tile.block().size * tilesize / 2f - 1) * request.scale;
|
|
||||||
Draw.mixcol();
|
|
||||||
//draw removing request
|
|
||||||
Draw.tint(Pal.removeBack);
|
|
||||||
Lines.square(tile.drawx(), tile.drawy()-1, rad);
|
|
||||||
Draw.tint(Pal.remove);
|
|
||||||
Lines.square(tile.drawx(), tile.drawy(), rad);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void showGuide(String type){
|
void showGuide(String type){
|
||||||
if(!guides.contains(type) && !Core.settings.getBool(type, false)){
|
if(!guides.contains(type) && !Core.settings.getBool(type, false)){
|
||||||
FloatingDialog dialog = new FloatingDialog("$" + type + ".title");
|
FloatingDialog dialog = new FloatingDialog("$" + type + ".title");
|
||||||
@@ -219,26 +185,76 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void drawPlaceArrow(Block block, int x, int y, int rotation){
|
//endregion
|
||||||
if(!block.rotate) return;
|
//region UI and drawing
|
||||||
Draw.color(!validPlace(x, y, block, rotation) ? Pal.removeBack : Pal.accentBack);
|
|
||||||
Draw.rect(Core.atlas.find("place-arrow"),
|
|
||||||
x * tilesize + block.offset(),
|
|
||||||
y * tilesize + block.offset() - 1,
|
|
||||||
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
|
||||||
Core.atlas.find("place-arrow").getHeight() * Draw.scl, rotation * 90 - 90);
|
|
||||||
|
|
||||||
Draw.color(!validPlace(x, y, block, rotation) ? Pal.remove : Pal.accent);
|
void drawRequest(PlaceRequest request, PlaceRequest prev){
|
||||||
Draw.rect(Core.atlas.find("place-arrow"),
|
Tile tile = request.tile();
|
||||||
x * tilesize + block.offset(),
|
|
||||||
y * tilesize + block.offset(),
|
if(!request.remove){
|
||||||
Core.atlas.find("place-arrow").getWidth() * Draw.scl,
|
if(prev != null){
|
||||||
Core.atlas.find("place-arrow").getHeight() * Draw.scl, rotation * 90 - 90);
|
block.getPlaceDraw(placeDraw, request.rotation, prev.x - request.x, prev.y - request.y, prev.rotation);
|
||||||
|
}else{
|
||||||
|
block.getPlaceDraw(placeDraw, request.rotation, 0, 0, request.rotation);
|
||||||
|
}
|
||||||
|
|
||||||
|
//draw placing request
|
||||||
|
float offset = request.block.offset();
|
||||||
|
TextureRegion region = placeDraw.region;
|
||||||
|
|
||||||
|
Draw.mixcol(Pal.accent, Mathf.clamp((1f - request.scale) / 0.5f));
|
||||||
|
Draw.tint(Color.WHITE, Pal.breakInvalid, request.redness);
|
||||||
|
|
||||||
|
Draw.rect(region, tile.worldx() + offset, tile.worldy() + offset,
|
||||||
|
region.getWidth() * request.scale * Draw.scl * placeDraw.scalex,
|
||||||
|
region.getHeight() * request.scale * Draw.scl * placeDraw.scaley,
|
||||||
|
request.block.rotate ? placeDraw.rotation * 90 : 0);
|
||||||
|
|
||||||
|
Draw.mixcol(Pal.accent, 1f);
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
Point2 p = Geometry.d8edge[i];
|
||||||
|
float poffset = -Math.max(request.block.size-1, 0)/2f * tilesize;
|
||||||
|
TextureRegion find = Core.atlas.find("block-select");
|
||||||
|
if(i%2 == 0) Draw.rect("block-select", request.tile().x * tilesize + request.block.offset() + poffset * p.x, request.tile().y * tilesize + request.block.offset() + poffset * p.y,
|
||||||
|
find.getWidth() * Draw.scl * request.scale, find.getHeight() * Draw.scl * request.scale, i * 90);
|
||||||
|
}
|
||||||
|
Draw.color();
|
||||||
|
}else{
|
||||||
|
float rad = (tile.block().size * tilesize / 2f - 1) * request.scale;
|
||||||
|
Draw.mixcol();
|
||||||
|
//draw removing request
|
||||||
|
Draw.tint(Pal.removeBack);
|
||||||
|
Lines.square(tile.drawx(), tile.drawy()-1, rad);
|
||||||
|
Draw.tint(Pal.remove);
|
||||||
|
Lines.square(tile.drawx(), tile.drawy(), rad);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//endregion
|
/**Draws a placement icon for a specific block.*/
|
||||||
|
void drawPlace(int x, int y, Block block, int rotation, int prevX, int prevY, int prevRotation){
|
||||||
|
if(validPlace(x, y, block, rotation)){
|
||||||
|
block.getPlaceDraw(placeDraw, rotation, prevX, prevY, prevRotation);
|
||||||
|
|
||||||
//region UI and drawing
|
Draw.color();
|
||||||
|
Draw.rect(placeDraw.region, x * tilesize + block.offset(), y * tilesize + block.offset(),
|
||||||
|
placeDraw.region.getWidth() * Draw.scl * placeDraw.scalex,
|
||||||
|
placeDraw.region.getHeight() * Draw.scl * placeDraw.scaley,
|
||||||
|
block.rotate ? placeDraw.rotation * 90 : 0);
|
||||||
|
|
||||||
|
Draw.color(Pal.accent);
|
||||||
|
for(int i = 0; i < 4; i++){
|
||||||
|
Point2 p = Geometry.d8edge[i];
|
||||||
|
float offset = -Math.max(block.size-1, 0)/2f * tilesize;
|
||||||
|
if(i % 2 == 0)Draw.rect("block-select", x * tilesize + block.offset() + offset * p.x, y * tilesize + block.offset() + offset * p.y, i * 90);
|
||||||
|
}
|
||||||
|
Draw.color();
|
||||||
|
}else{
|
||||||
|
Draw.color(Pal.removeBack);
|
||||||
|
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset() - 1, block.size * tilesize / 2f - 1);
|
||||||
|
Draw.color(Pal.remove);
|
||||||
|
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset(), block.size * tilesize / 2f - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void buildUI(Table table){
|
public void buildUI(Table table){
|
||||||
@@ -314,9 +330,11 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
request.scale = Mathf.lerpDelta(request.scale, 0f, 0.2f);
|
request.scale = Mathf.lerpDelta(request.scale, 0f, 0.2f);
|
||||||
request.redness = Mathf.lerpDelta(request.redness, 0f, 0.2f);
|
request.redness = Mathf.lerpDelta(request.redness, 0f, 0.2f);
|
||||||
|
|
||||||
drawRequest(request);
|
drawRequest(request, null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
PlaceRequest last = null;
|
||||||
|
|
||||||
//draw list of requests
|
//draw list of requests
|
||||||
for(PlaceRequest request : selection){
|
for(PlaceRequest request : selection){
|
||||||
Tile tile = request.tile();
|
Tile tile = request.tile();
|
||||||
@@ -336,17 +354,19 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
|
|
||||||
if(!request.remove && request == lastPlaced && request.block != null){
|
if(!request.remove && request == lastPlaced && request.block != null){
|
||||||
Draw.mixcol();
|
Draw.mixcol();
|
||||||
drawPlaceArrow(request.block, tile.x, tile.y, request.rotation);
|
drawArrow(request.block, tile.x, tile.y, request.rotation);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.mixcol(Tmp.c1, 1f);
|
Draw.mixcol(Tmp.c1, 1f);
|
||||||
drawRequest(request);
|
drawRequest(request, last);
|
||||||
|
|
||||||
//draw last placed request
|
//draw last placed request
|
||||||
if(!request.remove && request == lastPlaced && request.block != null){
|
if(!request.remove && request == lastPlaced && request.block != null){
|
||||||
Draw.mixcol();
|
Draw.mixcol();
|
||||||
request.block.drawPlace(tile.x, tile.y, rotation, validPlace(tile.x, tile.y, request.block, rotation));
|
request.block.drawPlace(tile.x, tile.y, rotation, validPlace(tile.x, tile.y, request.block, rotation));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
last = request;
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.mixcol();
|
Draw.mixcol();
|
||||||
@@ -357,51 +377,23 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
int tileX = tileX(Core.input.mouseX());
|
int tileX = tileX(Core.input.mouseX());
|
||||||
int tileY = tileY(Core.input.mouseY());
|
int tileY = tileY(Core.input.mouseY());
|
||||||
|
|
||||||
//draw placing
|
|
||||||
if(mode == placing && block != null){
|
if(mode == placing && block != null){
|
||||||
|
//draw placing
|
||||||
|
|
||||||
NormalizeDrawResult dresult = PlaceUtils.normalizeDrawArea(block, lineStartX, lineStartY, tileX, tileY, true, maxLength, lineScale);
|
prevX = lineStartX;
|
||||||
|
prevY = lineStartY;
|
||||||
|
prevRotation = rotation;
|
||||||
|
|
||||||
Lines.rect(dresult.x, dresult.y, dresult.x2 - dresult.x, dresult.y2 - dresult.y);
|
iterateLine(lineStartX, lineStartY, tileX, tileY, l -> {
|
||||||
|
if(l.last && block.rotate){
|
||||||
NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tileX, tileY, rotation, true, maxLength);
|
drawArrow(block, l.x, l.y, l.rotation);
|
||||||
|
|
||||||
{
|
|
||||||
int x = lineStartX + result.getLength() * Mathf.sign(tileX - lineStartX) * Mathf.num(result.isX());
|
|
||||||
int y = lineStartY + result.getLength() * Mathf.sign(tileY - lineStartY) * Mathf.num(!result.isX());
|
|
||||||
drawPlaceArrow(block, x, y, result.rotation);
|
|
||||||
}
|
|
||||||
|
|
||||||
//go through each cell and draw the block to place if valid
|
|
||||||
for(int i = 0; i <= result.getLength(); i += block.size){
|
|
||||||
int x = lineStartX + i * Mathf.sign(tileX - lineStartX) * Mathf.num(result.isX());
|
|
||||||
int y = lineStartY + i * Mathf.sign(tileY - lineStartY) * Mathf.num(!result.isX());
|
|
||||||
|
|
||||||
if(!checkOverlapPlacement(x, y, block) && validPlace(x, y, block, result.rotation)){
|
|
||||||
Draw.color();
|
|
||||||
|
|
||||||
TextureRegion region = block.icon(Icon.full);
|
|
||||||
|
|
||||||
Draw.rect(region, x * tilesize + block.offset(), y * tilesize + block.offset(),
|
|
||||||
region.getWidth() * lineScale * Draw.scl,
|
|
||||||
region.getHeight() * lineScale * Draw.scl,
|
|
||||||
block.rotate ? result.rotation * 90 : 0);
|
|
||||||
|
|
||||||
Draw.color(Pal.accent);
|
|
||||||
for(int j = 0; j < 4; j++){
|
|
||||||
Point2 p = Geometry.d8edge[j];
|
|
||||||
float offset = -Math.max(block.size-1, 0)/2f * tilesize;
|
|
||||||
Draw.rect("block-select", x * tilesize + block.offset() + offset * p.x, y * tilesize + block.offset() + offset * p.y,j * 90);
|
|
||||||
}
|
|
||||||
Draw.color();
|
|
||||||
}else{
|
|
||||||
Draw.color(Pal.removeBack);
|
|
||||||
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset() - 1, block.size * tilesize / 2f);
|
|
||||||
Draw.color(Pal.remove);
|
|
||||||
Lines.square(x * tilesize + block.offset(), y * tilesize + block.offset(), block.size * tilesize / 2f);
|
|
||||||
}
|
}
|
||||||
}
|
drawPlace(l.x, l.y, block, l.rotation, prevX - l.x, prevY - l.y, prevRotation);
|
||||||
|
|
||||||
|
prevX = l.x;
|
||||||
|
prevY = l.y;
|
||||||
|
prevRotation = l.rotation;
|
||||||
|
});
|
||||||
}else if(mode == breaking){
|
}else if(mode == breaking){
|
||||||
//draw breaking
|
//draw breaking
|
||||||
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, lineStartX, lineStartY, tileX, tileY, false, maxLength, 1f);
|
NormalizeDrawResult result = PlaceUtils.normalizeDrawArea(Blocks.air, lineStartX, lineStartY, tileX, tileY, false, maxLength, 1f);
|
||||||
@@ -487,28 +479,12 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
int tileX = tileX(screenX);
|
int tileX = tileX(screenX);
|
||||||
int tileY = tileY(screenY);
|
int tileY = tileY(screenY);
|
||||||
|
|
||||||
if(mode == placing && block != null){
|
if(mode == placing && isPlacing()){
|
||||||
|
iterateLine(lineStartX, lineStartY, tileX, tileY, l -> {
|
||||||
//normalize area
|
PlaceRequest request = new PlaceRequest(l.x, l.y, block, l.rotation);
|
||||||
NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tileX, tileY, rotation, true, 100);
|
request.scale = 1f;
|
||||||
|
selection.add(request);
|
||||||
rotation = result.rotation;
|
});
|
||||||
|
|
||||||
//place blocks on line
|
|
||||||
for(int i = 0; i <= result.getLength(); i += block.size){
|
|
||||||
int x = lineStartX + i * Mathf.sign(tileX - lineStartX) * Mathf.num(result.isX());
|
|
||||||
int y = lineStartY + i * Mathf.sign(tileY - lineStartY) * Mathf.num(!result.isX());
|
|
||||||
|
|
||||||
if(!checkOverlapPlacement(x, y, block) && validPlace(x, y, block, result.rotation)){
|
|
||||||
PlaceRequest request = new PlaceRequest(x * tilesize + block.offset(), y * tilesize + block.offset(), block, result.rotation);
|
|
||||||
request.scale = 1f;
|
|
||||||
selection.add(request);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//reset last placed for convenience
|
|
||||||
lastPlaced = null;
|
|
||||||
|
|
||||||
}else if(mode == breaking){
|
}else if(mode == breaking){
|
||||||
//normalize area
|
//normalize area
|
||||||
NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tileX, tileY, rotation, false, maxLength);
|
NormalizeResult result = PlaceUtils.normalizeArea(lineStartX, lineStartY, tileX, tileY, rotation, false, maxLength);
|
||||||
@@ -526,7 +502,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
tar = tar.target();
|
tar = tar.target();
|
||||||
|
|
||||||
if(!hasRequest(world.tile(tar.x, tar.y)) && validBreak(tar.x, tar.y)){
|
if(!hasRequest(world.tile(tar.x, tar.y)) && validBreak(tar.x, tar.y)){
|
||||||
PlaceRequest request = new PlaceRequest(tar.worldx(), tar.worldy());
|
PlaceRequest request = new PlaceRequest(tar.x, tar.y);
|
||||||
request.scale = 1f;
|
request.scale = 1f;
|
||||||
selection.add(request);
|
selection.add(request);
|
||||||
}
|
}
|
||||||
@@ -589,11 +565,11 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
removeRequest(getRequest(cursor));
|
removeRequest(getRequest(cursor));
|
||||||
}else if(mode == placing && isPlacing() && validPlace(cursor.x, cursor.y, block, rotation) && !checkOverlapPlacement(cursor.x, cursor.y, block)){
|
}else if(mode == placing && isPlacing() && validPlace(cursor.x, cursor.y, block, rotation) && !checkOverlapPlacement(cursor.x, cursor.y, block)){
|
||||||
//add to selection queue if it's a valid place position
|
//add to selection queue if it's a valid place position
|
||||||
selection.add(lastPlaced = new PlaceRequest(cursor.worldx() + block.offset(), cursor.worldy() + block.offset(), block, rotation));
|
selection.add(lastPlaced = new PlaceRequest(cursor.x, cursor.y, block, rotation));
|
||||||
}else if(mode == breaking && validBreak(cursor.target().x, cursor.target().y) && !hasRequest(cursor.target())){
|
}else if(mode == breaking && validBreak(cursor.target().x, cursor.target().y) && !hasRequest(cursor.target())){
|
||||||
//add to selection queue if it's a valid BREAK position
|
//add to selection queue if it's a valid BREAK position
|
||||||
cursor = cursor.target();
|
cursor = cursor.target();
|
||||||
selection.add(new PlaceRequest(cursor.worldx(), cursor.worldy()));
|
selection.add(new PlaceRequest(cursor.x, cursor.y));
|
||||||
}else if(!canTapPlayer(worldx, worldy) && !tileTapped(cursor.target())){
|
}else if(!canTapPlayer(worldx, worldy) && !tileTapped(cursor.target())){
|
||||||
tryBeginMine(cursor);
|
tryBeginMine(cursor);
|
||||||
}
|
}
|
||||||
@@ -701,10 +677,21 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(selecting){ //pan all requests
|
if(selecting){ //pan all requests
|
||||||
for(PlaceRequest req : selection){
|
shiftDeltaX += deltaX;
|
||||||
if(req.remove) continue; //don't shift removal requests
|
shiftDeltaY += deltaY;
|
||||||
req.x += deltaX;
|
|
||||||
req.y += deltaY;
|
int shiftedX = (int)(shiftDeltaX / tilesize);
|
||||||
|
int shiftedY = (int)(shiftDeltaY / tilesize);
|
||||||
|
|
||||||
|
if(Math.abs(shiftedX) > 0 || Math.abs(shiftedY) > 0){
|
||||||
|
for(PlaceRequest req : selection){
|
||||||
|
if(req.remove) continue; //don't shift removal requests
|
||||||
|
req.x += shiftedX;
|
||||||
|
req.y += shiftedY;
|
||||||
|
}
|
||||||
|
|
||||||
|
shiftDeltaX %= tilesize;
|
||||||
|
shiftDeltaY %= tilesize;
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
//pan player
|
//pan player
|
||||||
@@ -715,6 +702,12 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean panStop(float x, float y, int pointer, KeyCode button){
|
||||||
|
shiftDeltaX = shiftDeltaY = 0f;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean zoom(float initialDistance, float distance){
|
public boolean zoom(float initialDistance, float distance){
|
||||||
if(lastDistance == -1) lastDistance = initialDistance;
|
if(lastDistance == -1) lastDistance = initialDistance;
|
||||||
@@ -727,8 +720,8 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
|
|
||||||
class PlaceRequest{
|
private class PlaceRequest{
|
||||||
float x, y;
|
int x, y;
|
||||||
Block block;
|
Block block;
|
||||||
int rotation;
|
int rotation;
|
||||||
boolean remove;
|
boolean remove;
|
||||||
@@ -737,7 +730,7 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
float scale;
|
float scale;
|
||||||
float redness;
|
float redness;
|
||||||
|
|
||||||
PlaceRequest(float x, float y, Block block, int rotation){
|
PlaceRequest(int x, int y, Block block, int rotation){
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.block = block;
|
this.block = block;
|
||||||
@@ -745,14 +738,14 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
this.remove = false;
|
this.remove = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
PlaceRequest(float x, float y){
|
PlaceRequest(int x, int y){
|
||||||
this.x = x;
|
this.x = x;
|
||||||
this.y = y;
|
this.y = y;
|
||||||
this.remove = true;
|
this.remove = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
Tile tile(){
|
Tile tile(){
|
||||||
return world.tileWorld(x - (block == null ? 0 : block.offset()), y - (block == null ? 0 : block.offset()));
|
return world.tile(x, y);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,13 +1,44 @@
|
|||||||
package io.anuke.mindustry.input;
|
package io.anuke.mindustry.input;
|
||||||
|
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.arc.collection.Array;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
|
import io.anuke.arc.math.geom.Bresenham2;
|
||||||
|
import io.anuke.arc.math.geom.Point2;
|
||||||
|
import io.anuke.arc.util.pooling.Pools;
|
||||||
|
import io.anuke.mindustry.world.Block;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.tilesize;
|
||||||
|
|
||||||
public class PlaceUtils{
|
public class PlaceUtils{
|
||||||
private static final NormalizeResult result = new NormalizeResult();
|
private static final NormalizeResult result = new NormalizeResult();
|
||||||
private static final NormalizeDrawResult drawResult = new NormalizeDrawResult();
|
private static final NormalizeDrawResult drawResult = new NormalizeDrawResult();
|
||||||
|
private static Bresenham2 bres = new Bresenham2();
|
||||||
|
private static Array<Point2> points = new Array<>();
|
||||||
|
|
||||||
|
/**Normalize a diagonal line into points. */
|
||||||
|
public static Array<Point2> normalizeDiagonal(int startX, int startY, int endX, int endY){
|
||||||
|
Pools.freeAll(points);
|
||||||
|
points.clear();
|
||||||
|
return bres.lineNoDiagonal(startX, startY, endX, endY, Pools.get(Point2.class, Point2::new), points);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**Normalize two points into one straight line, no diagonals.*/
|
||||||
|
public static Array<Point2> normalizeLine(int startX, int startY, int endX, int endY){
|
||||||
|
Pools.freeAll(points);
|
||||||
|
points.clear();
|
||||||
|
if(Math.abs(startX - endX) > Math.abs(startY - endY)){
|
||||||
|
//go width
|
||||||
|
for(int i = 0; i <= Math.abs(startX - endX); i++){
|
||||||
|
points.add(Pools.obtain(Point2.class, Point2::new).set(startX + i*Mathf.sign(endX - startX), startY));
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
//go height
|
||||||
|
for(int i = 0; i <= Math.abs(startY - endY); i++){
|
||||||
|
points.add(Pools.obtain(Point2.class, Point2::new).set(startX, startY + i*Mathf.sign(endY - startY)));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return points;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Normalizes a placement area and returns the result, ready to be used for drawing a rectangle.
|
* Normalizes a placement area and returns the result, ready to be used for drawing a rectangle.
|
||||||
|
|||||||
@@ -25,7 +25,7 @@ import static io.anuke.mindustry.Vars.world;
|
|||||||
public class MapGenerator extends Generator{
|
public class MapGenerator extends Generator{
|
||||||
private Map map;
|
private Map map;
|
||||||
private String mapName;
|
private String mapName;
|
||||||
private Array<Decoration> decorations = new Array<>();
|
private Array<Decoration> decorations = Array.with(new Decoration(Blocks.stone, Blocks.rock, 0.003f));
|
||||||
private Loadout loadout;
|
private Loadout loadout;
|
||||||
/**How much the landscape is randomly distorted.*/
|
/**How much the landscape is randomly distorted.*/
|
||||||
public float distortion = 3;
|
public float distortion = 3;
|
||||||
@@ -99,6 +99,10 @@ public class MapGenerator extends Generator{
|
|||||||
enemies.add(new Point2(x, y));
|
enemies.add(new Point2(x, y));
|
||||||
tiles[x][y].setBlock(Blocks.air);
|
tiles[x][y].setBlock(Blocks.air);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(tiles[x][y].block() == Blocks.part){
|
||||||
|
tiles[x][y].setBlock(Blocks.air);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -120,9 +124,14 @@ public class MapGenerator extends Generator{
|
|||||||
|
|
||||||
if(distortFloor){
|
if(distortFloor){
|
||||||
tile.setFloor(tiles[newX][newY].floor());
|
tile.setFloor(tiles[newX][newY].floor());
|
||||||
|
tile.setOre(tiles[newX][newY].ore());
|
||||||
}
|
}
|
||||||
|
|
||||||
for(Decoration decor : decorations){
|
for(Decoration decor : decorations){
|
||||||
|
if(x > 0 && y > 0 && (tiles[x - 1][y].block() == decor.wall || tiles[x][y - 1].block() == decor.wall)){
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if(tile.block() == Blocks.air && !(decor.wall instanceof Floor) && tile.floor() == decor.floor && Mathf.chance(decor.chance)){
|
if(tile.block() == Blocks.air && !(decor.wall instanceof Floor) && tile.floor() == decor.floor && Mathf.chance(decor.chance)){
|
||||||
tile.setBlock(decor.wall);
|
tile.setBlock(decor.wall);
|
||||||
}else if(tile.floor() == decor.floor && decor.wall instanceof Floor && Mathf.chance(decor.chance)){
|
}else if(tile.floor() == decor.floor && decor.wall instanceof Floor && Mathf.chance(decor.chance)){
|
||||||
|
|||||||
@@ -124,6 +124,7 @@ public class SettingsMenuDialog extends SettingsDialog{
|
|||||||
|
|
||||||
game.screenshakePref();
|
game.screenshakePref();
|
||||||
game.checkPref("effects", true);
|
game.checkPref("effects", true);
|
||||||
|
game.checkPref("swapdiagonal", false);
|
||||||
if(mobile){
|
if(mobile){
|
||||||
game.checkPref("autotarget", true);
|
game.checkPref("autotarget", true);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import io.anuke.arc.Core;
|
|||||||
import io.anuke.arc.Events;
|
import io.anuke.arc.Events;
|
||||||
import io.anuke.arc.collection.Array;
|
import io.anuke.arc.collection.Array;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.Color;
|
||||||
|
import io.anuke.arc.input.KeyCode;
|
||||||
import io.anuke.arc.math.Interpolation;
|
import io.anuke.arc.math.Interpolation;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.arc.scene.Element;
|
import io.anuke.arc.scene.Element;
|
||||||
@@ -31,6 +32,7 @@ import io.anuke.mindustry.net.Net;
|
|||||||
import io.anuke.mindustry.net.Packets.AdminAction;
|
import io.anuke.mindustry.net.Packets.AdminAction;
|
||||||
import io.anuke.mindustry.ui.Bar;
|
import io.anuke.mindustry.ui.Bar;
|
||||||
import io.anuke.mindustry.ui.IntFormat;
|
import io.anuke.mindustry.ui.IntFormat;
|
||||||
|
import io.anuke.mindustry.ui.dialogs.FloatingDialog;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
@@ -222,16 +224,37 @@ public class HudFragment extends Fragment{
|
|||||||
//launch button
|
//launch button
|
||||||
parent.fill(t -> {
|
parent.fill(t -> {
|
||||||
t.top().visible(() -> !state.is(State.menu));
|
t.top().visible(() -> !state.is(State.menu));
|
||||||
|
TextButton[] testb = {null};
|
||||||
|
|
||||||
TextButton button = Elements.newButton("$launch", () -> ui.showConfirm("$launch", "$launch.confirm", Call::launchZone));
|
TextButton button = Elements.newButton("$launch", () -> {
|
||||||
|
FloatingDialog dialog = new FloatingDialog("$launch");
|
||||||
|
dialog.update(() -> {
|
||||||
|
if(!testb[0].isVisible()){
|
||||||
|
dialog.hide();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
dialog.cont.add("$launch.confirm").width(500f).wrap().pad(4f).get().setAlignment(Align.center, Align.center);
|
||||||
|
dialog.buttons.defaults().size(200f, 54f).pad(2f);
|
||||||
|
dialog.setFillParent(false);
|
||||||
|
dialog.buttons.addButton("$cancel", dialog::hide);
|
||||||
|
dialog.buttons.addButton("$ok", () -> {
|
||||||
|
dialog.hide();
|
||||||
|
Call.launchZone();
|
||||||
|
});
|
||||||
|
dialog.keyDown(KeyCode.ESCAPE, dialog::hide);
|
||||||
|
dialog.keyDown(KeyCode.BACK, dialog::hide);
|
||||||
|
dialog.show();
|
||||||
|
|
||||||
|
});
|
||||||
|
|
||||||
|
testb[0] = button;
|
||||||
|
|
||||||
button.getStyle().disabledFontColor = Color.WHITE;
|
button.getStyle().disabledFontColor = Color.WHITE;
|
||||||
button.visible(() ->
|
button.visible(() ->
|
||||||
world.isZone() &&
|
world.isZone() &&
|
||||||
world.getZone().metCondition() &&
|
world.getZone().metCondition() &&
|
||||||
!Net.client() &&
|
!Net.client() &&
|
||||||
state.wave % world.getZone().launchPeriod == 0 &&
|
state.wave % world.getZone().launchPeriod == 0 && !world.spawner.isSpawning());
|
||||||
state.wavetime < state.rules.waveSpacing * launchWaveMultiplier - 70);
|
|
||||||
|
|
||||||
button.update(() -> {
|
button.update(() -> {
|
||||||
if(world.getZone() == null){
|
if(world.getZone() == null){
|
||||||
@@ -444,6 +467,6 @@ public class HudFragment extends Fragment{
|
|||||||
}
|
}
|
||||||
}).growY().fillX().right().width(40f)
|
}).growY().fillX().right().width(40f)
|
||||||
.visible(() -> state.rules.waves && ((Net.server() || players[0].isAdmin) || !Net.active()) && state.enemies() == 0
|
.visible(() -> state.rules.waves && ((Net.server() || players[0].isAdmin) || !Net.active()) && state.enemies() == 0
|
||||||
&& (state.wavetime < state.rules.waveSpacing - 60 || !state.rules.waveTimer));
|
&& (!world.spawner.isSpawning() || !state.rules.waveTimer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ import io.anuke.mindustry.game.UnlockableContent;
|
|||||||
import io.anuke.mindustry.graphics.CacheLayer;
|
import io.anuke.mindustry.graphics.CacheLayer;
|
||||||
import io.anuke.mindustry.graphics.Layer;
|
import io.anuke.mindustry.graphics.Layer;
|
||||||
import io.anuke.mindustry.graphics.Pal;
|
import io.anuke.mindustry.graphics.Pal;
|
||||||
|
import io.anuke.mindustry.input.InputHandler.PlaceDraw;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.ui.Bar;
|
import io.anuke.mindustry.ui.Bar;
|
||||||
import io.anuke.mindustry.ui.ContentDisplay;
|
import io.anuke.mindustry.ui.ContentDisplay;
|
||||||
@@ -269,6 +270,7 @@ public class Block extends BlockStorage{
|
|||||||
|
|
||||||
public float sumAttribute(Attribute attr, int x, int y){
|
public float sumAttribute(Attribute attr, int x, int y){
|
||||||
Tile tile = world.tile(x, y);
|
Tile tile = world.tile(x, y);
|
||||||
|
if(tile == null) return 0;
|
||||||
float sum = 0;
|
float sum = 0;
|
||||||
for(Tile other : tile.getLinkedTilesAs(this, tempTiles)){
|
for(Tile other : tile.getLinkedTilesAs(this, tempTiles)){
|
||||||
sum += other.floor().attributes.get(attr);
|
sum += other.floor().attributes.get(attr);
|
||||||
@@ -546,6 +548,12 @@ public class Block extends BlockStorage{
|
|||||||
return icons[icon.ordinal()];
|
return icons[icon.ordinal()];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void getPlaceDraw(PlaceDraw draw, int rotation, int prevX, int prevY, int prevRotation){
|
||||||
|
draw.region = icon(Icon.full);
|
||||||
|
draw.scalex = draw.scaley = 1;
|
||||||
|
draw.rotation = rotation;
|
||||||
|
}
|
||||||
|
|
||||||
/**Never use outside of the editor!*/
|
/**Never use outside of the editor!*/
|
||||||
public TextureRegion editorIcon(){
|
public TextureRegion editorIcon(){
|
||||||
if(editorIcon == null) editorIcon = Core.atlas.find(name + "-icon-editor");
|
if(editorIcon == null) editorIcon = Core.atlas.find(name + "-icon-editor");
|
||||||
|
|||||||
@@ -87,6 +87,14 @@ public class Tile implements Position, TargetTrait{
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte relativeTo(int x, int y, int cx, int cy){
|
||||||
|
if(x == cx && y == cy - 1) return 1;
|
||||||
|
if(x == cx && y == cy + 1) return 3;
|
||||||
|
if(x == cx - 1 && y == cy) return 0;
|
||||||
|
if(x == cx + 1 && y == cy) return 2;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
public byte absoluteRelativeTo(int cx, int cy){
|
public byte absoluteRelativeTo(int cx, int cy){
|
||||||
if(x == cx && y <= cy - 1) return 1;
|
if(x == cx && y <= cy - 1) return 1;
|
||||||
if(x == cx && y >= cy + 1) return 3;
|
if(x == cx && y >= cy + 1) return 3;
|
||||||
@@ -95,6 +103,14 @@ public class Tile implements Position, TargetTrait{
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte absoluteRelativeTo(int x, int y, int cx, int cy){
|
||||||
|
if(x == cx && y <= cy - 1) return 1;
|
||||||
|
if(x == cx && y >= cy + 1) return 3;
|
||||||
|
if(x <= cx - 1 && y == cy) return 0;
|
||||||
|
if(x >= cx + 1 && y == cy) return 2;
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public <T extends TileEntity> T entity(){
|
public <T extends TileEntity> T entity(){
|
||||||
return (T) entity;
|
return (T) entity;
|
||||||
|
|||||||
@@ -109,12 +109,13 @@ public class Floor extends Block{
|
|||||||
Mathf.random.setSeed(tile.pos());
|
Mathf.random.setSeed(tile.pos());
|
||||||
|
|
||||||
Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy());
|
Draw.rect(variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))], tile.worldx(), tile.worldy());
|
||||||
|
|
||||||
|
drawEdges(tile);
|
||||||
|
|
||||||
Floor floor = tile.ore();
|
Floor floor = tile.ore();
|
||||||
if(floor != Blocks.air && floor != this){ //ore should never have itself on top, but it's possible, so prevent a crash in that case
|
if(floor != Blocks.air && floor != this){ //ore should never have itself on top, but it's possible, so prevent a crash in that case
|
||||||
floor.draw(tile);
|
floor.draw(tile);
|
||||||
}
|
}
|
||||||
|
|
||||||
drawEdges(tile);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -58,6 +58,7 @@ public abstract class Turret extends Block{
|
|||||||
protected float shootShake = 0f;
|
protected float shootShake = 0f;
|
||||||
protected float xRand = 0f;
|
protected float xRand = 0f;
|
||||||
protected boolean targetAir = true;
|
protected boolean targetAir = true;
|
||||||
|
protected boolean targetGround = true;
|
||||||
|
|
||||||
protected Vector2 tr = new Vector2();
|
protected Vector2 tr = new Vector2();
|
||||||
protected Vector2 tr2 = new Vector2();
|
protected Vector2 tr2 = new Vector2();
|
||||||
@@ -108,6 +109,7 @@ public abstract class Turret extends Block{
|
|||||||
stats.add(BlockStat.reload, 60f / reload, StatUnit.none);
|
stats.add(BlockStat.reload, 60f / reload, StatUnit.none);
|
||||||
stats.add(BlockStat.shots, shots, StatUnit.none);
|
stats.add(BlockStat.shots, shots, StatUnit.none);
|
||||||
stats.add(BlockStat.targetsAir, targetAir);
|
stats.add(BlockStat.targetsAir, targetAir);
|
||||||
|
stats.add(BlockStat.targetsGround, targetGround);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -201,7 +203,7 @@ public abstract class Turret extends Block{
|
|||||||
TurretEntity entity = tile.entity();
|
TurretEntity entity = tile.entity();
|
||||||
|
|
||||||
entity.target = Units.getClosestTarget(tile.getTeam(),
|
entity.target = Units.getClosestTarget(tile.getTeam(),
|
||||||
tile.drawx(), tile.drawy(), range, e -> !e.isDead() && (!e.isFlying() || targetAir));
|
tile.drawx(), tile.drawy(), range, e -> !e.isDead() && (!e.isFlying() || targetAir) && (e.isFlying() || targetGround));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void turnToTarget(Tile tile, float targetRot){
|
protected void turnToTarget(Tile tile, float targetRot){
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import io.anuke.arc.graphics.g2d.Draw;
|
|||||||
import io.anuke.arc.graphics.g2d.TextureRegion;
|
import io.anuke.arc.graphics.g2d.TextureRegion;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.arc.math.geom.Geometry;
|
import io.anuke.arc.math.geom.Geometry;
|
||||||
|
import io.anuke.arc.math.geom.Point2;
|
||||||
import io.anuke.arc.math.geom.Vector2;
|
import io.anuke.arc.math.geom.Vector2;
|
||||||
import io.anuke.arc.util.Log;
|
import io.anuke.arc.util.Log;
|
||||||
import io.anuke.arc.util.Pack;
|
import io.anuke.arc.util.Pack;
|
||||||
@@ -13,6 +14,7 @@ import io.anuke.arc.util.Time;
|
|||||||
import io.anuke.mindustry.entities.type.TileEntity;
|
import io.anuke.mindustry.entities.type.TileEntity;
|
||||||
import io.anuke.mindustry.entities.type.Unit;
|
import io.anuke.mindustry.entities.type.Unit;
|
||||||
import io.anuke.mindustry.graphics.Layer;
|
import io.anuke.mindustry.graphics.Layer;
|
||||||
|
import io.anuke.mindustry.input.InputHandler.PlaceDraw;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.Item;
|
||||||
import io.anuke.mindustry.world.Block;
|
import io.anuke.mindustry.world.Block;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.world.Tile;
|
||||||
@@ -89,7 +91,6 @@ public class Conveyor extends Block{
|
|||||||
ConveyorEntity entity = tile.entity();
|
ConveyorEntity entity = tile.entity();
|
||||||
entity.blendbits = 0;
|
entity.blendbits = 0;
|
||||||
entity.blendsclx = entity.blendscly = 1;
|
entity.blendsclx = entity.blendscly = 1;
|
||||||
entity.blendshadowrot = -1;
|
|
||||||
|
|
||||||
if(blends(tile, 2) && blends(tile, 1) && blends(tile, 3)){
|
if(blends(tile, 2) && blends(tile, 1) && blends(tile, 3)){
|
||||||
entity.blendbits = 3;
|
entity.blendbits = 3;
|
||||||
@@ -103,13 +104,34 @@ public class Conveyor extends Block{
|
|||||||
}else if(blends(tile, 1)){
|
}else if(blends(tile, 1)){
|
||||||
entity.blendbits = 1;
|
entity.blendbits = 1;
|
||||||
entity.blendscly = -1;
|
entity.blendscly = -1;
|
||||||
entity.blendshadowrot = 0;
|
|
||||||
}else if(blends(tile, 3)){
|
}else if(blends(tile, 3)){
|
||||||
entity.blendbits = 1;
|
entity.blendbits = 1;
|
||||||
entity.blendshadowrot = 1;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void getPlaceDraw(PlaceDraw draw, int rotation, int prevX, int prevY, int prevRotation){
|
||||||
|
draw.rotation = rotation;
|
||||||
|
draw.scalex = draw.scaley = 1;
|
||||||
|
|
||||||
|
int blendbits = 0;
|
||||||
|
|
||||||
|
if(blends(rotation, 1, prevX, prevY, prevRotation)){
|
||||||
|
blendbits = 1;
|
||||||
|
draw.scaley = -1;
|
||||||
|
}else if(blends(rotation, 3, prevX, prevY, prevRotation)){
|
||||||
|
blendbits = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
draw.rotation = rotation;
|
||||||
|
draw.region = regions[blendbits][0];
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean blends(int rotation, int offset, int prevX, int prevY, int prevRotation){
|
||||||
|
Point2 left = Geometry.d4(rotation - offset);
|
||||||
|
return left.equals(prevX, prevY) && prevRotation == Mathf.mod(rotation + offset, 4);
|
||||||
|
}
|
||||||
|
|
||||||
private boolean blends(Tile tile, int direction){
|
private boolean blends(Tile tile, int direction){
|
||||||
Tile other = tile.getNearby(Mathf.mod(tile.getRotation() - direction, 4));
|
Tile other = tile.getNearby(Mathf.mod(tile.getRotation() - direction, 4));
|
||||||
if(other != null) other = other.target();
|
if(other != null) other = other.target();
|
||||||
@@ -343,7 +365,6 @@ public class Conveyor extends Block{
|
|||||||
byte lastInserted;
|
byte lastInserted;
|
||||||
float minitem = 1;
|
float minitem = 1;
|
||||||
|
|
||||||
int blendshadowrot = -1;
|
|
||||||
int blendbits;
|
int blendbits;
|
||||||
int blendsclx, blendscly;
|
int blendsclx, blendscly;
|
||||||
|
|
||||||
|
|||||||
@@ -143,6 +143,10 @@ public class PowerGraph{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void update(){
|
public void update(){
|
||||||
|
if(Core.graphics.getFrameId() == lastFrameUpdated){
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
lastFrameUpdated = Core.graphics.getFrameId();
|
lastFrameUpdated = Core.graphics.getFrameId();
|
||||||
|
|
||||||
float powerNeeded = getPowerNeeded();
|
float powerNeeded = getPowerNeeded();
|
||||||
@@ -150,7 +154,7 @@ public class PowerGraph{
|
|||||||
|
|
||||||
powerBalance.addValue((powerProduced - powerNeeded) / Time.delta());
|
powerBalance.addValue((powerProduced - powerNeeded) / Time.delta());
|
||||||
|
|
||||||
if(Core.graphics.getFrameId() == lastFrameUpdated || (consumers.size == 0 && producers.size == 0 && batteries.size == 0)){
|
if(consumers.size == 0 && producers.size == 0 && batteries.size == 0){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ public class ThermalGenerator extends PowerGenerator{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
drawPlaceText(Core.bundle.format("blocks.efficiency", sumAttribute(Attribute.heat, x, y)*100, 1), x, y, valid);
|
drawPlaceText(Core.bundle.formatDouble("blocks.efficiency", sumAttribute(Attribute.heat, x, y)*100, 1), x, y, valid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -53,7 +53,7 @@ public class Cultivator extends GenericCrafter{
|
|||||||
public void setBars(){
|
public void setBars(){
|
||||||
super.setBars();
|
super.setBars();
|
||||||
bars.add("multiplier", entity -> new Bar(() ->
|
bars.add("multiplier", entity -> new Bar(() ->
|
||||||
Core.bundle.format("blocks.efficiency",
|
Core.bundle.formatDouble("blocks.efficiency",
|
||||||
((((CultivatorEntity)entity).boost + 1f) * ((CultivatorEntity)entity).warmup)*100f,1),
|
((((CultivatorEntity)entity).boost + 1f) * ((CultivatorEntity)entity).warmup)*100f,1),
|
||||||
() -> Pal.ammo,
|
() -> Pal.ammo,
|
||||||
() -> ((CultivatorEntity)entity).warmup));
|
() -> ((CultivatorEntity)entity).warmup));
|
||||||
@@ -61,7 +61,7 @@ public class Cultivator extends GenericCrafter{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
drawPlaceText(Core.bundle.format("blocks.efficiency", (1+sumAttribute(Attribute.spores, x, y))*100, 1), x, y, valid);
|
drawPlaceText(Core.bundle.formatDouble("blocks.efficiency", (1+sumAttribute(Attribute.spores, x, y))*100, 1), x, y, valid);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class SolidPump extends Pump{
|
|||||||
@Override
|
@Override
|
||||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
if(attribute != null){
|
if(attribute != null){
|
||||||
drawPlaceText(Core.bundle.format("blocks.efficiency", (sumAttribute(attribute, x, y) + 1f)*100, 1), x, y, valid);
|
drawPlaceText(Core.bundle.formatDouble("blocks.efficiency", (sumAttribute(attribute, x, y) + 1f)*100, 1), x, y, valid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -50,7 +50,7 @@ public class SolidPump extends Pump{
|
|||||||
public void setBars(){
|
public void setBars(){
|
||||||
super.setBars();
|
super.setBars();
|
||||||
bars.add("efficiency", entity -> new Bar(() ->
|
bars.add("efficiency", entity -> new Bar(() ->
|
||||||
Core.bundle.format("blocks.efficiency",
|
Core.bundle.formatDouble("blocks.efficiency",
|
||||||
((((SolidPumpEntity)entity).boost + 1f) * ((SolidPumpEntity)entity).warmup) * 100, 1),
|
((((SolidPumpEntity)entity).boost + 1f) * ((SolidPumpEntity)entity).warmup) * 100, 1),
|
||||||
() -> Pal.ammo,
|
() -> Pal.ammo,
|
||||||
() -> ((SolidPumpEntity)entity).warmup));
|
() -> ((SolidPumpEntity)entity).warmup));
|
||||||
|
|||||||
@@ -47,6 +47,7 @@ public enum BlockStat{
|
|||||||
reload(StatCategory.shooting),
|
reload(StatCategory.shooting),
|
||||||
powerShot(StatCategory.shooting),
|
powerShot(StatCategory.shooting),
|
||||||
targetsAir(StatCategory.shooting),
|
targetsAir(StatCategory.shooting),
|
||||||
|
targetsGround(StatCategory.shooting),
|
||||||
|
|
||||||
boostItem(StatCategory.optional),
|
boostItem(StatCategory.optional),
|
||||||
boostLiquid(StatCategory.optional),;
|
boostLiquid(StatCategory.optional),;
|
||||||
|
|||||||
@@ -3,11 +3,11 @@ package io.anuke.mindustry.desktop;
|
|||||||
import io.anuke.arc.ApplicationListener;
|
import io.anuke.arc.ApplicationListener;
|
||||||
import io.anuke.arc.backends.lwjgl3.Lwjgl3Application;
|
import io.anuke.arc.backends.lwjgl3.Lwjgl3Application;
|
||||||
import io.anuke.arc.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
|
import io.anuke.arc.backends.lwjgl3.Lwjgl3ApplicationConfiguration;
|
||||||
import io.anuke.net.KryoClient;
|
|
||||||
import io.anuke.net.KryoServer;
|
|
||||||
import io.anuke.mindustry.Mindustry;
|
import io.anuke.mindustry.Mindustry;
|
||||||
import io.anuke.mindustry.core.Platform;
|
import io.anuke.mindustry.core.Platform;
|
||||||
import io.anuke.mindustry.net.Net;
|
import io.anuke.mindustry.net.Net;
|
||||||
|
import io.anuke.net.KryoClient;
|
||||||
|
import io.anuke.net.KryoServer;
|
||||||
|
|
||||||
public class DesktopLauncher extends Lwjgl3Application{
|
public class DesktopLauncher extends Lwjgl3Application{
|
||||||
|
|
||||||
|
|||||||