Merge branch 'master' of https://github.com/Anuken/Mindustry into resource-rework
|
|
@ -26,7 +26,7 @@ allprojects {
|
|||
appName = 'Mindustry'
|
||||
gdxVersion = '1.9.8'
|
||||
roboVMVersion = '2.3.0'
|
||||
uCoreVersion = '2f18f69ffb'
|
||||
uCoreVersion = 'e492954e86'
|
||||
|
||||
getVersionString = {
|
||||
String buildVersion = getBuildVersion()
|
||||
|
|
@ -194,7 +194,9 @@ project(":server") {
|
|||
apply plugin: "java"
|
||||
|
||||
configurations {
|
||||
compile.exclude module: android
|
||||
if(findProject(":android") != null){
|
||||
compile.exclude module: android
|
||||
}
|
||||
}
|
||||
|
||||
dependencies {
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 279 B After Width: | Height: | Size: 279 B |
|
Before Width: | Height: | Size: 318 B After Width: | Height: | Size: 308 B |
|
Before Width: | Height: | Size: 390 B After Width: | Height: | Size: 374 B |
|
Before Width: | Height: | Size: 298 B After Width: | Height: | Size: 302 B |
|
Before Width: | Height: | Size: 423 B After Width: | Height: | Size: 423 B |
BIN
core/assets-raw/sprites/units/power-cell.png
Normal file
|
After Width: | Height: | Size: 388 B |
|
Before Width: | Height: | Size: 323 B After Width: | Height: | Size: 327 B |
|
|
@ -87,7 +87,7 @@ text.server.kicked.serverOutdated=Outdated server! Ask the host to update!
|
|||
text.server.kicked.banned=You are banned on this server.
|
||||
text.server.kicked.recentKick=You have been kicked recently.\nWait before connecting again.
|
||||
text.server.kicked.nameInUse=There is someone with that name\nalready on this server.
|
||||
text.server.kicked.nameEmpty=Your name must contain at least one character or number.
|
||||
text.server.kicked.nameEmpty=Your chosen name is invalid.
|
||||
text.server.kicked.idInUse=You are already on this server! Connecting with two accounts is not permitted.
|
||||
text.server.kicked.customClient=This server does not support custom builds. Download an official version.
|
||||
text.host.info=The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [LIGHT_GRAY]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[LIGHT_GRAY]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings.
|
||||
|
|
@ -356,6 +356,11 @@ setting.mutemusic.name=Mute Music
|
|||
setting.sfxvol.name=SFX Volume
|
||||
setting.mutesound.name=Mute Sound
|
||||
text.keybind.title=Rebind Keys
|
||||
|
||||
category.general.name=General
|
||||
category.view.name=View
|
||||
category.multiplayer.name=Multiplayer
|
||||
|
||||
keybind.move_x.name=Move x
|
||||
keybind.move_y.name=Move y
|
||||
keybind.select.name=Select
|
||||
|
|
@ -368,8 +373,15 @@ keybind.pause.name=Pause
|
|||
keybind.dash.name=Dash
|
||||
keybind.chat.name=Chat
|
||||
keybind.player_list.name=Player list
|
||||
keybind.console.name=console
|
||||
keybind.console.name=Console
|
||||
keybind.rotate.name=Rotate
|
||||
keybind.toggle_menus.name=Toggle menus
|
||||
keybind.chat_history_prev.name=Chat history prev
|
||||
keybind.chat_history_next.name=Chat history next
|
||||
keybind.chat_scroll.name=Chat scroll
|
||||
keybind.drop_unit.name=drop unit
|
||||
keybind.zoom_minimap.name=Zoom minimap
|
||||
|
||||
mode.text.help.title=Description of modes
|
||||
mode.waves.name=waves
|
||||
mode.waves.description=the normal mode. limited resources and automatic incoming waves.
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ text.players={0} Spieler online
|
|||
text.players.single={0} Spieler online
|
||||
text.server.mismatch=Paketfehler: Mögliche Client / Server-Version stimmt nicht überein. Stell sicher, dass du und der Host die neueste Version von Mindustry haben!
|
||||
text.server.kicked.kick=Du wurdest vom Server gekickt!
|
||||
text.server.kicked.invalidPassword=Falsches Passwort.
|
||||
text.hostserver=Server hosten
|
||||
text.host=Host
|
||||
text.hosting=[accent] Server wird geöffnet...
|
||||
|
|
@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump
|
|||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
text.customgame=Custom Game
|
||||
text.campaign=Campaign
|
||||
text.sectors=Sectors
|
||||
text.sector=Selected Sector: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Time: [LIGHT_GRAY]{0}
|
||||
|
|
@ -503,8 +501,6 @@ unit.drone.name=Drone
|
|||
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
|
||||
unit.fabricator.name=Fabricator
|
||||
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
|
||||
unit.scout.name=Scout
|
||||
unit.scout.description=A basic ground unit. Uses lead as ammo.
|
||||
unit.titan.name=Titan
|
||||
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
|
||||
unit.monsoon.name=Monsoon
|
||||
|
|
@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ text.players.single=joueur en ligne
|
|||
text.server.mismatch=Erreur de paquet: possible incompatibilité de version client/serveur. Assurez-vous que vous et l'hôte avez la dernière version de Mindustry!
|
||||
text.server.closing=[accent]Fermeture du serveur ...
|
||||
text.server.kicked.kick=Vous avez été expulsé du serveur!
|
||||
text.server.kicked.invalidPassword=Mot de passe non valide !
|
||||
text.server.kicked.clientOutdated=Client dépassé! Mettez à jour votre jeu!
|
||||
text.server.kicked.serverOutdated=Serveur dépassé! Demandez à l'hôte de le mettre à jour!
|
||||
text.server.kicked.banned=Vous êtes banni sur ce serveur.
|
||||
|
|
@ -224,19 +223,20 @@ block.liquidjunction.name=jonction à liquide
|
|||
block.sorter.name=trieur
|
||||
block.smelter.name=fonderie
|
||||
text.credits=Credits
|
||||
text.link.discord.description=the official Mindustry discord chatroom
|
||||
text.link.github.description=Game source code
|
||||
text.link.dev-builds.description=Unstable development builds
|
||||
text.link.trello.description=Official trello board for planned features
|
||||
text.link.itch.io.description=itch.io page with PC downloads and web version
|
||||
text.link.google-play.description=Google Play store listing
|
||||
text.link.wiki.description=official Mindustry wiki
|
||||
text.linkfail=Failed to open link!\nThe URL has been copied to your cliboard.
|
||||
text.editor.web=The web version does not support the editor!\nDownload the game to use it.
|
||||
text.web.unsupported=The web version does not support this feature! Download the game to use it.
|
||||
text.map.delete=Are you sure you want to delete the map "[orange]{0}[]"?
|
||||
text.construction.title=Block Construction Guide
|
||||
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.link.discord.description=Le discord officiel de Mindustry
|
||||
text.link.github.description=code source du jeu
|
||||
text.link.dev-builds.description=version de développement instable
|
||||
text.link.trello.description=le tableau trelli officiel pour les futures ajouts
|
||||
text.link.itch.io.description=la page itch.io avec la version Web et PC à télécharger
|
||||
|
||||
text.link.google-play.description=la page Google play Store
|
||||
text.link.wiki.description=wiki officiel de Mindustry
|
||||
text.linkfail=Erreur lors de l'ouverture du lien !\nL'URL as bien été copier dans le presse-papiers.
|
||||
text.editor.web=Votre navigateur ne supporte pas l'éditeur !\nTéléchargez le jeu pour l'utiliser.
|
||||
text.web.unsupported=votre navigateur ne supporte pas cette fonctionnalité ! Téléchargez le jeu pour l'utiliser.
|
||||
text.map.delete=êtes vous sûre de supprimer la carte "[orange]{0}[]"?
|
||||
text.construction.title=Guide des blocs de construction
|
||||
text.construction=Voou avez sélectionné le [accent]mode de construction de blocs[].\n\n pour commencer à en placer, taper sur un emplacement validé près de votre vaisseau '.\nUne fois que vous avez sélectionné des blocs, appuyez sur la flèche pour valider, et votre vaisseau va les construire.\n\n- [accent]Enlever des blocs[] de votre sélection en les touchant.\n- [accent]étendez la sélection[] en maintenant et en étirant les blocs de la selection.\n- [accent]Placer des blocs en ligne[] en touchant et en laissant appuyer sur une case vide, puis étirez dans une direction.\n- [accent]Annulez une construction ou une selection[]en appuyant sur X en bas à gauche .
|
||||
text.deconstruction.title=Block Deconstruction Guide
|
||||
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.showagain=Don't show again next session
|
||||
|
|
@ -464,7 +464,6 @@ block.rotary-pump.name=Rotary Pump
|
|||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
text.customgame=Custom Game
|
||||
text.campaign=Campaign
|
||||
text.sectors=Sectors
|
||||
text.sector=Selected Sector: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Time: [LIGHT_GRAY]{0}
|
||||
|
|
@ -503,8 +502,6 @@ unit.drone.name=Drone
|
|||
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
|
||||
unit.fabricator.name=Fabricator
|
||||
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
|
||||
unit.scout.name=Scout
|
||||
unit.scout.description=A basic ground unit. Uses lead as ammo.
|
||||
unit.titan.name=Titan
|
||||
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
|
||||
unit.monsoon.name=Monsoon
|
||||
|
|
@ -516,3 +513,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ text.players.single={0} pemain online
|
|||
text.server.mismatch=Kesalahan paket: kemungkinan versi client / server tidak sesuai.\nPastikan Anda dan host memiliki versi terbaru Mindustry!
|
||||
text.server.closing=[accent]Menutup server...
|
||||
text.server.kicked.kick=Anda telah dikeluarkan dari server!
|
||||
text.server.kicked.invalidPassword=Kata sandi salah!
|
||||
text.server.kicked.clientOutdated=Client versi lama! Update game Anda!
|
||||
text.server.kicked.serverOutdated=Server versi lama! Tanyakan host untuk mengupdate!
|
||||
text.hostserver=Host Server
|
||||
|
|
@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump
|
|||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
text.customgame=Custom Game
|
||||
text.campaign=Campaign
|
||||
text.sectors=Sectors
|
||||
text.sector=Selected Sector: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Time: [LIGHT_GRAY]{0}
|
||||
|
|
@ -503,8 +501,6 @@ unit.drone.name=Drone
|
|||
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
|
||||
unit.fabricator.name=Fabricator
|
||||
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
|
||||
unit.scout.name=Scout
|
||||
unit.scout.description=A basic ground unit. Uses lead as ammo.
|
||||
unit.titan.name=Titan
|
||||
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
|
||||
unit.monsoon.name=Monsoon
|
||||
|
|
@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ text.players.single={0} giocatori online
|
|||
text.server.mismatch=Errore nel pacchetto: possibile discrepanza nella versione client / server. Assicurati che tu e l'host abbiate l'ultima versione di Mindustry!
|
||||
text.server.closing=[accent]Chiusura server ...
|
||||
text.server.kicked.kick=Sei stato cacciato dal server!
|
||||
text.server.kicked.invalidPassword=Password non valida.
|
||||
text.server.kicked.clientOutdated=Versione del client obsoleta! Aggiorna il tuo gioco!
|
||||
text.server.kicked.serverOutdated=Server obsoleto! Chiedi all'host di aggiornare!
|
||||
text.server.kicked.banned=Sei bannato da questo server.
|
||||
|
|
@ -254,7 +253,6 @@ text.showagain=non mostrare più
|
|||
text.unlocks=Sblocchi
|
||||
text.addplayers=Aggiungi/rimuovi giocatori
|
||||
text.customgame=Gioco personalizzato
|
||||
text.campaign=Campagna
|
||||
text.sectors=Settori
|
||||
text.sector=Settori Selezionati: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Tempo: [LIGHT_GRAY]{0}
|
||||
|
|
@ -308,28 +306,28 @@ text.editor.export=Esportazione...
|
|||
text.editor.exportfile=Esporta file
|
||||
text.editor.exportfile.description=Esporta file mappa
|
||||
text.editor.exportimage=Esporta immagine terreno
|
||||
text.editor.exportimage.description=Export a map image file
|
||||
text.editor.overwrite.confirm=[scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?
|
||||
text.editor.exportimage.description=Esporta file immagine mappa
|
||||
text.editor.overwrite.confirm=[scarlet]Attenzione![] Una mappa con questo nome esiste già. Sei sicuro di volerla sovrascrivere?
|
||||
text.fps=FPS: {0}
|
||||
text.tps=TPS: {0}
|
||||
text.ping=Ping: {0}ms
|
||||
text.settings.rebind=Rebind
|
||||
text.yes=Yes
|
||||
text.settings.rebind=Reinposta
|
||||
text.yes=Si
|
||||
text.no=No
|
||||
text.blocks.targetsair=Targets Air
|
||||
text.blocks.itemspeed=Units Moved
|
||||
text.blocks.shootrange=Range
|
||||
text.blocks.poweruse=Power Use
|
||||
text.blocks.inputitemcapacity=Input Item Capacity
|
||||
text.blocks.outputitemcapacity=Input Item Capacity
|
||||
text.blocks.maxpowergeneration=Max Power Generation
|
||||
text.blocks.powertransferspeed=Power Transfer
|
||||
text.blocks.craftspeed=Production Speed
|
||||
text.blocks.inputliquidaux=Aux Liquid
|
||||
text.blocks.inputitems=Input Items
|
||||
text.blocks.outputitem=Output Item
|
||||
text.blocks.drilltier=Drillables
|
||||
text.blocks.drillspeed=Base Drill Speed
|
||||
text.blocks.targetsair=Attacca nemici aerei
|
||||
text.blocks.itemspeed=Unità spostate
|
||||
text.blocks.shootrange=Raggio
|
||||
text.blocks.poweruse=Utilizzo energia
|
||||
text.blocks.inputitemcapacity=Capacità oggetti in entrata
|
||||
text.blocks.outputitemcapacity=Capacità oggetti in uscità
|
||||
text.blocks.maxpowergeneration=Produzione massima energia
|
||||
text.blocks.powertransferspeed=Velocità trasferimento energia
|
||||
text.blocks.craftspeed=Velocità produzione
|
||||
text.blocks.inputliquidaux=Liquidi extra
|
||||
text.blocks.inputitems=Oggetti in entrata
|
||||
text.blocks.outputitem=Oggetti in uscita
|
||||
text.blocks.drilltier=Scavabili
|
||||
text.blocks.drillspeed=Velocità scavo stbile
|
||||
text.blocks.liquidoutput=Uscita liquidi
|
||||
text.blocks.liquiduse=Uso liquidi
|
||||
text.blocks.coolant=Refrigerante
|
||||
|
|
@ -508,11 +506,36 @@ unit.drone.name=Drone
|
|||
unit.drone.description=Un'unità base, che mina e costruisce.
|
||||
unit.fabricator.name=Costruttore
|
||||
unit.fabricator.description=Un drone molto avanzato che raccoglie minerali e costruisce molto meglio e più velocemente di un drone base.
|
||||
unit.scout.name=Esploratore
|
||||
unit.scout.description=Un unità di base a terra. Usa piombo come munizioni.
|
||||
unit.titan.name=Titano
|
||||
unit.titan.description=Un'unità di terra corazzata avanzata. Utilizza carburo come munizione. Attacca sia bersagli terrestri che aerei.
|
||||
unit.monsoon.name=Monsone
|
||||
unit.monsoon.description=Un bombardiere molto potente, che raderà al suolo chiunque gli passi davanti.
|
||||
unit.interceptor.name=Intercettatore
|
||||
unit.interceptor.description=Un veloce ed efficiente torretta che funziona con il piombo.
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ text.server.mismatch=클라이언트와 서버 버전이 일치하지 않습니
|
|||
text.server.closing=[accent]서버 닫는중...
|
||||
text.server.kicked.kick=당신은 서버에서 추방되었습니다!
|
||||
text.server.kicked.fastShoot=당신은 총을 너무 빨리 발사했습니다.
|
||||
text.server.kicked.invalidPassword=알 수 없는 비밀번호 입니다!
|
||||
text.server.kicked.clientOutdated=오래된 버전의 클라이언트 입니다! 게임을 업데이트 하세요!
|
||||
text.server.kicked.serverOutdated=오래된 버전의 서버입니다! 서버 호스트 관리자에게 문의하세요!
|
||||
text.server.kicked.banned=당신은 서버에서 밴 망치를 맞아 차단당했습니다.
|
||||
|
|
@ -281,7 +280,6 @@ text.category.liquids=액체
|
|||
text.category.items=아이템
|
||||
text.category.crafting=제작
|
||||
text.category.shooting=사격
|
||||
|
||||
setting.difficulty.easy=쉬움
|
||||
setting.difficulty.normal=보통
|
||||
setting.difficulty.hard=어려움
|
||||
|
|
@ -304,9 +302,7 @@ setting.musicvol.name=음악 크기
|
|||
setting.mutemusic.name=음소거
|
||||
setting.sfxvol.name=효과음 크기
|
||||
setting.mutesound.name=소리 끄기
|
||||
|
||||
text.keybind.title=키 바인딩
|
||||
|
||||
keybind.move_x.name=오른쪽/왼쪽 이동
|
||||
keybind.move_y.name=위쪽/아래쪽 이동
|
||||
keybind.select.name=선택
|
||||
|
|
@ -321,7 +317,6 @@ keybind.chat.name=채팅
|
|||
keybind.player_list.name=플레이어 목록
|
||||
keybind.console.name=콘솔
|
||||
keybind.rotate.name=회전
|
||||
|
||||
mode.text.help.title=도움말
|
||||
mode.waves.name=단계
|
||||
mode.waves.description=이것은 일반 모드입니다. 제한된 자원과 자동으로 다음 단계가 시작됩니다.
|
||||
|
|
@ -329,12 +324,10 @@ mode.sandbox.name=샌드박스
|
|||
mode.sandbox.description=무한한 자원과 다음단계 시작을 위한 타이머가 없습니다.
|
||||
mode.freebuild.name=자유 건축
|
||||
mode.freebuild.description=제한된 자원과 다음단계 시작을 위한 타이머가 없습니다.
|
||||
|
||||
content.item.name=아이템
|
||||
content.liquid.name=액체
|
||||
content.unit-type.name=종류
|
||||
content.recipe.name=블록
|
||||
|
||||
item.stone.name=돌
|
||||
item.stone.description=흔히 찾을 수 있는 자원. 바닥에서 돌을 캐거나 용암을 사용하여 얻을 수 있습니다.
|
||||
item.tungsten.name=텅스텐
|
||||
|
|
@ -363,12 +356,10 @@ item.blast-compound.name=폭발 화합물
|
|||
item.blast-compound.description=폭탄 및 폭발물에 사용되는 휘발성 화합물. 이 연료로 불을 낼 수 있지만, 별로 추천하지는 않습니다.
|
||||
item.pyratite.name=피러레이트
|
||||
item.pyratite.description=화염 무기에 사용되는 엄청난 가연성 물질.
|
||||
|
||||
liquid.water.name=물
|
||||
liquid.lava.name=용암
|
||||
liquid.oil.name=석유
|
||||
liquid.cryofluid.name=냉각수
|
||||
|
||||
text.item.explosiveness=[LIGHT_GRAY]폭발력:{0}
|
||||
text.item.flammability=[LIGHT_GRAY]인화성:{0}
|
||||
text.item.radioactivity=[LIGHT_GRAY]방사능:{0}
|
||||
|
|
@ -377,7 +368,6 @@ text.item.hardness=[LIGHT_GRAY]강도:{0}
|
|||
text.liquid.heatcapacity=[LIGHT_GRAY]발열량:{0}
|
||||
text.liquid.viscosity=[LIGHT_GRAY]점도:{0}
|
||||
text.liquid.temperature=[LIGHT_GRAY]온도:{0}
|
||||
|
||||
block.deepwater.name=깊은물
|
||||
block.water.name=물
|
||||
block.lava.name=용암
|
||||
|
|
@ -485,10 +475,8 @@ block.liquid-junction.name=액체 교차기
|
|||
block.bridge-conduit.name=다리 파이프
|
||||
block.rotary-pump.name=동력 펌프
|
||||
block.nuclear-reactor.name=원자로
|
||||
|
||||
text.save.old=이 저장파일은 이전 버전의 게임용이며, 지금은 사용할 수 없습니다. \n\n[LIGHT_GRAY]4.0 정식때 이전 게임버전에서 만든 저장파일과 호환됩니다.
|
||||
text.customgame=커스텀 게임
|
||||
text.campaign=캠페인
|
||||
text.sectors=구역
|
||||
text.sector=선택된 구역:[LIGHT_GRAY]{0}
|
||||
text.sector.time=시간:[LIGHT_GRAY]{0}
|
||||
|
|
@ -503,13 +491,10 @@ text.credits.text=Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]\n\n[GR
|
|||
text.sector.gameover=이 구역을 잃었습니다. 다시 배치하시겠습니까?
|
||||
text.sector.retry=다시할꺼임
|
||||
text.wave.lasted=[accent]{0}[] 까지 버티셨습니다.
|
||||
|
||||
setting.fpscap.name=최대 FPS
|
||||
setting.fpscap.none=없음
|
||||
setting.fpscap.text={0} FPS
|
||||
|
||||
block.command-center.name=명령 본부
|
||||
|
||||
text.mission=목표:[LIGHT_GRAY] {0}
|
||||
text.mission.wave=[accent]{0}[]단계가 될때까지 생존하세요.
|
||||
text.mission.battle=적 본부를 파괴하세요.
|
||||
|
|
@ -520,20 +505,16 @@ text.mission.complete.body=구역 {0},{1} 탐색 성공.
|
|||
text.mission.resource=Obtain {0} x{1}
|
||||
text.unit.health=[LIGHT_GRAY]체력:{0}
|
||||
text.unit.speed=[LIGHT_GRAY]속도:{0}
|
||||
|
||||
block.drone-pad.name=드론 공장
|
||||
block.fabricator-pad.name=페버 공장
|
||||
block.interceptor-pad.name=인터셉터 공장
|
||||
block.monsoon-pad.name=문순 공장
|
||||
block.mass-driver.name=물질 이동기
|
||||
block.blast-drill.name=고속 발열 드릴
|
||||
|
||||
unit.drone.name=드론
|
||||
unit.drone.description=초기형 드론 유닛입니다. 기본적으로 코어에서 1대를 스폰합니다. 자동으로 아이템을 수집/채광하며 블럭들을 수리합니다.
|
||||
unit.fabricator.name=페버
|
||||
unit.fabricator.description=고급 드론 유닛입니다. 자동으로 아이템과 수집/채광/블록들을 수리하며, 일반 드론보다 더 빠르게 작업할 수 있습니다.
|
||||
unit.scout.name=스카웃
|
||||
unit.scout.description=기본 지상 유닛입니다. 납을 탄약으로 사용합니다.
|
||||
unit.titan.name=타이탄
|
||||
unit.titan.description=고급 지상 유닛입니다. 합금을 탄약으로 사용하며 지상과 공중 둘다 공격할 수 있습니다.
|
||||
unit.monsoon.name=문순
|
||||
|
|
@ -542,9 +523,19 @@ unit.interceptor.name=인터셉터
|
|||
unit.interceptor.description=빠르고, 공격하고 튀는 방식을 사용합니다. 납을 탄약으로 사용합니다.
|
||||
unit.dagger.name=디거
|
||||
unit.dagger.description=기본 지상 유닛입니다. 스웜과 같이 쓰면 유용합니다.
|
||||
|
||||
mode.sandbox.warning=Note that blocks cannot be used in sandbox mode until they are unlocked in other modes.\n\n[LIGHT_GRAY]If you have not unlocked any blocks, none will appear.
|
||||
block.thermal-pump.name=지열 펌프
|
||||
block.dagger-pad.name=디거 공장
|
||||
block.titan-pad.name=타이탄 공장
|
||||
block.thermal-generator.name=지열 발전기
|
||||
block.thermal-generator.name=지열 발전기
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
setting.difficulty.purge=purge
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
|
|
|
|||
|
|
@ -16,7 +16,6 @@ text.players.single={0} gracz online
|
|||
text.server.mismatch=Błąd pakietu: możliwa niezgodność wersji klienta/serwera.\nUpewnij się, że Ty i host macie najnowszą wersję Mindustry!
|
||||
text.server.closing=[accent] Zamykanie serwera ...
|
||||
text.server.kicked.kick=Zostałeś wyrzucony z serwera!
|
||||
text.server.kicked.invalidPassword=Nieprawidłowe hasło!
|
||||
text.server.kicked.clientOutdated=Nieaktualna gra! Zaktualizują ją!
|
||||
text.server.kicked.serverOutdated=Nieaktualna gra! Zaktualizują ją!
|
||||
text.hostserver=Stwórz Serwer
|
||||
|
|
@ -462,7 +461,6 @@ block.rotary-pump.name=Wirowa Pompa
|
|||
block.nuclear-reactor.name=Reaktor Nuklearny
|
||||
text.save.old=Ten zapis jest ze starej wersji i gra nie może go teraz wczytać.\n\n[LIGHT_GRAY]Wsparcie starych zapisów będzie w pełnej wersji 4.0.
|
||||
text.customgame=Własna Gra
|
||||
text.campaign=Kampania
|
||||
text.sectors=Sektory
|
||||
text.sector=Wybrany Sektor: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Czas: [LIGHT_GRAY]{0}
|
||||
|
|
@ -503,8 +501,6 @@ unit.drone.name=Drone
|
|||
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
|
||||
unit.fabricator.name=Fabricator
|
||||
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
|
||||
unit.scout.name=Scout
|
||||
unit.scout.description=A basic ground unit. Uses lead as ammo.
|
||||
unit.titan.name=Titan
|
||||
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
|
||||
unit.monsoon.name=Monsoon
|
||||
|
|
@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -162,7 +162,6 @@ text.server.mismatch=Packet error: Versão do Cliente/Servidor Incompativel.\nTe
|
|||
text.server.closing=[accent]Fechando servidor...
|
||||
text.server.kicked.kick=Voce foi expulso do servidor!
|
||||
text.server.kicked.fastShoot=Voce esta atirando rapido demais.
|
||||
text.server.kicked.invalidPassword=Senha Incorreta!
|
||||
text.server.kicked.clientOutdated=Cliente desatualizado! Atualize seu jogo!
|
||||
text.server.kicked.serverOutdated=Servidor desatualiado! Peca ao dono para atualizar!
|
||||
text.server.kicked.banned=Voce foi banido do servidor.
|
||||
|
|
@ -463,7 +462,6 @@ block.rotary-pump.name=Bomba Rotatoria
|
|||
block.nuclear-reactor.name=Reator Nuclear
|
||||
text.save.old=Este save é para uma versão antiga do jogo, E não pode ser usado.\n\n[LIGHT_GRAY]Salvar Versões antigas vai ser Implementado Na versão 4.0 completa
|
||||
text.customgame=Jogo Customizado
|
||||
text.campaign=Campanha
|
||||
text.sectors=Setores
|
||||
text.sector=Setor Selecionado: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Tempo: [LIGHT_GRAY]{0}
|
||||
|
|
@ -503,8 +501,6 @@ unit.drone.name=Drone
|
|||
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
|
||||
unit.fabricator.name=Fabricator
|
||||
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
|
||||
unit.scout.name=Scout
|
||||
unit.scout.description=A basic ground unit. Uses lead as ammo.
|
||||
unit.titan.name=Titan
|
||||
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
|
||||
unit.monsoon.name=Monsoon
|
||||
|
|
@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -33,7 +33,6 @@ text.loadgame=Загрузить игру
|
|||
text.joingame=Присоединиться
|
||||
text.addplayers=Доб/удалить игроков
|
||||
text.customgame=Пользовательская игра
|
||||
text.campaign=Кампания
|
||||
text.sectors=Секторы
|
||||
text.sector=Выбранный сектор: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Время: [LIGHT_GRAY]{0}
|
||||
|
|
@ -64,7 +63,9 @@ text.server.mismatch=Ошибка пакета: возможное несоот
|
|||
text.server.closing=[accent]Закрытие сервера...
|
||||
text.server.kicked.kick=Вас выгнали с сервера!
|
||||
text.server.kicked.fastShoot=Вы стреляете слишком быстро.
|
||||
text.server.kicked.invalidPassword=Неверный пароль.
|
||||
text.server.kicked.serverClose=Сервер закрыт.
|
||||
text.server.kicked.sectorComplete=Сектор завершён.
|
||||
text.server.kicked.sectorComplete.text=Ваша миссия завершена.\nТеперь сервер продолжит работу в следующем секторе.
|
||||
text.server.kicked.clientOutdated=Устаревший клиент! Обновите игру!
|
||||
text.server.kicked.serverOutdated=Устаревший сервер! Попросите хост обновить!
|
||||
text.server.kicked.banned=Вы заблокированы на этом сервере.
|
||||
|
|
@ -337,6 +338,9 @@ setting.mutemusic.name=Заглушить музыку
|
|||
setting.sfxvol.name=Громкость звуковых эффектов
|
||||
setting.mutesound.name=Заглушить звук
|
||||
text.keybind.title=Переназначить клавиши
|
||||
section.general.name=Oснoвнoe
|
||||
section.view.name=Прoсмoтр
|
||||
section.multiplayer.name=Мультиплеер
|
||||
keybind.move_x.name=Движение x
|
||||
keybind.move_y.name=Движение y
|
||||
keybind.select.name=выбрать
|
||||
|
|
@ -535,3 +539,9 @@ unit.monsoon.name=Муссон
|
|||
unit.monsoon.description=Тяжелый ковровый бомбардировщик. Использует взрывоопасное соединение или пиратит в качестве боеприпасов.
|
||||
unit.interceptor.name=Истребитель-перехватчик
|
||||
unit.interceptor.description=Быстрая и ударная боевая единица, которая использует набег с отскоком.
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
|
|
|
|||
|
|
@ -26,7 +26,6 @@ text.players.single={0} Oyuncu Çevrimiçi
|
|||
text.server.mismatch=Paket hatası: olası istemci / sunucu sürümü uyuşmazlığı. Siz ve ev sahibi Mindustry'nin en son sürümüne sahip olduğunuzdan emin olun!
|
||||
text.server.closing=[accent] Sunucu kapatılıyor ...
|
||||
text.server.kicked.kick=Sunucudan kovuldun!
|
||||
text.server.kicked.invalidPassword=Geçersiz şifre!
|
||||
text.server.kicked.clientOutdated=Oyun sürümünüz geçerli değil. Oyununu güncelleyin!
|
||||
text.server.kicked.serverOutdated=Eski sunucu! Ev sahibinden güncellemesini isteyin!
|
||||
text.server.kicked.banned=Bu sunucudan yasaklandınız.
|
||||
|
|
@ -464,7 +463,6 @@ block.rotary-pump.name=Rotary Pump
|
|||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.save.old=This save is for an older version of the game, and can no longer be used.\n\n[LIGHT_GRAY]Save backwards compatibility will be implemented in the full 4.0 release.
|
||||
text.customgame=Custom Game
|
||||
text.campaign=Campaign
|
||||
text.sectors=Sectors
|
||||
text.sector=Selected Sector: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Time: [LIGHT_GRAY]{0}
|
||||
|
|
@ -503,8 +501,6 @@ unit.drone.name=Drone
|
|||
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
|
||||
unit.fabricator.name=Fabricator
|
||||
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
|
||||
unit.scout.name=Scout
|
||||
unit.scout.description=A basic ground unit. Uses lead as ammo.
|
||||
unit.titan.name=Titan
|
||||
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
|
||||
unit.monsoon.name=Monsoon
|
||||
|
|
@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -22,9 +22,9 @@ text.map.delete=Ви впевнені, що хочете видалити кар
|
|||
text.level.select=Вибір рівня
|
||||
text.level.mode=Ігровий режим:
|
||||
text.construction.title=Block Construction Guide
|
||||
text.construction=\You've just selected [accent]block construction mode[].\n\n\To begin placing, simply tap a valid location near your ship.\n\Once you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\\n\- [accent]Remove blocks[] from your selection by tapping them.\n\- [accent]Shift the selection[] by holding and dragging any block in the selection.\n\- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n\- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.construction=You've just selected [accent]block construction mode[].\n\nTo begin placing, simply tap a valid location near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin constructing them.\n\\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Shift the selection[] by holding and dragging any block in the selection.\n- [accent]Place blocks in a line[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel construction or selection[] by pressing the X at the bottom left.
|
||||
text.deconstruction.title=Block Deconstruction Guide
|
||||
text.deconstruction=\You've just selected [accent]block deconstruction mode[].\n\n\To begin breaking, simply tap a block near your ship.\n\Once you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\\n\- [accent]Remove blocks[] from your selection by tapping them.\n\- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n\- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.deconstruction=You've just selected [accent]block deconstruction mode[].\n\nTo begin breaking, simply tap a block near your ship.\nOnce you have selected some blocks, press the checkbox to confirm, and your ship will begin de-constructing them.\n\\n- [accent]Remove blocks[] from your selection by tapping them.\n- [accent]Remove blocks in an area[] by tapping and holding an empty spot, then dragging in a direction.\n- [accent]Cancel deconstruction or selection[] by pressing the X at the bottom left.
|
||||
text.showagain=Не показувати знову до наступного сеансу
|
||||
text.coreattack=< Ядро під атакою! >
|
||||
text.unlocks=Разблоковане
|
||||
|
|
@ -535,3 +535,7 @@ unit.monsoon.name=Мусон
|
|||
unit.monsoon.description=Важкий килимовий бомбардувальник. Використовує вибухонебезпечну речовину або піратит як боєприпаси.
|
||||
unit.interceptor.name=Винищувач-перехполювач
|
||||
unit.interceptor.description=Швидка, ударна бойова одиниця, котра використовує набіг з відскоком
|
||||
text.settings.language=Language
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
|
|
|
|||
|
|
@ -32,7 +32,6 @@ text.loadgame=载入游戏
|
|||
text.joingame=加入游戏
|
||||
text.addplayers=增加/删除玩家
|
||||
text.customgame=自定义游戏
|
||||
text.campaign=战役
|
||||
text.sectors=区域
|
||||
text.sector=区域: [LIGHT_GRAY]{0}
|
||||
text.sector.time=时间: [LIGHT_GRAY]{0}
|
||||
|
|
@ -59,7 +58,6 @@ text.server.mismatch=Packet error: 可能是客户端/服务器版本不匹配\n
|
|||
text.server.closing=[accent]正在关闭服务器...
|
||||
text.server.kicked.kick=你被踢出服务器了!
|
||||
text.server.kicked.fastShoot=你发射得太快了!
|
||||
text.server.kicked.invalidPassword=无效的密码!
|
||||
text.server.kicked.clientOutdated=客户端版本过旧!请升级!
|
||||
text.server.kicked.serverOutdated=服务器版本过旧!请联系房主升级!
|
||||
text.server.kicked.banned=你被这个服务器拉黑了。
|
||||
|
|
@ -497,8 +495,6 @@ unit.drone.name=无人机
|
|||
unit.drone.description=初始的无人机单位.自动在核心生成,自动采矿,收集物品,修复方块
|
||||
unit.fabricator.name=装配工
|
||||
unit.fabricator.description=高级无人机单位,自动采矿,收集物品和修复方块.比普通无人机快很多.
|
||||
unit.scout.name=侦察机
|
||||
unit.scout.description=基础地面单位,使用钨作为弹药.
|
||||
unit.titan.name=泰坦
|
||||
unit.titan.description=高级的有武装地面单位,使用电石作为弹药.攻击地面单位和空中单位.
|
||||
unit.monsoon.name=狂风
|
||||
|
|
@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
|
@ -27,7 +27,6 @@ text.server.mismatch=封包錯誤:客戶端與伺服器版本可能不相符
|
|||
text.server.closing=[accent] 正在關閉伺服器...
|
||||
text.server.kicked.kick=您已被踢出伺服器!
|
||||
text.server.kicked.fastShoot=您射擊的太快了!
|
||||
text.server.kicked.invalidPassword=密碼無效!
|
||||
text.server.kicked.clientOutdated=客戶端版本過舊!請更新遊戲!
|
||||
text.server.kicked.serverOutdated=伺服器版本過舊!請聯絡伺服主更新伺服器!
|
||||
text.server.kicked.banned=您已經從這個伺服器被封禁。
|
||||
|
|
@ -464,7 +463,6 @@ block.bridge-conduit.name=Bridge Conduit
|
|||
block.rotary-pump.name=Rotary Pump
|
||||
block.nuclear-reactor.name=Nuclear Reactor
|
||||
text.customgame=Custom Game
|
||||
text.campaign=Campaign
|
||||
text.sectors=Sectors
|
||||
text.sector=Selected Sector: [LIGHT_GRAY]{0}
|
||||
text.sector.time=Time: [LIGHT_GRAY]{0}
|
||||
|
|
@ -503,8 +501,6 @@ unit.drone.name=Drone
|
|||
unit.drone.description=The starter drone unit. Spawns in the core by default. Automatically mines ores, collects items and repairs blocks.
|
||||
unit.fabricator.name=Fabricator
|
||||
unit.fabricator.description=An advanced drone unit. Automatically mines ores, collects items and repairs blocks. Significantly more effective than a drone.
|
||||
unit.scout.name=Scout
|
||||
unit.scout.description=A basic ground unit. Uses lead as ammo.
|
||||
unit.titan.name=Titan
|
||||
unit.titan.description=An advanced armored ground unit. Uses carbide as ammo. Attacks both ground and air targets.
|
||||
unit.monsoon.name=Monsoon
|
||||
|
|
@ -516,3 +512,30 @@ block.thermal-pump.name=Thermal Pump
|
|||
block.dagger-pad.name=Dagger Pad
|
||||
block.titan-pad.name=Titan Pad
|
||||
block.thermal-generator.name=Thermal Generator
|
||||
text.coreattack=< Core is under attack! >
|
||||
text.continue=Continue
|
||||
text.nextmission=Next Mission
|
||||
text.server.kicked.serverClose=Server closed.
|
||||
text.server.kicked.sectorComplete=Sector completed.
|
||||
text.server.kicked.sectorComplete.text=Your mission is complete.\nThe server will now continue at the next sector.
|
||||
text.map.invalid=Error loading map: corrupted or invalid map file.
|
||||
section.general.name=General
|
||||
section.view.name=View
|
||||
section.multiplayer.name=Multiplayer
|
||||
block.deepwater.name=deepwater
|
||||
block.water.name=water
|
||||
block.lava.name=lava
|
||||
block.oil.name=oil
|
||||
block.blackstone.name=blackstone
|
||||
block.stone.name=stone
|
||||
block.dirt.name=dirt
|
||||
block.sand.name=sand
|
||||
block.ice.name=ice
|
||||
block.snow.name=snow
|
||||
block.grass.name=grass
|
||||
block.shrub.name=shrub
|
||||
block.rock.name=rock
|
||||
block.blackrock.name=blackrock
|
||||
block.icerock.name=icerock
|
||||
unit.dagger.name=Dagger
|
||||
unit.dagger.description=A basic ground unit. Useful in swarms.
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 138 KiB After Width: | Height: | Size: 140 KiB |
|
|
@ -142,7 +142,6 @@ public class Recipes implements ContentList{
|
|||
new Recipe(units, UnitBlocks.monsoonPad, new ItemStack(Items.plastanium, 80), new ItemStack(Items.titanium, 100), new ItemStack(Items.lead, 130), new ItemStack(Items.silicon, 220)).setMode(GameMode.noWaves);
|
||||
|
||||
new Recipe(units, UnitBlocks.repairPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
|
||||
new Recipe(units, UnitBlocks.resupplyPoint, new ItemStack(Items.lead, 30), new ItemStack(Items.tungsten, 30), new ItemStack(Items.silicon, 30));
|
||||
new Recipe(units, UnitBlocks.commandCenter, new ItemStack(Items.lead, 100), new ItemStack(Items.carbide, 100), new ItemStack(Items.silicon, 200)).setMode(GameMode.noWaves);
|
||||
|
||||
//LIQUIDS
|
||||
|
|
|
|||
|
|
@ -19,7 +19,7 @@ public class Weapons implements ContentList{
|
|||
reload = 15f;
|
||||
roundrobin = true;
|
||||
ejectEffect = ShootFx.shellEjectSmall;
|
||||
setAmmo(AmmoTypes.bulletLead);
|
||||
ammo = AmmoTypes.bulletLead;
|
||||
}};
|
||||
|
||||
missiles = new Weapon("missiles"){{
|
||||
|
|
@ -30,7 +30,7 @@ public class Weapons implements ContentList{
|
|||
roundrobin = false;
|
||||
roundrobin = true;
|
||||
ejectEffect = Fx.none;
|
||||
setAmmo(AmmoTypes.weaponMissile);
|
||||
ammo = AmmoTypes.weaponMissile;
|
||||
}};
|
||||
|
||||
chainBlaster = new Weapon("chain-blaster"){{
|
||||
|
|
@ -38,7 +38,7 @@ public class Weapons implements ContentList{
|
|||
reload = 28f;
|
||||
roundrobin = true;
|
||||
ejectEffect = ShootFx.shellEjectSmall;
|
||||
setAmmo(AmmoTypes.bulletLead, AmmoTypes.bulletCarbide, AmmoTypes.bulletTungsten, AmmoTypes.bulletSilicon, AmmoTypes.bulletThorium);
|
||||
ammo = AmmoTypes.bulletLead;
|
||||
}};
|
||||
|
||||
shockgun = new Weapon("shockgun"){{
|
||||
|
|
@ -50,7 +50,7 @@ public class Weapons implements ContentList{
|
|||
recoil = 2f;
|
||||
velocityRnd = 0.7f;
|
||||
ejectEffect = ShootFx.shellEjectSmall;
|
||||
setAmmo(AmmoTypes.shotgunTungsten);
|
||||
ammo = AmmoTypes.shotgunTungsten;
|
||||
}};
|
||||
|
||||
flakgun = new Weapon("flakgun"){{
|
||||
|
|
@ -62,7 +62,7 @@ public class Weapons implements ContentList{
|
|||
recoil = 3f;
|
||||
velocityRnd = 0.1f;
|
||||
ejectEffect = ShootFx.shellEjectMedium;
|
||||
setAmmo(AmmoTypes.shellCarbide);
|
||||
ammo = AmmoTypes.shellCarbide;
|
||||
}};
|
||||
|
||||
flamethrower = new Weapon("flamethrower"){{
|
||||
|
|
@ -71,7 +71,7 @@ public class Weapons implements ContentList{
|
|||
roundrobin = true;
|
||||
recoil = 1f;
|
||||
ejectEffect = Fx.none;
|
||||
setAmmo(AmmoTypes.flamerThermite);
|
||||
ammo = AmmoTypes.flamerThermite;
|
||||
}};
|
||||
|
||||
sapper = new Weapon("sapper"){{
|
||||
|
|
@ -79,7 +79,7 @@ public class Weapons implements ContentList{
|
|||
reload = 12f;
|
||||
roundrobin = true;
|
||||
ejectEffect = ShootFx.shellEjectSmall;
|
||||
setAmmo(AmmoTypes.bulletCarbide);
|
||||
ammo = AmmoTypes.bulletCarbide;
|
||||
}};
|
||||
|
||||
swarmer = new Weapon("swarmer"){{
|
||||
|
|
@ -87,7 +87,7 @@ public class Weapons implements ContentList{
|
|||
reload = 10f;
|
||||
roundrobin = true;
|
||||
ejectEffect = ShootFx.shellEjectSmall;
|
||||
setAmmo(AmmoTypes.bulletPyratite);
|
||||
ammo = AmmoTypes.bulletPyratite;
|
||||
}};
|
||||
|
||||
bomber = new Weapon("bomber"){{
|
||||
|
|
@ -98,7 +98,7 @@ public class Weapons implements ContentList{
|
|||
ejectEffect = Fx.none;
|
||||
velocityRnd = 1f;
|
||||
inaccuracy = 40f;
|
||||
setAmmo(AmmoTypes.bombExplosive, AmmoTypes.bombIncendiary, AmmoTypes.bombOil);
|
||||
ammo = AmmoTypes.bombExplosive;
|
||||
}};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -106,7 +106,7 @@ public class Blocks extends BlockList implements ContentList{
|
|||
stone = new Floor("stone"){{
|
||||
hasOres = true;
|
||||
drops = new ItemStack(Items.stone, 1);
|
||||
blends = block -> block != this && !(block instanceof Ore);
|
||||
blends = block -> block != this && !(block instanceof OreBlock);
|
||||
minimapColor = Color.valueOf("323232");
|
||||
playerUnmineable = true;
|
||||
}};
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ import io.anuke.mindustry.world.Block;
|
|||
import io.anuke.mindustry.world.blocks.units.*;
|
||||
|
||||
public class UnitBlocks extends BlockList implements ContentList{
|
||||
public static Block resupplyPoint, repairPoint, dronePad,
|
||||
public static Block repairPoint, dronePad,
|
||||
fabricatorPad, interceptorPad, monsoonPad, daggerPad, titanPad,
|
||||
dropPoint, reconstructor, overdriveProjector, shieldProjector, commandCenter;
|
||||
|
||||
|
|
@ -64,11 +64,6 @@ public class UnitBlocks extends BlockList implements ContentList{
|
|||
consumes.items(new ItemStack[]{new ItemStack(Items.silicon, 20), new ItemStack(Items.thorium, 30)});
|
||||
}};
|
||||
|
||||
resupplyPoint = new ResupplyPoint("resupply-point"){{
|
||||
shadow = "shadow-round-1";
|
||||
itemCapacity = 30;
|
||||
}};
|
||||
|
||||
dropPoint = new DropPoint("drop-point"){{
|
||||
shadow = "shadow-round-1";
|
||||
itemCapacity = 40;
|
||||
|
|
|
|||
|
|
@ -473,6 +473,9 @@ public class NetServer extends Module{
|
|||
}
|
||||
|
||||
String fixName(String name){
|
||||
if(name.equals("[") || name.equals("]")){
|
||||
return "";
|
||||
}
|
||||
|
||||
for(int i = 0; i < name.length(); i++){
|
||||
if(name.charAt(i) == '[' && i != name.length() - 1 && name.charAt(i + 1) != '[' && (i == 0 || name.charAt(i - 1) != '[')){
|
||||
|
|
|
|||
|
|
@ -331,8 +331,8 @@ public class Renderer extends RendererModule{
|
|||
|
||||
Graphics.beginShaders(Shaders.outline);
|
||||
Graphics.shader(Shaders.mix, true);
|
||||
drawAndInterpolate(unitGroups[team.ordinal()], u -> u.isFlying() == flying && !u.isDead());
|
||||
drawAndInterpolate(playerGroup, p -> p.isFlying() == flying && p.getTeam() == team);
|
||||
drawAndInterpolate(unitGroups[team.ordinal()], u -> u.isFlying() == flying && !u.isDead(), Unit::drawAll);
|
||||
drawAndInterpolate(playerGroup, p -> p.isFlying() == flying && p.getTeam() == team, Unit::drawAll);
|
||||
Graphics.shader();
|
||||
blocks.drawTeamBlocks(Layer.turret, team);
|
||||
Graphics.endShaders();
|
||||
|
|
|
|||
|
|
@ -363,6 +363,10 @@ public class World extends Module{
|
|||
return null;
|
||||
}
|
||||
|
||||
public void raycastEachWorld(float x0, float y0, float x1, float y1, Raycaster cons){
|
||||
raycastEach(toTile(x0), toTile(y0), toTile(x1), toTile(y1), cons);
|
||||
}
|
||||
|
||||
public void raycastEach(int x0f, int y0f, int x1, int y1, Raycaster cons){
|
||||
int x0 = x0f;
|
||||
int y0 = y0f;
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.badlogic.gdx.math.Vector2;
|
|||
import io.anuke.mindustry.content.bullets.TurretBullets;
|
||||
import io.anuke.mindustry.content.fx.ExplosionFx;
|
||||
import io.anuke.mindustry.content.fx.Fx;
|
||||
import io.anuke.mindustry.entities.bullet.Bullet;
|
||||
import io.anuke.mindustry.entities.effect.Fire;
|
||||
import io.anuke.mindustry.entities.effect.Lightning;
|
||||
import io.anuke.mindustry.game.Team;
|
||||
|
|
@ -15,7 +16,6 @@ import io.anuke.mindustry.world.Tile;
|
|||
import io.anuke.ucore.core.Effects;
|
||||
import io.anuke.ucore.core.Effects.Effect;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.entities.impl.SolidEntity;
|
||||
import io.anuke.ucore.function.Consumer;
|
||||
import io.anuke.ucore.function.Predicate;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
|
@ -84,8 +84,17 @@ public class Damage{
|
|||
* Damages entities in a line.
|
||||
* Only enemies of the specified team are damaged.
|
||||
*/
|
||||
public static void collideLine(SolidEntity hitter, Team team, Effect effect, float x, float y, float angle, float length){
|
||||
public static void collideLine(Bullet hitter, Team team, Effect effect, float x, float y, float angle, float length){
|
||||
tr.trns(angle, length);
|
||||
world.raycastEachWorld(x, y, x + tr.x, y + tr.y, (cx, cy) -> {
|
||||
Tile tile = world.tile(cx, cy);
|
||||
if(tile != null && tile.entity != null && tile.entity.collide(hitter)){
|
||||
tile.entity.collision(hitter);
|
||||
Effects.effect(effect, tile.worldx(), tile.worldy());
|
||||
}
|
||||
return false;
|
||||
});
|
||||
|
||||
rect.setPosition(x, y).setSize(tr.x, tr.y);
|
||||
float x2 = tr.x + x, y2 = tr.y + y;
|
||||
|
||||
|
|
|
|||
|
|
@ -129,11 +129,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
|
|||
return mech.itemCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAmmoCapacity(){
|
||||
return mech.ammoCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interpolate(){
|
||||
super.interpolate();
|
||||
|
|
@ -187,21 +182,11 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
|
|||
return mech.armor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsAmmo(Item item){
|
||||
return mech.weapon.getAmmoType(item) != null && inventory.canAcceptAmmo(mech.weapon.getAmmoType(item));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void added(){
|
||||
baseRotation = 90f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAmmo(Item item){
|
||||
inventory.addAmmo(mech.weapon.getAmmoType(item));
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getMass(){
|
||||
return mech.mass;
|
||||
|
|
@ -273,6 +258,23 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
|
|||
Draw.rect(mech.iconRegion, x , y, rotation - 90);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawAll(){
|
||||
boolean snap = snapCamera && isLocal;
|
||||
|
||||
float px = x, py = y;
|
||||
|
||||
if(snap){
|
||||
x = (int) (x + 0.0001f);
|
||||
y = (int) (y + 0.0001f);
|
||||
}
|
||||
|
||||
super.drawAll();
|
||||
|
||||
x = px;
|
||||
y = py;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void draw(){
|
||||
if((debug && (!showPlayer || !showUI)) || dead) return;
|
||||
|
|
@ -284,15 +286,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
|
|||
|
||||
boostHeat = Mathf.lerpDelta(boostHeat, isBoosting && ((!movement.isZero() && moved) || !isLocal) ? 1f : 0f, 0.08f);
|
||||
|
||||
boolean snap = snapCamera && isLocal;
|
||||
|
||||
float px = x, py = y;
|
||||
|
||||
if(snap){
|
||||
x = (int) (x + 0.0001f);
|
||||
y = (int) (y + 0.0001f);
|
||||
}
|
||||
|
||||
float ft = Mathf.sin(walktime, 6f, 2f) * (1f - boostHeat);
|
||||
|
||||
Floor floor = getFloorOn();
|
||||
|
|
@ -351,9 +344,6 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
|
|||
}
|
||||
|
||||
Draw.alpha(1f);
|
||||
|
||||
x = px;
|
||||
y = py;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -620,20 +610,20 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
|
|||
y += Mathf.cos(Timers.time() + id * 999, 25f, 0.08f);
|
||||
|
||||
//update shooting if not building, not mining and there's ammo left
|
||||
if(!isBuilding() && inventory.hasAmmo() && getMineTile() == null){
|
||||
if(!isBuilding() && getMineTile() == null){
|
||||
|
||||
//autofire: mobile only!
|
||||
if(mobile){
|
||||
|
||||
if(target == null){
|
||||
isShooting = false;
|
||||
target = Units.getClosestTarget(team, x, y, inventory.getAmmoRange());
|
||||
target = Units.getClosestTarget(team, x, y, getWeapon().getAmmo().getRange());
|
||||
}else if(target.isValid()){
|
||||
//rotate toward and shoot the target
|
||||
rotation = Mathf.slerpDelta(rotation, angleTo(target), 0.2f);
|
||||
|
||||
Vector2 intercept =
|
||||
Predict.intercept(x, y, target.getX(), target.getY(), target.getVelocity().x - velocity.x, target.getVelocity().y - velocity.y, inventory.getAmmo().bullet.speed);
|
||||
Predict.intercept(x, y, target.getX(), target.getY(), target.getVelocity().x - velocity.x, target.getVelocity().y - velocity.y, getWeapon().getAmmo().bullet.speed);
|
||||
|
||||
pointerX = intercept.x;
|
||||
pointerY = intercept.y;
|
||||
|
|
@ -677,7 +667,7 @@ public class Player extends Unit implements BuilderTrait, CarryTrait, ShooterTra
|
|||
}
|
||||
|
||||
public boolean isShooting(){
|
||||
return isShooting && inventory.hasAmmo() && (!isBoosting || mech.flying);
|
||||
return isShooting && (!isBoosting || mech.flying);
|
||||
}
|
||||
|
||||
public void updateRespawning(){
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package io.anuke.mindustry.entities;
|
||||
|
||||
import com.badlogic.gdx.graphics.Color;
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import io.anuke.mindustry.content.blocks.Blocks;
|
||||
|
|
@ -8,8 +9,8 @@ import io.anuke.mindustry.game.Team;
|
|||
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
||||
import io.anuke.mindustry.net.Interpolator;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.StatusEffect;
|
||||
import io.anuke.mindustry.type.Weapon;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.Floor;
|
||||
import io.anuke.ucore.core.Effects;
|
||||
|
|
@ -33,17 +34,11 @@ import static io.anuke.mindustry.Vars.state;
|
|||
import static io.anuke.mindustry.Vars.world;
|
||||
|
||||
public abstract class Unit extends DestructibleEntity implements SaveTrait, TargetTrait, SyncTrait, DrawTrait, TeamTrait, CarriableTrait, InventoryTrait{
|
||||
/**
|
||||
* total duration of hit flash effect
|
||||
*/
|
||||
/**Total duration of hit flash effect*/
|
||||
public static final float hitDuration = 9f;
|
||||
/**
|
||||
* Percision divisor of velocity, used when writing. For example a value of '2' would mean the percision is 1/2 = 0.5-size chunks.
|
||||
*/
|
||||
/**Percision divisor of velocity, used when writing. For example a value of '2' would mean the percision is 1/2 = 0.5-size chunks.*/
|
||||
public static final float velocityPercision = 8f;
|
||||
/**
|
||||
* Maximum absolute value of a velocity vector component.
|
||||
*/
|
||||
/**Maximum absolute value of a velocity vector component.*/
|
||||
public static final float maxAbsVelocity = 127f / velocityPercision;
|
||||
|
||||
private static final Vector2 moveVector = new Vector2();
|
||||
|
|
@ -300,16 +295,30 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
|
|||
}
|
||||
}
|
||||
|
||||
public float getAmmoFraction(){
|
||||
return inventory.totalAmmo() / (float) inventory.ammoCapacity();
|
||||
}
|
||||
|
||||
public void drawUnder(){
|
||||
}
|
||||
|
||||
public void drawOver(){
|
||||
}
|
||||
|
||||
public void drawStats(){
|
||||
Draw.color(Color.BLACK, team.color, healthf() + Mathf.absin(Timers.time(), healthf()*5f, 1f - healthf()));
|
||||
Draw.alpha(hitTime);
|
||||
Draw.rect(getPowerCellRegion(), x, y, rotation - 90);
|
||||
Draw.color();
|
||||
}
|
||||
|
||||
public TextureRegion getPowerCellRegion(){
|
||||
return Draw.region("power-cell");
|
||||
}
|
||||
|
||||
public void drawAll(){
|
||||
if(!isDead()){
|
||||
draw();
|
||||
drawStats();
|
||||
}
|
||||
}
|
||||
|
||||
public void drawShadow(){
|
||||
Draw.rect(getIconRegion(), x , y, rotation - 90);
|
||||
}
|
||||
|
|
@ -318,26 +327,18 @@ public abstract class Unit extends DestructibleEntity implements SaveTrait, Targ
|
|||
Fill.circle(x, y, getViewDistance());
|
||||
}
|
||||
|
||||
public boolean isInfiniteAmmo(){
|
||||
return false;
|
||||
}
|
||||
|
||||
public float getViewDistance(){
|
||||
return 135f;
|
||||
}
|
||||
|
||||
public abstract TextureRegion getIconRegion();
|
||||
|
||||
public abstract Weapon getWeapon();
|
||||
|
||||
public abstract int getItemCapacity();
|
||||
|
||||
public abstract int getAmmoCapacity();
|
||||
|
||||
public abstract float getArmor();
|
||||
|
||||
public abstract boolean acceptsAmmo(Item item);
|
||||
|
||||
public abstract void addAmmo(Item item);
|
||||
|
||||
public abstract float getMass();
|
||||
|
||||
public abstract boolean isFlying();
|
||||
|
|
|
|||
|
|
@ -1,10 +1,7 @@
|
|||
package io.anuke.mindustry.entities;
|
||||
|
||||
import com.badlogic.gdx.utils.Array;
|
||||
import io.anuke.mindustry.content.Items;
|
||||
import io.anuke.mindustry.entities.traits.Saveable;
|
||||
import io.anuke.mindustry.type.AmmoEntry;
|
||||
import io.anuke.mindustry.type.AmmoType;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
|
||||
|
|
@ -14,8 +11,6 @@ import java.io.IOException;
|
|||
|
||||
public class UnitInventory implements Saveable{
|
||||
private final Unit unit;
|
||||
private Array<AmmoEntry> ammos = new Array<>();
|
||||
private int totalAmmo;
|
||||
private ItemStack item = new ItemStack(Items.stone, 0);
|
||||
|
||||
public UnitInventory(Unit unit){
|
||||
|
|
@ -30,90 +25,19 @@ public class UnitInventory implements Saveable{
|
|||
public void writeSave(DataOutput stream) throws IOException{
|
||||
stream.writeShort(item.amount);
|
||||
stream.writeByte(item.item.id);
|
||||
stream.writeShort(totalAmmo);
|
||||
stream.writeByte(ammos.size);
|
||||
for(int i = 0; i < ammos.size; i++){
|
||||
stream.writeByte(ammos.get(i).type.id);
|
||||
stream.writeShort(ammos.get(i).amount);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void readSave(DataInput stream) throws IOException{
|
||||
short iamount = stream.readShort();
|
||||
byte iid = stream.readByte();
|
||||
this.totalAmmo = stream.readShort();
|
||||
byte ammoa = stream.readByte();
|
||||
for(int i = 0; i < ammoa; i++){
|
||||
byte aid = stream.readByte();
|
||||
int am = stream.readShort();
|
||||
ammos.add(new AmmoEntry(AmmoType.getByID(aid), am));
|
||||
}
|
||||
|
||||
item.item = Item.getByID(iid);
|
||||
item.amount = iamount;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns ammo range, or MAX_VALUE if this inventory has no ammo.
|
||||
*/
|
||||
public float getAmmoRange(){
|
||||
return hasAmmo() ? getAmmo().getRange() : Float.MAX_VALUE;
|
||||
}
|
||||
|
||||
public AmmoType getAmmo(){
|
||||
return ammos.size == 0 ? null : ammos.peek().type;
|
||||
}
|
||||
|
||||
public boolean hasAmmo(){
|
||||
return totalAmmo > 0;
|
||||
}
|
||||
|
||||
public void useAmmo(){
|
||||
if(unit.isInfiniteAmmo()) return;
|
||||
AmmoEntry entry = ammos.peek();
|
||||
entry.amount--;
|
||||
if(entry.amount == 0) ammos.pop();
|
||||
totalAmmo--;
|
||||
}
|
||||
|
||||
public int totalAmmo(){
|
||||
return totalAmmo;
|
||||
}
|
||||
|
||||
public int ammoCapacity(){
|
||||
return unit.getAmmoCapacity();
|
||||
}
|
||||
|
||||
public boolean canAcceptAmmo(AmmoType type){
|
||||
return totalAmmo + type.quantityMultiplier <= unit.getAmmoCapacity();
|
||||
}
|
||||
|
||||
public void addAmmo(AmmoType type){
|
||||
if(type == null) return;
|
||||
totalAmmo += type.quantityMultiplier;
|
||||
|
||||
//find ammo entry by type
|
||||
for(int i = ammos.size - 1; i >= 0; i--){
|
||||
AmmoEntry entry = ammos.get(i);
|
||||
|
||||
//if found, put it to the right
|
||||
if(entry.type == type){
|
||||
entry.amount += type.quantityMultiplier;
|
||||
ammos.swap(i, ammos.size - 1);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
//must not be found
|
||||
AmmoEntry entry = new AmmoEntry(type, (int) type.quantityMultiplier);
|
||||
ammos.add(entry);
|
||||
}
|
||||
|
||||
public void fillAmmo(AmmoType type){
|
||||
totalAmmo = ammoCapacity();
|
||||
ammos.clear();
|
||||
ammos.add(new AmmoEntry(type, ammoCapacity()));
|
||||
public void clear(){
|
||||
item.amount = 0;
|
||||
}
|
||||
|
||||
public int capacity(){
|
||||
|
|
@ -140,12 +64,6 @@ public class UnitInventory implements Saveable{
|
|||
return (!hasItem() && amount <= unit.getItemCapacity()) || (item.item == type && item.amount + amount <= unit.getItemCapacity());
|
||||
}
|
||||
|
||||
public void clear(){
|
||||
item.amount = 0;
|
||||
ammos.clear();
|
||||
totalAmmo = 0;
|
||||
}
|
||||
|
||||
public void clearItem(){
|
||||
item.amount = 0;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -51,7 +51,7 @@ public class Units{
|
|||
* See {@link #invalidateTarget(TargetTrait, Team, float, float, float)}
|
||||
*/
|
||||
public static boolean invalidateTarget(TargetTrait target, Unit targeter){
|
||||
return invalidateTarget(target, targeter.team, targeter.x, targeter.y, targeter.inventory.getAmmoRange());
|
||||
return invalidateTarget(target, targeter.team, targeter.x, targeter.y, targeter.getWeapon().getAmmo().getRange());
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -13,41 +13,23 @@ public abstract class BulletType extends BaseBulletType<Bullet> implements Conte
|
|||
private static Array<BulletType> types = new Array<>();
|
||||
|
||||
public final int id;
|
||||
/**
|
||||
* Knockback in velocity.
|
||||
*/
|
||||
/**Knockback in velocity.*/
|
||||
public float knockback;
|
||||
/**
|
||||
* Whether this bullet hits tiles.
|
||||
*/
|
||||
/**Whether this bullet hits tiles.*/
|
||||
public boolean hitTiles = true;
|
||||
/**
|
||||
* Status effect applied on hit.
|
||||
*/
|
||||
/**Status effect applied on hit.*/
|
||||
public StatusEffect status = StatusEffects.none;
|
||||
/**
|
||||
* Intensity of applied status effect in terms of duration.
|
||||
*/
|
||||
/**Intensity of applied status effect in terms of duration.*/
|
||||
public float statusIntensity = 0.5f;
|
||||
/**
|
||||
* What fraction of armor is pierced, 0-1
|
||||
*/
|
||||
/**What fraction of armor is pierced, 0-1*/
|
||||
public float armorPierce = 0f;
|
||||
/**
|
||||
* Whether to sync this bullet to clients.
|
||||
*/
|
||||
/**Whether to sync this bullet to clients.*/
|
||||
public boolean syncable;
|
||||
/**
|
||||
* Whether this bullet type collides with tiles.
|
||||
*/
|
||||
/**Whether this bullet type collides with tiles.*/
|
||||
public boolean collidesTiles = true;
|
||||
/**
|
||||
* Whether this bullet types collides with anything at all.
|
||||
*/
|
||||
/**Whether this bullet types collides with anything at all.*/
|
||||
public boolean collides = true;
|
||||
/**
|
||||
* Whether velocity is inherited from the shooter.
|
||||
*/
|
||||
/**Whether velocity is inherited from the shooter.*/
|
||||
public boolean keepVelocity = true;
|
||||
|
||||
public BulletType(float speed, float damage){
|
||||
|
|
|
|||
|
|
@ -34,14 +34,6 @@ public class ItemTransfer extends TimedEntity implements DrawTrait{
|
|||
public ItemTransfer(){
|
||||
}
|
||||
|
||||
@Remote(called = Loc.server, unreliable = true)
|
||||
public static void transferAmmo(Item item, float x, float y, Unit to){
|
||||
if(to == null) return;
|
||||
to.addAmmo(item);
|
||||
create(item, x, y, to, () -> {
|
||||
});
|
||||
}
|
||||
|
||||
@Remote(called = Loc.server, unreliable = true)
|
||||
public static void transferItemEffect(Item item, float x, float y, Unit to){
|
||||
if(to == null) return;
|
||||
|
|
|
|||
|
|
@ -19,7 +19,6 @@ import io.anuke.mindustry.game.TeamInfo.TeamData;
|
|||
import io.anuke.mindustry.gen.Call;
|
||||
import io.anuke.mindustry.graphics.Palette;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.type.Weapon;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
|
|
@ -185,7 +184,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
|
|||
}
|
||||
|
||||
public void targetClosest(){
|
||||
target = Units.getClosestTarget(team, x, y, inventory.getAmmoRange());
|
||||
target = Units.getClosestTarget(team, x, y, getWeapon().getAmmo().getRange());
|
||||
}
|
||||
|
||||
public TileEntity getClosestEnemyCore(){
|
||||
|
|
@ -253,16 +252,6 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
|
|||
return type.itemCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAmmoCapacity(){
|
||||
return type.ammoCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isInfiniteAmmo(){
|
||||
return isWave;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void interpolate(){
|
||||
super.interpolate();
|
||||
|
|
@ -282,16 +271,6 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
|
|||
return type.armor;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptsAmmo(Item item){
|
||||
return getWeapon().getAmmoType(item) != null && inventory.canAcceptAmmo(getWeapon().getAmmoType(item));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void addAmmo(Item item){
|
||||
inventory.addAmmo(getWeapon().getAmmoType(item));
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getSize(){
|
||||
return 8;
|
||||
|
|
|
|||
|
|
@ -28,22 +28,6 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{
|
|||
protected CarriableTrait carrying;
|
||||
protected final UnitState
|
||||
|
||||
resupply = new UnitState(){
|
||||
public void entered(){
|
||||
target = null;
|
||||
}
|
||||
|
||||
public void update(){
|
||||
if(inventory.totalAmmo() + 10 >= inventory.ammoCapacity()){
|
||||
state.set(attack);
|
||||
}else if(!targetHasFlag(BlockFlag.resupplyPoint)){
|
||||
retarget(() -> targetClosestAllyFlag(BlockFlag.resupplyPoint));
|
||||
}else{
|
||||
circle(20f);
|
||||
}
|
||||
}
|
||||
},
|
||||
|
||||
idle = new UnitState(){
|
||||
public void update(){
|
||||
if(!isCommanded()){
|
||||
|
|
@ -75,9 +59,7 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{
|
|||
target = null;
|
||||
}
|
||||
|
||||
if(!inventory.hasAmmo()){
|
||||
state.set(resupply);
|
||||
}else if(target == null){
|
||||
if(target == null){
|
||||
retarget(() -> {
|
||||
targetClosest();
|
||||
if(target == null) targetClosestEnemyFlag(BlockFlag.target);
|
||||
|
|
@ -91,10 +73,9 @@ public abstract class FlyingUnit extends BaseUnit implements CarryTrait{
|
|||
}else{
|
||||
attack(150f);
|
||||
|
||||
if((Mathf.angNear(angleTo(target), rotation, 15f) || !inventory.getAmmo().bullet.keepVelocity) //bombers don't care about rotation
|
||||
&& distanceTo(target) < inventory.getAmmo().getRange()){
|
||||
AmmoType ammo = inventory.getAmmo();
|
||||
inventory.useAmmo();
|
||||
if((Mathf.angNear(angleTo(target), rotation, 15f) || !getWeapon().getAmmo().bullet.keepVelocity) //bombers don't care about rotation
|
||||
&& distanceTo(target) < getWeapon().getAmmo().getRange()){
|
||||
AmmoType ammo = getWeapon().getAmmo();
|
||||
|
||||
Vector2 to = Predict.intercept(FlyingUnit.this, target, ammo.bullet.speed);
|
||||
|
||||
|
|
|
|||
|
|
@ -12,11 +12,9 @@ import io.anuke.mindustry.type.Upgrade;
|
|||
import io.anuke.mindustry.type.Weapon;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.Floor;
|
||||
import io.anuke.mindustry.world.meta.BlockFlag;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.Geometry;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
import io.anuke.ucore.util.Translator;
|
||||
|
||||
|
|
@ -35,24 +33,6 @@ public abstract class GroundUnit extends BaseUnit{
|
|||
|
||||
public final UnitState
|
||||
|
||||
resupply = new UnitState(){
|
||||
public void entered(){
|
||||
target = null;
|
||||
}
|
||||
|
||||
public void update(){
|
||||
Tile tile = Geometry.findClosest(x, y, world.indexer().getAllied(team, BlockFlag.resupplyPoint));
|
||||
|
||||
if(tile != null && distanceTo(tile) > 40){
|
||||
moveAwayFromCore();
|
||||
}
|
||||
|
||||
//TODO move toward resupply point
|
||||
if(isWave || inventory.totalAmmo() + 10 >= inventory.ammoCapacity()){
|
||||
state.set(attack);
|
||||
}
|
||||
}
|
||||
},
|
||||
attack = new UnitState(){
|
||||
public void entered(){
|
||||
target = null;
|
||||
|
|
@ -62,17 +42,15 @@ public abstract class GroundUnit extends BaseUnit{
|
|||
TileEntity core = getClosestEnemyCore();
|
||||
float dst = core == null ? 0 : distanceTo(core);
|
||||
|
||||
if(core != null && inventory.hasAmmo() && dst < inventory.getAmmo().getRange() / 1.1f){
|
||||
if(core != null && dst < getWeapon().getAmmo().getRange() / 1.1f){
|
||||
target = core;
|
||||
}else{
|
||||
retarget(() -> targetClosest());
|
||||
}
|
||||
|
||||
if(!inventory.hasAmmo()){
|
||||
state.set(resupply);
|
||||
}else if(target != null){
|
||||
if(target != null){
|
||||
if(core != null){
|
||||
if(dst > inventory.getAmmo().getRange() * 0.5f){
|
||||
if(dst > getWeapon().getAmmo().getRange() * 0.5f){
|
||||
moveToCore();
|
||||
}
|
||||
|
||||
|
|
@ -80,11 +58,11 @@ public abstract class GroundUnit extends BaseUnit{
|
|||
moveToCore();
|
||||
}
|
||||
|
||||
if(distanceTo(target) < inventory.getAmmo().getRange()){
|
||||
if(distanceTo(target) < getWeapon().getAmmo().getRange()){
|
||||
rotate(angleTo(target));
|
||||
|
||||
if(Mathf.angNear(angleTo(target), rotation, 13f)){
|
||||
AmmoType ammo = inventory.getAmmo();
|
||||
AmmoType ammo = getWeapon().getAmmo();
|
||||
|
||||
Vector2 to = Predict.intercept(GroundUnit.this, target, ammo.bullet.speed);
|
||||
|
||||
|
|
@ -143,14 +121,14 @@ public abstract class GroundUnit extends BaseUnit{
|
|||
|
||||
@Override
|
||||
public UnitState getStartState(){
|
||||
return resupply;
|
||||
return attack;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(){
|
||||
super.update();
|
||||
|
||||
if(!velocity.isZero(0.0001f) && (target == null || !inventory.hasAmmo() || (inventory.hasAmmo() && distanceTo(target) > inventory.getAmmoRange()))){
|
||||
if(!velocity.isZero(0.0001f) && (target == null || (distanceTo(target) > getWeapon().getAmmo().getRange()))){
|
||||
rotation = Mathf.slerpDelta(rotation, velocity.angle(), 0.2f);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package io.anuke.mindustry.entities.units;
|
|||
import io.anuke.mindustry.Vars;
|
||||
import io.anuke.mindustry.content.Items;
|
||||
import io.anuke.mindustry.entities.effect.ItemDrop;
|
||||
import io.anuke.mindustry.game.Team;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
|
|
@ -11,7 +12,7 @@ public class UnitDrops{
|
|||
private static Item[] dropTable;
|
||||
|
||||
public static void dropItems(BaseUnit unit){
|
||||
if(Vars.itemGroup.size() > maxItems){
|
||||
if(Vars.itemGroup.size() > maxItems || unit.getTeam() != Team.red){
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -395,11 +395,6 @@ public class Drone extends FlyingUnit implements BuilderTrait{
|
|||
return isBuilding() ? placeDistance * 2f : 30f;
|
||||
}
|
||||
|
||||
@Override
|
||||
public float getAmmoFraction(){
|
||||
return inventory.getItem().amount / (float) type.itemCapacity;
|
||||
}
|
||||
|
||||
protected void findItem(){
|
||||
TileEntity entity = getClosestCore();
|
||||
if(entity == null){
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package io.anuke.mindustry.game;
|
|||
import io.anuke.mindustry.entities.units.BaseUnit;
|
||||
import io.anuke.mindustry.entities.units.GroundUnit;
|
||||
import io.anuke.mindustry.entities.units.UnitType;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.type.StatusEffect;
|
||||
import io.anuke.mindustry.type.Weapon;
|
||||
|
|
@ -62,10 +61,6 @@ public class SpawnGroup{
|
|||
* Items this unit spawns with. Null to disable.
|
||||
*/
|
||||
protected ItemStack items;
|
||||
/**
|
||||
* Ammo type this unit spawns with. Null to use the first available ammo.
|
||||
*/
|
||||
protected Item ammoItem;
|
||||
|
||||
public SpawnGroup(UnitType type){
|
||||
this.type = type;
|
||||
|
|
@ -114,12 +109,6 @@ public class SpawnGroup{
|
|||
unit.inventory.addItem(items.item, items.amount);
|
||||
}
|
||||
|
||||
if(ammoItem != null){
|
||||
unit.inventory.addAmmo(unit.getWeapon().getAmmoType(ammoItem));
|
||||
}else{
|
||||
unit.inventory.addAmmo(unit.getWeapon().getAmmoType(unit.getWeapon().getAcceptedItems().iterator().next()));
|
||||
}
|
||||
|
||||
return unit;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -41,7 +41,6 @@ public class Waves{
|
|||
unitScaling = 2;
|
||||
unitAmount = 1;
|
||||
spacing = 2;
|
||||
ammoItem = Items.tungsten;
|
||||
end = 30;
|
||||
}},
|
||||
|
||||
|
|
@ -86,7 +85,6 @@ public class Waves{
|
|||
groupAmount = 2;
|
||||
unitScaling = 3;
|
||||
effect = StatusEffects.overdrive;
|
||||
ammoItem = Items.silicon;
|
||||
}},
|
||||
|
||||
new SpawnGroup(UnitTypes.dagger){{
|
||||
|
|
@ -95,7 +93,6 @@ public class Waves{
|
|||
unitAmount = 1;
|
||||
unitScaling = 3;
|
||||
effect = StatusEffects.shielded;
|
||||
ammoItem = Items.thorium;
|
||||
max = 10;
|
||||
}},
|
||||
|
||||
|
|
@ -121,7 +118,6 @@ public class Waves{
|
|||
|
||||
new SpawnGroup(UnitTypes.monsoon){{
|
||||
begin = 40;
|
||||
ammoItem = Items.blastCompound;
|
||||
unitAmount = 2;
|
||||
spacing = 2;
|
||||
unitScaling = 3;
|
||||
|
|
@ -140,7 +136,6 @@ public class Waves{
|
|||
|
||||
new SpawnGroup(UnitTypes.monsoon){{
|
||||
begin = 53;
|
||||
ammoItem = Items.pyratite;
|
||||
unitAmount = 2;
|
||||
unitScaling = 3;
|
||||
spacing = 4;
|
||||
|
|
@ -150,7 +145,6 @@ public class Waves{
|
|||
|
||||
new SpawnGroup(UnitTypes.monsoon){{
|
||||
begin = 53;
|
||||
ammoItem = Items.coal;
|
||||
unitAmount = 2;
|
||||
unitScaling = 3;
|
||||
spacing = 4;
|
||||
|
|
@ -176,10 +170,6 @@ public class Waves{
|
|||
System.out.print(":" + spawn.weapon.name);
|
||||
}
|
||||
|
||||
if(spawn.ammoItem != null){
|
||||
System.out.print(":" + spawn.ammoItem.name);
|
||||
}
|
||||
|
||||
System.out.print(" ");
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,14 +7,12 @@ import com.badlogic.gdx.utils.Array;
|
|||
import io.anuke.mindustry.content.blocks.Blocks;
|
||||
import io.anuke.mindustry.entities.Player;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.entities.Unit;
|
||||
import io.anuke.mindustry.game.TeamInfo.TeamData;
|
||||
import io.anuke.mindustry.input.InputHandler;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockBar;
|
||||
import io.anuke.ucore.core.Graphics;
|
||||
import io.anuke.ucore.core.Settings;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.graphics.Fill;
|
||||
|
|
@ -176,32 +174,7 @@ public class OverlayRenderer{
|
|||
Draw.color();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
if((!debug || showUI) && Settings.getBool("healthbars")){
|
||||
for(TeamData ally : (debug ? state.teams.getTeams() : state.teams.getTeams(true))){
|
||||
renderer.drawAndInterpolate(unitGroups[ally.team.ordinal()], u -> !u.isDead(), this::drawStats);
|
||||
}
|
||||
|
||||
renderer.drawAndInterpolate(playerGroup, u -> !u.isDead(), this::drawStats);
|
||||
}
|
||||
}
|
||||
|
||||
void drawStats(Unit unit){
|
||||
if(unit.isDead()) return;
|
||||
|
||||
float x = unit.x;
|
||||
float y = unit.y;
|
||||
|
||||
if(unit == players[0] && players.length == 1 && snapCamera){
|
||||
x = (int) (x + 0.0001f);
|
||||
y = (int) (y + 0.0001f);
|
||||
}
|
||||
|
||||
drawEncloser(x, y - 9f, 2f);
|
||||
drawBar(Palette.healthstats, x, y - 8f, unit.healthf());
|
||||
drawBar(Palette.ammo, x, y - 9f, unit.getAmmoFraction());
|
||||
}
|
||||
|
||||
void drawBar(Color color, float x, float y, float finion){
|
||||
|
|
|
|||
|
|
@ -3,70 +3,72 @@ package io.anuke.mindustry.graphics;
|
|||
import com.badlogic.gdx.graphics.Color;
|
||||
|
||||
public class Palette{
|
||||
public static final Color command = Color.valueOf("eab678");
|
||||
public static final Color
|
||||
|
||||
public static final Color bulletYellow = Color.valueOf("ffeec9");
|
||||
public static final Color bulletYellowBack = Color.valueOf("f9c87a");
|
||||
command = Color.valueOf("eab678"),
|
||||
|
||||
public static final Color missileYellow = Color.valueOf("ffd2ae");
|
||||
public static final Color missileYellowBack = Color.valueOf("e58956");
|
||||
bulletYellow = Color.valueOf("ffeec9"),
|
||||
bulletYellowBack = Color.valueOf("f9c87a"),
|
||||
|
||||
public static final Color plastaniumBack = Color.valueOf("d8d97f");
|
||||
public static final Color plastaniumFront = Color.valueOf("fffac6");
|
||||
missileYellow = Color.valueOf("ffd2ae"),
|
||||
missileYellowBack = Color.valueOf("e58956"),
|
||||
|
||||
public static final Color lightFlame = Color.valueOf("ffdd55");
|
||||
public static final Color darkFlame = Color.valueOf("db401c");
|
||||
plastaniumBack = Color.valueOf("d8d97f"),
|
||||
plastaniumFront = Color.valueOf("fffac6"),
|
||||
|
||||
public static final Color turretHeat = Color.valueOf("ab3400");
|
||||
lightFlame = Color.valueOf("ffdd55"),
|
||||
darkFlame = Color.valueOf("db401c"),
|
||||
|
||||
public static final Color lightOrange = Color.valueOf("f68021");
|
||||
public static final Color lightishOrange = Color.valueOf("f8ad42");
|
||||
public static final Color lighterOrange = Color.valueOf("f6e096");
|
||||
turretHeat = Color.valueOf("ab3400"),
|
||||
|
||||
public static final Color lightishGray = Color.valueOf("a2a2a2");
|
||||
public static final Color darkishGray = new Color(0.3f, 0.3f, 0.3f, 1f);
|
||||
lightOrange = Color.valueOf("f68021"),
|
||||
lightishOrange = Color.valueOf("f8ad42"),
|
||||
lighterOrange = Color.valueOf("f6e096"),
|
||||
|
||||
public static final Color lancerLaser = Color.valueOf("a9d8ff");
|
||||
lightishGray = Color.valueOf("a2a2a2"),
|
||||
darkishGray = new Color(0.3f, 0.3f, 0.3f, 1f),
|
||||
|
||||
public static final Color stoneGray = Color.valueOf("8f8f8f");
|
||||
lancerLaser = Color.valueOf("a9d8ff"),
|
||||
|
||||
public static final Color portalLight = Color.valueOf("9054ea");
|
||||
public static final Color portal = Color.valueOf("6344d7");
|
||||
public static final Color portalDark = Color.valueOf("3f3dac");
|
||||
stoneGray = Color.valueOf("8f8f8f"),
|
||||
|
||||
public static final Color powerLaserFrom = Color.valueOf("e3e3e3");
|
||||
public static final Color powerLaserTo = Color.valueOf("ffe7a8");
|
||||
portalLight = Color.valueOf("9054ea"),
|
||||
portal = Color.valueOf("6344d7"),
|
||||
portalDark = Color.valueOf("3f3dac"),
|
||||
|
||||
public static final Color description = Color.WHITE;
|
||||
public static final Color turretinfo = Color.ORANGE;
|
||||
public static final Color iteminfo = Color.LIGHT_GRAY;
|
||||
public static final Color powerinfo = Color.YELLOW;
|
||||
public static final Color liquidinfo = Color.ROYAL;
|
||||
public static final Color craftinfo = Color.LIGHT_GRAY;
|
||||
powerLaserFrom = Color.valueOf("e3e3e3"),
|
||||
powerLaserTo = Color.valueOf("ffe7a8"),
|
||||
|
||||
public static final Color missingitems = Color.SCARLET;
|
||||
public static final Color health = Color.YELLOW;
|
||||
public static final Color ammo = Color.valueOf("32cf6d");
|
||||
public static final Color healthstats = Color.SCARLET;
|
||||
public static final Color bar = Color.SLATE;
|
||||
public static final Color interact = Color.ORANGE;
|
||||
public static final Color accent = Color.valueOf("f4ba6e");
|
||||
public static final Color place = Color.valueOf("6335f8");
|
||||
public static final Color remove = Color.valueOf("e55454");
|
||||
public static final Color placeRotate = accent;
|
||||
public static final Color breakInvalid = Color.valueOf("d44b3d");
|
||||
public static final Color range = Color.valueOf("f4ba6e");
|
||||
public static final Color power = Color.valueOf("fbd367");
|
||||
public static final Color placing = Color.valueOf("616161");
|
||||
description = Color.WHITE,
|
||||
turretinfo = Color.ORANGE,
|
||||
iteminfo = Color.LIGHT_GRAY,
|
||||
powerinfo = Color.YELLOW,
|
||||
liquidinfo = Color.ROYAL,
|
||||
craftinfo = Color.LIGHT_GRAY,
|
||||
|
||||
public static final Color lightTrail = Color.valueOf("ffe2a9");
|
||||
missingitems = Color.SCARLET,
|
||||
health = Color.YELLOW,
|
||||
ammo = Color.valueOf("32cf6d"),
|
||||
healthstats = Color.SCARLET,
|
||||
bar = Color.SLATE,
|
||||
interact = Color.ORANGE,
|
||||
accent = Color.valueOf("f4ba6e"),
|
||||
place = Color.valueOf("6335f8"),
|
||||
remove = Color.valueOf("e55454"),
|
||||
placeRotate = accent,
|
||||
breakInvalid = Color.valueOf("d44b3d"),
|
||||
range = Color.valueOf("f4ba6e"),
|
||||
power = Color.valueOf("fbd367"),
|
||||
placing = Color.valueOf("616161"),
|
||||
|
||||
public static final Color redSpark = Color.valueOf("fbb97f");
|
||||
public static final Color orangeSpark = Color.valueOf("d2b29c");
|
||||
lightTrail = Color.valueOf("ffe2a9"),
|
||||
|
||||
public static final Color redDust = Color.valueOf("ffa480");
|
||||
public static final Color redderDust = Color.valueOf("ff7b69");
|
||||
redSpark = Color.valueOf("fbb97f"),
|
||||
orangeSpark = Color.valueOf("d2b29c"),
|
||||
|
||||
public static final Color plasticSmoke = Color.valueOf("f1e479");
|
||||
public static final Color plasticBurn = Color.valueOf("e9ead3");
|
||||
redDust = Color.valueOf("ffa480"),
|
||||
redderDust = Color.valueOf("ff7b69"),
|
||||
|
||||
plasticSmoke = Color.valueOf("f1e479"),
|
||||
plasticBurn = Color.valueOf("e9ead3");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,7 +16,7 @@ public class DefaultKeybinds{
|
|||
for(String section : sections){
|
||||
|
||||
KeyBinds.defaultSection(section, DeviceType.keyboard,
|
||||
new Category("General"),
|
||||
new Category("general"),
|
||||
"move_x", new Axis(Input.A, Input.D),
|
||||
"move_y", new Axis(Input.S, Input.W),
|
||||
//"select", Input.MOUSE_LEFT,
|
||||
|
|
@ -25,14 +25,14 @@ public class DefaultKeybinds{
|
|||
"rotate", new Axis(Input.SCROLL),
|
||||
"dash", Input.SHIFT_LEFT,
|
||||
"drop_unit", Input.SHIFT_LEFT,
|
||||
new Category("View"),
|
||||
new Category("view"),
|
||||
"zoom_hold", Input.CONTROL_LEFT,
|
||||
"zoom", new Axis(Input.SCROLL),
|
||||
"zoom_minimap", new Axis(Input.MINUS, Input.PLUS),
|
||||
"menu", Gdx.app.getType() == ApplicationType.Android ? Input.BACK : Input.ESCAPE,
|
||||
"pause", Input.SPACE,
|
||||
"toggle_menus", Input.C,
|
||||
new Category("Multiplayer"),
|
||||
new Category("multiplayer"),
|
||||
"player_list", Input.TAB,
|
||||
"chat", Input.ENTER,
|
||||
"chat_history_prev", Input.UP,
|
||||
|
|
@ -42,7 +42,7 @@ public class DefaultKeybinds{
|
|||
);
|
||||
|
||||
KeyBinds.defaultSection(section, DeviceType.controller,
|
||||
new Category("General"),
|
||||
new Category("general"),
|
||||
"move_x", new Axis(Input.CONTROLLER_L_STICK_HORIZONTAL_AXIS),
|
||||
"move_y", new Axis(Input.CONTROLLER_L_STICK_VERTICAL_AXIS),
|
||||
"cursor_x", new Axis(Input.CONTROLLER_R_STICK_HORIZONTAL_AXIS),
|
||||
|
|
@ -53,12 +53,12 @@ public class DefaultKeybinds{
|
|||
"dash", Input.CONTROLLER_Y,
|
||||
"rotate_alt", new Axis(Input.CONTROLLER_DPAD_RIGHT, Input.CONTROLLER_DPAD_LEFT),
|
||||
"rotate", new Axis(Input.CONTROLLER_A, Input.CONTROLLER_B),
|
||||
new Category("View"),
|
||||
new Category("view"),
|
||||
"zoom_hold", Input.ANY_KEY,
|
||||
"zoom", new Axis(Input.CONTROLLER_DPAD_DOWN, Input.CONTROLLER_DPAD_UP),
|
||||
"menu", Input.CONTROLLER_X,
|
||||
"pause", Input.CONTROLLER_L_TRIGGER,
|
||||
new Category("Multiplayer"),
|
||||
new Category("multiplayer"),
|
||||
"player_list", Input.CONTROLLER_START
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -76,7 +76,9 @@ public class Save16 extends SaveFileVersion{
|
|||
short width = stream.readShort();
|
||||
short height = stream.readShort();
|
||||
|
||||
if(map == null){
|
||||
if(world.getSector() != null){
|
||||
world.setMap(new Map("Sector " + world.getSector().x + ", " + world.getSector().y, width, height));
|
||||
}else if(map == null){
|
||||
world.setMap(new Map("unknown", width, height));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -15,7 +15,6 @@ import io.anuke.mindustry.world.Block;
|
|||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.blocks.defense.turrets.ItemTurret;
|
||||
import io.anuke.mindustry.world.blocks.defense.turrets.PowerTurret;
|
||||
import io.anuke.mindustry.world.blocks.units.ResupplyPoint;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
import static io.anuke.mindustry.Vars.world;
|
||||
|
|
@ -186,7 +185,6 @@ public class FortressGenerator{
|
|||
}
|
||||
|
||||
Block fixBlock(Block result){
|
||||
if(result == UnitBlocks.resupplyPoint) result = DefenseBlocks.tungstenWall;
|
||||
if(result == UnitBlocks.dronePad) result = DefenseBlocks.tungstenWallLarge;
|
||||
if(result == UnitBlocks.fabricatorPad) result = DefenseBlocks.tungstenWallLarge;
|
||||
return result;
|
||||
|
|
@ -201,8 +199,6 @@ public class FortressGenerator{
|
|||
ItemTurret turret = (ItemTurret)block;
|
||||
AmmoType[] type = turret.getAmmoTypes();
|
||||
block.handleStack(type[0].item, block.acceptStack(type[0].item, 1000, tile, null), tile, null);
|
||||
}else if(block instanceof ResupplyPoint){
|
||||
tile.entity.items.add(Items.lead, tile.block().itemCapacity);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package io.anuke.mindustry.type;
|
||||
|
||||
import com.badlogic.gdx.graphics.g2d.TextureRegion;
|
||||
import com.badlogic.gdx.utils.OrderedMap;
|
||||
import io.anuke.annotations.Annotations.Loc;
|
||||
import io.anuke.annotations.Annotations.Remote;
|
||||
import io.anuke.mindustry.Vars;
|
||||
|
|
@ -19,64 +18,37 @@ import io.anuke.ucore.util.Mathf;
|
|||
import io.anuke.ucore.util.Translator;
|
||||
|
||||
public class Weapon extends Upgrade{
|
||||
/**
|
||||
* minimum cursor distance from player, fixes 'cross-eyed' shooting.
|
||||
*/
|
||||
/**minimum cursor distance from player, fixes 'cross-eyed' shooting.*/
|
||||
protected static float minPlayerDist = 20f;
|
||||
public TextureRegion equipRegion, region;
|
||||
/**
|
||||
* ammo type map. set with setAmmo()
|
||||
*/
|
||||
protected OrderedMap<Item, AmmoType> ammoMap = new OrderedMap<>();
|
||||
/**
|
||||
* shell ejection effect
|
||||
*/
|
||||
/**ammo type map. set with setAmmo()*/
|
||||
protected AmmoType ammo;
|
||||
/**shell ejection effect*/
|
||||
protected Effect ejectEffect = Fx.none;
|
||||
/**
|
||||
* weapon reload in frames
|
||||
*/
|
||||
/**weapon reload in frames*/
|
||||
protected float reload;
|
||||
/**
|
||||
* amount of shots per fire
|
||||
*/
|
||||
/**amount of shots per fire*/
|
||||
protected int shots = 1;
|
||||
/**
|
||||
* spacing in degrees between multiple shots, if applicable
|
||||
*/
|
||||
/**spacing in degrees between multiple shots, if applicable*/
|
||||
protected float spacing = 12f;
|
||||
/**
|
||||
* inaccuracy of degrees of each shot
|
||||
*/
|
||||
/**inaccuracy of degrees of each shot*/
|
||||
protected float inaccuracy = 0f;
|
||||
/**
|
||||
* intensity and duration of each shot's screen shake
|
||||
*/
|
||||
/**intensity and duration of each shot's screen shake*/
|
||||
protected float shake = 0f;
|
||||
/**
|
||||
* visual weapon knockback.
|
||||
*/
|
||||
/**visual weapon knockback.*/
|
||||
protected float recoil = 1.5f;
|
||||
/**
|
||||
* shoot barrel y offset
|
||||
*/
|
||||
/**shoot barrel y offset*/
|
||||
protected float length = 3f;
|
||||
/**
|
||||
* shoot barrel x offset.
|
||||
*/
|
||||
/**shoot barrel x offset.*/
|
||||
protected float width = 4f;
|
||||
/**
|
||||
* fraction of velocity that is random
|
||||
*/
|
||||
/**fraction of velocity that is random*/
|
||||
protected float velocityRnd = 0f;
|
||||
/**
|
||||
* whether to shoot the weapons in different arms one after another, rather than all at once
|
||||
*/
|
||||
/**whether to shoot the weapons in different arms one after another, rather than all at once*/
|
||||
protected boolean roundrobin = false;
|
||||
/**
|
||||
* translator for vector calulations
|
||||
*/
|
||||
/**translator for vector calulations*/
|
||||
protected Translator tr = new Translator();
|
||||
|
||||
public TextureRegion equipRegion, region;
|
||||
|
||||
protected Weapon(String name){
|
||||
super(name);
|
||||
}
|
||||
|
|
@ -103,12 +75,9 @@ public class Weapon extends Upgrade{
|
|||
Weapon weapon = shooter.getWeapon();
|
||||
|
||||
Angles.shotgun(weapon.shots, weapon.spacing, rotation, f -> weapon.bullet(shooter, x, y, f + Mathf.range(weapon.inaccuracy)));
|
||||
AmmoType ammo = weapon.ammo;
|
||||
|
||||
AmmoType type = shooter.getInventory().getAmmo();
|
||||
|
||||
if(type == null) return;
|
||||
|
||||
weapon.tr.trns(rotation + 180f, type.recoil);
|
||||
weapon.tr.trns(rotation + 180f, ammo.recoil);
|
||||
|
||||
shooter.getVelocity().add(weapon.tr);
|
||||
|
||||
|
|
@ -116,8 +85,8 @@ public class Weapon extends Upgrade{
|
|||
|
||||
Effects.shake(weapon.shake, weapon.shake, x, y);
|
||||
Effects.effect(weapon.ejectEffect, x, y, rotation * -Mathf.sign(left));
|
||||
Effects.effect(type.shootEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter);
|
||||
Effects.effect(type.smokeEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter);
|
||||
Effects.effect(ammo.shootEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter);
|
||||
Effects.effect(ammo.smokeEffect, x + weapon.tr.x, y + weapon.tr.y, rotation, shooter);
|
||||
|
||||
//reset timer for remote players
|
||||
shooter.getTimer().get(shooter.getShootTimer(left), weapon.reload);
|
||||
|
|
@ -134,13 +103,17 @@ public class Weapon extends Upgrade{
|
|||
return "weapon";
|
||||
}
|
||||
|
||||
public AmmoType getAmmo(){
|
||||
return ammo;
|
||||
}
|
||||
|
||||
public void update(ShooterTrait shooter, float pointerX, float pointerY){
|
||||
update(shooter, true, pointerX, pointerY);
|
||||
update(shooter, false, pointerX, pointerY);
|
||||
}
|
||||
|
||||
private void update(ShooterTrait shooter, boolean left, float pointerX, float pointerY){
|
||||
if(shooter.getInventory().hasAmmo() && shooter.getTimer().get(shooter.getShootTimer(left), reload)){
|
||||
if(shooter.getTimer().get(shooter.getShootTimer(left), reload)){
|
||||
if(roundrobin){
|
||||
shooter.getTimer().reset(shooter.getShootTimer(!left), reload / 2f);
|
||||
}
|
||||
|
|
@ -180,29 +153,13 @@ public class Weapon extends Upgrade{
|
|||
Call.onGenericShootWeapon(p, x, y, angle, left);
|
||||
}
|
||||
}
|
||||
|
||||
p.getInventory().useAmmo();
|
||||
}
|
||||
|
||||
public Iterable<Item> getAcceptedItems(){
|
||||
return ammoMap.orderedKeys();
|
||||
}
|
||||
|
||||
public AmmoType getAmmoType(Item item){
|
||||
return ammoMap.get(item);
|
||||
}
|
||||
|
||||
protected void setAmmo(AmmoType... types){
|
||||
for(AmmoType type : types){
|
||||
ammoMap.put(type.item, type);
|
||||
}
|
||||
}
|
||||
|
||||
void bullet(ShooterTrait owner, float x, float y, float angle){
|
||||
if(owner == null || !owner.getInventory().hasAmmo()) return;
|
||||
if(owner == null) return;
|
||||
|
||||
tr.trns(angle, 3f);
|
||||
Bullet.create(owner.getInventory().getAmmo().bullet,
|
||||
Bullet.create(ammo.bullet,
|
||||
owner, owner.getTeam(), x + tr.x, y + tr.y, angle, (1f - velocityRnd) + Mathf.random(velocityRnd));
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -145,7 +145,6 @@ public class DebugFragment extends Fragment{
|
|||
for(UnitType type : UnitType.all()){
|
||||
dialog.content().addImageButton("white", 40, () -> {
|
||||
BaseUnit unit = type.create(player.getTeam());
|
||||
unit.inventory.addAmmo(type.weapon.getAmmoType(type.weapon.getAcceptedItems().iterator().next()));
|
||||
unit.setWave();
|
||||
unit.set(player.x, player.y);
|
||||
unit.add();
|
||||
|
|
|
|||
|
|
@ -217,6 +217,9 @@ public class BuildBlock extends Block{
|
|||
|
||||
if(recipe != null){
|
||||
ItemStack[] requirements = recipe.requirements;
|
||||
if(requirements.length != accumulator.length || totalAccumulator.length != requirements.length){
|
||||
setDeconstruct(previous);
|
||||
}
|
||||
|
||||
for(int i = 0; i < requirements.length; i++){
|
||||
accumulator[i] += Math.min(requirements[i].amount * amount / 2f, requirements[i].amount/2f - totalAccumulator[i]); //add scaled amount progressed to the accumulator
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
package io.anuke.mindustry.world.blocks;
|
||||
|
||||
import io.anuke.mindustry.content.blocks.Blocks;
|
||||
|
||||
public class Ore extends Floor{
|
||||
|
||||
public Ore(String name){
|
||||
super(name);
|
||||
blends = block -> block != this && block != Blocks.stone;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -14,7 +14,7 @@ public class OreBlock extends Floor{
|
|||
|
||||
public OreBlock(Item ore, Floor base){
|
||||
super("ore-" + ore.name + "-" + base.name);
|
||||
this.formalName = ore.name + " " + base.formalName;
|
||||
this.formalName = ore.localizedName() + " " + base.formalName;
|
||||
this.drops = new ItemStack(ore, 1);
|
||||
this.base = base;
|
||||
this.variants = 3;
|
||||
|
|
|
|||
|
|
@ -227,7 +227,7 @@ public class PowerNode extends PowerBlock{
|
|||
}
|
||||
|
||||
protected boolean shouldDistribute(Tile tile, Tile other){
|
||||
return other != null && other.getTeamID() == tile.getTeamID() && other.entity.power.amount / other.block().powerCapacity <= tile.entity.power.amount / powerCapacity &&
|
||||
return other != null && other.entity != null && other.block().hasPower && other.getTeamID() == tile.getTeamID() && other.entity.power.amount / other.block().powerCapacity <= tile.entity.power.amount / powerCapacity &&
|
||||
!(other.block() instanceof PowerGenerator); //do not distribute to power generators
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -235,25 +235,6 @@ public class CoreBlock extends StorageBlock{
|
|||
|
||||
entity.heat = Mathf.lerpDelta(entity.heat, 0f, 0.1f);
|
||||
}
|
||||
|
||||
if(entity.solid && tile.entity.timer.get(timerSupply, supplyInterval)){
|
||||
rect.setSize(supplyRadius * 2).setCenter(tile.drawx(), tile.drawy());
|
||||
|
||||
Units.getNearby(tile.getTeam(), rect, unit -> {
|
||||
if(unit.isDead() || unit.distanceTo(tile.drawx(), tile.drawy()) > supplyRadius || unit.getGroup() == null)
|
||||
return;
|
||||
|
||||
for(int i = 0; i < Item.all().size; i++){
|
||||
Item item = Item.getByID(i);
|
||||
if(tile.entity.items.get(item) > 0 && unit.acceptsAmmo(item)){
|
||||
tile.entity.items.remove(item, 1);
|
||||
unit.addAmmo(item);
|
||||
Call.transferAmmo(item, tile.drawx(), tile.drawy(), unit);
|
||||
return;
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -261,19 +242,6 @@ public class CoreBlock extends StorageBlock{
|
|||
return new CoreEntity();
|
||||
}
|
||||
|
||||
/*
|
||||
@Remote(called = Loc.server)
|
||||
public static void onCoreUnitSet(Tile tile, Unit player){
|
||||
CoreEntity entity = tile.entity();
|
||||
entity.currentUnit = player;
|
||||
entity.progress = 0f;
|
||||
player.set(tile.drawx(), tile.drawy());
|
||||
|
||||
if(player instanceof Player){
|
||||
((Player) player).setRespawning(true);
|
||||
}
|
||||
}
|
||||
*/
|
||||
public class CoreEntity extends TileEntity implements SpawnerTrait{
|
||||
public Unit currentUnit;
|
||||
int droneID = -1;
|
||||
|
|
|
|||
|
|
@ -1,144 +0,0 @@
|
|||
package io.anuke.mindustry.world.blocks.units;
|
||||
|
||||
import com.badlogic.gdx.math.Rectangle;
|
||||
import com.badlogic.gdx.math.Vector2;
|
||||
import io.anuke.mindustry.entities.TileEntity;
|
||||
import io.anuke.mindustry.entities.Unit;
|
||||
import io.anuke.mindustry.entities.Units;
|
||||
import io.anuke.mindustry.graphics.Layer;
|
||||
import io.anuke.mindustry.graphics.Palette;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.world.Block;
|
||||
import io.anuke.mindustry.world.Tile;
|
||||
import io.anuke.mindustry.world.meta.BlockFlag;
|
||||
import io.anuke.ucore.core.Timers;
|
||||
import io.anuke.ucore.graphics.Draw;
|
||||
import io.anuke.ucore.graphics.Lines;
|
||||
import io.anuke.ucore.graphics.Shapes;
|
||||
import io.anuke.ucore.util.Angles;
|
||||
import io.anuke.ucore.util.EnumSet;
|
||||
import io.anuke.ucore.util.Mathf;
|
||||
|
||||
public class ResupplyPoint extends Block{
|
||||
private static Rectangle rect = new Rectangle();
|
||||
|
||||
protected int timerSupply = timers++;
|
||||
protected int timerTarget = timers++;
|
||||
|
||||
protected float supplyRadius = 50f;
|
||||
protected float supplyInterval = 10f;
|
||||
|
||||
public ResupplyPoint(String name){
|
||||
super(name);
|
||||
update = true;
|
||||
solid = true;
|
||||
flags = EnumSet.of(BlockFlag.resupplyPoint);
|
||||
layer = Layer.laser;
|
||||
hasItems = true;
|
||||
hasPower = true;
|
||||
powerCapacity = 20f;
|
||||
|
||||
consumes.power(0.02f);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawSelect(Tile tile){
|
||||
Draw.color(Palette.accent);
|
||||
Lines.dashCircle(tile.drawx(), tile.drawy(), supplyRadius);
|
||||
Draw.color();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void drawLayer(Tile tile){
|
||||
ResupplyPointEntity entity = tile.entity();
|
||||
|
||||
if(entity.strength > 0f){
|
||||
float ang = entity.angleTo(entity.lastx, entity.lasty);
|
||||
float len = 5f;
|
||||
float x1 = tile.drawx() + Angles.trnsx(ang, len), y1 = tile.drawy() + Angles.trnsy(ang, len);
|
||||
float dstTo = Vector2.dst(x1, y1, entity.lastx, entity.lasty);
|
||||
float space = 4f;
|
||||
|
||||
float xf = entity.lastx - x1, yf = entity.lasty - y1;
|
||||
|
||||
Shapes.laser("transfer", "transfer-end",
|
||||
x1, y1, entity.lastx, entity.lasty, entity.strength);
|
||||
|
||||
Draw.color(Palette.accent);
|
||||
for(int i = 0; i < dstTo / space - 1; i++){
|
||||
float fract = (i * space) / dstTo + ((Timers.time() / 90f) % (space / dstTo));
|
||||
Draw.alpha(Mathf.clamp(fract * 1.5f));
|
||||
Draw.rect("transfer-arrow", x1 + fract * xf, y1 + fract * yf,
|
||||
8, 8 * entity.strength, ang);
|
||||
}
|
||||
|
||||
Draw.color();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void update(Tile tile){
|
||||
ResupplyPointEntity entity = tile.entity();
|
||||
|
||||
if(!validTarget(entity, entity.target) || entity.target.distanceTo(tile) > supplyRadius){
|
||||
entity.target = null;
|
||||
}else if(entity.target != null && entity.strength > 0.5f){
|
||||
|
||||
if(entity.timer.get(timerSupply, supplyInterval)){
|
||||
for(int i = 0; i < Item.all().size; i++){
|
||||
Item item = Item.getByID(i);
|
||||
if(tile.entity.items.has(item) && entity.target.acceptsAmmo(item)){
|
||||
tile.entity.items.remove(item, 1);
|
||||
entity.target.addAmmo(item);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
entity.rotation = Mathf.slerpDelta(entity.rotation, entity.angleTo(entity.target), 0.5f);
|
||||
}
|
||||
|
||||
if(entity.target != null && entity.cons.valid()){
|
||||
entity.lastx = entity.target.x;
|
||||
entity.lasty = entity.target.y;
|
||||
entity.strength = Mathf.lerpDelta(entity.strength, 1f, 0.08f * Timers.delta());
|
||||
}else{
|
||||
entity.strength = Mathf.lerpDelta(entity.strength, 0f, 0.08f * Timers.delta());
|
||||
}
|
||||
|
||||
if(entity.timer.get(timerTarget, 20)){
|
||||
rect.setSize(supplyRadius * 2).setCenter(tile.drawx(), tile.drawy());
|
||||
|
||||
entity.target = Units.getClosest(tile.getTeam(), tile.drawx(), tile.drawy(), supplyRadius, unit -> validTarget(entity, unit));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean acceptItem(Item item, Tile tile, Tile source){
|
||||
return tile.entity.items.total() < itemCapacity;
|
||||
}
|
||||
|
||||
@Override
|
||||
public TileEntity getEntity(){
|
||||
return new ResupplyPointEntity();
|
||||
}
|
||||
|
||||
boolean validTarget(ResupplyPointEntity entity, Unit unit){
|
||||
if(unit == null || unit.inventory.totalAmmo() >= unit.inventory.ammoCapacity()
|
||||
|| unit.isDead()) return false;
|
||||
|
||||
for(int i = 0; i < Item.all().size; i++){
|
||||
Item item = Item.getByID(i);
|
||||
if(entity.items.has(item) && unit.acceptsAmmo(item)){
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
public class ResupplyPointEntity extends TileEntity{
|
||||
public Unit target;
|
||||
public float strength, rotation = 90, lastx, lasty;
|
||||
}
|
||||
}
|
||||
|
|
@ -13,7 +13,6 @@ import io.anuke.mindustry.gen.Call;
|
|||
import io.anuke.mindustry.graphics.Palette;
|
||||
import io.anuke.mindustry.graphics.Shaders;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.mindustry.type.AmmoType;
|
||||
import io.anuke.mindustry.type.Item;
|
||||
import io.anuke.mindustry.type.ItemStack;
|
||||
import io.anuke.mindustry.world.BarType;
|
||||
|
|
@ -74,10 +73,6 @@ public class UnitPad extends Block{
|
|||
unit.set(tile.drawx(), tile.drawy());
|
||||
unit.add();
|
||||
unit.getVelocity().y = factory.launchVelocity;
|
||||
|
||||
//fill inventory with 1st ammo
|
||||
AmmoType type = unit.getWeapon().getAmmoType(unit.getWeapon().getAcceptedItems().iterator().next());
|
||||
unit.inventory.fillAmmo(type);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ import io.anuke.mindustry.Vars;
|
|||
import io.anuke.mindustry.core.GameState.State;
|
||||
import io.anuke.mindustry.core.Platform;
|
||||
import io.anuke.mindustry.core.ThreadHandler.ThreadProvider;
|
||||
import io.anuke.mindustry.game.GameMode;
|
||||
import io.anuke.mindustry.net.Net;
|
||||
import io.anuke.mindustry.ui.dialogs.FileChooser;
|
||||
import io.anuke.ucore.function.Consumer;
|
||||
|
|
@ -78,14 +79,24 @@ public class DesktopPlatform extends Platform{
|
|||
DiscordRichPresence presence = new DiscordRichPresence();
|
||||
|
||||
if(!state.is(State.menu)){
|
||||
presence.state = Strings.capitalize(state.mode.name()) + ", Solo";
|
||||
presence.details = Strings.capitalize(world.getMap().name) + " | Wave " + state.wave;
|
||||
presence.largeImageText = "Wave " + state.wave;
|
||||
presence.state = Strings.capitalize(state.mode.name());
|
||||
if(state.mode == GameMode.noWaves){
|
||||
presence.details = Strings.capitalize(world.getMap().name);
|
||||
}else{
|
||||
presence.details = Strings.capitalize(world.getMap().name) + " | Wave " + state.wave;
|
||||
presence.largeImageText = "Wave " + state.wave;
|
||||
}
|
||||
|
||||
if(state.mode != GameMode.noWaves){
|
||||
presence.state = Strings.capitalize(state.mode.name());
|
||||
}else{
|
||||
presence.state = unitGroups[players[0].getTeam().ordinal()].size() == 1 ? "1 Unit Active" :
|
||||
(unitGroups[players[0].getTeam().ordinal()].size() + " Units Active");
|
||||
}
|
||||
|
||||
if(Net.active()){
|
||||
presence.partyMax = 16;
|
||||
presence.partySize = playerGroup.size();
|
||||
presence.state = Strings.capitalize(state.mode.name());
|
||||
}
|
||||
}else{
|
||||
if(ui.editor != null && ui.editor.isShown()){
|
||||
|
|
|
|||
|
|
@ -1,118 +1,119 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
||||
<plist version="1.0">
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>${app.name}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${app.executable}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${app.id}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>9.0.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${app.name}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${app.version}</string>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>AppIcon</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${app.build}</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<true/>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Mindustry</string>
|
||||
<key>UIDeviceFamily</key>
|
||||
<array>
|
||||
<integer>1</integer>
|
||||
<integer>2</integer>
|
||||
</array>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
<string>opengles-2</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<dict>
|
||||
<key>CFBundleDevelopmentRegion</key>
|
||||
<string>en</string>
|
||||
<key>CFBundleDisplayName</key>
|
||||
<string>${app.name}</string>
|
||||
<key>CFBundleExecutable</key>
|
||||
<string>${app.executable}</string>
|
||||
<key>CFBundleIdentifier</key>
|
||||
<string>${app.id}</string>
|
||||
<key>CFBundleInfoDictionaryVersion</key>
|
||||
<string>6.0</string>
|
||||
<key>MinimumOSVersion</key>
|
||||
<string>9.0.0</string>
|
||||
<key>CFBundleName</key>
|
||||
<string>${app.name}</string>
|
||||
<key>CFBundlePackageType</key>
|
||||
<string>APPL</string>
|
||||
<key>CFBundleShortVersionString</key>
|
||||
<string>${app.version}</string>
|
||||
<key>CFBundleIconName</key>
|
||||
<string>AppIcon</string>
|
||||
<key>CFBundleSignature</key>
|
||||
<string>????</string>
|
||||
<key>CFBundleVersion</key>
|
||||
<string>${app.build}</string>
|
||||
<key>LSRequiresIPhoneOS</key>
|
||||
<true/>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<key>UIStatusBarHidden</key>
|
||||
<true/>
|
||||
<key>UIRequiresFullScreen</key>
|
||||
<true/>
|
||||
<key>NSPhotoLibraryAddUsageDescription</key>
|
||||
<string>Mindustry</string>
|
||||
<key>UIDeviceFamily</key>
|
||||
<array>
|
||||
<integer>1</integer>
|
||||
<integer>2</integer>
|
||||
</array>
|
||||
<key>UIRequiredDeviceCapabilities</key>
|
||||
<array>
|
||||
<string>armv7</string>
|
||||
<string>opengles-2</string>
|
||||
</array>
|
||||
<key>UISupportedInterfaceOrientations</key>
|
||||
<array>
|
||||
<string>UIInterfaceOrientationLandscapeLeft</string>
|
||||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
<string>UIInterfaceOrientationPortrait</string>
|
||||
</array>
|
||||
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeIconFiles</key>
|
||||
<array>
|
||||
<string>icon-72.png</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Mindustry Map File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>io.anuke.mindustry.mapfile</string>
|
||||
<key>CFBundleDocumentTypes</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>CFBundleTypeIconFiles</key>
|
||||
<array>
|
||||
<string>icon-72.png</string>
|
||||
</array>
|
||||
<key>CFBundleTypeName</key>
|
||||
<string>Mindustry Map File</string>
|
||||
<key>CFBundleTypeRole</key>
|
||||
<string>Editor</string>
|
||||
<key>LSHandlerRank</key>
|
||||
<string>Owner</string>
|
||||
<key>LSItemContentTypes</key>
|
||||
<array>
|
||||
<string>io.anuke.mindustry.mapfile</string>
|
||||
<string>io.anuke.mindustry.savefile</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Mindustry Save File</string>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.anuke.mindustry.savefile</string>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Mindustry Save File</string>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.anuke.mindustry.savefile</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<string>msav</string>
|
||||
<key>public.mime-type</key>
|
||||
<string>mindustry/msav</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<string>msav</string>
|
||||
<key>public.mime-type</key>
|
||||
<string>mindustry/msav</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</array>
|
||||
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Mindustry Map File</string>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.anuke.mindustry.mapfile</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<key>UTExportedTypeDeclarations</key>
|
||||
<array>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<string>mmap</string>
|
||||
<key>public.mime-type</key>
|
||||
<string>mindustry/mmap</string>
|
||||
<key>UTTypeConformsTo</key>
|
||||
<array>
|
||||
<string>public.data</string>
|
||||
</array>
|
||||
<key>UTTypeDescription</key>
|
||||
<string>Mindustry Map File</string>
|
||||
<key>UTTypeIdentifier</key>
|
||||
<string>io.anuke.mindustry.mapfile</string>
|
||||
<key>UTTypeTagSpecification</key>
|
||||
<dict>
|
||||
<key>public.filename-extension</key>
|
||||
<string>mmap</string>
|
||||
<key>public.mime-type</key>
|
||||
<string>mindustry/mmap</string>
|
||||
</dict>
|
||||
</dict>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
|
|
|||
|
|
@ -32,6 +32,8 @@ import static io.anuke.mindustry.Vars.*;
|
|||
import static org.robovm.apple.foundation.NSPathUtilities.getDocumentsDirectory;
|
||||
|
||||
public class IOSLauncher extends IOSApplication.Delegate {
|
||||
private boolean forced;
|
||||
|
||||
@Override
|
||||
protected IOSApplication createApplication() {
|
||||
Net.setClientProvider(new KryoClient());
|
||||
|
|
@ -86,7 +88,17 @@ public class IOSLauncher extends IOSApplication.Delegate {
|
|||
p.getPopoverPresentationController().setSourceView(UIApplication.getSharedApplication().getKeyWindow().getRootViewController().getView());
|
||||
|
||||
UIApplication.getSharedApplication().getKeyWindow().getRootViewController()
|
||||
.presentViewController(p, true, () -> io.anuke.ucore.util.Log.info("Success! Presented {0}", to));
|
||||
.presentViewController(p, true, () -> io.anuke.ucore.util.Log.info("Success! Presented {0}", to));
|
||||
}
|
||||
|
||||
@Override
|
||||
public void beginForceLandscape(){
|
||||
forced = true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void endForceLandscape(){
|
||||
forced = false;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -94,6 +106,11 @@ public class IOSLauncher extends IOSApplication.Delegate {
|
|||
return new IOSApplication(new Mindustry(), config);
|
||||
}
|
||||
|
||||
@Override
|
||||
public UIInterfaceOrientationMask getSupportedInterfaceOrientations(UIApplication application, UIWindow window){
|
||||
return forced ? UIInterfaceOrientationMask.Landscape : UIInterfaceOrientationMask.All;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean openURL(UIApplication app, NSURL url, UIApplicationOpenURLOptions options) {
|
||||
System.out.println("Opened URL: " + url.getPath());
|
||||
|
|
|
|||
|
|
@ -405,7 +405,6 @@ public class ServerControl extends Module{
|
|||
for(Player player : playerGroup.all()){
|
||||
if(player.name.equalsIgnoreCase(arg[0])){
|
||||
target = player;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -457,7 +456,6 @@ public class ServerControl extends Module{
|
|||
if(player.con.address != null &&
|
||||
player.con.address.equals(arg[0])){
|
||||
netServer.kick(player.con.id, KickReason.banned);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
|
|
@ -472,7 +470,6 @@ public class ServerControl extends Module{
|
|||
for(Player player : playerGroup.all()){
|
||||
if(player.uuid.equals(arg[0])){
|
||||
netServer.kick(player.con.id, KickReason.banned);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}else{
|
||||
|
|
|
|||