From 6cef301b9443f3f135b2481b013605446ff3d4d9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 15 Mar 2019 20:19:09 -0400 Subject: [PATCH] Filter localization / Ore filter / Pick tool ore compatibility --- core/assets/bundles/bundle.properties | 15 ++++++++ core/assets/bundles/bundle_cs.properties | 20 +++++++++++ core/assets/bundles/bundle_de.properties | 20 +++++++++++ core/assets/bundles/bundle_es.properties | 20 +++++++++++ core/assets/bundles/bundle_fr.properties | 20 +++++++++++ core/assets/bundles/bundle_fr_BE.properties | 20 +++++++++++ core/assets/bundles/bundle_in_ID.properties | 20 +++++++++++ core/assets/bundles/bundle_it.properties | 20 +++++++++++ core/assets/bundles/bundle_ja.properties | 20 +++++++++++ core/assets/bundles/bundle_ko.properties | 20 +++++++++++ core/assets/bundles/bundle_nl.properties | 20 +++++++++++ core/assets/bundles/bundle_pl.properties | 20 +++++++++++ core/assets/bundles/bundle_pt_BR.properties | 20 +++++++++++ core/assets/bundles/bundle_ru.properties | 20 +++++++++++ core/assets/bundles/bundle_tk.properties | 20 +++++++++++ core/assets/bundles/bundle_tr.properties | 20 +++++++++++ core/assets/bundles/bundle_uk_UA.properties | 20 +++++++++++ core/assets/bundles/bundle_zh_CN.properties | 20 +++++++++++ core/assets/bundles/bundle_zh_TW.properties | 20 +++++++++++ core/assets/maps/fortress.mmap | Bin 11559 -> 11563 bytes core/assets/maps/groundZero.mmap | Bin 6797 -> 12272 bytes .../io/anuke/mindustry/editor/EditorTool.java | 2 +- .../mindustry/editor/MapGenerateDialog.java | 9 +++-- .../editor/generation/FilterOption.java | 5 +-- .../editor/generation/OreFilter.java | 32 ++++++++++++++++++ .../editor/generation/TerrainFilter.java | 7 ++-- 26 files changed, 419 insertions(+), 11 deletions(-) create mode 100644 core/src/io/anuke/mindustry/editor/generation/OreFilter.java diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index a3dafdd022..065521660e 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -242,6 +242,21 @@ editor.mapname = Map Name: 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.selectmap = Select a map to load: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Width: height = Height: menu = Menu diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index d2de35e591..dd60dac4c7 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -209,6 +209,9 @@ editor.elevation = Výška editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Generovat editor.resize = Změnit velikost editor.loadmap = Načíst mapu @@ -237,6 +240,21 @@ editor.mapname = Jméno mapy: 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.selectmap = Vyber mapu k načtení: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Šířka: height = Výška: menu = Hlavní menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Velká thoriová stěna block.door.name = Dveře block.door-large.name = Velké dveře block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Dopravník @@ -758,6 +777,7 @@ block.overdrive-projector.description = Zrychluje funkce blízkých struktůr ja block.force-projector.description = Vytvoří okolo sebe šestihrané silové pole, chrání jednotky a budovy uvnitř sebe vůči střelám. block.shock-mine.description = Působí poškození nepřátelským jednotkám při sešlápnutí. Skoro neviditelné nepřáteli. block.duo.description = Malá, levná střílna. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = Malá střílna, která střílí elektřinu v náhodném oblouku po nepřátelských jednotkách. block.hail.description = Malá artilérní střílna. block.lancer.description = Středně velká střílna, která střílí nabité elektrické paprsky. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index 66a08f0303..3d08a494ec 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -209,6 +209,9 @@ editor.elevation = Höhe editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Generieren editor.resize = Grösse\nanpassen editor.loadmap = Karte\nladen @@ -237,6 +240,21 @@ editor.mapname = Karten Name 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.selectmap = Wähle eine Karte zum Laden: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Breite: height = Höhe: menu = Menü @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Große Thorium-Mauer block.door.name = Tür block.door-large.name = Große Tür block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Förderband @@ -758,6 +777,7 @@ block.overdrive-projector.description = Erhöht die Geschwindigkeit von nahegele block.force-projector.description = Erzeugt ein sechseckiges Kraftfeld um sich selbst, durch das Blöcke und Einheiten vor Schaden beschützt werden. block.shock-mine.description = Beschädigt Gegner, die auf die Mine laufen. Für Gegener schwer zu sehen. block.duo.description = Ein kleiner, günstiger Geschützturm. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = Ein kleiner Geschützturm, der Lichtbögen in Richtung des Gegners schießt. block.hail.description = Ein kleiner Artillerie-Geschützturm. block.lancer.description = Ein mittelgroßer Geschützturm, der sich auflädt und Elektrizitätsstrahlen verschießt. diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 1d43e13fbc..1405a6e8e8 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -209,6 +209,9 @@ editor.elevation = Elevación editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Generar editor.resize = Cambiar Tamaño editor.loadmap = Cargar Mapa @@ -237,6 +240,21 @@ editor.mapname = Nombre del Mapa: 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.selectmap = Selecciona un mapa para cargar: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Ancho: height = Alto: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Pared de Torio grande block.door.name = Puerta block.door-large.name = Puerta Larga block.duo.name = Dúo +block.scatter.name = Scatter block.hail.name = Granizo block.lancer.name = Lancero block.conveyor.name = Cinta Transportadora @@ -758,6 +777,7 @@ block.overdrive-projector.description = Aumenta la velocidad de edificios cercan block.force-projector.description = Crea un área de fuerza hexagonal alrededor de él, protegiendo edificios y unidades dentro de él del daño de las balas. block.shock-mine.description = Daña enemigos que pisan a mina. Casi invisible al enemigo. block.duo.description = Una torre pequeña y barata. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = Una torre pequeña que disapra electricidad en un arco aleatorio al enemigo. block.hail.description = Una torre de artillería pequeña. block.lancer.description = Una torre de tamaño mediano que dispara rayos cargados eléctricamente. diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 9237368e22..aaca224a72 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -209,6 +209,9 @@ editor.elevation = Élevation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Générer editor.resize = Redimensionner editor.loadmap = Charger une carte @@ -237,6 +240,21 @@ editor.mapname = Nom de la carte²: 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.selectmap = Séléctionnez une carte: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Largeur: height = Hauteur: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Mur en Thorium large block.door.name = Porte block.door-large.name = Grande porte block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancier block.conveyor.name = Convoyeur @@ -758,6 +777,7 @@ block.overdrive-projector.description = Accélère les batiments autour de lui, block.force-projector.description = Crée un champ de force hexagonal autour de lui qui protège les batiments et les unités à l'intérieur de prendre des dégâts à cause des balles. block.shock-mine.description = Blesse les ennemis qui marchent dessus. Quasiment invisble pour l'ennemi. block.duo.description = une petite tourelle avec un coût faible . +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = une petite tourelle tirant des arcs électrques vers les ennemis. block.hail.description = une petite tourelle d'artillerie. block.lancer.description = une tourelle de taille moyenne tirant des rayons chargés en électricité. diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties index 92a2979004..661e1e9b3d 100644 --- a/core/assets/bundles/bundle_fr_BE.properties +++ b/core/assets/bundles/bundle_fr_BE.properties @@ -209,6 +209,9 @@ editor.elevation = Élévation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Générer editor.resize = Redimensionner editor.loadmap = Charger une carte @@ -237,6 +240,21 @@ editor.mapname = Nom de la carte: 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.selectmap = Sélectionnez une carte à charger: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Largeur: height = Hauteur: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Mur en Thorium large block.door.name = Porte block.door-large.name = Grande porte block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Transporteur @@ -758,6 +777,7 @@ block.overdrive-projector.description = Augmente la vitesse des bâtiments à pr block.force-projector.description = Crée un champ de force hexagonal autour de lui-même, protégeant les bâtiments et les unités internes des dommages causés par les balles. block.shock-mine.description = Endommage les ennemis qui marchent sur la mine. Presque invisible à l'ennemi. block.duo.description = Une petite tourelle pas chère. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = Une petite tourelle qui tire de l'électricité dans un arc au hasard vers l'ennemi. block.hail.description = Une petite tourelle d'artillerie. block.lancer.description = Une tourelle de taille moyenne qui tire des faisceaux d’électricité chargés. diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index c0456fac60..db4f8a61b2 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -209,6 +209,9 @@ editor.elevation = Elevation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Hasilkan editor.resize = Ubah ukuran editor.loadmap = Buka Peta @@ -237,6 +240,21 @@ editor.mapname = Nama Peta: 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.selectmap = Pilih peta yang akan dimuat: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Lebar: height = Tinggi: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Large Thorium Wall block.door.name = pintu block.door-large.name = pintu besar block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = konveyor @@ -758,6 +777,7 @@ block.overdrive-projector.description = Increases the speed of nearby buildings block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.hail.description = A small artillery turret. block.lancer.description = A medium-sized turret which shoots charged electricity beams. diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 8fc8017aab..d143f6005e 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -209,6 +209,9 @@ editor.elevation = Elevazione editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Genera editor.resize = Ridimensiona editor.loadmap = Carica\nmappa @@ -237,6 +240,21 @@ editor.mapname = Nome Mappa: 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.selectmap = Seleziona una mappa da caricare: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Larghezza: height = Altezza: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Muro grande di torio block.door.name = porta block.door-large.name = Porta grande block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Bombardiere block.lancer.name = Idrogetto block.conveyor.name = trasportatore @@ -758,6 +777,7 @@ block.overdrive-projector.description = Increases the speed of nearby buildings block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.hail.description = A small artillery turret. block.lancer.description = A medium-sized turret which shoots charged electricity beams. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 0b03bdd397..d2a9e87056 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -209,6 +209,9 @@ editor.elevation = 標高 editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = 生成 editor.resize = リサイズ editor.loadmap = マップを読み込む @@ -237,6 +240,21 @@ editor.mapname = マップ名: editor.overwrite = [accent]警告!\n存在するマップを上書きします。 editor.overwrite.confirm = [scarlet]警告![] この名前のマップがすでに存在します。上書きしてもよろしいですか? editor.selectmap = 読み込むマップを選択: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = 幅: height = 高さ: menu = メニュー @@ -596,6 +614,7 @@ block.thorium-wall-large.name = 大きなトリウムの壁 block.door.name = ドア block.door-large.name = 大きなドア block.duo.name = デュオ +block.scatter.name = Scatter block.hail.name = ヘイル block.lancer.name = ランサー block.conveyor.name = コンベアー @@ -758,6 +777,7 @@ block.overdrive-projector.description = ドリルやコンベアなど、近く block.force-projector.description = 周囲に六角形の力場を作り出し、内部の建造物やユニットなどを守ります。 block.shock-mine.description = 敵が踏むと、ダメージを与えます。敵には見えません。 block.duo.description = 小さく安価なターレットです。 +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = 小型の電撃ターレットです。敵に向かってランダムな半円状に電撃を放ちます。 block.hail.description = 小型の砲撃ターレットです。 block.lancer.description = チャージビームを放つ中型ターレットです。 diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index a60e3af860..869256d1ba 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -209,6 +209,9 @@ editor.elevation = 지형 높이 editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = 생성 editor.resize = 맵 크기조정 editor.loadmap = 맵 불러오기 @@ -237,6 +240,21 @@ editor.mapname = 맵 이름: editor.overwrite = [accept]경고!이 명령은 기존 맵을 덮어씌우게 됩니다. editor.overwrite.confirm = [scarlet]경고![] 이 이름을 가진 맵이 이미 있습니다. 덮어 쓰시겠습니까? editor.selectmap = 불러올 맵 선택: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = 넓이: height = 높이: menu = 메뉴 @@ -596,6 +614,7 @@ block.thorium-wall-large.name = 대형 토륨벽 block.door.name = 문 block.door-large.name = 대형문 block.duo.name = 듀오 +block.scatter.name = Scatter block.hail.name = 헤일 block.lancer.name = 랜서 block.conveyor.name = 컨베이어 @@ -758,6 +777,7 @@ block.overdrive-projector.description = 드릴과 컨베이어와 같은 인근 block.force-projector.description = 총알에게서 내부의 건물과 유닛을 보호하면서 그 주위에 육각형 보호막을 만듭니다. block.shock-mine.description = 지뢰를 밟는 적에게 피해를 줍니다. 적에게는 거의 보이지 않습니다. block.duo.description = 작고 싼 터렛. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = 적을 향해 무작위 각도로 전기를 쏘는 작은 터렛. block.hail.description = 작은 포병 터렛. block.lancer.description = 충전된 전기빔을 쏘는 중형 터렛. diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 13966d5164..233e9fb109 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -209,6 +209,9 @@ editor.elevation = Elevation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Generate editor.resize = Resize editor.loadmap = Load Map @@ -237,6 +240,21 @@ editor.mapname = Map Name: 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.selectmap = Select a map to load: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Width: height = Height: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Large Thorium Wall block.door.name = Door block.door-large.name = Large Door block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Conveyor @@ -758,6 +777,7 @@ block.overdrive-projector.description = Increases the speed of nearby buildings block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.hail.description = A small artillery turret. block.lancer.description = A medium-sized turret which shoots charged electricity beams. diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index bbab3ae633..ef419aaf6c 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -209,6 +209,9 @@ editor.elevation = Poziom terenu editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Generuj editor.resize = Zmień rozmiar editor.loadmap = Załaduj mapę @@ -237,6 +240,21 @@ editor.mapname = Nazwa 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.selectmap = Wybierz mapę do załadowania: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Szerokość: height = Wysokość: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Duża Torowa Ściana block.door.name = Drzwi block.door-large.name = Duże drzwi block.duo.name = Podwójne działko +block.scatter.name = Scatter block.hail.name = Święte działko block.lancer.name = Lancer block.conveyor.name = Przenośnik @@ -758,6 +777,7 @@ block.overdrive-projector.description = Increases the speed of nearby buildings block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.hail.description = A small artillery turret. block.lancer.description = A medium-sized turret which shoots charged electricity beams. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 4d866c7e17..8796b94bb7 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -209,6 +209,9 @@ editor.elevation = Elevação editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Gerar editor.resize = Redimen\n sionar editor.loadmap = Carregar\n Mapa @@ -237,6 +240,21 @@ editor.mapname = Nome do Mapa: 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.selectmap = Selecione uma mapa para carregar: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Largura: height = Altura: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Parede larga de tório block.door.name = Porta block.door-large.name = Porta Grande block.duo.name = Dupla +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancador block.conveyor.name = Esteira @@ -758,6 +777,7 @@ block.overdrive-projector.description = Aumenta a velocidade de unidades proxima block.force-projector.description = Cria um campo de forca hexagonal em volta de si mesmo, Protegendo construções e unidades dentro de dano por balas. block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo. block.duo.description = Uma torre pequena e barata. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = Uma pequena torre que atira eletricidade em um pequeno arc aleatoriamente no inimigo. block.hail.description = Uma pequena torre de artilharia. block.lancer.description = Uma torre de Tamanho-Medio que atira raios de eletricidade. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 8543881f52..25d8792463 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -209,6 +209,9 @@ editor.elevation = Возвышенность editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Создать editor.resize = Изменить \nразмер editor.loadmap = Загрузить\nкарту @@ -237,6 +240,21 @@ editor.mapname = Название карты: editor.overwrite = [accent]Внимание! \nЭто перезапишет уже существующую карту. editor.overwrite.confirm = [scarlet]Осторожно![] Карта с таким названием уже существует. Вы действительно хотите её перезаписать? editor.selectmap = Выберите карту для загрузки: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Ширина: height = Высота: menu = Меню @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Большая ториевая стена block.door.name = Дверь block.door-large.name = Большая дверь block.duo.name = Двойная турель +block.scatter.name = Scatter block.hail.name = Град block.lancer.name = Копейщик block.conveyor.name = Конвейер @@ -758,6 +777,7 @@ block.overdrive-projector.description = Ускоряет в небольшом block.force-projector.description = Создаёт в небольшом радиусе силовое поле, которое защищает от атак противника. block.shock-mine.description = Поставьте её на землю. Она бьётся ЭЛЕКТРИЧЕСТВОМ О_О block.duo.description = Маленькая и дешёвая турель. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = Турель с малым радиусом атаки. В качестве патронов требует воду или криогенную жидкость. Также нужна энергия. block.hail.description = Дальнобойная начальная турель.\nИспользует в качестве снарядов плотный сплав, кремний и пиротит.\nДля ускорения стрельбы можно подвести воду и криогенную жидкость. block.lancer.description = Турель, которая стреляет лазером на среднее расстояние.\nИспользует в качестве снарядов энергию.\nДля ускорения стрельбы можно подвести воду или криогенную жидкость. diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index ece43aabac..6485aac7b9 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -209,6 +209,9 @@ editor.elevation = Yukseklik editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Yarat editor.resize = Boyutunu degistir editor.loadmap = Harita yukle @@ -237,6 +240,21 @@ editor.mapname = Harita ismi: 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.selectmap = Yukleyecek bir harita sec: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Genislik: height = Yukseklik: menu = Menu @@ -596,6 +614,7 @@ block.thorium-wall-large.name = genis toryum duvari block.door.name = kapi block.door-large.name = genis kapi block.duo.name = ikili +block.scatter.name = Scatter block.hail.name = yagdirici block.lancer.name = Lazer topu block.conveyor.name = konvenyor @@ -758,6 +777,7 @@ block.overdrive-projector.description = Increases the speed of nearby buildings block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.hail.description = A small artillery turret. block.lancer.description = A medium-sized turret which shoots charged electricity beams. diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 8511d1f242..bb1641547c 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -209,6 +209,9 @@ editor.elevation = Elevation editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Üretmek editor.resize = Yeniden Boyutlandırma editor.loadmap = Harita Yükle @@ -237,6 +240,21 @@ editor.mapname = Harita Adı 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.selectmap = Yüklenecek bir harita seçin: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Genişliği: height = Boy: menu = Menü @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Large Thorium Wall block.door.name = kapı block.door-large.name = büyük kapı block.duo.name = Duo +block.scatter.name = Scatter block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = konveyör @@ -758,6 +777,7 @@ block.overdrive-projector.description = Increases the speed of nearby buildings block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage through bullets. block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. block.duo.description = A small, cheap turret. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = A small turret which shoots electricity in a random arc towards the enemy. block.hail.description = A small artillery turret. block.lancer.description = A medium-sized turret which shoots charged electricity beams. diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index a30100cc98..97c191b6f7 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -209,6 +209,9 @@ editor.elevation = Висота editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = Створити editor.resize = Змінити \nрозмір editor.loadmap = Завантажити мапу @@ -237,6 +240,21 @@ editor.mapname = Название карты: editor.overwrite = [accent]Попередження!\nЦе перезаписує існуючу карту. editor.overwrite.confirm = [scarlet]Попередження![] Карта з такою назвою вже існує. Ви впевнені, що хочете переписати її? editor.selectmap = Виберіть мапу для завантаження: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = Ширина: height = Висота: menu = Меню @@ -596,6 +614,7 @@ block.thorium-wall-large.name = Велика торієва стіна block.door.name = Двері block.door-large.name = Великі двері block.duo.name = Подвійна +block.scatter.name = Scatter block.hail.name = Град block.lancer.name = Списоносець block.conveyor.name = Конвеєр @@ -758,6 +777,7 @@ block.overdrive-projector.description = Прискорює в невеликом block.force-projector.description = Створює в невеликому радіусі силове поле, яке захищає від атак супротивника. block.shock-mine.description = Поставте її на землю. Вона б'ється ЕЛЕКТРИКОЮ О_О block.duo.description = Маленька і дешева турель.\nДля прискорення стрільби можна підвести воду або кріогенну рідина. +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = Турель с малым радиусом атаки.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. block.hail.description = Далекобійна початкова турель.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. block.lancer.description = Турель, яка стріляє лазером на середню відстань.\nДля прискорення стрільби можна підвести воду або кріогенну рідину. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 444e8edd26..f9677c7ca9 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -209,6 +209,9 @@ editor.elevation = 高度 editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = 生成 editor.resize = 调整 editor.loadmap = 载入地图 @@ -237,6 +240,21 @@ editor.mapname = 地图名字: editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。 editor.overwrite.confirm = [scarlet]警告![] 存在同名地图,确定要覆盖? editor.selectmap = 选择一个地图加载: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = 宽度: height = 高度: menu = 菜单 @@ -596,6 +614,7 @@ block.thorium-wall-large.name = 大型钍墙 block.door.name = 门 block.door-large.name = 大门 block.duo.name = 双管炮 +block.scatter.name = Scatter block.hail.name = 冰雹炮 block.lancer.name = 蓝瑟炮 block.conveyor.name = 传送带 @@ -758,6 +777,7 @@ block.overdrive-projector.description = 提高附近建筑物的速度,如钻 block.force-projector.description = 自身周围创建一个六边形力场,保护建筑物和内部单位免受子弹的伤害。 block.shock-mine.description = 伤害踩到它的敌人。敌人几乎看不到它。 block.duo.description = 小而便宜的炮塔。 +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = 小型炮塔,发射电弧。 block.hail.description = 小型炮兵炮台。 block.lancer.description = 中型炮塔,发射带电的电子束。 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index ba3f2a8f6a..772d9d6e89 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -209,6 +209,9 @@ editor.elevation = 高度 editor.errorload = Error loading file:\n[accent]{0} editor.errorsave = Error saving file:\n[accent]{0} editor.errorname = Map has no name defined. +editor.update = Update +editor.randomize = Randomize +editor.apply = Apply editor.generate = 產生 editor.resize = 調整大小 editor.loadmap = 載入地圖 @@ -237,6 +240,21 @@ editor.mapname = 地圖名稱: editor.overwrite = [accent]警告!這將會覆蓋現有的地圖。 editor.overwrite.confirm = [scarlet]警告![]同名地圖存在,確定要覆蓋現有地圖? editor.selectmap = 選取要載入的地圖: +filter.distort = Distort +filter.noise = Noise +filter.ore = Ore +filter.rivernoise = River Noise +filter.scatter = Scatter +filter.terrain = Terrain +filter.option.scale = Scale +filter.option.mag = Magnitude +filter.option.threshold = Threshold +filter.option.circle-scale = Circle Scale +filter.option.octaves = Octaves +filter.option.falloff = Falloff +filter.option.floor = Floor +filter.option.wall = Wall +filter.option.ore = Ore width = 寬度: height = 長度: menu = 主選單 @@ -596,6 +614,7 @@ block.thorium-wall-large.name = 大型釷牆 block.door.name = 門 block.door-large.name = 大門 block.duo.name = 雙炮 +block.scatter.name = Scatter block.hail.name = 冰雹炮 block.lancer.name = 藍瑟炮 block.conveyor.name = 輸送帶 @@ -758,6 +777,7 @@ block.overdrive-projector.description = 提高附近建築物的速度,如鑽 block.force-projector.description = 在自身周圍形成一個六角形力場,保護內部的建築物和單位免受子彈的傷害。 block.shock-mine.description = 傷害踩到地雷的敵人。敵人幾乎看不見。 block.duo.description = 一種小而便宜的砲塔。 +block.scatter.description = A medium-sized anti-air turret. Sprays clumps of lead or scrap flak at enemy units. block.arc.description = 一種向敵人射出隨機電弧的小砲塔。 block.hail.description = 一種小型火砲。 block.lancer.description = 一種射出電子束的中型砲塔。 diff --git a/core/assets/maps/fortress.mmap b/core/assets/maps/fortress.mmap index 67324f5cd1258cfa09d356f0f4fdab9436c6258d..88fa55e85484ec121fd8cdc2c03297a2128cebe9 100644 GIT binary patch delta 11494 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 C9HMOi delta 11490 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 ZPsu${zi)|I>yiKf delta 6530 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 diff --git a/core/src/io/anuke/mindustry/editor/EditorTool.java b/core/src/io/anuke/mindustry/editor/EditorTool.java index 63ae60c569..9edc99d5e9 100644 --- a/core/src/io/anuke/mindustry/editor/EditorTool.java +++ b/core/src/io/anuke/mindustry/editor/EditorTool.java @@ -32,7 +32,7 @@ public enum EditorTool{ block = tile.block(); } - editor.drawBlock = block == Blocks.air ? floor : block; + editor.drawBlock = block == Blocks.air ? tile.ore() == Blocks.air ? floor : tile.ore() : block; } }, pencil{ diff --git a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java index 9780c99361..bcb7e06c9e 100644 --- a/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java +++ b/core/src/io/anuke/mindustry/editor/MapGenerateDialog.java @@ -32,7 +32,7 @@ public class MapGenerateDialog extends FloatingDialog{ private GenerateInput input = new GenerateInput(); private Array filters = new Array<>(); private int scaling = mobile ? 3 : 1; - private Supplier[] filterTypes = new Supplier[]{NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new, RiverNoiseFilter::new}; + private Supplier[] filterTypes = new Supplier[]{NoiseFilter::new, ScatterFilter::new, TerrainFilter::new, DistortFilter::new, RiverNoiseFilter::new, OreFilter::new}; private Table filterTable; private AsyncExecutor executor = new AsyncExecutor(1); @@ -61,8 +61,6 @@ public class MapGenerateDialog extends FloatingDialog{ } void setup(){ - filters.clear(); - if(pixmap != null){ pixmap.dispose(); texture.dispose(); @@ -156,9 +154,10 @@ public class MapGenerateDialog extends FloatingDialog{ } void showAdd(){ - FloatingDialog selection = new FloatingDialog(""); + FloatingDialog selection = new FloatingDialog("$add"); selection.setFillParent(false); selection.cont.defaults().size(210f, 60f); + int i = 0; for(Supplier gen : filterTypes){ GenerateFilter filter = gen.get(); selection.cont.addButton(filter.name(), () -> { @@ -167,7 +166,7 @@ public class MapGenerateDialog extends FloatingDialog{ update(); selection.hide(); }); - selection.cont.row(); + if(++i % 2 == 0) selection.cont.row(); } selection.addCloseButton(); diff --git a/core/src/io/anuke/mindustry/editor/generation/FilterOption.java b/core/src/io/anuke/mindustry/editor/generation/FilterOption.java index 50e6a69cc9..7a80339440 100644 --- a/core/src/io/anuke/mindustry/editor/generation/FilterOption.java +++ b/core/src/io/anuke/mindustry/editor/generation/FilterOption.java @@ -15,6 +15,7 @@ import io.anuke.mindustry.world.blocks.OreBlock; public abstract class FilterOption{ public static final Predicate floorsOnly = b -> (b instanceof Floor && !(b instanceof OreBlock)) && Core.atlas.isFound(b.icon(Icon.full)); public static final Predicate wallsOnly = b -> (!b.synthetic() && !(b instanceof Floor)) && Core.atlas.isFound(b.icon(Icon.full)); + public static final Predicate oresOnly = b -> b instanceof OreBlock && Core.atlas.isFound(b.icon(Icon.full)); public abstract void build(Table table); public Runnable changed = () -> {}; @@ -35,7 +36,7 @@ public abstract class FilterOption{ @Override public void build(Table table){ - table.add(name); + table.add("$filter.option." + name); table.row(); Slider slider = table.addSlider(min, max, (max-min)/200f, setter).growX().get(); slider.setValue(getter.get()); @@ -78,7 +79,7 @@ public abstract class FilterOption{ dialog.show(); }).pad(4).margin(12f); - table.add(name); + table.add("$filter.option." + name); } } } diff --git a/core/src/io/anuke/mindustry/editor/generation/OreFilter.java b/core/src/io/anuke/mindustry/editor/generation/OreFilter.java new file mode 100644 index 0000000000..976878f958 --- /dev/null +++ b/core/src/io/anuke/mindustry/editor/generation/OreFilter.java @@ -0,0 +1,32 @@ +package io.anuke.mindustry.editor.generation; + +import io.anuke.mindustry.content.Blocks; +import io.anuke.mindustry.editor.generation.FilterOption.BlockOption; +import io.anuke.mindustry.editor.generation.FilterOption.SliderOption; +import io.anuke.mindustry.world.Block; + +import static io.anuke.mindustry.editor.generation.FilterOption.*; + +public class OreFilter extends GenerateFilter{ + float scl = 40, threshold = 0.8f, octaves = 3f, falloff = 0.5f; + Block ore = Blocks.oreCopper; + + { + options( + new SliderOption("scale", () -> scl, f -> scl = f, 1f, 500f), + new SliderOption("threshold", () -> threshold, f -> threshold = f, 0f, 1f), + new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f), + new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f), + new BlockOption("ore", () -> ore, b -> ore = b, oresOnly) + ); + } + + @Override + public void apply(){ + float noise = noise(in.x, in.y, scl, 1f, octaves, falloff); + + if(noise > threshold && !in.srcfloor.isLiquid){ + in.ore = ore; + } + } +} diff --git a/core/src/io/anuke/mindustry/editor/generation/TerrainFilter.java b/core/src/io/anuke/mindustry/editor/generation/TerrainFilter.java index 7400e97f64..e0bf3234f3 100644 --- a/core/src/io/anuke/mindustry/editor/generation/TerrainFilter.java +++ b/core/src/io/anuke/mindustry/editor/generation/TerrainFilter.java @@ -10,14 +10,15 @@ import static io.anuke.mindustry.editor.generation.FilterOption.floorsOnly; import static io.anuke.mindustry.editor.generation.FilterOption.wallsOnly; public class TerrainFilter extends GenerateFilter{ - float scl = 40, threshold = 0.9f, octaves = 3f, falloff = 0.5f, circleScl = 2.1f; + float scl = 40, threshold = 0.9f, octaves = 3f, falloff = 0.5f, magnitude = 1f, circleScl = 2.1f; Block floor = Blocks.stone, block = Blocks.rocks; { options( new SliderOption("scale", () -> scl, f -> scl = f, 1f, 500f), + new SliderOption("mag", () -> magnitude, f -> magnitude = f, 0f, 2f), new SliderOption("threshold", () -> threshold, f -> threshold = f, 0f, 1f), - new SliderOption("circle scale", () -> circleScl, f -> circleScl = f, 0f, 3f), + new SliderOption("circle-scale", () -> circleScl, f -> circleScl = f, 0f, 3f), new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f), new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f), new BlockOption("floor", () -> floor, b -> floor = b, floorsOnly), @@ -27,7 +28,7 @@ public class TerrainFilter extends GenerateFilter{ @Override public void apply(){ - float noise = noise(in.x, in.y, scl, 1f, octaves, falloff) + Mathf.dst((float) in.x / in.editor.width(), (float) in.y / in.editor.height(), 0.5f, 0.5f) * circleScl; + float noise = noise(in.x, in.y, scl, magnitude, octaves, falloff) + Mathf.dst((float) in.x / in.editor.width(), (float) in.y / in.editor.height(), 0.5f, 0.5f) * circleScl; in.floor = floor; in.ore = Blocks.air;