Merge remote-tracking branch 'origin/master'
This commit is contained in:
@@ -176,10 +176,10 @@ filename = 파일 이름:
|
||||
unlocked = 새로운 콘텐츠가 해금되었습니다!
|
||||
available = 새로운 콘텐츠 해금이 가능합니다!
|
||||
unlock.incampaign = < 해금 후 상세정보 열람이 가능합니다 >
|
||||
campaign.select = Select Starting Campaign
|
||||
campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time.
|
||||
campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience.
|
||||
campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished.
|
||||
campaign.select = 캠페인 시작지점 선택하기
|
||||
campaign.none = [lightgray]시작할 행성을 선택하십시오.\n언제든지 전환할 수 있습니다.
|
||||
campaign.erekir = [accent]신규 플레이어에게 추천합니다.[]\n\n보다 새롭고 세련된 컨텐츠. 대부분 순차적으로 캠페인이 진행됩니다.\n\n더 높은 완성도의 지도와 다채로운 경험.
|
||||
campaign.serpulo = [scarlet]신규 플레이어에게 권장되지 않습니다.[]\n\n오래된 컨텐츠: 고전적인 경험. 좀 더 개방적이죠.\n\n잠재적으로 불균형한 지도와 캠페인 메커니즘. 덜 세련됩니다.
|
||||
completed = [accent]완료됨
|
||||
techtree = 연구 기록
|
||||
techtree.select = 연구 기록 선택
|
||||
@@ -755,7 +755,7 @@ sector.basin.name = 유역
|
||||
sector.marsh.name = 습지
|
||||
sector.peaks.name = 산봉우리
|
||||
sector.ravine.name = 협곡
|
||||
sector.caldera-erekir.name = Caldera
|
||||
sector.caldera-erekir.name = 칼데라
|
||||
sector.onset.description = 튜토리얼 지역. 아직 목표가 만들어지지 않았습니다. 정보를 더 기다리십시오.
|
||||
sector.aegis.description = 적은 방어막으로 보호받고 있습니다. 이 구역에서 실험적인 방어막 차단기 모듈이 감지되었습니다.\n이 구조물을 찾으십시오. 텅스텐을 공급해 방어막 차단기를 가동하고 적의 기지를 파괴하십시오.
|
||||
sector.lake.description = 이 지역의 광재 호수는 기체의 활동범위를 크게 제한시킵니다. 호버 유닛이 유일한 선택지입니다.\n[accent]함선 재구성기[]를 연구하고 [accent]일루드[]를 가능한 한 빨리 생산하십시오.
|
||||
@@ -1149,7 +1149,7 @@ rules.coreincinerates = 코어 방화 비허용
|
||||
rules.disableworldprocessors = 월드 프로세서 비활성화
|
||||
rules.schematic = 설계도 허용
|
||||
rules.wavetimer = 시간 제한이 있는 단계
|
||||
rules.wavesending = Wave Sending
|
||||
rules.wavesending = 단계 넘김
|
||||
rules.waves = 단계
|
||||
rules.attack = 공격 모드
|
||||
rules.rtsai = RTS AI
|
||||
@@ -2087,7 +2087,7 @@ lst.set = 변수 선언/할당
|
||||
lst.operation = 1~2개의 변수로 연산
|
||||
lst.end = 실행줄의 가장 위로 건너뜀
|
||||
lst.wait = 일정 시간(초) 동안 대기
|
||||
lst.stop = Halt execution of this processor.
|
||||
lst.stop = 이 프로세서의 실행 중지
|
||||
lst.lookup = id를 통해 특정 유형의 아이템/액체/기체/블록 조회\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]\n...로 각 유형의 총 갯수를 알 수 있습니다.
|
||||
lst.jump = 조건부로 다른 실행문으로 건너뜀
|
||||
lst.unitbind = type 옆에 있는 기체를 지정하고, [accent]@unit[]에 저장
|
||||
|
||||
@@ -12,7 +12,9 @@ import arc.scene.ui.*;
|
||||
import arc.scene.ui.ImageButton.*;
|
||||
import arc.scene.ui.TextButton.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.*;
|
||||
import mindustry.annotations.Annotations.*;
|
||||
import mindustry.core.*;
|
||||
import mindustry.game.EventType.*;
|
||||
import mindustry.gen.*;
|
||||
@@ -26,6 +28,7 @@ public class MenuFragment{
|
||||
private Table container, submenu;
|
||||
private Button currentMenu;
|
||||
private MenuRenderer renderer;
|
||||
private Seq<MenuButton> customButtons = new Seq<>();
|
||||
|
||||
public void build(Group parent){
|
||||
renderer = new MenuRenderer();
|
||||
@@ -39,46 +42,6 @@ public class MenuFragment{
|
||||
|
||||
parent.fill((x, y, w, h) -> renderer.render());
|
||||
|
||||
parent.fill(c -> {
|
||||
container = c;
|
||||
c.name = "menu container";
|
||||
|
||||
if(!mobile){
|
||||
buildDesktop();
|
||||
Events.on(ResizeEvent.class, event -> buildDesktop());
|
||||
}else{
|
||||
buildMobile();
|
||||
Events.on(ResizeEvent.class, event -> buildMobile());
|
||||
}
|
||||
});
|
||||
|
||||
parent.fill(c -> c.bottom().right().button(Icon.discord, new ImageButtonStyle(){{
|
||||
up = discordBanner;
|
||||
}}, ui.discord::show).marginTop(9f).marginLeft(10f).tooltip("@discord").size(84, 45).name("discord"));
|
||||
|
||||
//info icon
|
||||
if(mobile){
|
||||
parent.fill(c -> c.bottom().left().button("", new TextButtonStyle(){{
|
||||
font = Fonts.def;
|
||||
fontColor = Color.white;
|
||||
up = infoBanner;
|
||||
}}, ui.about::show).size(84, 45).name("info"));
|
||||
|
||||
|
||||
}else if(becontrol.active()){
|
||||
parent.fill(c -> c.bottom().right().button("@be.check", Icon.refresh, () -> {
|
||||
ui.loadfrag.show();
|
||||
becontrol.checkUpdate(result -> {
|
||||
ui.loadfrag.hide();
|
||||
if(!result){
|
||||
ui.showInfo("@be.noupdates");
|
||||
}
|
||||
});
|
||||
}).size(200, 60).name("becheck").update(t -> {
|
||||
t.getLabel().setColor(becontrol.isUpdateAvailable() ? Tmp.c1.set(Color.white).lerp(Pal.accent, Mathf.absin(5f, 1f)) : Color.white);
|
||||
}));
|
||||
}
|
||||
|
||||
String versionText = ((Version.build == -1) ? "[#fc8140aa]" : "[#ffffffba]") + Version.combined();
|
||||
parent.fill((x, y, w, h) -> {
|
||||
TextureRegion logo = Core.atlas.find("logo");
|
||||
@@ -96,6 +59,49 @@ public class MenuFragment{
|
||||
Fonts.outline.setColor(Color.white);
|
||||
Fonts.outline.draw(versionText, fx, fy - logoh/2f - Scl.scl(2f), Align.center);
|
||||
}).touchable = Touchable.disabled;
|
||||
|
||||
parent.fill(c -> {
|
||||
c.pane(Styles.noBarPane, cont -> {
|
||||
container = cont;
|
||||
cont.name = "menu container";
|
||||
|
||||
if(!mobile){
|
||||
c.left();
|
||||
buildDesktop();
|
||||
Events.on(ResizeEvent.class, event -> buildDesktop());
|
||||
}else{
|
||||
buildMobile();
|
||||
Events.on(ResizeEvent.class, event -> buildMobile());
|
||||
}
|
||||
}).with(pane -> {
|
||||
pane.setOverscroll(false, false);
|
||||
}).grow();
|
||||
});
|
||||
|
||||
parent.fill(c -> c.bottom().right().button(Icon.discord, new ImageButtonStyle(){{
|
||||
up = discordBanner;
|
||||
}}, ui.discord::show).marginTop(9f).marginLeft(10f).tooltip("@discord").size(84, 45).name("discord"));
|
||||
|
||||
//info icon
|
||||
if(mobile){
|
||||
parent.fill(c -> c.bottom().left().button("", new TextButtonStyle(){{
|
||||
font = Fonts.def;
|
||||
fontColor = Color.white;
|
||||
up = infoBanner;
|
||||
}}, ui.about::show).size(84, 45).name("info"));
|
||||
}else if(becontrol.active()){
|
||||
parent.fill(c -> c.bottom().right().button("@be.check", Icon.refresh, () -> {
|
||||
ui.loadfrag.show();
|
||||
becontrol.checkUpdate(result -> {
|
||||
ui.loadfrag.hide();
|
||||
if(!result){
|
||||
ui.showInfo("@be.noupdates");
|
||||
}
|
||||
});
|
||||
}).size(200, 60).name("becheck").update(t -> {
|
||||
t.getLabel().setColor(becontrol.isUpdateAvailable() ? Tmp.c1.set(Color.white).lerp(Pal.accent, Mathf.absin(5f, 1f)) : Color.white);
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
private void buildMobile(){
|
||||
@@ -116,23 +122,28 @@ public class MenuFragment{
|
||||
mods = new MobileButton(Icon.book, "@mods", ui.mods::show),
|
||||
exit = new MobileButton(Icon.exit, "@quit", () -> Core.app.exit());
|
||||
|
||||
Seq<MobileButton> customs = customButtons.map(b -> new MobileButton(b.icon, b.text, b.runnable == null ? () -> {} : b.runnable));
|
||||
|
||||
if(!Core.graphics.isPortrait()){
|
||||
container.marginTop(60f);
|
||||
container.add(play);
|
||||
container.add(join);
|
||||
container.add(custom);
|
||||
container.add(maps);
|
||||
// add odd custom buttons
|
||||
for(int i = 1; i < customs.size; i += 2){
|
||||
container.add(customs.get(i));
|
||||
}
|
||||
container.row();
|
||||
|
||||
container.table(table -> {
|
||||
table.defaults().set(container.defaults());
|
||||
|
||||
table.add(editor);
|
||||
table.add(tools);
|
||||
|
||||
table.add(mods);
|
||||
if(!ios) table.add(exit);
|
||||
}).colspan(4);
|
||||
container.add(editor);
|
||||
container.add(tools);
|
||||
container.add(mods);
|
||||
// add even custom buttons (before the exit button)
|
||||
for(int i = 0; i < customs.size; i += 2){
|
||||
container.add(customs.get(i));
|
||||
}
|
||||
if(!ios) container.add(exit);
|
||||
}else{
|
||||
container.marginTop(0f);
|
||||
container.add(play);
|
||||
@@ -144,13 +155,13 @@ public class MenuFragment{
|
||||
container.add(editor);
|
||||
container.add(tools);
|
||||
container.row();
|
||||
|
||||
container.table(table -> {
|
||||
table.defaults().set(container.defaults());
|
||||
|
||||
table.add(mods);
|
||||
if(!ios) table.add(exit);
|
||||
}).colspan(2);
|
||||
container.add(mods);
|
||||
// add custom buttons
|
||||
for(int i = 0; i < customs.size; i++){
|
||||
container.add(customs.get(i));
|
||||
if(i % 2 == 0) container.row();
|
||||
}
|
||||
if(!ios) container.add(exit);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -168,23 +179,23 @@ public class MenuFragment{
|
||||
t.name = "buttons";
|
||||
|
||||
buttons(t,
|
||||
new Buttoni("@play", Icon.play,
|
||||
new Buttoni("@campaign", Icon.play, () -> checkPlay(ui.planet::show)),
|
||||
new Buttoni("@joingame", Icon.add, () -> checkPlay(ui.join::show)),
|
||||
new Buttoni("@customgame", Icon.terrain, () -> checkPlay(ui.custom::show)),
|
||||
new Buttoni("@loadgame", Icon.download, () -> checkPlay(ui.load::show))
|
||||
new MenuButton("@play", Icon.play,
|
||||
new MenuButton("@campaign", Icon.play, () -> checkPlay(ui.planet::show)),
|
||||
new MenuButton("@joingame", Icon.add, () -> checkPlay(ui.join::show)),
|
||||
new MenuButton("@customgame", Icon.terrain, () -> checkPlay(ui.custom::show)),
|
||||
new MenuButton("@loadgame", Icon.download, () -> checkPlay(ui.load::show))
|
||||
),
|
||||
new Buttoni("@database.button", Icon.menu,
|
||||
new Buttoni("@schematics", Icon.paste, ui.schematics::show),
|
||||
new Buttoni("@database", Icon.book, ui.database::show),
|
||||
new Buttoni("@about.button", Icon.info, ui.about::show)
|
||||
new MenuButton("@database.button", Icon.menu,
|
||||
new MenuButton("@schematics", Icon.paste, ui.schematics::show),
|
||||
new MenuButton("@database", Icon.book, ui.database::show),
|
||||
new MenuButton("@about.button", Icon.info, ui.about::show)
|
||||
),
|
||||
new Buttoni("@editor", Icon.terrain, () -> checkPlay(ui.maps::show)), steam ? new Buttoni("@workshop", Icon.steam, platform::openWorkshop) : null,
|
||||
new Buttoni("@mods", Icon.book, ui.mods::show),
|
||||
new Buttoni("@settings", Icon.settings, ui.settings::show),
|
||||
new Buttoni("@quit", Icon.exit, Core.app::exit)
|
||||
new MenuButton("@editor", Icon.terrain, () -> checkPlay(ui.maps::show)), steam ? new MenuButton("@workshop", Icon.steam, platform::openWorkshop) : null,
|
||||
new MenuButton("@mods", Icon.book, ui.mods::show),
|
||||
new MenuButton("@settings", Icon.settings, ui.settings::show)
|
||||
);
|
||||
|
||||
buttons(t, customButtons.toArray(MenuButton.class));
|
||||
buttons(t, new MenuButton("@quit", Icon.exit, Core.app::exit));
|
||||
}).width(width).growY();
|
||||
|
||||
container.table(background, t -> {
|
||||
@@ -199,7 +210,6 @@ public class MenuFragment{
|
||||
}
|
||||
|
||||
private void checkPlay(Runnable run){
|
||||
|
||||
if(!mods.hasContentErrors()){
|
||||
run.run();
|
||||
}else{
|
||||
@@ -222,8 +232,8 @@ public class MenuFragment{
|
||||
submenu.actions(Actions.alpha(1f), Actions.alpha(0f, 0.2f, Interp.fade), Actions.run(() -> submenu.clearChildren()));
|
||||
}
|
||||
|
||||
private void buttons(Table t, Buttoni... buttons){
|
||||
for(Buttoni b : buttons){
|
||||
private void buttons(Table t, MenuButton... buttons){
|
||||
for(MenuButton b : buttons){
|
||||
if(b == null) continue;
|
||||
Button[] out = {null};
|
||||
out[0] = t.button(b.text, b.icon, Styles.flatToggleMenut, () -> {
|
||||
@@ -251,24 +261,56 @@ public class MenuFragment{
|
||||
}
|
||||
}
|
||||
|
||||
private static class Buttoni{
|
||||
final Drawable icon;
|
||||
final String text;
|
||||
final Runnable runnable;
|
||||
final Buttoni[] submenu;
|
||||
/** Adds a custom button to the menu. */
|
||||
public void addButton(String text, Drawable icon, Runnable callback){
|
||||
addButton(new MenuButton(text, icon, callback));
|
||||
}
|
||||
|
||||
public Buttoni(String text, Drawable icon, Runnable runnable){
|
||||
/** Adds a custom button to the menu. */
|
||||
public void addButton(String text, Runnable callback){
|
||||
addButton(text, Styles.none, callback);
|
||||
}
|
||||
|
||||
/**
|
||||
* Adds a custom button to the menu.
|
||||
* If {@link MenuButton#submenu} is null or the player is on mobile, {@link MenuButton#runnable} is invoked on click.
|
||||
* Otherwise, {@link MenuButton#submenu} is shown.
|
||||
*/
|
||||
public void addButton(MenuButton button){
|
||||
customButtons.add(button);
|
||||
}
|
||||
|
||||
/** Represents a menu button definition. */
|
||||
public static class MenuButton{
|
||||
public final Drawable icon;
|
||||
public final String text;
|
||||
/** Runnable ran when the button is clicked. Ignored on desktop if {@link #submenu} is not null. */
|
||||
public final Runnable runnable;
|
||||
/** Submenu shown when this button is clicked. Used instead of {@link #runnable} on desktop. */
|
||||
public final @Nullable MenuButton[] submenu;
|
||||
|
||||
/** Constructs a simple menu button, which behaves the same way on desktop and mobile. */
|
||||
public MenuButton(String text, Drawable icon, Runnable runnable){
|
||||
this.icon = icon;
|
||||
this.text = text;
|
||||
this.runnable = runnable;
|
||||
this.submenu = null;
|
||||
}
|
||||
|
||||
public Buttoni(String text, Drawable icon, Buttoni... buttons){
|
||||
/** Constructs a button that runs the runnable when clicked on mobile or shows the submenu on desktop. */
|
||||
public MenuButton(String text, Drawable icon, Runnable runnable, MenuButton... submenu){
|
||||
this.icon = icon;
|
||||
this.text = text;
|
||||
this.runnable = runnable;
|
||||
this.submenu = submenu;
|
||||
}
|
||||
|
||||
/** Comstructs a desktop-only button; used internally. */
|
||||
MenuButton(String text, Drawable icon, MenuButton... submenu){
|
||||
this.icon = icon;
|
||||
this.text = text;
|
||||
this.runnable = () -> {};
|
||||
this.submenu = buttons;
|
||||
this.submenu = submenu;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -78,7 +78,7 @@ public class VariableReactor extends PowerGenerator{
|
||||
public void updateTile(){
|
||||
heat = calculateHeat(sideHeat);
|
||||
|
||||
productionEfficiency = Mathf.clamp(heat / maxHeat) * efficiency;
|
||||
productionEfficiency = efficiency;
|
||||
warmup = Mathf.lerpDelta(warmup, productionEfficiency > 0 ? 1f : 0f, warmupSpeed);
|
||||
|
||||
if(instability >= 1f){
|
||||
|
||||
+1
-1
@@ -122,6 +122,6 @@
|
||||
},
|
||||
{
|
||||
"name": "LightDustry",
|
||||
"address": ["lightdustry.ddns.net:28583", "lightdusy.ddns.net:6567", "lightdusy.ddns.net:6568"]
|
||||
"address": ["own-formerly.craft.playit.gg:26618", "lightdusy.ddns.net:6567", "lightdusy.ddns.net:6568"]
|
||||
}
|
||||
]
|
||||
|
||||
Reference in New Issue
Block a user