Merge branch 'master' of https://github.com/Anuken/Mindustry into v117

This commit is contained in:
Petr Gašparík
2020-11-26 09:11:09 +01:00
36 changed files with 220 additions and 201 deletions

View File

@@ -0,0 +1,55 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
version="1.1"
id="svg542"
sodipodi:docname="planet.svg"
inkscape:version="1.0.1 (0767f8302a, 2020-10-17)">
<metadata
id="metadata548">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<defs
id="defs546" />
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="2560"
inkscape:window-height="1316"
id="namedview544"
showgrid="false"
inkscape:pagecheckerboard="true"
inkscape:zoom="15.75"
inkscape:cx="-16.385458"
inkscape:cy="16.16535"
inkscape:window-x="0"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:current-layer="svg542" />
<path
id="polygon2"
style="fill:#ffffff"
d="M 5.5 0 L 5 0.5 L 4.5 1 L 3.5 1 L 3 1.5 L 2.5 2 L 2 2.5 L 1.5 3 L 1 3.5 L 1 4.5 L 0.5 5 L 0 5.5 L 0 6.5 L 0 7.5 L 0 8.5 L 0 9.5 L 0 10.5 L 0.5 11 L 1 11.5 L 1 12.5 L 1.5 13 L 2 13.5 L 2.5 14 L 3 14.5 L 3.5 15 L 4.5 15 L 5 15.5 L 5.5 16 L 6.5 16 L 7.5 16 L 8.5 16 L 9.5 16 L 10.5 16 L 11 15.5 L 11.5 15 L 12.5 15 L 13 14.5 L 13.5 14 L 14 13.5 L 14.5 13 L 15 12.5 L 15 11.5 L 15.5 11 L 16 10.5 L 16 9.5 L 16 8.5 L 16 7.5 L 16 6.5 L 16 5.5 L 15.5 5 L 15 4.5 L 15 3.5 L 14.5 3 L 14 2.5 L 13.5 2 L 13 1.5 L 12.5 1 L 11.5 1 L 11 0.5 L 10.5 0 L 9.5 0 L 8.5 0 L 7.5 0 L 6.5 0 L 5.5 0 z M 6.5 1 L 7 1.5 L 7.5 2 L 8.5 2 L 9 2.5 L 9 3.5 L 9.5 4 L 10 4.5 L 10.5 5 L 11 5.5 L 11.5 6 L 12.5 6 L 13.5 6 L 14.5 6 L 15 6.5 L 15 7.5 L 15 8.5 L 15 9.5 L 14.5 10 L 14 10.5 L 14 11.5 L 13.5 12 L 13 12.5 L 12.5 13 L 12 13.5 L 11.5 14 L 10.5 14 L 10 14.5 L 9.5 15 L 8.5 15 L 8 14.5 L 7.5 14 L 7 13.5 L 7 12.5 L 7.5 12 L 8 11.5 L 8.5 11 L 9 10.5 L 9 9.5 L 9 8.5 L 8.5 8 L 8 7.5 L 7.5 7 L 6.5 7 L 5.5 7 L 4.5 7 L 4 7.5 L 3.5 8 L 3 8.5 L 2.5 9 L 2 9.5 L 1.5 10 L 1 9.5 L 1 8.5 L 1 7.5 L 1 6.5 L 1.5 6 L 2 5.5 L 2 4.5 L 2.5 4 L 3 3.5 L 3.5 3 L 4 2.5 L 4.5 2 L 5.5 2 L 6 1.5 L 6.5 1 z M 11.5 9 L 11 9.5 L 11 10.5 L 11.5 11 L 12.5 11 L 13 10.5 L 13 9.5 L 12.5 9 L 11.5 9 z " />
</svg>

After

Width:  |  Height:  |  Size: 2.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 578 B

View File

@@ -1,2 +1,3 @@
mschxœ-k
1 „ÇMÅîуôPÅ
mschxњ-Ќ‹
В0 EoЧКєўТЏЄ®И ¶Ґ«Ёџ.CfІJ‡<NЗ*Ш»Г<C2BB>lцЮѕиmЖ0№ељзTжЂN)>]6!NОРьж0,)Ь‡&ЩІЌцbKqщЌу~И$њя+А­Vh¶•т №} ¶U
кwZР;¤$ґ ]Сґ…]P,(І»ЉЎkҐ№ъЕ¶,e

View File

@@ -19,8 +19,8 @@ screenshot.invalid = 맵이 너무 커서 스크린샷에 사용될 메모리가
gameover = 게임 오버
gameover.pvp = [accent]{0}[] 팀이 승리했습니다!
highscore = [accent]새로운 최고 점수!
copied = 복사됨.
indev.popup = 현재 [accent]v6[] 버전은 [accent]알파[] 단계입니다.\n[lightgray]이 말은:[]\n- [scarlet]캠페인이 아직 완전히 개발되지 않음[]\n- 몇몇 컨텐츠가 빠짐\n- 대부분의 [scarlet]유닛 AI[]가 작동하지 않음\n- 많은 유닛들이 아직 미완성\n- 보이는 것은 모두 바뀌거나 제거될 수 있음\n\n[accent]Github[] 에서 버그 또는 강제종료 오류를 신고 해 주세요.
copied = 복사
indev.popup = 현재 [accent]v6[] 버전은 [accent]베타[] 단계입니다.\n\n[accent]Github[] 에서 버그 또는 강제종료 오류를 신고 해 주세요.
indev.notready = 이 부분은 아직 준비가 되지 않았습니다.
load.sound = 소리
@@ -71,15 +71,15 @@ map.delete = 정말로 "[accent]{0}[]" 맵을 삭제하시겠습니까?
level.highscore = 최고 점수: [accent]{0}
level.select = 맵 선택
level.mode = 게임 모드:
coreattack = < 코어가 공격 받고 있습니다! >
nearpoint = [[ [scarlet]즉시 스폰지점에서 떠나세요[] ]\n전멸 임박
coreattack = < 코어가 공격 받고 있습니다! >
nearpoint = [[ [scarlet]즉시 스폰지점에서 떠나세요[] ]\n인근 건물들과 유닛들은 초토화됩니다!
database = 코어 데이터베이스
savegame = 게임 저장
loadgame = 게임 불러오기
joingame = 게임 참여
customgame = 사용자 지정 게임
newgame = 새 게임
none = <없음>
none = < 없음 >
minimap = 미니맵
position = 위치
close = 닫기
@@ -291,8 +291,8 @@ waiting = [lightgray]대기중...
waiting.players = 상대 플레이어를 기다리는 중...
wave.enemies = [lightgray]적 유닛 {0}명 남음
wave.enemy = [lightgray]{0}명 남음
wave.guardianwarn = [accent]{0}[] 단계 후에 가디언이 접근합니다.
wave.guardianwarn.one = [accent]{0}[] 단계 후에 가디언이 접근합니다.
wave.guardianwarn = [accent]{0}[] 단계 후에 수호자가 접근합니다.
wave.guardianwarn.one = [accent]{0}[] 단계 후에 수호자가 접근합니다.
loadimage = 사진 불러오기
saveimage = 사진 저장
unknown = 알 수 없음
@@ -335,13 +335,13 @@ editor.center = 중앙
workshop = 창작마당
waves.title = 단계
waves.remove = 삭제
waves.never = 여기까지 유닛생성
waves.never = 여기까지 유닛 생성
waves.every =
waves.waves = 단계마다
waves.perspawn = 마리 생성
waves.shields = 보호막/단계
waves.shields = 방어막/단계
waves.to = 부터
waves.guardian = 가디언
waves.guardian = 수호자
waves.preview = 미리보기
waves.edit = 편집
waves.copy = 클립보드로 복사
@@ -495,7 +495,7 @@ zone.objective = [lightgray]목표: [accent]{0}
zone.objective.survival = 생존
zone.objective.attack = 적 코어 파괴
add = 추가...
boss.health = 보스 체력
boss.health = 수호자 체력
connectfail = [scarlet]연결 오류:\n\n[accent]{0}
error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요?
@@ -522,11 +522,11 @@ sectors.resume = 재개
sectors.launch = 출격
sectors.select = 선택
sectors.nonelaunch = [lightgray]없음 (sun)
sectors.rename = Rename Sector
sector.missingresources = [scarlet]Insufficient Core Resources
sectors.rename = 구역 명명
sector.missingresources = [scarlet]자원 부족
planet.serpulo.name = Serpulo
planet.sun.name = Sun
planet.serpulo.name = 세르플
planet.sun.name = 태양
sector.groundZero.name = 전초기지
sector.craters.name = 크레이터
@@ -561,26 +561,26 @@ settings.controls = 조작
settings.game = 게임
settings.sound = 소리
settings.graphics = 그래픽
settings.cleardata = 게임 데이터 초기화...
settings.clear.confirm = 정말로 이 데이터를 지우시겠습니까?\n완료된 작업은 취소할 수 없습니다!
settings.cleardata = 게임 데이터 초기화
settings.clear.confirm = 정말로 이 데이터를 지우시겠습니까?\n되돌릴 수 없습니다!
settings.clearall.confirm = [scarlet]경고![]\n이 작업은 저장된 맵, 맵파일, 잠금 해제된 목록과 키 매핑, 그리고 모든 데이터를 삭제합니다.\n확인 버튼을 다시 눌러 모든 데이터를 삭제하고 게임에서 나갑니다.
settings.clearsaves.confirm = 정말로 모든 저장을 삭제 하시겠습니까?
settings.clearsaves.confirm = 정말로 모든 저장된 파일들을 삭제하시겠습니까?
settings.clearsaves = 저장 초기화
settings.clearresearch = Clear Research
settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research?
settings.clearcampaignsaves = Clear Campaign Saves
settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves?
settings.clearresearch = 연구 초기화
settings.clearresearch.confirm = 정말로 모든 연구를 삭제하시겠습니까?
settings.clearcampaignsaves = 캠페인 맵 초기화
settings.clearcampaignsaves.confirm = 정말로 캠페인을 초기화하시겠습니까?
paused = [accent]< 일시정지 >
clear = 초기화
banned = [scarlet]차단됨
unplaceable.sectorcaptured = [scarlet]점령된 구역이 필요합니다
unplaceable.sectorcaptured = [scarlet]구역 점령 필요
yes =
no = 아니오
info.title = 정보
error.title = [scarlet]오류가 발생했습니다.
error.crashtitle = 오류가 발생했습니다
unit.nobuild = [scarlet]이 유닛은 건설할 수 없습니다.
lastaccessed = [lightgray]마지막 접근: {0}
unit.nobuild = [scarlet]건설 불가
lastaccessed = [lightgray]마지막 조작: {0}
block.unknown = [lightgray]???
stat.input = 입력
@@ -588,70 +588,70 @@ stat.output = 출력
stat.booster = 가속
stat.tiles = 필요한 타일
stat.affinities = 친화력
stat.powercapacity = Power Capacity
stat.powershot = Power/Shot
stat.damage = Damage
stat.targetsair = Targets Air
stat.targetsground = Targets Ground
stat.itemsmoved = Move Speed
stat.launchtime = Time Between Launches
stat.shootrange = Range
stat.size = Size
stat.displaysize = Display Size
stat.liquidcapacity = Liquid Capacity
stat.powerrange = Power Range
stat.linkrange = Link Range
stat.instructions = Instructions
stat.powerconnections = Max Connections
stat.poweruse = Power Use
stat.powerdamage = Power/Damage
stat.itemcapacity = Item Capacity
stat.memorycapacity = Memory Capacity
stat.basepowergeneration = Base Power Generation
stat.productiontime = Production Time
stat.repairtime = Block Full Repair Time
stat.speedincrease = Speed Increase
stat.range = Range
stat.drilltier = Drillables
stat.drillspeed = Base Drill Speed
stat.boosteffect = Boost Effect
stat.maxunits = Max Active Units
stat.health = Health
stat.buildtime = Build Time
stat.maxconsecutive = Max Consecutive
stat.buildcost = Build Cost
stat.inaccuracy = Inaccuracy
stat.shots = Shots
stat.reload = Shots/Second
stat.ammo = Ammo
stat.shieldhealth = Shield Health
stat.cooldowntime = Cooldown Time
stat.explosiveness = Explosiveness
stat.basedeflectchance = Base Deflect Chance
stat.lightningchance = Lightning Chance
stat.lightningdamage = Lightning Damage
stat.flammability = Flammability
stat.radioactivity = Radioactivity
stat.heatcapacity = HeatCapacity
stat.viscosity = Viscosity
stat.temperature = Temperature
stat.speed = Speed
stat.buildspeed = Build Speed
stat.minespeed = Mine Speed
stat.minetier = Mine Tier
stat.payloadcapacity = Payload Capacity
stat.commandlimit = Command Limit
stat.abilities = Abilities
stat.powercapacity = 전력량
stat.powershot = 전력량/발
stat.damage = 공격력
stat.targetsair = 공중 공격
stat.targetsground = 지상 공격
stat.itemsmoved = 이동 속도
stat.launchtime = 발사 간격
stat.shootrange = 사거리
stat.size = 크기
stat.displaysize = 화면 크기
stat.liquidcapacity = 액체 수용량
stat.powerrange = 전선 길이
stat.linkrange = 감지 길이
stat.instructions = 최대 명령어 수
stat.powerconnections = 최대 연결 개수
stat.poweruse = 전력 요구량
stat.powerdamage = 전력량/피해량
stat.itemcapacity = 자원 수용량
stat.memorycapacity = 변수 개수
stat.basepowergeneration = 기본 발전량
stat.productiontime = 소요 시간
stat.repairtime = 건물 완전 복구 시간
stat.speedincrease = 속도 증가
stat.range = 사거리
stat.drilltier = 채굴 가능 자원
stat.drillspeed = 기본 채굴 속도
stat.boosteffect = 버프 효과
stat.maxunits = 최대 유닛 수
stat.health = 체력
stat.buildtime = 건설 시간
stat.maxconsecutive = 최대 체인 길이
stat.buildcost = 건설 비용
stat.inaccuracy = 오차각
stat.shots = 발사 당 탄
stat.reload = 발/초
stat.ammo = 탄약
stat.shieldhealth = 보호막 체력
stat.cooldowntime = 쿨타임
stat.explosiveness = 폭발성
stat.basedeflectchance = 기본 반사 확률
stat.lightningchance = 전격 확률
stat.lightningdamage = 전격 공격량
stat.flammability = 휘발성
stat.radioactivity = 방사성
stat.heatcapacity = 열용량
stat.viscosity = 점성
stat.temperature = 온도
stat.speed = 속도
stat.buildspeed = 건설 속도
stat.minespeed = 채굴 속도
stat.minetier = 채굴 티어
stat.payloadcapacity = 화물 수용량
stat.commandlimit = 지휘 한계
stat.abilities = 능력
ability.forcefield = Force Field
ability.repairfield = Repair Field
ability.statusfield = Status Field
ability.unitspawn = {0} Factory
ability.shieldregenfield = Shield Regen Field
ability.forcefield = 보호막
ability.repairfield = 수리장
ability.statusfield = 버프장
ability.unitspawn = {0} 공장
ability.shieldregenfield = 방어막 복구장
bar.drilltierreq = 더 좋은 드릴이 필요
bar.noresources = 자원 부족
bar.corereq = 코어 기지 필요
bar.corereq = 코어 필요
bar.drillspeed = 드릴 속도: {0}/s
bar.pumpspeed = 펌프 속도: {0}/s
bar.efficiency = 효율: {0}%
@@ -688,7 +688,7 @@ bullet.multiplier = [stat]{0}[lightgray]x 탄약 배수
bullet.reload = [stat]{0}[lightgray]x 발사 속도
unit.blocks = 블록
unit.blockssquared = blocks²
unit.blockssquared = 블록²
unit.powersecond = 전력/초
unit.liquidsecond = 액체/초
unit.itemssecond = 개/초
@@ -701,7 +701,7 @@ unit.persecond = /초
unit.perminute = /분
unit.timesspeed = x 배
unit.percent = %
unit.shieldhealth = 보호막 체력
unit.shieldhealth = 방어막 체력
unit.items = 자원
unit.thousands =
unit.millions = 백만
@@ -711,7 +711,7 @@ category.power = 전력
category.liquids = 액체
category.items = 자원
category.crafting = 입력/출력
category.function = Function
category.function = 기능
category.optional = 보조 자원
setting.landscape.name = 가로화면 잠금
setting.shadows.name = 그림자
@@ -722,7 +722,7 @@ setting.flow.name = 자원 흐름량 표시
setting.buildautopause.name = 건설 자동 일시정지
setting.animatedwater.name = 액체 애니메이션 효과
setting.animatedshields.name = 보호막 애니메이션 효과
setting.antialias.name = 안티 에일리어싱[lightgray] (재시작 필요)[]
setting.antialias.name = 위신호 제거 필터[lightgray] (재시작 필요)[]
setting.playerindicators.name = 플레이어 위치 표시기
setting.indicators.name = 적 위치 표시기
setting.autotarget.name = 자동 조준
@@ -734,10 +734,10 @@ setting.fpscap.text = {0} FPS
setting.uiscale.name = UI 스케일링[lightgray] (재시작 필요)[]
setting.swapdiagonal.name = 항상 대각선 배치
setting.difficulty.training = 훈련
setting.difficulty.easy = 쉬움
setting.difficulty.easy = 무난
setting.difficulty.normal = 보통
setting.difficulty.hard = 어려움
setting.difficulty.insane = 미침
setting.difficulty.hard = 혼돈
setting.difficulty.insane = 박멸
setting.difficulty.name = 난이도:
setting.screenshake.name = 화면 흔들림
setting.effects.name = 효과 보임
@@ -769,7 +769,7 @@ setting.savecreate.name = 자동 저장 활성화
setting.publichost.name = 멀티플레이 공용 서버로 표시
setting.playerlimit.name = 플레이어 제한
setting.chatopacity.name = 채팅창 투명도
setting.lasersopacity.name = 력 레이저 투명도
setting.lasersopacity.name = 투명도
setting.bridgeopacity.name = 터널 투명도
setting.playerchat.name = 채팅 말풍선 표시
public.confirm = 게임을 모두에게 공개하시겠습니까?\n[accent]모든 플레이어가 게임에 참여할 수 있습니다.\n[lightgray]설정->게임->멀티플레이 공용 서버로 표시에서 나중에 변경할 수 있습니다.\n\n[sky]번역자 추가[]\n[accent]친구끼리 하려고 이 기능을 활성화 한 뒤에, 친구 외에 다른 플레이어가 들어왔을 때\n해당 플레이어를 차단하는 행위는 비매너를 넘어서는 얌체 행위 그 자체입니다.\n정말로 [scarlet]많은 다른 플레이어들이 오길 원한다[]면 확인하세요.
@@ -794,8 +794,8 @@ keybind.clear_building.name = 설계도 초기화
keybind.press = 키를 누르세요...
keybind.press.axis = 마우스 휠 또는 키를 누르세요...
keybind.screenshot.name = 맵 스크린샷
keybind.toggle_power_lines.name = 력 레이저 토글
keybind.toggle_block_status.name = 블록 상태 토글
keybind.toggle_power_lines.name = 선 가시도 설정
keybind.toggle_block_status.name = 블록 상태 가시도
keybind.move_x.name = X축 이동
keybind.move_y.name = Y축 이동
keybind.mouse_move.name = 커서를 따라서 이동

View File

@@ -14,8 +14,6 @@ import mindustry.world.blocks.*;
import mindustry.world.blocks.campaign.*;
import mindustry.world.blocks.defense.*;
import mindustry.world.blocks.defense.turrets.*;
import mindustry.world.blocks.defense.turrets.PointDefenseTurret;
import mindustry.world.blocks.defense.turrets.TractorBeamTurret;
import mindustry.world.blocks.distribution.*;
import mindustry.world.blocks.environment.*;
import mindustry.world.blocks.experimental.*;
@@ -1221,13 +1219,13 @@ public class Blocks implements ContentList{
solarPanel = new SolarGenerator("solar-panel"){{
requirements(Category.power, with(Items.lead, 10, Items.silicon, 15));
powerProduction = 0.08f;
powerProduction = 0.1f;
}};
largeSolarPanel = new SolarGenerator("solar-panel-large"){{
requirements(Category.power, with(Items.lead, 100, Items.silicon, 145, Items.phaseFabric, 15));
requirements(Category.power, with(Items.lead, 80, Items.silicon, 110, Items.phaseFabric, 15));
size = 3;
powerProduction = 1f;
powerProduction = 1.3f;
}};
thoriumReactor = new NuclearReactor("thorium-reactor"){{
@@ -1515,7 +1513,7 @@ public class Blocks implements ContentList{
flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher);
}};
lancer = new ChargeTurret("lancer"){{
lancer = new PowerTurret("lancer"){{
requirements(Category.turret, with(Items.copper, 25, Items.lead, 50, Items.silicon, 45));
range = 165f;
chargeTime = 40f;

View File

@@ -512,8 +512,7 @@ public class TechTree implements ContentList{
new Research(groundFactory),
new Research(additiveReconstructor),
new Research(airFactory),
new Research(door),
new Research(waterExtractor)
new Research(door)
), () -> {
});

View File

@@ -41,7 +41,7 @@ public class NetClient implements ApplicationListener{
private boolean connecting = false;
/** If true, no message will be shown on disconnect. */
private boolean quiet = false;
/** Whether to supress disconnect events completely.*/
/** Whether to suppress disconnect events completely.*/
private boolean quietReset = false;
/** Counter for data timeout. */
private float timeoutTime = 0f;
@@ -345,7 +345,7 @@ public class NetClient implements ApplicationListener{
ui.showInfoToast(message, duration);
}
@Remote(variants = Variant.both)
public static void warningToast(int unicode, String text){
if(text == null || Fonts.icon.getData().getGlyph((char)unicode) == null) return;

View File

@@ -422,7 +422,7 @@ public class NetServer implements ApplicationListener{
currentlyKicking[0] = session;
}
}else{
player.sendMessage("[scarlet]No player[orange]'" + args[0] + "'[scarlet] found.");
player.sendMessage("[scarlet]No player [orange]'" + args[0] + "'[scarlet] found.");
}
}
});

View File

@@ -31,7 +31,7 @@ public abstract class Content implements Comparable<Content>, Disposable{
*/
public void load(){}
/** @return whether an error ocurred during mod loading. */
/** @return whether an error occurred during mod loading. */
public boolean hasErrored(){
return minfo.error != null;
}

View File

@@ -110,7 +110,7 @@ public abstract class UnlockableContent extends MappableContent{
/** Makes this piece of content unlocked; if it already unlocked, nothing happens. */
public void unlock(){
if(!unlocked()){
if(!net.client() && !unlocked()){
unlocked = true;
Core.settings.put(name + "-unlocked", true);

View File

@@ -677,7 +677,7 @@ public class Mods implements Loadable{
public Seq<String> missingDependencies = new Seq<>();
/** Script files to run. */
public Seq<Fi> scripts = new Seq<>();
/** Content with intialization code. */
/** Content with initialization code. */
public ObjectSet<Content> erroredContent = new ObjectSet<>();
/** Current state of this mod. */
public ModState state = ModState.enabled;
@@ -708,7 +708,7 @@ public class Mods implements Loadable{
return !erroredContent.isEmpty();
}
/** @return whether this mod is supported by the game verison */
/** @return whether this mod is supported by the game version */
public boolean isSupported(){
if(isOutdated()) return false;

View File

@@ -48,6 +48,7 @@ public class ForceProjector extends Block{
super(name);
update = true;
solid = true;
group = BlockGroup.projectors;
hasPower = true;
hasLiquids = true;
hasItems = true;

View File

@@ -31,6 +31,7 @@ public class MendProjector extends Block{
super(name);
solid = true;
update = true;
group = BlockGroup.projectors;
hasPower = true;
hasItems = true;
}

View File

@@ -32,6 +32,7 @@ public class OverdriveProjector extends Block{
super(name);
solid = true;
update = true;
group = BlockGroup.projectors;
hasPower = true;
hasItems = true;
canOverdrive = false;

View File

@@ -1,63 +0,0 @@
package mindustry.world.blocks.defense.turrets;
import arc.audio.*;
import arc.math.*;
import arc.util.*;
import mindustry.content.*;
import mindustry.entities.*;
import mindustry.entities.bullet.*;
import mindustry.type.*;
import mindustry.gen.*;
import static mindustry.Vars.*;
public class ChargeTurret extends PowerTurret{
public float chargeTime = 30f;
public int chargeEffects = 5;
public float chargeMaxDelay = 10f;
public Effect chargeEffect = Fx.none;
public Effect chargeBeginEffect = Fx.none;
public Sound chargeSound = Sounds.none;
public ChargeTurret(String name){
super(name);
}
public class ChargeTurretBuild extends PowerTurretBuild{
public boolean shooting;
@Override
public void shoot(BulletType ammo){
useAmmo();
tr.trns(rotation, size * tilesize / 2f);
chargeBeginEffect.at(x + tr.x, y + tr.y, rotation);
chargeSound.at(x + tr.x, y + tr.y, 1);
for(int i = 0; i < chargeEffects; i++){
Time.run(Mathf.random(chargeMaxDelay), () -> {
if(!isValid()) return;
tr.trns(rotation, size * tilesize / 2f);
chargeEffect.at(x + tr.x, y + tr.y, rotation);
});
}
shooting = true;
Time.run(chargeTime, () -> {
if(!isValid()) return;
tr.trns(rotation, size * tilesize / 2f);
recoil = recoilAmount;
heat = 1f;
bullet(ammo, rotation + Mathf.range(inaccuracy));
effects();
shooting = false;
});
}
@Override
public boolean shouldTurn(){
return !shooting;
}
}
}

View File

@@ -40,6 +40,7 @@ public abstract class Turret extends ReloadTurret{
public Effect ammoUseEffect = Fx.none;
public Sound shootSound = Sounds.shoot;
//general info
public int maxAmmo = 30;
public int ammoPerShot = 1;
public float ammoEjectBack = 1f;
@@ -61,6 +62,14 @@ public abstract class Turret extends ReloadTurret{
public boolean targetAir = true;
public boolean targetGround = true;
//charging
public float chargeTime = -1f;
public int chargeEffects = 5;
public float chargeMaxDelay = 10f;
public Effect chargeEffect = Fx.none;
public Effect chargeBeginEffect = Fx.none;
public Sound chargeSound = Sounds.none;
public Sortf unitSort = Unit::dst2;
protected Vec2 tr = new Vec2();
@@ -136,7 +145,7 @@ public abstract class Turret extends ReloadTurret{
public @Nullable Posc target;
public Vec2 targetPos = new Vec2();
public BlockUnitc unit = Nulls.blockUnit;
public boolean wasShooting;
public boolean wasShooting, charging;
@Override
public void created(){
@@ -313,7 +322,7 @@ public abstract class Turret extends ReloadTurret{
}
public boolean shouldTurn(){
return true;
return !charging;
}
/** Consume ammo and return a type. */
@@ -352,11 +361,37 @@ public abstract class Turret extends ReloadTurret{
}
protected void shoot(BulletType type){
recoil = recoilAmount;
heat = 1f;
//when burst spacing is enabled, use the burst pattern
if(burstSpacing > 0.0001f){
//when charging is enabled, use the charge shoot pattern
if(chargeTime > 0){
useAmmo();
tr.trns(rotation, size * tilesize / 2f);
chargeBeginEffect.at(x + tr.x, y + tr.y, rotation);
chargeSound.at(x + tr.x, y + tr.y, 1);
for(int i = 0; i < chargeEffects; i++){
Time.run(Mathf.random(chargeMaxDelay), () -> {
if(!isValid()) return;
tr.trns(rotation, size * tilesize / 2f);
chargeEffect.at(x + tr.x, y + tr.y, rotation);
});
}
charging = true;
Time.run(chargeTime, () -> {
if(!isValid()) return;
tr.trns(rotation, size * tilesize / 2f);
recoil = recoilAmount;
heat = 1f;
bullet(type, rotation + Mathf.range(inaccuracy));
effects();
charging = false;
});
//when burst spacing is enabled, use the burst pattern
}else if(burstSpacing > 0.0001f){
for(int i = 0; i < shots; i++){
Time.run(burstSpacing * i, () -> {
if(!isValid() || !hasAmmo()) return;
@@ -367,6 +402,8 @@ public abstract class Turret extends ReloadTurret{
bullet(type, rotation + Mathf.range(inaccuracy));
effects();
useAmmo();
recoil = recoilAmount;
heat = 1f;
});
}
@@ -388,6 +425,8 @@ public abstract class Turret extends ReloadTurret{
shotCounter++;
recoil = recoilAmount;
heat = 1f;
effects();
useAmmo();
}

View File

@@ -178,7 +178,6 @@ public class StackConveyor extends Block implements Autotiler{
}
proxUpdating = false;
}
}
@Override

View File

@@ -1,5 +1,5 @@
package mindustry.world.meta;
public enum BlockGroup{
none, walls, turrets, transportation, power, liquids, drills, storage, units, logic
none, walls, projectors, turrets, transportation, power, liquids, drills, storage, units, logic
}