From 775b402077a7d057245bc430748d1405a601d4f5 Mon Sep 17 00:00:00 2001 From: sharlotte Date: Tue, 24 Aug 2021 18:18:41 +0900 Subject: [PATCH] improved SettingS.java --- assets/bundles/bundle.properties | 99 +++---- assets/bundles/bundle_ko.properties | 93 +++---- assets/mod.json | 2 +- gradle.properties | 2 +- src/UnitInfo/core/HudUi.java | 22 +- src/UnitInfo/core/Main.java | 15 +- src/UnitInfo/core/SettingS.java | 386 +++++++++------------------- src/UnitInfo/core/SharSetting.java | 26 ++ src/UnitInfo/ui/SBar.java | 16 +- 9 files changed, 273 insertions(+), 388 deletions(-) create mode 100644 src/UnitInfo/core/SharSetting.java diff --git a/assets/bundles/bundle.properties b/assets/bundles/bundle.properties index 3f7c4d7..a2235e2 100644 --- a/assets/bundles/bundle.properties +++ b/assets/bundles/bundle.properties @@ -22,21 +22,39 @@ shar-stat.powerIn = Power Income: {0}/s shar-stat.powerOut = Power Outcome: {0}/s #Settings -setting.unitlinelimit.name = UnitLines limit -setting.unitlinelimit.description = lots of drawing unitlines drop fps. you need to set lines limit with your device environment. - -setting.wavesetting.name = Wave UI Setting -setting.opacitysetting.name = Opacity Setting - -setting.infoUiScale.name = Info UI Scaling -setting.infoUiScale.description = set scale for info ui on left-side. -setting.coreItemCheckRate.name = Item tap: update rate +setting.infoui.name = Display Info UI +setting.infoui.description = +setting.weaponui.name = Display Weapon Info UI +setting.weaponui.description = +setting.wavemax.name = Wave Amount to Display +setting.wavemax.description = set displayed wave amount of wave info. setting.pastwave.name = Display Previous Wave setting.pastwave.description = toggle to shows previous wave on wave info ingame.\nCurrent wave is highlighted with red. setting.emptywave.name = Display Empty Wave setting.emptywave.description = toggle to shows empty wave on wave info ingame. -setting.wavemax.name = Wave Amount to Display -setting.wavemax.description = set displayed wave amount of wave info.\nSelect the pencil and enter a number. +setting.barstyle.name = Change Bar Style +setting.barstyle.description = +setting.infoUiScale.name = Info UI Scaling +setting.infoUiScale.description = set scale for info ui on left-side. +setting.coreItemCheckRate.name = Item tap: update rate +setting.coreItemCheckRate.description = +setting.allTeam.name = Display all teams' info on item tap +setting.allTeam.description = + +setting.rangeRadius.name = Near Range Margin +setting.rangeRadius.description = set additional distances to show range. +setting.rangeNearby.name = Display Near Range +setting.rangeNearby.description = toggle to display range circle when you approached enemy ranges. +setting.allTeamRange.name = Display Player Team Range +setting.allTeamRange.description = toggle to display player team's range. +setting.allTargetRange.name = Display All Target Range +setting.allTargetRange.description = toggle to display all range whatever airTarget or groundTarget etc. +setting.coreRange.name = Display Core Range +setting.coreRange.description = display enemy core build-limit range +setting.unitRange.name = Display Unit Range +setting.unitRange.description = toggle to display unit range too. +setting.softRangeDrawing.name = Soft Display Range +setting.softRangeDrawing.description = toggle to change range display style. setting.selectopacity.name = Select Arrow Opacity setting.selectopacity.description = use the slider to set opacity of select arrow. @@ -44,44 +62,35 @@ setting.baropacity.name = Health Bar Opacity setting.baropacity.description = use the slider to set opacity of unit bar. setting.uiopacity.name = UI Background Opacity setting.uiopacity.description = use the slider to set opacity of ui background. - -setting.scan.name = Enable Block Scanner -setting.scan.description = toggle to enable scanner that shows nearly turret and wall hp. -setting.coreRange.name = Display Core Range -setting.coreRange.description = display enemy core build-limit range -setting.rangemax.name = Block Scanner Range -setting.rangemax.description = set scan radius of scanner.\nSelect the pencil and enter a number. -setting.rangeNearby.name = Display Near Range -setting.rangeNearby.description = toggle to display range circle when you approached enemy ranges. -setting.unitRange.name = Display Unit Range -setting.unitRange.description = toggle to display unit range too. -setting.softRangeDrawing.name = Soft Display Range -setting.softRangeDrawing.description = toggle to change range display style. setting.softRangeOpacity.name = Soft Range Opacity setting.softRangeOpacity.description = use the slider to set opacity of soft range. -setting.rangeRadius.name = Near Range Margin -setting.rangeRadius.description = set additional distances to show range. -setting.allTeamRange.name = Display Player Team Range -setting.allTeamRange.description = toggle to display player team's range. -setting.allTargetRange.name = Display All Target Range -setting.allTargetRange.description = toggle to display all range whatever airTarget or groundTarget etc. + +setting.gaycursor.name = Enable Mouse Trail Effect [lightgray](only for desktop)[] +setting.gaycursor.description = +setting.unithealthui.name = Display Unit Bar +setting.unithealthui.description = +setting.linkedMass.name = Display mass driver link line +setting.linkedMass.description = +setting.linkedNode.name = Display node link line +setting.linkedNode.description = +setting.select.name = Display Select Arrow +setting.select.description = +setting.deadTarget.name = save locked target even if it's dead +setting.deadTarget.description = +setting.distanceLine.name = Display distance line from info target +setting.distanceLine.description = +setting.unitlinelimit.name = UnitLines limit +setting.unitlinelimit.description = lots of drawing unitlines drop fps. you need to set lines limit with your device environment. setting.autoShooting.name = Enable Auto Shooting -setting.infoui.name = Display Info UI -setting.weaponui.name = Display Weapon Info UI -setting.select.name = Display Select Arrow -setting.unithealthui.name = Display Unit Bar -setting.ssim.name = Change Bar Style [lightgray](made by ssim)[] -setting.shar.name = Change Bar Style [lightgray](made by shar)[] -setting.shar1.name = Change Bar Style [lightgray](made by shar)[] -setting.shar2.name = Change Bar Style [lightgray](made by shar)[] -setting.shar3.name = Change Bar Style [lightgray](made by shar)[] -setting.gaycursor.name = Enable Mouse Trail Effect [lightgray](only for desktop)[] -setting.allTeam.name = Display all teams' info on item tap -setting.deadTarget.name = save locked target even if it's dead -setting.linkedMass.name = Display mass driver link line -setting.linkedNode.name = Display node link line -setting.distanceLine.name = Display distance line from info target +setting.autoShooting.description = + +setting.shar-title = UnitInfo Setting +setting.shar-wave = Wave Setting +setting.shar-range = AutoRange Setting +setting.shar-opacity = Opacity Setting +setting.shar-draw = Overdrawing Setting +setting.shar-etc = etc #Dialog editmaxwave = Edit Waves(int) diff --git a/assets/bundles/bundle_ko.properties b/assets/bundles/bundle_ko.properties index 7713999..d7ac628 100644 --- a/assets/bundles/bundle_ko.properties +++ b/assets/bundles/bundle_ko.properties @@ -22,44 +22,39 @@ shar-stat.powerIn = 전력 생산량: {0}/s shar-stat.powerOut = 전력 소모량: {0}/s # Settings -setting.unitlinelimit.name = 유닛선 제한 -setting.unitlinelimit.description = 다수의 유닛선은 fps를 떨어트립니다. 기기 환경에 맞추어 조절해야 합니다. - -setting.wavesetting.name = 단계 UI 설정 -setting.opacitysetting.name = 투명도 설정 - -setting.infoUiScale.name = 정보 UI 스케일링 -setting.infoUiScale.description = 인게임 좌측 정보 UI의 크기를 설정합니다. -setting.coreItemCheckRate.name = 자원 탭: 업데이트 주기 +setting.infoui.name = 정보 UI 표시 +setting.infoui.description = +setting.weaponui.name = 무기 정보 UI 표시 +setting.weaponui.description = +setting.wavemax.name = 표시할 단계 수 +setting.wavemax.description = 연필 아이콘을 눌러서 인게임 단계 탭에서 표시될 최대 웨이브 수를 설정합니다. setting.pastwave.name = 이전 단계 표시 setting.pastwave.description = 인게임 단계 탭에서 이전 단계도 표시합니다. 현재 단계는 빨간색으로 강조됩니다. setting.emptywave.name = 빈 단계 표시 setting.emptywave.description = 인게임 단계 탭에서 빈 단계도 표시합니다. -setting.wavemax.name = 표시할 단계 수 -setting.wavemax.description = 연필 아이콘을 눌러서 인게임 단계 탭에서 표시될 최대 웨이브 수를 설정합니다. +setting.barstyle.name = 바 스타일 변경 +setting.barstyle.description = +setting.infoUiScale.name = 정보 UI 스케일링 +setting.infoUiScale.description = 인게임 좌측 정보 UI의 크기를 설정합니다. +setting.coreItemCheckRate.name = 자원 탭: 업데이트 주기 +setting.coreItemCheckRate.description = +setting.allTeam.name = 자원 탭: 모든 팀 표시 +setting.allTeam.description = - -setting.scan.name = 블록 스캐너 활성화 -setting.scan.description = 주변 포탑과 벽의 체력을 표시하는 스캐터를 활성화합니다. -setting.rangemax.name = 블록 스캐너 사거리 -setting.rangemax.description = 연필 아이콘을 눌러서 스캐너 사거리를 설정합니다. -setting.coreRange.name = 코어 사거리 표시 -setting.coreRange.description = 적 코어 건설제한 사거리를 표시합니다. -setting.rangeNearby.name = 주변 사거리 표시 -setting.rangeNearby.description = 적 사거리에 접근했을 경우 사거리를 표시합니다. -setting.unitRange.name = 유닛 사거리 표시 -setting.unitRange.description = 유닛 사거리도 표시합니다. -setting.softRangeDrawing.name = 부드러운 사거리 표시 -setting.softRangeDrawing.description = 사거리를 표시하는 원의 모양이 달라집니다. -setting.softRangeOpacity.name = 부드러운 사거리 투명도 -setting.softRangeOpacity.description = 슬라이더로 부드러운 사거리 투명도를 조절합니다. setting.rangeRadius.name = 사거리 접근 거리 setting.rangeRadius.description = 사거리를 표시할 추가 거리를 설정합니다. +setting.rangeNearby.name = 주변 사거리 표시 +setting.rangeNearby.description = 적 사거리에 접근했을 경우 사거리를 표시합니다. setting.allTeamRange.name = 플레이어 팀 사거리 표시 setting.allTeamRange.description = 플레이어 팀의 사거리를 표시합니다. setting.allTargetRange.name = 모든 목표물 사거리 표시 setting.allTargetRange.description = 지상 공중 상관없이 모든 사거리를 표시합니다. - +setting.coreRange.name = 코어 사거리 표시 +setting.coreRange.description = 적 코어 건설제한 사거리를 표시합니다. +setting.unitRange.name = 유닛 사거리 표시 +setting.unitRange.description = 유닛 사거리도 표시합니다. +setting.softRangeDrawing.name = 부드러운 사거리 표시 +setting.softRangeDrawing.description = 사거리를 표시하는 원의 모양이 달라집니다. setting.selectopacity.name = 선택 화살표 투명도 setting.selectopacity.description = 슬라이더로 선택 화살표의 투명도를 조절합니다. @@ -67,23 +62,35 @@ setting.baropacity.name = 유닛 바 투명도 setting.baropacity.description = 슬라이더로 유닛 바의 투명도를 조절합니다. setting.uiopacity.name = UI 배경 투명도 setting.uiopacity.description = 슬라이더로 UI 배경 투명도를 조절합니다. +setting.softRangeOpacity.name = 부드러운 사거리 투명도 +setting.softRangeOpacity.description = 슬라이더로 부드러운 사거리 투명도를 조절합니다. + +setting.gaycursor.name = 마우스 꼬리효과 [lightgray](PC 전용)[] +setting.gaycursor.description = +setting.unithealthui.name = 유닛 바 표시 +setting.unithealthui.description = +setting.linkedMass.name = 매스 드라이버 연결선 표시 +setting.linkedMass.description = +setting.linkedNode.name = 노드 연결선 표시 +setting.linkedNode.description = +setting.select.name = 선택 화살표 표시 +setting.select.description = +setting.deadTarget.name = 고정 목표물이 죽더라도 계속 고정하기 +setting.deadTarget.description = +setting.distanceLine.name = 목표물과의 거리선 표시 +setting.distanceLine.description = +setting.unitlinelimit.name = 유닛선 제한 +setting.unitlinelimit.description = 다수의 유닛선은 fps를 떨어트립니다. 기기 환경에 맞추어 조절해야 합니다. setting.autoShooting.name = 자동 사격 활성화 -setting.infoui.name = 정보 UI 표시 -setting.weaponui.name = 무기 정보 UI 표시 -setting.select.name = 선택 화살표 표시 -setting.unithealthui.name = 유닛 바 표시 -setting.ssim.name = 바 스타일 변경 [lightgray](ssim 만듬)[] -setting.shar.name = 바 스타일 변경 [lightgray](shar 만듬)[] -setting.shar1.name = 바 스타일 변경 [lightgray](shar 만듬)[] -setting.shar2.name = 바 스타일 변경 [lightgray](shar 만듬)[] -setting.shar3.name = 바 스타일 변경 [lightgray](shar 만듬)[] -setting.gaycursor.name = 마우스 꼬리효과 [lightgray](PC 전용)[] -setting.allTeam.name = 자원 탭에 모든 팀 표시 -setting.deadTarget.name = 고정 목표물이 죽더라도 계속 고정하기 -setting.linkedMass.name = 매스 드라이버 연결선 표시 -setting.linkedNode.name = 노드 연결선 표시 -setting.distanceLine.name = 목표물과의 거리선 표시 +setting.autoShooting.description = + +setting.shar-title = UnitInfo 설정 +setting.shar-wave = 단계 설정 +setting.shar-range = 자동 사거리 설정 +setting.shar-opacity = 투명도 설정 +setting.shar-draw = 덧그리기 설정 +setting.shar-etc = 기타 #Dialog editmaxwave = 최대 단계 수정하기(정수) @@ -99,4 +106,4 @@ hud.item = 자원 정보 hud.cancel = 닫음 #Mod -shar-description = 여러가지 다양한 정보들을 인게임에서 보여주는 다기능 정보 모드.\n\n[#AE00FB]인게임 UI:[] 좌측 탭에 위치했으며 커서를 통한 유닛/건물이나 단계 목록, 코어, 자원 정보를 알려줍니다.\n\n[#B5FFD9]유닛/건물 정보:[] 커서로 유닛이나 건물의 정보를 표시합니다.\n\n[#B5FFD9]단계 정보:[] 유닛 종류와 수, 보스 유무를 목록에 담아 보여줍니다. 클릭해서 유닛 정보도 열람할 수 있습니다.\n\n[#B5FFD9]코어 정보:[] 각 팀의 코어 위치와 체력을 보여줍니다. 클릭해서 카메라 위치를 변경할 수 있습니다.\n\n[#B5FFD9]타일 정보:[] 커서 위치의 블록/타일/광물 아이콘과 좌표를 보여줍니다. 남은 단계 유닛도 보여줍니다.\n\n[#B5FFD9]자원 정보:[] 각 팀의 현재 자원(증감치)와 유닛 수를 보여줍니다.\n\n\n[#AE00FB]인게임 그리기:[] 각 유닛이나 블록같은 특정 위치에 여러가지 정보를 덧그립니다.\n\n[#B5FFD9]블록 스캐너:[] 커서 주변의 포탑과 벽의 사거리와 체력을 바로 표시합니다.\n\n[#B5FFD9]유닛 바:[] 각 팀의 유닛의 탄약, 방어막, 체력을 바로 보여줍니다.\n\n[#B5FFD9]포탑 사거리:[] 포탑 사거리를 표시합니다.\n\n[#B5FFD9]전선 연결 표시:[] 커서에 있는 블록과 전력으로 연결된 다른 블록들을 초록색 전선으로 이어서 그립니다.\n\n[#B5FFD9]매스 연결 표시:[] 커서에 있는 드라이버와 연결된 다른 드라이버들을 선으로 이어서 그립니다.\n\n \ No newline at end of file +shar-description = 여러가지 다양한 정보들을 인게임에서 보여주는 다기능 정보 모드.\n\n[#AE00FB]인게임 UI:[] 좌측 탭에 위치했으며 커서를 통한 유닛/건물이나 단계 목록, 코어, 자원 정보를 알려줍니다.\n\n[#B5FFD9]유닛/건물 정보:[] 커서로 유닛이나 건물의 정보를 표시합니다.\n\n[#B5FFD9]단계 정보:[] 유닛 종류와 수, 보스 유무를 목록에 담아 보여줍니다. 클릭해서 유닛 정보도 열람할 수 있습니다.\n\n[#B5FFD9]코어 정보:[] 각 팀의 코어 위치와 체력을 보여줍니다. 클릭해서 카메라 위치를 변경할 수 있습니다.\n\n[#B5FFD9]타일 정보:[] 커서 위치의 블록/타일/광물 아이콘과 좌표를 보여줍니다. 남은 단계 유닛도 보여줍니다.\n\n[#B5FFD9]자원 정보:[] 각 팀의 현재 자원(증감치)와 유닛 수를 보여줍니다.\n\n\n[#AE00FB]인게임 그리기:[] 각 유닛이나 블록같은 특정 위치에 여러가지 정보를 덧그립니다.\n\n[#B5FFD9]블록 스캐너:[] 커서 주변의 포탑과 벽의 사거리와 체력을 바로 표시합니다.\n\n[#B5FFD9]유닛 바:[] 각 팀의 유닛의 탄약, 방어막, 체력을 바로 보여줍니다.\n\n[#B5FFD9]포탑 사거리:[] 포탑 사거리를 표시합니다.\n\n[#B5FFD9]전선 연결 표시:[] 커서에 있는 블록과 전력으로 연결된 다른 블록들을 초록색 전선으로 이어서 그립니다.\n\n[#B5FFD9]매스 연결 표시:[] 커서에 있는 드라이버와 연결된 다른 드라이버들을 선으로 이어서 그립니다. diff --git a/assets/mod.json b/assets/mod.json index 13e323c..5ff0e18 100644 --- a/assets/mod.json +++ b/assets/mod.json @@ -5,7 +5,7 @@ "description": "The mod displays more information in-game, such as unit/building, wave, core, tile, item/unit total info etc", "version": "1.3.3.1", "main": "UnitInfo.core.Main", - "minGameVersion": "130", + "minGameVersion": "130.1", "dependencies": [], "hidden": true, "java": true diff --git a/gradle.properties b/gradle.properties index 28daf14..01539ed 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,6 +3,6 @@ pArtifactFilename = UnitInfo.jar # Group of project (should line up with dirs in src/) pGroup = sharlotte # Version of Mindustry to use (if not working, consult jitpack.io) -pMindustryVersion = v130 +pMindustryVersion = v130.1 # Minimum API level for d8 (if you don't know what this is, leave it unless d8 yells at you) pMinApi = 26 \ No newline at end of file diff --git a/src/UnitInfo/core/HudUi.java b/src/UnitInfo/core/HudUi.java index 9c15bde..2e092f5 100644 --- a/src/UnitInfo/core/HudUi.java +++ b/src/UnitInfo/core/HudUi.java @@ -358,11 +358,14 @@ public class HudUi { t.table(tt -> { tt.add(new Stack() {{ add(new Table(ttt -> { - ttt.image(type.uiIcon).size(iconMed); + ttt.image(type.uiIcon).size(iconSmall); })); add(new Table(ttt -> { ttt.right().bottom(); - ttt.label(() -> Groups.unit.count(u -> u.type == type && u.team == state.rules.waveTeam && u.isBoss()) + ""); + Label label = new Label(() -> Groups.unit.count(u -> u.type == type && u.team == state.rules.waveTeam && u.isBoss()) + ""); + label.setFontScale(0.75f); + ttt.add(label); + ttt.pack(); })); add(new Table(ttt -> { ttt.top().right(); @@ -372,8 +375,8 @@ public class HudUi { ttt.pack(); })); }}).pad(6); - if(++i[0] % 6 == 0) tt.row(); }); + if(++i[0] % 6 == 0) t.row(); }); t.row(); i[0] = 0; @@ -381,15 +384,18 @@ public class HudUi { t.table(tt -> { tt.add(new Stack() {{ add(new Table(ttt -> { - ttt.add(new Image(type.uiIcon)).size(iconMed); + ttt.add(new Image(type.uiIcon)).size(iconSmall); })); add(new Table(ttt -> { ttt.right().bottom(); - ttt.add(new Label(() -> Groups.unit.count(u -> u.type == type && u.team == state.rules.waveTeam && !u.isBoss()) + "")); + Label label = new Label(() -> Groups.unit.count(u -> u.type == type && u.team == state.rules.waveTeam && !u.isBoss()) + ""); + label.setFontScale(0.75f); + ttt.add(label); + ttt.pack(); })); }}).pad(6); - if(++i[0] % 6 == 0) tt.row(); }); + if(++i[0] % 6 == 0) t.row(); }); }); } @@ -425,7 +431,7 @@ public class HudUi { }); }); Table pathlineTable = new Table(t -> { - t.right(); + t.left(); Button pathBtn = new ImageButton(new ScaledNinePatchDrawable(new NinePatch(Icon.grid.getRegion()), 0.5f), Styles.clearToggleTransi); Button unitBtn = new ImageButton(new ScaledNinePatchDrawable(new NinePatch(Icon.grid.getRegion()), 0.5f), Styles.clearToggleTransi); @@ -875,7 +881,7 @@ public class HudUi { Label label2 = new Label(()->getTarget() == null ? "(" + 0 + ", " + 0 + ")" : "(" + Strings.fixed(getTarget().x() / tilesize, 2) + ", " + Strings.fixed(getTarget().y() / tilesize, 2) + ")"); label2.setFontScale(modUiScale); to.add(label2); - })){{allowMobile = true;}}); + }))); tt.update(()->tt.setBackground(((NinePatchDrawable)Tex.underline2).tint(getTarget().isNull() ? Color.gray : getTarget().team().color))); }); t.row(); diff --git a/src/UnitInfo/core/Main.java b/src/UnitInfo/core/Main.java index d7aa087..b94545e 100644 --- a/src/UnitInfo/core/Main.java +++ b/src/UnitInfo/core/Main.java @@ -82,9 +82,8 @@ public class Main extends Mod { Events.run(Trigger.draw, () -> { int[] units = {0}; - Groups.unit.each(u -> { + if(pathLine || unitLine || logicLine) Groups.unit.each(u -> { Team team = u.team; - otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team); UnitController c = u.controller(); UnitCommand com = team.data().command; @@ -109,6 +108,7 @@ public class Main extends Mod { c instanceof FlyingAI || //not flying anyway com == UnitCommand.idle) return; //not idle + otherCores = Groups.build.count(b -> b instanceof CoreBlock.CoreBuild && b.team != team); getNextTile(u.tileOn(), u.pathType(), team, com.ordinal()); pathTiles.filter(Objects::nonNull); for(int i = 1; i < pathTiles.size; i++) { @@ -141,7 +141,6 @@ public class Main extends Mod { pathTiles.clear(); } }); - Draw.reset(); if(settings.getBool("blockstatus")) Groups.build.each(build -> { if(Vars.player != null && Vars.player.team() == build.team) return; @@ -164,16 +163,6 @@ public class Main extends Mod { if(Core.settings.getBool("unithealthui")) Groups.unit.each(unit -> new FreeBar().draw(unit)); - if(Core.settings.getBool("scan")){ - float range = settings.getInt("rangemax") * 8f; - for(Team team : Team.all) - indexer.eachBlock(team, Core.input.mouseWorldX(), Core.input.mouseWorldY(), range, b -> true, b -> new FreeBar().draw(b)); - Draw.color(Tmp.c1.set(Pal.accent).a(0.75f + Mathf.absin(3, 0.25f))); - for(int i = 0; i < 4; i++) - Lines.swirl(Core.input.mouseWorldX(), Core.input.mouseWorldY(), range, 0.15f, 90 * i + Time.time % 360); - Draw.reset(); - } - if(!mobile && !Vars.state.isPaused() && settings.getBool("gaycursor")) Fx.mine.at(Core.input.mouseWorldX(), Core.input.mouseWorldY(), Tmp.c2.set(Color.red).shiftHue(Time.time * 1.5f)); diff --git a/src/UnitInfo/core/SettingS.java b/src/UnitInfo/core/SettingS.java index 9049113..66f4b73 100644 --- a/src/UnitInfo/core/SettingS.java +++ b/src/UnitInfo/core/SettingS.java @@ -1,329 +1,181 @@ package UnitInfo.core; import arc.*; +import arc.func.*; import arc.graphics.*; +import arc.scene.Group; import arc.scene.event.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; +import arc.scene.ui.layout.Stack; import arc.struct.*; import arc.util.*; -import mindustry.*; -import mindustry.core.*; -import mindustry.gen.*; import mindustry.ui.*; import mindustry.ui.dialogs.*; -import java.util.*; - import static arc.Core.*; import static mindustry.Vars.*; public class SettingS { - public static SettingsMenuDialog.SettingsTable waveTable = new SettingsMenuDialog.SettingsTable(); - public static SettingsMenuDialog.SettingsTable opacityTable = new SettingsMenuDialog.SettingsTable(); - public static SettingsMenuDialog.SettingsTable scanTable = new SettingsMenuDialog.SettingsTable(); + public SettingsMenuDialog.SettingsTable sharset; - public void addGraphicCheckSetting(String key, boolean def){ - ui.settings.graphics.checkPref(key, def); - } - public void addGraphicSlideSetting(String key, int def, int min, int max, int step, SettingsMenuDialog.StringProcessor s){ - ui.settings.graphics.sliderPref(key, def, min, max, step, s); - } - /* - public void addGraphicSlideSetting(String key, int def, int min, int max, int step, SettingsMenuDialog.StringProcessor s, Seq list){ - list.add(new SettingsMenuDialog.SettingsTable.SettingS(key) { - { - Core.settings.defaults(name, def); - } + public void addGraphicSlideSetting(String key, int def, int min, int max, int step, SettingsMenuDialog.StringProcessor s, Seq list){ + list.add(new SharSetting(key, def) { @Override - public void add(SettingsMenuDialog.SettingsTable table){ - Slider slider = new Slider(min, max, step, false); - - if(Version.build <= 128) slider.addListener(new Tooltip(t -> t.background(Tex.button).table(to -> to.add("[lightgray]" + Core.bundle.get("setting." + key + ".description") + "[]")))); - slider.setValue(settings.getInt(name)); - + public void add(Table table){ Label value = new Label(""); value.setStyle(Styles.outlineLabel); value.touchable = Touchable.disabled; + value.setAlignment(Align.center); + value.setWrap(true); + Slider slider = new Slider(min, max, step, false); + slider.setValue(settings.getInt(name)); slider.changed(() -> { settings.put(name, (int)slider.getValue()); value.setText(title + ": " + s.get((int)slider.getValue())); }); - - value.setAlignment(Align.center); - value.setWrap(true); - slider.change(); - table.stack(slider, value).width(Math.min(Core.graphics.getWidth() / 1.2f, 460f)).left().padTop(4); - table.row(); + table.stack(slider, value).width(Math.min(Core.graphics.getWidth() / 1.2f, 460f)).row(); } }); } - public void addGraphicCheckSetting(String key, boolean def, Seq list){ - list.add(new SettingsMenuDialog.SettingsTable.SettingS() { - { - name = key; - title = bundle.get("setting." + key + ".name"); - Core.settings.defaults(name, def); - } + public void addGraphicCheckSetting(String key, boolean def, Seq list){ + list.add(new SharSetting(key, def) { @Override - public void add(SettingsMenuDialog.SettingsTable table) { + public void add(Table table) { CheckBox box = new CheckBox(title); - if(Version.build <= 128) box.addListener(new Tooltip(t -> t.background(Tex.button).table(to -> to.add("[lightgray]" + Core.bundle.get("setting." + key + ".description") + "[]")))); - box.update(() -> box.setChecked(settings.getBool(name))); - box.changed(() -> settings.put(name, box.isChecked())); - box.left(); - table.add(box).left().padTop(3f); - table.row(); + table.add(box).row(); } }); } - public void addGraphicTypeSetting(String key, int defs, String dialogs, String invalid, int warnMax, Seq list){ - list.add(new SettingsMenuDialog.SettingsTable.SettingS() { - public final int def; - { - def = defs; - name = key; - title = Core.bundle.get("setting." + key + ".name"); - - Core.settings.defaults(name, def); - } - - public final StringBuilder message = new StringBuilder(); + public void addGraphicTypeSetting(String key, float min, float max, int def, boolean integer, Boolp condition, Func h, Seq list){ + list.add(new SharSetting(key, def) { @Override - public void add(SettingsMenuDialog.SettingsTable settingsTable) { - String settingTitle = title; - String settingName = name; - Label label = new Label(title + ": " + def); - - Table button = new Table(t -> t.button(Icon.pencil, () -> { - if(Vars.mobile){ - Core.input.getTextInput(new Input.TextInput(){{ - text = message.toString(); - multiline = false; - maxLength = String.valueOf(Integer.MAX_VALUE).length(); - accepted = str -> { - - try { - int number = Integer.parseInt(str); - if(number >= warnMax){ - new Dialog(""){{ - setFillParent(true); - cont.margin(15f); - cont.add("@warn"); - cont.row(); - cont.image().width(300f).pad(2).height(4f).color(Color.scarlet); - cont.row(); - cont.add("@warning").pad(2f).growX().wrap().get().setAlignment(Align.center); - cont.row(); - cont.table(t -> { - t.button("@yes", () -> { - this.hide(); - Core.settings.put(settingName, number); - label.setText(settingTitle + ": " + number); - }).size(120, 50); - t.button("@no", () -> { - this.hide(); - Core.settings.put(settingName, def); - label.setText(settingTitle + ": " + Core.settings.getInt(settingName)); - }).size(120, 50); - }).pad(5); - closeOnBack(); - }}.show(); - } - else { - Core.settings.put(settingName, number); - label.setText(settingTitle + ": " + number); - } - } catch(Throwable e) { - Log.info(e); - ui.showErrorMessage("@invalid"); - - Core.settings.put(settingName, def); - label.setText(settingTitle + ": " + def); - } - }; - }}); - }else{ - BaseDialog dialog = new BaseDialog(dialogs); - dialog.setFillParent(false); - TextArea a = dialog.cont.add(new TextArea(message.toString().replace("\r", "\n"))).size(140f, 80f).get(); - a.setMaxLength(String.valueOf(Integer.MAX_VALUE).length()); - dialog.buttons.button("@ok", () -> { - try { - int number = Integer.parseInt(a.getText()); - if(number >= warnMax){ - String name1 = name; - String title1 = title; - new Dialog(""){{ - setFillParent(true); - cont.margin(15f); - cont.add("@warn"); - cont.row(); - cont.image().width(300f).pad(2).height(4f).color(Color.scarlet); - cont.row(); - cont.add("@warning").pad(2f).growX().wrap().get().setAlignment(Align.center); - cont.row(); - cont.table(t -> { - t.button("@yes", () -> { - this.hide(); - Core.settings.put(name1, number); - label.setText(title1 + ": " + number); - }).size(120, 50); - t.button("@no", () -> { - this.hide(); - Core.settings.put(name1, def); - label.setText(title1 + ": " + Core.settings.getInt(name1)); - }).size(120, 50); - }).pad(5); - closeOnBack(); - }}.show(); - }else { - Core.settings.put(name, number); - label.setText(title + ": " + number); - } - } catch(Throwable e) { - Log.info(e); - ui.showErrorMessage(invalid); - - Core.settings.put(name, def); - label.setText(title + ": " + def); - } - - dialog.hide(); - }).size(70f, 50f); - - dialog.show(); - } - }).size(40f)); - + public void add(Table settingsTable) { + final String[] str = {""}; settingsTable.table(t -> { - t.left().defaults().left(); - t.add(label).minWidth(label.getPrefWidth() / Scl.scl(1.0F) + 50.0F); - t.add(button).size(40F); - if(Version.build <= 128) t.addListener(new Tooltip(tt -> tt.background(Tex.button).table(to -> to.add("[lightgray]" + Core.bundle.get("setting." + key + ".description") + "[]")))); - }).left().padTop(3.0F); - settingsTable.row(); - } - }); - } + t.add(new Label(title + ": ")).left().padRight(5) + .update(a -> a.setColor(condition.get() ? Color.white : Color.gray)); - public void addGraphicDialogSetting(String key, Seq list, SettingsMenuDialog.SettingsTable table){ - ui.settings.graphics.pref(new SettingsMenuDialog.SettingsTable.SettingS() { - { - name = key; - title = Core.bundle.get("setting." + key + ".name"); - - Core.settings.defaults(name, 1); - } - - public Table rebuild() { - table.clearChildren(); - - Iterator var1 = list.iterator(); - - while(var1.hasNext()) { - SettingsMenuDialog.SettingsTable.SettingS setting = var1.next(); - setting.add(table); - } - table.button(Core.bundle.get("settings.reset", "Reset to Defaults"), () -> { - Iterator var2 = list.iterator(); - - while(var2.hasNext()) { - SettingsMenuDialog.SettingsTable.SettingS setting = var1.next(); - if (setting.name != null && setting.title != null) { - Core.settings.put(setting.name, Core.settings.getDefault(setting.name)); - } - } - rebuild(); - }).margin(14.0F).width(240.0F).pad(6.0F); - - return table; - } - - @Override - public void add(SettingsMenuDialog.SettingsTable settingsTable) { - settingsTable.table(Core.scene.getStyle(Button.ButtonStyle.class).up, t->{ - t.add(rebuild()); - t.row(); + t.field((integer ? settings.getInt(key) : settings.getFloat(key)) + str[0], s -> { + settings.put(key, integer ? Strings.parseInt(s) : Strings.parseFloat(s)); + str[0] = h.get(s); + }).update(a -> a.setDisabled(!condition.get())) + .valid(f -> Strings.canParsePositiveFloat(f) && Strings.parseFloat(f) >= min && Strings.parseFloat(f) <= max).width(120f).left(); }); settingsTable.row(); } }); } - */ + public void init(){ - /* - Seq waveSeq = new Seq<>(); - addGraphicCheckSetting("pastwave", false, waveSeq); - addGraphicCheckSetting("emptywave", true, waveSeq); - addGraphicTypeSetting("wavemax", 100, "@editmaxwave","@invalid", 200, waveSeq); - addGraphicDialogSetting("wavesetting", waveSeq, waveTable); + BaseDialog dialog = new BaseDialog("UnitInfo Setting"); + dialog.addCloseButton(); + sharset = new SettingsMenuDialog.SettingsTable(); + dialog.cont.center().add(sharset); + ui.settings.shown(() -> { + Table settingUi = (Table)((Group)((Group)(ui.settings.getChildren().get(1))).getChildren().get(0)).getChildren().get(0); //This looks so stupid lol - lmfao + settingUi.row(); + settingUi.button(bundle.get("setting.shar-title"), Styles.cleart, dialog::show); + }); - Seq scanSeq = new Seq<>(); - addGraphicCheckSetting("scan", false, scanSeq); - addGraphicTypeSetting("rangemax", 10, "@editrange","@invalid", 100, scanSeq); - addGraphicCheckSetting("rangeNearby", true, scanSeq); - addGraphicCheckSetting("allTeamRange", false, scanSeq); - addGraphicCheckSetting("allTargetRange", false, scanSeq); - addGraphicCheckSetting("unitRange", false, scanSeq); - addGraphicCheckSetting("softRangeDrawing", false, scanSeq); - addGraphicSlideSetting("softRangeOpacity", 10, 0, 25, 1, s -> s + "%", scanSeq); - addGraphicSlideSetting("rangeRadius", 5, 0, 20, 1, s -> s + "tiles", scanSeq); - addGraphicDialogSetting("wavesetting", scanSeq, scanTable); - Seq opacitySeq = new Seq<>(); + Seq> settingSeq = new Seq<>(); + Seq tapSeq = new Seq<>(); + addGraphicCheckSetting("infoui", true, tapSeq); + addGraphicCheckSetting("weaponui", true, tapSeq); + addGraphicTypeSetting("wavemax", 0, 100,200, true, () -> true, s -> s + "waves", tapSeq); + addGraphicCheckSetting("pastwave", false, tapSeq); + addGraphicCheckSetting("emptywave", true, tapSeq); + addGraphicSlideSetting("barstyle", 0, 0, 5, 1, s -> s == 0 ? "default bar" : s + "th bar", tapSeq); + addGraphicSlideSetting("infoUiScale", 100, 50, 100, 5, s -> s + "%", tapSeq); + addGraphicSlideSetting("coreItemCheckRate", 60, 6, 180, 6, s -> Strings.fixed(s/60f,1) + "sec", tapSeq); + addGraphicCheckSetting("allTeam", false, tapSeq); + + Seq rangeSeq = new Seq<>(); + addGraphicTypeSetting("rangeRadius", 0, 50, 20, true, () -> true, s -> s + "tiles", rangeSeq); + addGraphicCheckSetting("rangeNearby", true, rangeSeq); + addGraphicCheckSetting("allTeamRange", false, rangeSeq); + addGraphicCheckSetting("allTargetRange", false, rangeSeq); + addGraphicCheckSetting("coreRange", false, rangeSeq); + addGraphicCheckSetting("unitRange", false, rangeSeq); + addGraphicCheckSetting("softRangeDrawing", false, rangeSeq); + + Seq opacitySeq = new Seq<>(); addGraphicSlideSetting("selectopacity", 50, 0, 100, 5, s -> s + "%", opacitySeq); addGraphicSlideSetting("baropacity", 50, 0, 100, 5, s -> s + "%", opacitySeq); addGraphicSlideSetting("uiopacity", 50, 0, 100, 5, s -> s + "%", opacitySeq); - addGraphicDialogSetting("opacitysetting", opacitySeq, opacityTable); - */ + addGraphicSlideSetting("softRangeOpacity", 10, 0, 25, 1, s -> s + "%", opacitySeq); - addGraphicSlideSetting("unitlinelimit", 50, 50, 250, 10, s -> s + "units"); - addGraphicSlideSetting("infoUiScale", 100, 50, 100, 5, s -> s + "%"); - addGraphicSlideSetting("coreItemCheckRate", 60, 6, 180, 6, s -> Strings.fixed(s/60f,1) + "sec"); - addGraphicCheckSetting("pastwave", false); - addGraphicCheckSetting("emptywave", true); - addGraphicSlideSetting("wavemax", 50, 0, 200, 1, s -> s + "waves"); - addGraphicCheckSetting("scan", false); - addGraphicSlideSetting("rangemax", 10, 0, 100, 1, s -> s + "tiles"); - addGraphicCheckSetting("coreRange", false); - addGraphicCheckSetting("rangeNearby", true); - addGraphicCheckSetting("allTeamRange", false); - addGraphicCheckSetting("allTargetRange", false); - addGraphicCheckSetting("unitRange", false); - addGraphicCheckSetting("softRangeDrawing", true); - addGraphicSlideSetting("softRangeOpacity", 10, 0, 25, 1, s -> s + "%"); - addGraphicSlideSetting("rangeRadius", 15, 0, 20, 1, s -> s + "tiles"); - addGraphicSlideSetting("selectopacity", 50, 0, 100, 5, s -> s + "%"); - addGraphicSlideSetting("baropacity", 50, 0, 100, 5, s -> s + "%"); - addGraphicSlideSetting("uiopacity", 50, 0, 100, 5, s -> s + "%"); + Seq drawSeq = new Seq<>(); + addGraphicCheckSetting("gaycursor", false, drawSeq); + addGraphicCheckSetting("unithealthui", true, drawSeq); + addGraphicCheckSetting("linkedMass", true, drawSeq); + addGraphicCheckSetting("linkedNode", false, drawSeq); + addGraphicCheckSetting("select", true, drawSeq); + addGraphicCheckSetting("deadTarget", false, drawSeq); + addGraphicCheckSetting("distanceLine", true, drawSeq); + addGraphicSlideSetting("unitlinelimit", 50, 50, 250, 10, s -> s + "units", drawSeq); - addGraphicCheckSetting("autoShooting", false); - addGraphicCheckSetting("infoui", true); - addGraphicCheckSetting("weaponui", true); - addGraphicCheckSetting("select", true); - addGraphicCheckSetting("unithealthui", true); - addGraphicCheckSetting("ssim", false); - addGraphicCheckSetting("shar", false); - addGraphicCheckSetting("shar1", false); - addGraphicCheckSetting("shar2", false); - addGraphicCheckSetting("shar3", false); - addGraphicCheckSetting("gaycursor", false); - addGraphicCheckSetting("allTeam", false); - addGraphicCheckSetting("deadTarget", false); - addGraphicCheckSetting("linkedMass", true); - addGraphicCheckSetting("linkedNode", false); - addGraphicCheckSetting("distanceLine", true); + Seq etcSeq = new Seq<>(); + addGraphicCheckSetting("autoShooting", false, etcSeq); + settingSeq.add(tapSeq, rangeSeq, opacitySeq); + settingSeq.add(drawSeq, etcSeq); + + sharset.table(t -> { + Seq