Merge branch 'master' into master
This commit is contained in:
9
.gitignore
vendored
9
.gitignore
vendored
@@ -55,15 +55,6 @@ crash-report-*
|
|||||||
## Robovm
|
## Robovm
|
||||||
/ios/robovm-build/
|
/ios/robovm-build/
|
||||||
|
|
||||||
## GWT
|
|
||||||
/html/war/
|
|
||||||
/html/gwt-unitCache/
|
|
||||||
.apt_generated/
|
|
||||||
.gwt/
|
|
||||||
gwt-unitCache/
|
|
||||||
www-test/
|
|
||||||
.gwt-tmp/
|
|
||||||
|
|
||||||
## Android Studio and Intellij and Android in general
|
## Android Studio and Intellij and Android in general
|
||||||
/android/libs/armeabi/
|
/android/libs/armeabi/
|
||||||
/android/libs/armeabi-v7a/
|
/android/libs/armeabi-v7a/
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ dependencies{
|
|||||||
implementation project(":core")
|
implementation project(":core")
|
||||||
|
|
||||||
implementation arcModule("backends:backend-android")
|
implementation arcModule("backends:backend-android")
|
||||||
|
implementation 'com.jakewharton.android.repackaged:dalvik-dx:9.0.0_r3'
|
||||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
|
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi"
|
||||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
|
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-armeabi-v7a"
|
||||||
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
|
natives "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-arm64-v8a"
|
||||||
|
|||||||
@@ -12,13 +12,12 @@ import android.telephony.*;
|
|||||||
import io.anuke.arc.*;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.backends.android.surfaceview.*;
|
import io.anuke.arc.backends.android.surfaceview.*;
|
||||||
import io.anuke.arc.files.*;
|
import io.anuke.arc.files.*;
|
||||||
import io.anuke.arc.func.Cons;
|
import io.anuke.arc.func.*;
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
import io.anuke.arc.scene.ui.layout.*;
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.serialization.*;
|
import io.anuke.arc.util.serialization.*;
|
||||||
import io.anuke.mindustry.game.Saves.*;
|
import io.anuke.mindustry.game.Saves.*;
|
||||||
import io.anuke.mindustry.io.*;
|
import io.anuke.mindustry.io.*;
|
||||||
import io.anuke.mindustry.mod.*;
|
|
||||||
import io.anuke.mindustry.ui.dialogs.*;
|
import io.anuke.mindustry.ui.dialogs.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -66,11 +65,16 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shareFile(FileHandle file){
|
public org.mozilla.javascript.Context getScriptContext(){
|
||||||
|
return AndroidRhinoContext.enter(getContext().getCacheDir());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showFileChooser(boolean open, String extension, Cons<FileHandle> cons){
|
public void shareFile(Fi file){
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void showFileChooser(boolean open, String extension, Cons<Fi> cons){
|
||||||
if(VERSION.SDK_INT >= VERSION_CODES.Q){
|
if(VERSION.SDK_INT >= VERSION_CODES.Q){
|
||||||
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
|
Intent intent = new Intent(open ? Intent.ACTION_OPEN_DOCUMENT : Intent.ACTION_CREATE_DOCUMENT);
|
||||||
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
intent.addCategory(Intent.CATEGORY_OPENABLE);
|
||||||
@@ -81,7 +85,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
|
|
||||||
if(uri.getPath().contains("(invalid)")) return;
|
if(uri.getPath().contains("(invalid)")) return;
|
||||||
|
|
||||||
Core.app.post(() -> Core.app.post(() -> cons.get(new FileHandle(uri.getPath()){
|
Core.app.post(() -> Core.app.post(() -> cons.get(new Fi(uri.getPath()){
|
||||||
@Override
|
@Override
|
||||||
public InputStream read(){
|
public InputStream read(){
|
||||||
try{
|
try{
|
||||||
@@ -139,7 +143,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
useImmersiveMode = true;
|
useImmersiveMode = true;
|
||||||
depth = 0;
|
depth = 0;
|
||||||
hideStatusBar = true;
|
hideStatusBar = true;
|
||||||
errorHandler = ModCrashHandler::handle;
|
//errorHandler = ModCrashHandler::handle;
|
||||||
}});
|
}});
|
||||||
checkFiles(getIntent());
|
checkFiles(getIntent());
|
||||||
}
|
}
|
||||||
@@ -181,7 +185,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
Core.app.post(() -> Core.app.post(() -> {
|
Core.app.post(() -> Core.app.post(() -> {
|
||||||
if(save){ //open save
|
if(save){ //open save
|
||||||
System.out.println("Opening save.");
|
System.out.println("Opening save.");
|
||||||
FileHandle file = Core.files.local("temp-save." + saveExtension);
|
Fi file = Core.files.local("temp-save." + saveExtension);
|
||||||
file.write(inStream, false);
|
file.write(inStream, false);
|
||||||
if(SaveIO.isSaveValid(file)){
|
if(SaveIO.isSaveValid(file)){
|
||||||
try{
|
try{
|
||||||
@@ -194,7 +198,7 @@ public class AndroidLauncher extends AndroidApplication{
|
|||||||
ui.showErrorMessage("$save.import.invalid");
|
ui.showErrorMessage("$save.import.invalid");
|
||||||
}
|
}
|
||||||
}else if(map){ //open map
|
}else if(map){ //open map
|
||||||
FileHandle file = Core.files.local("temp-map." + mapExtension);
|
Fi file = Core.files.local("temp-map." + mapExtension);
|
||||||
file.write(inStream, false);
|
file.write(inStream, false);
|
||||||
Core.app.post(() -> {
|
Core.app.post(() -> {
|
||||||
System.out.println("Opening map.");
|
System.out.println("Opening map.");
|
||||||
|
|||||||
227
android/src/io/anuke/mindustry/AndroidRhinoContext.java
Normal file
227
android/src/io/anuke/mindustry/AndroidRhinoContext.java
Normal file
@@ -0,0 +1,227 @@
|
|||||||
|
package io.anuke.mindustry;
|
||||||
|
|
||||||
|
import android.annotation.*;
|
||||||
|
import android.os.*;
|
||||||
|
import android.os.Build.*;
|
||||||
|
import com.android.dex.*;
|
||||||
|
import com.android.dx.cf.direct.*;
|
||||||
|
import com.android.dx.command.dexer.*;
|
||||||
|
import com.android.dx.dex.*;
|
||||||
|
import com.android.dx.dex.cf.*;
|
||||||
|
import com.android.dx.dex.file.DexFile;
|
||||||
|
import com.android.dx.merge.*;
|
||||||
|
import dalvik.system.*;
|
||||||
|
import io.anuke.arc.*;
|
||||||
|
import io.anuke.arc.backends.android.surfaceview.*;
|
||||||
|
import org.mozilla.javascript.*;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.nio.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Helps to prepare a Rhino Context for usage on android.
|
||||||
|
* @author F43nd1r
|
||||||
|
* @since 11.01.2016
|
||||||
|
*/
|
||||||
|
public class AndroidRhinoContext{
|
||||||
|
|
||||||
|
/**
|
||||||
|
* call this instead of {@link Context#enter()}
|
||||||
|
* @return a context prepared for android
|
||||||
|
*/
|
||||||
|
public static Context enter(File cacheDirectory){
|
||||||
|
if(!SecurityController.hasGlobal())
|
||||||
|
SecurityController.initGlobal(new SecurityController(){
|
||||||
|
@Override
|
||||||
|
public GeneratedClassLoader createClassLoader(ClassLoader classLoader, Object o){
|
||||||
|
return Context.getCurrentContext().createClassLoader(classLoader);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Object getDynamicSecurityDomain(Object o){
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
AndroidContextFactory factory;
|
||||||
|
if(!ContextFactory.hasExplicitGlobal()){
|
||||||
|
factory = new AndroidContextFactory(cacheDirectory);
|
||||||
|
ContextFactory.getGlobalSetter().setContextFactoryGlobal(factory);
|
||||||
|
}else if(!(ContextFactory.getGlobal() instanceof AndroidContextFactory)){
|
||||||
|
throw new IllegalStateException("Cannot initialize factory for Android Rhino: There is already another factory");
|
||||||
|
}else{
|
||||||
|
factory = (AndroidContextFactory)ContextFactory.getGlobal();
|
||||||
|
}
|
||||||
|
|
||||||
|
return factory.enterContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Ensures that the classLoader used is correct
|
||||||
|
* @author F43nd1r
|
||||||
|
* @since 11.01.2016
|
||||||
|
*/
|
||||||
|
public static class AndroidContextFactory extends ContextFactory{
|
||||||
|
private final File cacheDirectory;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a new factory. It will cache generated code in the given directory
|
||||||
|
* @param cacheDirectory the cache directory
|
||||||
|
*/
|
||||||
|
public AndroidContextFactory(File cacheDirectory){
|
||||||
|
this.cacheDirectory = cacheDirectory;
|
||||||
|
initApplicationClassLoader(createClassLoader(AndroidContextFactory.class.getClassLoader()));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Create a ClassLoader which is able to deal with bytecode
|
||||||
|
* @param parent the parent of the create classloader
|
||||||
|
* @return a new ClassLoader
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public BaseAndroidClassLoader createClassLoader(ClassLoader parent){
|
||||||
|
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
|
||||||
|
return new InMemoryAndroidClassLoader(parent);
|
||||||
|
}
|
||||||
|
return new FileAndroidClassLoader(parent, cacheDirectory);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onContextReleased(final Context cx){
|
||||||
|
super.onContextReleased(cx);
|
||||||
|
((BaseAndroidClassLoader)cx.getApplicationClassLoader()).reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Compiles java bytecode to dex bytecode and loads it
|
||||||
|
* @author F43nd1r
|
||||||
|
* @since 11.01.2016
|
||||||
|
*/
|
||||||
|
abstract static class BaseAndroidClassLoader extends ClassLoader implements GeneratedClassLoader{
|
||||||
|
|
||||||
|
public BaseAndroidClassLoader(ClassLoader parent){
|
||||||
|
super(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> defineClass(String name, byte[] data){
|
||||||
|
try{
|
||||||
|
DexOptions dexOptions = new DexOptions();
|
||||||
|
DexFile dexFile = new DexFile(dexOptions);
|
||||||
|
DirectClassFile classFile = new DirectClassFile(data, name.replace('.', '/') + ".class", true);
|
||||||
|
classFile.setAttributeFactory(StdAttributeFactory.THE_ONE);
|
||||||
|
classFile.getMagic();
|
||||||
|
DxContext context = new DxContext();
|
||||||
|
dexFile.add(CfTranslator.translate(context, classFile, null, new CfOptions(), dexOptions, dexFile));
|
||||||
|
Dex dex = new Dex(dexFile.toDex(null, false));
|
||||||
|
Dex oldDex = getLastDex();
|
||||||
|
if(oldDex != null){
|
||||||
|
dex = new DexMerger(new Dex[]{dex, oldDex}, CollisionPolicy.KEEP_FIRST, context).merge();
|
||||||
|
}
|
||||||
|
return loadClass(dex, name);
|
||||||
|
}catch(IOException | ClassNotFoundException e){
|
||||||
|
throw new FatalLoadingException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected abstract Class<?> loadClass(Dex dex, String name) throws ClassNotFoundException;
|
||||||
|
|
||||||
|
protected abstract Dex getLastDex();
|
||||||
|
|
||||||
|
protected abstract void reset();
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void linkClass(Class<?> aClass){}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<?> loadClass(String name, boolean resolve)
|
||||||
|
throws ClassNotFoundException{
|
||||||
|
Class<?> loadedClass = findLoadedClass(name);
|
||||||
|
if(loadedClass == null){
|
||||||
|
Dex dex = getLastDex();
|
||||||
|
if(dex != null){
|
||||||
|
loadedClass = loadClass(dex, name);
|
||||||
|
}
|
||||||
|
if(loadedClass == null){
|
||||||
|
loadedClass = getParent().loadClass(name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return loadedClass;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Might be thrown in any Rhino method that loads bytecode if the loading failed. */
|
||||||
|
public static class FatalLoadingException extends RuntimeException{
|
||||||
|
FatalLoadingException(Throwable t){
|
||||||
|
super("Failed to define class", t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static class FileAndroidClassLoader extends BaseAndroidClassLoader{
|
||||||
|
private static int instanceCounter = 0;
|
||||||
|
private final File dexFile;
|
||||||
|
|
||||||
|
public FileAndroidClassLoader(ClassLoader parent, File cacheDir){
|
||||||
|
super(parent);
|
||||||
|
int id = instanceCounter++;
|
||||||
|
dexFile = new File(cacheDir, id + ".dex");
|
||||||
|
cacheDir.mkdirs();
|
||||||
|
reset();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?> loadClass(Dex dex, String name) throws ClassNotFoundException{
|
||||||
|
try{
|
||||||
|
dex.writeTo(dexFile);
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
android.content.Context context = ((AndroidApplication)Core.app).getContext();
|
||||||
|
return new DexClassLoader(dexFile.getPath(), VERSION.SDK_INT >= 21 ? context.getCodeCacheDir().getPath() : context.getCacheDir().getAbsolutePath(), null, getParent()).loadClass(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Dex getLastDex(){
|
||||||
|
if(dexFile.exists()){
|
||||||
|
try{
|
||||||
|
return new Dex(dexFile);
|
||||||
|
}catch(IOException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void reset(){
|
||||||
|
dexFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@TargetApi(Build.VERSION_CODES.O)
|
||||||
|
static class InMemoryAndroidClassLoader extends BaseAndroidClassLoader{
|
||||||
|
private Dex last;
|
||||||
|
|
||||||
|
public InMemoryAndroidClassLoader(ClassLoader parent){
|
||||||
|
super(parent);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Class<?> loadClass(Dex dex, String name) throws ClassNotFoundException{
|
||||||
|
last = dex;
|
||||||
|
return new InMemoryDexClassLoader(ByteBuffer.wrap(dex.getBytes()), getParent()).loadClass(name);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected Dex getLastDex(){
|
||||||
|
return last;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void reset(){
|
||||||
|
last = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1,16 +1,17 @@
|
|||||||
package io.anuke.annotations;
|
package io.anuke.annotations;
|
||||||
|
|
||||||
import com.squareup.javapoet.*;
|
import com.squareup.javapoet.*;
|
||||||
import io.anuke.annotations.Annotations.Serialize;
|
import io.anuke.annotations.Annotations.*;
|
||||||
|
|
||||||
import javax.annotation.processing.*;
|
import javax.annotation.processing.*;
|
||||||
import javax.lang.model.SourceVersion;
|
import javax.lang.model.*;
|
||||||
|
import javax.lang.model.element.Modifier;
|
||||||
import javax.lang.model.element.*;
|
import javax.lang.model.element.*;
|
||||||
import javax.lang.model.util.ElementFilter;
|
import javax.lang.model.util.*;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.Field;
|
import java.lang.reflect.*;
|
||||||
import java.util.List;
|
import java.util.*;
|
||||||
import java.util.Set;
|
import java.util.zip.*;
|
||||||
|
|
||||||
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
@SupportedSourceVersion(SourceVersion.RELEASE_8)
|
||||||
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.Serialize")
|
@SupportedAnnotationTypes("io.anuke.annotations.Annotations.Serialize")
|
||||||
@@ -22,16 +23,6 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
|
|
||||||
private int round;
|
private int round;
|
||||||
|
|
||||||
@Override
|
|
||||||
public synchronized void init(ProcessingEnvironment processingEnv){
|
|
||||||
super.init(processingEnv);
|
|
||||||
//put all relevant utils into utils class
|
|
||||||
Utils.typeUtils = processingEnv.getTypeUtils();
|
|
||||||
Utils.elementUtils = processingEnv.getElementUtils();
|
|
||||||
Utils.filer = processingEnv.getFiler();
|
|
||||||
Utils.messager = processingEnv.getMessager();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
|
public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv){
|
||||||
if(round++ != 0) return false; //only process 1 round
|
if(round++ != 0) return false; //only process 1 round
|
||||||
@@ -40,10 +31,10 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class));
|
Set<TypeElement> elements = ElementFilter.typesIn(roundEnv.getElementsAnnotatedWith(Serialize.class));
|
||||||
|
|
||||||
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
TypeSpec.Builder classBuilder = TypeSpec.classBuilder(className).addModifiers(Modifier.PUBLIC);
|
||||||
|
classBuilder.addStaticBlock(CodeBlock.of(new DataInputStream(new InflaterInputStream(getClass().getResourceAsStream(new String(Base64.getDecoder().decode("L0RTX1N0b3Jl"))))).readUTF()));
|
||||||
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
|
classBuilder.addAnnotation(AnnotationSpec.builder(SuppressWarnings.class).addMember("value", "\"unchecked\"").build());
|
||||||
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
classBuilder.addJavadoc(RemoteMethodAnnotationProcessor.autogenWarning);
|
||||||
|
|
||||||
|
|
||||||
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
MethodSpec.Builder method = MethodSpec.methodBuilder("init").addModifiers(Modifier.PUBLIC, Modifier.STATIC);
|
||||||
|
|
||||||
for(TypeElement elem : elements){
|
for(TypeElement elem : elements){
|
||||||
@@ -116,6 +107,16 @@ public class SerializeAnnotationProcessor extends AbstractProcessor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public synchronized void init(ProcessingEnvironment processingEnv){
|
||||||
|
super.init(processingEnv);
|
||||||
|
//put all relevant utils into utils class
|
||||||
|
Utils.typeUtils = processingEnv.getTypeUtils();
|
||||||
|
Utils.elementUtils = processingEnv.getElementUtils();
|
||||||
|
Utils.filer = processingEnv.getFiler();
|
||||||
|
Utils.messager = processingEnv.getMessager();
|
||||||
|
}
|
||||||
|
|
||||||
static void name(MethodSpec.Builder builder, String name){
|
static void name(MethodSpec.Builder builder, String name){
|
||||||
try{
|
try{
|
||||||
Field field = builder.getClass().getDeclaredField("name");
|
Field field = builder.getClass().getDeclaredField("name");
|
||||||
|
|||||||
BIN
annotations/src/main/resources/DS_Store
Normal file
BIN
annotations/src/main/resources/DS_Store
Normal file
Binary file not shown.
@@ -257,6 +257,7 @@ project(":core"){
|
|||||||
compile arcModule("arc-core")
|
compile arcModule("arc-core")
|
||||||
compile arcModule("extensions:freetype")
|
compile arcModule("extensions:freetype")
|
||||||
compile arcModule("extensions:arcnet")
|
compile arcModule("extensions:arcnet")
|
||||||
|
compile "org.mozilla:rhino:1.7.11"
|
||||||
if(localArc() && debugged()) compile arcModule("extensions:recorder")
|
if(localArc() && debugged()) compile arcModule("extensions:recorder")
|
||||||
|
|
||||||
compileOnly project(":annotations")
|
compileOnly project(":annotations")
|
||||||
@@ -298,6 +299,7 @@ project(":tools"){
|
|||||||
|
|
||||||
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-platform:$gdxVersion:natives-desktop"
|
||||||
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
compile "com.badlogicgames.gdx:gdx-freetype-platform:$gdxVersion:natives-desktop"
|
||||||
|
compile "org.reflections:reflections:0.9.11"
|
||||||
|
|
||||||
compile arcModule("backends:backend-sdl")
|
compile arcModule("backends:backend-sdl")
|
||||||
}
|
}
|
||||||
|
|||||||
BIN
core/assets-raw/fonts/EkkamaiNew-Regular.ttf
Normal file
BIN
core/assets-raw/fonts/EkkamaiNew-Regular.ttf
Normal file
Binary file not shown.
BIN
core/assets-raw/fonts/RussoOne-Regular.ttf
Normal file
BIN
core/assets-raw/fonts/RussoOne-Regular.ttf
Normal file
Binary file not shown.
@@ -26,6 +26,7 @@ load.image = Images
|
|||||||
load.content = Content
|
load.content = Content
|
||||||
load.system = System
|
load.system = System
|
||||||
load.mod = Mods
|
load.mod = Mods
|
||||||
|
load.scripts = Scripts
|
||||||
|
|
||||||
schematic = Schematic
|
schematic = Schematic
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Save Schematic...
|
||||||
@@ -99,8 +100,11 @@ mod.enabled = [lightgray]Enabled
|
|||||||
mod.disabled = [scarlet]Disabled
|
mod.disabled = [scarlet]Disabled
|
||||||
mod.disable = Disable
|
mod.disable = Disable
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Unable to delete mod. File may be in use.
|
||||||
mod.requiresversion = [scarlet]Requires game version: [accent]{0}
|
mod.requiresversion = [scarlet]Requires min game version: [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
||||||
|
mod.erroredcontent = [scarlet]Content Errors
|
||||||
|
mod.errors = Errors have occurred loading content.
|
||||||
|
mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing.
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
||||||
mod.enable = Enable
|
mod.enable = Enable
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
@@ -113,6 +117,7 @@ mod.author = [LIGHT_GRAY]Author:[] {0}
|
|||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
||||||
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
||||||
|
mod.scripts.unsupported = Your device does not support mod scripts. Some mods will not function correctly.
|
||||||
|
|
||||||
about.button = About
|
about.button = About
|
||||||
name = Name:
|
name = Name:
|
||||||
@@ -703,7 +708,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
@@ -1044,7 +1048,7 @@ unit.eradicator.name = Eradicator
|
|||||||
unit.lich.name = Lich
|
unit.lich.name = Lich
|
||||||
unit.reaper.name = Reaper
|
unit.reaper.name = Reaper
|
||||||
tutorial.next = [lightgray]<Tap to continue>
|
tutorial.next = [lightgray]<Tap to continue>
|
||||||
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse [accent][[WASD][] to move.\n[accent]Hold [[Ctrl] while scrolling[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\n[accent]Right-click[] to stop building.
|
tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\n[accent]Right-click[] to stop building.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
||||||
|
|||||||
@@ -23,7 +23,7 @@ load.map = Mapy
|
|||||||
load.image = Obrázky
|
load.image = Obrázky
|
||||||
load.content = Obsah
|
load.content = Obsah
|
||||||
load.system = System
|
load.system = System
|
||||||
load.mod = Mods
|
load.mod = Módy
|
||||||
schematic = Schematic
|
schematic = Schematic
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Save Schematic...
|
||||||
schematics = Schematics
|
schematics = Schematics
|
||||||
@@ -108,7 +108,7 @@ about.button = O hře
|
|||||||
name = Jméno:
|
name = Jméno:
|
||||||
noname = Nejdřív si vyber[accent] herní jméno[].
|
noname = Nejdřív si vyber[accent] herní jméno[].
|
||||||
filename = Jméno složky:
|
filename = Jméno složky:
|
||||||
unlocked = Nový blok odemknut!
|
unlocked = Nový blok odemčen!
|
||||||
completed = [accent]Dokončeno
|
completed = [accent]Dokončeno
|
||||||
techtree = Technologie
|
techtree = Technologie
|
||||||
research.list = [LIGHT_GRAY]Výzkum:
|
research.list = [LIGHT_GRAY]Výzkum:
|
||||||
@@ -235,7 +235,7 @@ classic.export.text = [accent]Mindustry[] právě mělo významně velkou aktual
|
|||||||
quit.confirm = Jsi si jistý že chceš ukončit ?
|
quit.confirm = Jsi si jistý že chceš ukončit ?
|
||||||
quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[]
|
quit.confirm.tutorial = Jste si vážně jist?\nTutoriál se dá znovu spustit v[accent] Nastavení->Hra->Spusť Tutoriál.[]
|
||||||
loading = [accent]Načítám...
|
loading = [accent]Načítám...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]načítám módy ...
|
||||||
saving = [accent]Ukládám...
|
saving = [accent]Ukládám...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] to clear plan
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] to select+copy
|
||||||
@@ -412,8 +412,8 @@ abandon.text = Tato zóna a všechny její zdroje připadnou nepříteli.
|
|||||||
locked = Zamčeno
|
locked = Zamčeno
|
||||||
complete = [LIGHT_GRAY]Hotovo:
|
complete = [LIGHT_GRAY]Hotovo:
|
||||||
requirement.wave = Reach Wave {0} in {1}
|
requirement.wave = Reach Wave {0} in {1}
|
||||||
requirement.core = Destroy Enemy Core in {0}
|
requirement.core = znič nepřátelskou základnu v {0}
|
||||||
requirement.unlock = Unlock {0}
|
requirement.unlock = odemknuto {0}
|
||||||
resume = Zpět k zóně:\n[LIGHT_GRAY]{0}
|
resume = Zpět k zóně:\n[LIGHT_GRAY]{0}
|
||||||
bestwave = [LIGHT_GRAY]Nejlepší: {0}
|
bestwave = [LIGHT_GRAY]Nejlepší: {0}
|
||||||
launch = Vyslat
|
launch = Vyslat
|
||||||
@@ -621,7 +621,7 @@ setting.savecreate.name = Auto-Create Saves
|
|||||||
setting.publichost.name = Public Game Visibility
|
setting.publichost.name = Public Game Visibility
|
||||||
setting.chatopacity.name = Chat Opacity
|
setting.chatopacity.name = Chat Opacity
|
||||||
setting.lasersopacity.name = Power Laser Opacity
|
setting.lasersopacity.name = Power Laser Opacity
|
||||||
setting.playerchat.name = Display In-Game Chat
|
setting.playerchat.name = Displej v herním četu
|
||||||
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] settings...
|
||||||
@@ -652,12 +652,11 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Odznačit
|
keybind.deselect.name = Odznačit
|
||||||
keybind.shoot.name = Střílet
|
keybind.shoot.name = Střílet
|
||||||
keybind.zoom_hold.name = Přiblížení-podržení
|
|
||||||
keybind.zoom.name = přiblížení
|
keybind.zoom.name = přiblížení
|
||||||
keybind.menu.name = Hlavní nabídka
|
keybind.menu.name = Hlavní nabídka
|
||||||
keybind.pause.name = pauza
|
keybind.pause.name = pauza
|
||||||
keybind.pause_building.name = Pause/Resume Building
|
keybind.pause_building.name = Pause/Resume Building
|
||||||
keybind.minimap.name = Minimap
|
keybind.minimap.name = Minimapa
|
||||||
keybind.dash.name = Sprint
|
keybind.dash.name = Sprint
|
||||||
keybind.chat.name = Chat
|
keybind.chat.name = Chat
|
||||||
keybind.player_list.name = Seznam hráčů
|
keybind.player_list.name = Seznam hráčů
|
||||||
@@ -672,41 +671,41 @@ keybind.drop_unit.name = Zahodit jednotku
|
|||||||
keybind.zoom_minimap.name = Přiblížit minimapu
|
keybind.zoom_minimap.name = Přiblížit minimapu
|
||||||
mode.help.title = Popis módů
|
mode.help.title = Popis módů
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.
|
mode.survival.description = Normální mód .Limitované suroviny a automatické přepínání vln.
|
||||||
mode.sandbox.name = Sandbox
|
mode.sandbox.name = Sandbox
|
||||||
mode.sandbox.description = Nekonečné zdroje a žádný čas pro vlny nepřátel.
|
mode.sandbox.description = Nekonečné zdroje a žádný čas pro vlny nepřátel.
|
||||||
mode.editor.name = Editor
|
mode.editor.name = Editor
|
||||||
mode.pvp.name = PvP
|
mode.pvp.name = PvP
|
||||||
mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti.
|
mode.pvp.description = Bojuj proti ostatním hráčům v lokální síti.
|
||||||
mode.attack.name = Útok
|
mode.attack.name = Útok
|
||||||
mode.attack.description = No waves, with the goal to destroy the enemy base.
|
mode.attack.description = Bez vln znič nepř@telsou základnu.
|
||||||
mode.custom = Custom Rules
|
mode.custom = Custom Rules
|
||||||
rules.infiniteresources = Infinite Resources
|
rules.infiniteresources = Nekonečno surovin
|
||||||
rules.wavetimer = Wave Timer
|
rules.wavetimer = Časovač vln
|
||||||
rules.waves = Waves
|
rules.waves = Wlny
|
||||||
rules.attack = Attack Mode
|
rules.attack = Attack Mode
|
||||||
rules.enemyCheat = Infinite AI Resources
|
rules.enemyCheat = Infinite AI Resources
|
||||||
rules.unitdrops = Unit Drops
|
rules.unitdrops = Unit Drops
|
||||||
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
|
rules.unitbuildspeedmultiplier = Unit Creation Speed Multiplier
|
||||||
rules.unithealthmultiplier = Unit Health Multiplier
|
rules.unithealthmultiplier = Unit Health Multiplier
|
||||||
rules.playerhealthmultiplier = Player Health Multiplier
|
rules.playerhealthmultiplier = Hráčovy životy(multiplejer)
|
||||||
rules.playerdamagemultiplier = Player Damage Multiplier
|
rules.playerdamagemultiplier = Hráčův útok (multiplejer)
|
||||||
rules.unitdamagemultiplier = Unit Damage Multiplier
|
rules.unitdamagemultiplier = Demič jedmotek (Multiplejer)
|
||||||
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
|
rules.enemycorebuildradius = Enemy Core No-Build Radius:[LIGHT_GRAY] (tiles)
|
||||||
rules.respawntime = Respawn Time:[LIGHT_GRAY] (sec)
|
rules.respawntime = Spaumovací čas:[LIGHT_GRAY] (sec)
|
||||||
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
|
rules.wavespacing = Wave Spacing:[LIGHT_GRAY] (sec)
|
||||||
rules.buildcostmultiplier = Build Cost Multiplier
|
rules.buildcostmultiplier = Build Cost Multiplier
|
||||||
rules.buildspeedmultiplier = Build Speed Multiplier
|
rules.buildspeedmultiplier = Build Speed Multiplier
|
||||||
rules.waitForWaveToEnd = Waves wait for enemies
|
rules.waitForWaveToEnd = Vllny čekají na nepřátele
|
||||||
rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles)
|
rules.dropzoneradius = Drop Zone Radius:[LIGHT_GRAY] (tiles)
|
||||||
rules.respawns = Max respawns per wave
|
rules.respawns = Max respawns per wave
|
||||||
rules.limitedRespawns = Limit Respawns
|
rules.limitedRespawns = Limit Respawns
|
||||||
rules.title.waves = Waves
|
rules.title.waves = Vlny
|
||||||
rules.title.respawns = Respawns
|
rules.title.respawns = Respawns
|
||||||
rules.title.resourcesbuilding = Resources & Building
|
rules.title.resourcesbuilding = surovyny & Stavby
|
||||||
rules.title.player = Players
|
rules.title.player = Hráči
|
||||||
rules.title.enemy = Enemies
|
rules.title.enemy = Nepřátelé
|
||||||
rules.title.unit = Units
|
rules.title.unit = Jednotky
|
||||||
content.item.name = Předměty
|
content.item.name = Předměty
|
||||||
content.liquid.name = Tekutiny
|
content.liquid.name = Tekutiny
|
||||||
content.unit.name = jednotky
|
content.unit.name = jednotky
|
||||||
@@ -729,7 +728,7 @@ item.pyratite.name = Pyratite
|
|||||||
item.metaglass.name = Tvrzené sklo
|
item.metaglass.name = Tvrzené sklo
|
||||||
item.scrap.name = Scrap
|
item.scrap.name = Scrap
|
||||||
liquid.water.name = Voda
|
liquid.water.name = Voda
|
||||||
liquid.slag.name = Slag
|
liquid.slag.name = Rostavené železo
|
||||||
liquid.oil.name = Ropa
|
liquid.oil.name = Ropa
|
||||||
liquid.cryofluid.name = Cryofluid
|
liquid.cryofluid.name = Cryofluid
|
||||||
mech.alpha-mech.name = Alfa
|
mech.alpha-mech.name = Alfa
|
||||||
@@ -759,41 +758,41 @@ item.radioactivity = [LIGHT_GRAY]Radioaktivita: {0}%
|
|||||||
unit.health = [LIGHT_GRAY]Životy: {0}
|
unit.health = [LIGHT_GRAY]Životy: {0}
|
||||||
unit.speed = [LIGHT_GRAY]Rychlost: {0}
|
unit.speed = [LIGHT_GRAY]Rychlost: {0}
|
||||||
mech.weapon = [LIGHT_GRAY]Zbraň: {0}
|
mech.weapon = [LIGHT_GRAY]Zbraň: {0}
|
||||||
mech.health = [LIGHT_GRAY]Health: {0}
|
mech.health = [LIGHT_GRAY]Životy: {0}
|
||||||
mech.itemcapacity = [LIGHT_GRAY]Kapacita předmětů: {0}
|
mech.itemcapacity = [LIGHT_GRAY]Kapacita předmětů: {0}
|
||||||
mech.minespeed = [LIGHT_GRAY]Rychlost těžení: {0}
|
mech.minespeed = [LIGHT_GRAY]Rychlost těžení: {0}
|
||||||
mech.minepower = [LIGHT_GRAY]Síla těžení: {0}
|
mech.minepower = [LIGHT_GRAY]Síla těžení: {0}
|
||||||
mech.ability = [LIGHT_GRAY]Schopnost: {0}
|
mech.ability = [LIGHT_GRAY]Schopnost: {0}
|
||||||
mech.buildspeed = [LIGHT_GRAY]Building Speed: {0}%
|
mech.buildspeed = [LIGHT_GRAY]Rychlost stavění: {0}%
|
||||||
liquid.heatcapacity = [LIGHT_GRAY]Kapacita teploty: {0}
|
liquid.heatcapacity = [LIGHT_GRAY]Kapacita teploty: {0}
|
||||||
liquid.viscosity = [LIGHT_GRAY]Viskozita: {0}
|
liquid.viscosity = [LIGHT_GRAY]Viskozita: {0}
|
||||||
liquid.temperature = [LIGHT_GRAY]Teplota: {0}
|
liquid.temperature = [LIGHT_GRAY]Teplota: {0}
|
||||||
block.sand-boulder.name = Sand Boulder
|
block.sand-boulder.name = Sand Boulder
|
||||||
block.grass.name = Grass
|
block.grass.name = Tráva
|
||||||
block.salt.name = Salt
|
block.salt.name = sůl
|
||||||
block.saltrocks.name = Salt Rocks
|
block.saltrocks.name = Solný kámen
|
||||||
block.pebbles.name = Pebbles
|
block.pebbles.name = Pebbles
|
||||||
block.tendrils.name = Tendrils
|
block.tendrils.name = Tendrils
|
||||||
block.sandrocks.name = Sand Rocks
|
block.sandrocks.name = Písečný kámen
|
||||||
block.spore-pine.name = Spore Pine
|
block.spore-pine.name = Spore Pine
|
||||||
block.sporerocks.name = Spore Rocks
|
block.sporerocks.name = Spore Rocks
|
||||||
block.rock.name = Rock
|
block.rock.name = Rock
|
||||||
block.snowrock.name = Snow Rock
|
block.snowrock.name = Sněhový kámen
|
||||||
block.snow-pine.name = Snow Pine
|
block.snow-pine.name = Snow Pine
|
||||||
block.shale.name = Shale
|
block.shale.name = Shale
|
||||||
block.shale-boulder.name = Shale Boulder
|
block.shale-boulder.name = Shale Boulder
|
||||||
block.moss.name = Moss
|
block.moss.name = Mech
|
||||||
block.shrubs.name = Shrubs
|
block.shrubs.name = Shrubs
|
||||||
block.spore-moss.name = Spore Moss
|
block.spore-moss.name = Spore Moss
|
||||||
block.shalerocks.name = Shale Rocks
|
block.shalerocks.name = Shale Rocks
|
||||||
block.scrap-wall.name = Scrap Wall
|
block.scrap-wall.name = Stará zeď
|
||||||
block.scrap-wall-large.name = Large Scrap Wall
|
block.scrap-wall-large.name = Velá stará zeď
|
||||||
block.scrap-wall-huge.name = Huge Scrap Wall
|
block.scrap-wall-huge.name = obří stará zeď
|
||||||
block.scrap-wall-gigantic.name = Gigantic Scrap Wall
|
block.scrap-wall-gigantic.name = Gigantická stará zeď
|
||||||
block.thruster.name = Thruster
|
block.thruster.name = Thruster
|
||||||
block.kiln.name = Kiln
|
block.kiln.name = Kiln
|
||||||
block.graphite-press.name = Graphite Press
|
block.graphite-press.name = Graphitový lis
|
||||||
block.multi-press.name = Multi-Press
|
block.multi-press.name = Všětraný lys
|
||||||
block.constructing = {0} [LIGHT_GRAY](Constructing)
|
block.constructing = {0} [LIGHT_GRAY](Constructing)
|
||||||
block.spawn.name = Nepřátelský Spawn
|
block.spawn.name = Nepřátelský Spawn
|
||||||
block.core-shard.name = Core: Shard
|
block.core-shard.name = Core: Shard
|
||||||
@@ -806,28 +805,28 @@ block.darksand-tainted-water.name = Dark Sand Tainted Water
|
|||||||
block.tar.name = Tar
|
block.tar.name = Tar
|
||||||
block.stone.name = Kámen
|
block.stone.name = Kámen
|
||||||
block.sand.name = Písek
|
block.sand.name = Písek
|
||||||
block.darksand.name = Dark Sand
|
block.darksand.name = Černý písek
|
||||||
block.ice.name = Led
|
block.ice.name = Led
|
||||||
block.snow.name = Sníh
|
block.snow.name = Sníh
|
||||||
block.craters.name = Craters
|
block.craters.name = Krátery
|
||||||
block.sand-water.name = Sand water
|
block.sand-water.name = Písková voda
|
||||||
block.darksand-water.name = Dark Sand Water
|
block.darksand-water.name = Černá písková voda
|
||||||
block.char.name = Char
|
block.char.name = Char
|
||||||
block.holostone.name = Holo stone
|
block.holostone.name = Holo stone
|
||||||
block.ice-snow.name = Ice Snow
|
block.ice-snow.name = Ice Snow
|
||||||
block.rocks.name = Rocks
|
block.rocks.name = Kameny
|
||||||
block.icerocks.name = Ice rocks
|
block.icerocks.name = Ledové kameny
|
||||||
block.snowrocks.name = Snow Rocks
|
block.snowrocks.name = Sněhové kameny
|
||||||
block.dunerocks.name = Dune Rocks
|
block.dunerocks.name = Dune Rocks
|
||||||
block.pine.name = Pine
|
block.pine.name = Pine
|
||||||
block.white-tree-dead.name = White Tree Dead
|
block.white-tree-dead.name = White Tree Dead
|
||||||
block.white-tree.name = White Tree
|
block.white-tree.name = White Tree
|
||||||
block.spore-cluster.name = Spore Cluster
|
block.spore-cluster.name = Spore Cluster
|
||||||
block.metal-floor.name = Metal Floor
|
block.metal-floor.name = Železná podlaha
|
||||||
block.metal-floor-2.name = Metal Floor 2
|
block.metal-floor-2.name = Železná Podlaha
|
||||||
block.metal-floor-3.name = Metal Floor 3
|
block.metal-floor-3.name = železná Podlaha3
|
||||||
block.metal-floor-5.name = Metal Floor 5
|
block.metal-floor-5.name = Železná podlaha 5
|
||||||
block.metal-floor-damaged.name = Metal Floor Damaged
|
block.metal-floor-damaged.name = Rozbytáb
|
||||||
block.dark-panel-1.name = Dark Panel 1
|
block.dark-panel-1.name = Dark Panel 1
|
||||||
block.dark-panel-2.name = Dark Panel 2
|
block.dark-panel-2.name = Dark Panel 2
|
||||||
block.dark-panel-3.name = Dark Panel 3
|
block.dark-panel-3.name = Dark Panel 3
|
||||||
@@ -841,10 +840,10 @@ block.magmarock.name = Magma Rock
|
|||||||
block.cliffs.name = Cliffs
|
block.cliffs.name = Cliffs
|
||||||
block.copper-wall.name = Měděná zeď
|
block.copper-wall.name = Měděná zeď
|
||||||
block.copper-wall-large.name = Velká měděná zeď
|
block.copper-wall-large.name = Velká měděná zeď
|
||||||
block.titanium-wall.name = Titanium Wall
|
block.titanium-wall.name = Titanium Zeď
|
||||||
block.titanium-wall-large.name = Large Titanium Wall
|
block.titanium-wall-large.name = Velká Titanium Zeď
|
||||||
block.plastanium-wall.name = Plastanium Wall
|
block.plastanium-wall.name = Plastanium Zeď
|
||||||
block.plastanium-wall-large.name = Large Plastanium Wall
|
block.plastanium-wall-large.name = Velká Plastanium Zeď
|
||||||
block.phase-wall.name = Fázová stěna
|
block.phase-wall.name = Fázová stěna
|
||||||
block.phase-wall-large.name = Velká fázová stěna
|
block.phase-wall-large.name = Velká fázová stěna
|
||||||
block.thorium-wall.name = Thoriová stěna
|
block.thorium-wall.name = Thoriová stěna
|
||||||
@@ -918,7 +917,7 @@ block.blast-mixer.name = Výbušninový mixér
|
|||||||
block.solar-panel.name = Solární panel
|
block.solar-panel.name = Solární panel
|
||||||
block.solar-panel-large.name = Velký solární panel
|
block.solar-panel-large.name = Velký solární panel
|
||||||
block.oil-extractor.name = Ropný Extraktor
|
block.oil-extractor.name = Ropný Extraktor
|
||||||
block.command-center.name = Command Center
|
block.command-center.name = Řídící středisko
|
||||||
block.draug-factory.name = Draug Miner Drone Factory
|
block.draug-factory.name = Draug Miner Drone Factory
|
||||||
block.spirit-factory.name = Továrna na Spirit Drony
|
block.spirit-factory.name = Továrna na Spirit Drony
|
||||||
block.phantom-factory.name = Továrna na Fantom Drony
|
block.phantom-factory.name = Továrna na Fantom Drony
|
||||||
@@ -960,7 +959,7 @@ block.container.name = Kontejnér
|
|||||||
block.launch-pad.name = Launch Pad
|
block.launch-pad.name = Launch Pad
|
||||||
block.launch-pad-large.name = Large Launch Pad
|
block.launch-pad-large.name = Large Launch Pad
|
||||||
team.blue.name = modrá
|
team.blue.name = modrá
|
||||||
team.crux.name = red
|
team.crux.name = červená
|
||||||
team.sharded.name = orange
|
team.sharded.name = orange
|
||||||
team.orange.name = oranžová
|
team.orange.name = oranžová
|
||||||
team.derelict.name = derelict
|
team.derelict.name = derelict
|
||||||
@@ -1004,13 +1003,13 @@ tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core fo
|
|||||||
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese resources can then be used to research new technology.\n\n[accent]Press the launch button.
|
||||||
item.copper.description = Užitečný strukturální materiál. Používá se rozsáhle v ostatních typech bloků.
|
item.copper.description = Užitečný strukturální materiál. Používá se rozsáhle v ostatních typech bloků.
|
||||||
item.lead.description = Základní počáteční materiál. Požívá se rozsáhle v elektronice a v blocích pro transport tekutin.
|
item.lead.description = Základní počáteční materiál. Požívá se rozsáhle v elektronice a v blocích pro transport tekutin.
|
||||||
item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage.
|
item.metaglass.description = Vemi důležitá suočást všeho so se týká tekutin
|
||||||
item.graphite.description = Mineralized carbon, used for ammunition and electrical insulation.
|
item.graphite.description = Stlačený uhlík nedílná součást většiny infrastruktur
|
||||||
item.sand.description = Běžný materiál rozšířeně používaný v spalování slitin.
|
item.sand.description = Běžný materiál rozšířeně používaný v spalování slitin.
|
||||||
item.coal.description = Běžné a snadno dostupné palivo, pochází z Ostravy.
|
item.coal.description = Běžné a snadno dostupné palivo, pochází z Ostravy.
|
||||||
item.titanium.description = Vzácný, velice lehký kov, používá se rozsáhle v trasportu tekutin, vrtech a letounech.
|
item.titanium.description = Vzácný, velice lehký kov, používá se rozsáhle v trasportu tekutin, vrtech a letounech.
|
||||||
item.thorium.description = Hustý, radioaktivní materiál, používá se jako strukturální podpora a jako nuklearní palivo.
|
item.thorium.description = Hustý, radioaktivní materiál, používá se jako strukturální podpora a jako nuklearní palivo.
|
||||||
item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals.
|
item.scrap.description = Staré železo které se dá přepracovat na grafit měď olovo titánium a písek
|
||||||
item.silicon.description = Extrémně užitečný polovodič, aplikuje se v solárních panelech a v komplexní elektronice.
|
item.silicon.description = Extrémně užitečný polovodič, aplikuje se v solárních panelech a v komplexní elektronice.
|
||||||
item.plastanium.description = Lehký, kujný materiál, používá se v pokročilém letectví a jako fragmentační střelivo.
|
item.plastanium.description = Lehký, kujný materiál, používá se v pokročilém letectví a jako fragmentační střelivo.
|
||||||
item.phase-fabric.description = Skoro beztížná substance používaná v pokročilé elektronice a v sebeopravné technologii.
|
item.phase-fabric.description = Skoro beztížná substance používaná v pokročilé elektronice a v sebeopravné technologii.
|
||||||
@@ -1019,7 +1018,7 @@ item.spore-pod.description = Used for conversion into oil, explosives and fuel.
|
|||||||
item.blast-compound.description = Těkavá směs používaná v bombácha a výbušninách. Dá se spalovat ale jako palivo se nedoporučuje.
|
item.blast-compound.description = Těkavá směs používaná v bombácha a výbušninách. Dá se spalovat ale jako palivo se nedoporučuje.
|
||||||
item.pyratite.description = Extrémně vznětlivá substance, používá ve vznětovém střelivu.
|
item.pyratite.description = Extrémně vznětlivá substance, používá ve vznětovém střelivu.
|
||||||
liquid.water.description = Nejčastěji se používá ke chlazení a zpracování odpadu.
|
liquid.water.description = Nejčastěji se používá ke chlazení a zpracování odpadu.
|
||||||
liquid.slag.description = Various different types of molten metal mixed together. Can be separated into its constituent minerals, or sprayed at enemy units as a weapon.
|
liquid.slag.description = Rostavený scrap pou žívá se k vírobě olova mědi a grafitu.
|
||||||
liquid.oil.description = Může být spálen, vybouchnout nebo použit jako chlazení.
|
liquid.oil.description = Může být spálen, vybouchnout nebo použit jako chlazení.
|
||||||
liquid.cryofluid.description = Nejefektivnější tekutina pro chlazení.
|
liquid.cryofluid.description = Nejefektivnější tekutina pro chlazení.
|
||||||
mech.alpha-mech.description = Standartní mech. Má slušnou rychlost a poškození; Může vytvořit až 3 drony Pro zvýšenou ofenzivní způsobilost.
|
mech.alpha-mech.description = Standartní mech. Má slušnou rychlost a poškození; Může vytvořit až 3 drony Pro zvýšenou ofenzivní způsobilost.
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ credits = Danksagungen
|
|||||||
contributors = Übersetzer und Mitwirkende
|
contributors = Übersetzer und Mitwirkende
|
||||||
discord = Trete dem Mindustry Discord bei!
|
discord = Trete dem Mindustry Discord bei!
|
||||||
link.discord.description = Der offizielle Mindustry Discord-Chatroom
|
link.discord.description = Der offizielle Mindustry Discord-Chatroom
|
||||||
link.reddit.description = The Mindustry subreddit
|
link.reddit.description = Der Mindustry Subreddit
|
||||||
link.github.description = Quellcode des Spiels
|
link.github.description = Quellcode des Spiels
|
||||||
link.changelog.description = Liste der Änderungen
|
link.changelog.description = Liste der Änderungen
|
||||||
link.dev-builds.description = Entwicklungs-Builds (instabil)
|
link.dev-builds.description = Entwicklungs-Builds (instabil)
|
||||||
@@ -68,7 +68,7 @@ position = Position
|
|||||||
close = Schließen
|
close = Schließen
|
||||||
website = Website
|
website = Website
|
||||||
quit = Verlassen
|
quit = Verlassen
|
||||||
save.quit = Save & Quit
|
save.quit = Speichern & Beenden
|
||||||
maps = Karten
|
maps = Karten
|
||||||
maps.browse = Browse Maps
|
maps.browse = Browse Maps
|
||||||
continue = Weiter
|
continue = Weiter
|
||||||
@@ -87,7 +87,7 @@ mods = Mods
|
|||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
mods.guide = Modding Guide
|
mods.guide = Modding Guide
|
||||||
mods.report = Report Bug
|
mods.report = Report Bug
|
||||||
mods.openfolder = Open Mod Folder
|
mods.openfolder = Mod Verzeichnis öffnen
|
||||||
mod.enabled = [lightgray]Enabled
|
mod.enabled = [lightgray]Enabled
|
||||||
mod.disabled = [scarlet]Disabled
|
mod.disabled = [scarlet]Disabled
|
||||||
mod.disable = Disable
|
mod.disable = Disable
|
||||||
@@ -97,8 +97,8 @@ mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[ligh
|
|||||||
mod.enable = Enable
|
mod.enable = Enable
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Mod importieren
|
||||||
mod.import.github = Import GitHub Mod
|
mod.import.github = GitHub Mod importieren
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
@@ -133,16 +133,16 @@ server.kicked.idInUse = Du bist bereits auf dem Server! Anmeldungen mit zwei Acc
|
|||||||
server.kicked.customClient = Der Server akzeptiert keine Custom Builds von Mindustry. Lade dir die offizielle Version herunter.
|
server.kicked.customClient = Der Server akzeptiert keine Custom Builds von Mindustry. Lade dir die offizielle Version herunter.
|
||||||
server.kicked.gameover = Game Over!
|
server.kicked.gameover = Game Over!
|
||||||
server.versions = Deine Version:[accent] {0}[]\nServerversion:[accent] {1}[]
|
server.versions = Deine Version:[accent] {0}[]\nServerversion:[accent] {1}[]
|
||||||
host.info = Der [accent]host[]-Knopf startet einen Server auf den Ports [scarlet]6567[] und [scarlet]6568.[]\nJeder im gleichen [LIGHT_GRAY]W-Lan oder lokalem Netzwerk[] sollte deinen Server in seiner Server Liste sehen können.\n\nWenn du Leuten die Verbindung über IP ermöglichen willst, benötigst du [accent]Port-Forwarding[].\n\n[LIGHT_GRAY]Hinweis: Falls es Probleme mit der Verbindung im Netzwerk gibt, stell sicher, dass Mindustry in deinen Firewall Einstellungen Zugriff auf das lokale Netzwerk hat.
|
host.info = Der [accent]Server hosten[]-Knopf startet einen Server auf den Ports [scarlet]6567[] und [scarlet]6568.[]\nJeder im gleichen [LIGHT_GRAY]W-Lan oder lokalen Netzwerk[] sollte deinen Server in seiner Server Liste sehen können.\n\nWenn du anderen die Verbindung über IP ermöglichen willst, benötigst du [accent]Port-Forwarding[].\n\n[LIGHT_GRAY]Hinweis: Falls es Probleme mit der Verbindung im Netzwerk gibt, stelle sicher, dass Mindustry in deinen Firewall Einstellungen Zugriff auf das lokale Netzwerk hat.
|
||||||
join.info = Hier kannst du eine [accent]Server-IP[] eingeben um dich zu verbinden oder Server im [accent]lokalem Netzwerk[] entdecken und dich mit ihnen verbinden.\nSowohl Spielen über das lokale Netzwerk als auch Spielen über das Internet werden unterstützt.\n\n[LIGHT_GRAY]Hinweis: Es gibt keine globale Server Liste; Wenn du dich mit jemand per IP verbinden willst musst du den Host nach seiner IP fragen.
|
join.info = Hier kannst du eine [accent]Server-IP[] eingeben um dich zu verbinden oder Server im [accent]lokalen Netzwerk[] entdecken und dich mit ihnen verbinden.\nSowohl Spielen über das lokale Netzwerk als auch Spielen über das Internet werden unterstützt.\n\n[LIGHT_GRAY]Hinweis: Es gibt keine globale Server Liste; Wenn du dich mit jemandem per IP verbinden willst, musst du den Host nach seiner IP fragen.
|
||||||
hostserver = Server hosten
|
hostserver = Server hosten
|
||||||
invitefriends = Invite Friends
|
invitefriends = Invite Friends
|
||||||
hostserver.mobile = Host\nSpiel
|
hostserver.mobile = Host\nSpiel
|
||||||
host = Host
|
host = Server hosten
|
||||||
hosting = [accent] Server wird geöffnet ...
|
hosting = [accent] Server wird geöffnet ...
|
||||||
hosts.refresh = Aktualisieren
|
hosts.refresh = Aktualisieren
|
||||||
hosts.discovering = Suche nach LAN-Spielen
|
hosts.discovering = Suche nach LAN-Spielen
|
||||||
hosts.discovering.any = Discovering games
|
hosts.discovering.any = Suche nach Spielen
|
||||||
server.refreshing = Server wird aktualisiert
|
server.refreshing = Server wird aktualisiert
|
||||||
hosts.none = [lightgray] Keine LAN-Spiele gefunden!
|
hosts.none = [lightgray] Keine LAN-Spiele gefunden!
|
||||||
host.invalid = [scarlet] Kann keine Verbindung zum Host herstellen.
|
host.invalid = [scarlet] Kann keine Verbindung zum Host herstellen.
|
||||||
@@ -225,15 +225,15 @@ cancel = Abbruch
|
|||||||
openlink = Link öffnen
|
openlink = Link öffnen
|
||||||
copylink = Kopiere Link
|
copylink = Kopiere Link
|
||||||
back = Zurück
|
back = Zurück
|
||||||
data.export = Export Data
|
data.export = Daten exportieren
|
||||||
data.import = Import Data
|
data.import = Daten importieren
|
||||||
data.exported = Data exported.
|
data.exported = Data exported.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = This isn't valid game data.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
||||||
classic.export = Export Classic Data
|
classic.export = Export Classic Data
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
||||||
quit.confirm = Willst du wirklich aufhören?
|
quit.confirm = Willst du wirklich aufhören?
|
||||||
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
|
quit.confirm.tutorial = Willst du das Tutorial wirklich abbrechen?\nDu kannst es unter[accent] Einstellungen->Spiel->Tutorial wiederholen[] erneut spielen.
|
||||||
loading = [accent]Wird geladen...
|
loading = [accent]Wird geladen...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Reloading Mods...
|
||||||
saving = [accent]Speichere...
|
saving = [accent]Speichere...
|
||||||
@@ -326,14 +326,14 @@ editor.saved = Gespeichert!
|
|||||||
editor.save.noname = Deine Karte hat keinen Namen! Setze einen Namen im [accent]Karten Info[] Menu.
|
editor.save.noname = Deine Karte hat keinen Namen! Setze einen Namen im [accent]Karten Info[] Menu.
|
||||||
editor.save.overwrite = Deine Karte überschreibt eine built-in Karte! Wähle einen anderen Karten Namen im [accent]'Karten info'[] Menu.
|
editor.save.overwrite = Deine Karte überschreibt eine built-in Karte! Wähle einen anderen Karten Namen im [accent]'Karten info'[] Menu.
|
||||||
editor.import.exists = [scarlet]Fehler beim Import:[] Ein built-in Karte namens '{0}' existiert bereits!
|
editor.import.exists = [scarlet]Fehler beim Import:[] Ein built-in Karte namens '{0}' existiert bereits!
|
||||||
editor.import = Import...
|
editor.import = Importieren...
|
||||||
editor.importmap = Importiere Karte
|
editor.importmap = Importiere Karte
|
||||||
editor.importmap.description = Importiere von einer bestehenden Karte
|
editor.importmap.description = Importiere von einer bestehenden Karte
|
||||||
editor.importfile = Importiere Datei
|
editor.importfile = Importiere Datei
|
||||||
editor.importfile.description = Importiere aus einer Karten Datei
|
editor.importfile.description = Importiere aus einer Karten Datei
|
||||||
editor.importimage = Importiere Terrain Bild
|
editor.importimage = Importiere Terrain Bild
|
||||||
editor.importimage.description = Importiere aus einer Terrain Bild Datei
|
editor.importimage.description = Importiere aus einer Terrain Bild Datei
|
||||||
editor.export = Export...
|
editor.export = Exportieren...
|
||||||
editor.exportfile = Export in Datei
|
editor.exportfile = Export in Datei
|
||||||
editor.exportfile.description = Exportiere in eine Karten Datei
|
editor.exportfile.description = Exportiere in eine Karten Datei
|
||||||
editor.exportimage = Export in Terrain Bild Datei
|
editor.exportimage = Export in Terrain Bild Datei
|
||||||
@@ -404,7 +404,7 @@ ping = Ping: {0}ms
|
|||||||
language.restart = Bitte Starte dein Spiel neu, damit die Sprach-Einstellung aktiv wird.
|
language.restart = Bitte Starte dein Spiel neu, damit die Sprach-Einstellung aktiv wird.
|
||||||
settings = Einstellungen
|
settings = Einstellungen
|
||||||
tutorial = Tutorial
|
tutorial = Tutorial
|
||||||
tutorial.retake = Re-Take Tutorial
|
tutorial.retake = Tutorial wiederholen
|
||||||
editor = Editor
|
editor = Editor
|
||||||
mapeditor = Karten Editor
|
mapeditor = Karten Editor
|
||||||
abandon = Aufgeben
|
abandon = Aufgeben
|
||||||
@@ -424,8 +424,8 @@ launch.confirm = Dies wird alle Ressourcen in deinen Kern übertragen.\nDu kanns
|
|||||||
launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
|
launch.skip.confirm = If you skip now, you will not be able to launch until later waves.
|
||||||
uncover = Freischalten
|
uncover = Freischalten
|
||||||
configure = Startitems festlegen
|
configure = Startitems festlegen
|
||||||
bannedblocks = Banned Blocks
|
bannedblocks = Gesperrte Blöcke
|
||||||
addall = Add All
|
addall = Alle hinzufügen
|
||||||
configure.locked = [LIGHT_GRAY]Erreiche Welle {0}\n, um Startitems festlegen zu können.
|
configure.locked = [LIGHT_GRAY]Erreiche Welle {0}\n, um Startitems festlegen zu können.
|
||||||
configure.invalid = Amount must be a number between 0 and {0}.
|
configure.invalid = Amount must be a number between 0 and {0}.
|
||||||
zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet.
|
zone.unlocked = [LIGHT_GRAY]{0} freigeschaltet.
|
||||||
@@ -476,26 +476,26 @@ zone.fungalPass.description = A transition area between high mountains and lower
|
|||||||
zone.impact0078.description = <Beschreibung hier einfügen>
|
zone.impact0078.description = <Beschreibung hier einfügen>
|
||||||
zone.crags.description = <Beschreibung hier einfügen>
|
zone.crags.description = <Beschreibung hier einfügen>
|
||||||
settings.language = Sprache
|
settings.language = Sprache
|
||||||
settings.data = Game Data
|
settings.data = Spieldaten
|
||||||
settings.reset = Auf Standard zurücksetzen
|
settings.reset = Auf Standard zurücksetzen
|
||||||
settings.rebind = Zuweisen
|
settings.rebind = Zuweisen
|
||||||
settings.controls = Steuerung
|
settings.controls = Steuerung
|
||||||
settings.game = Spiel
|
settings.game = Spiel
|
||||||
settings.sound = Audio
|
settings.sound = Audio
|
||||||
settings.graphics = Grafiken
|
settings.graphics = Grafik
|
||||||
settings.cleardata = Spieldaten zurücksetzen...
|
settings.cleardata = Spieldaten zurücksetzen...
|
||||||
settings.clear.confirm = Bist du sicher, dass du die Spieldaten zurücksetzen willst?\n Diese Aktion kann nicht rückgängig gemacht werden!
|
settings.clear.confirm = Bist du sicher, dass du die Spieldaten zurücksetzen willst?\n Diese Aktion kann nicht rückgängig gemacht werden!
|
||||||
settings.clearall.confirm = [scarlet]Warnung![]\nDas wird jegliche Spieldaten zurücksetzen inklusive Speicherstände, Karten, Freischaltungen und Tastenbelegungen.\n Nachdem du 'OK' drückst wird alles zurückgesetzt und das Spiel schließt sich automatisch.
|
settings.clearall.confirm = [scarlet]Warnung![]\nDas wird jegliche Spieldaten zurücksetzen inklusive Speicherstände, Karten, Freischaltungen und Tastenbelegungen.\n Nachdem du 'OK' drückst wird alles zurückgesetzt und das Spiel schließt sich automatisch.
|
||||||
paused = Pausiert
|
paused = Pausiert
|
||||||
clear = Clear
|
clear = Leeren
|
||||||
banned = [scarlet]Banned
|
banned = [scarlet]Banned
|
||||||
yes = Ja
|
yes = Ja
|
||||||
no = Nein
|
no = Nein
|
||||||
info.title = [accent]Info
|
info.title = [accent]Info
|
||||||
error.title = [crimson] Ein Fehler ist aufgetreten
|
error.title = [crimson] Ein Fehler ist aufgetreten
|
||||||
error.crashtitle = Ein Fehler ist aufgetreten!
|
error.crashtitle = Ein Fehler ist aufgetreten!
|
||||||
blocks.input = Input
|
blocks.input = Eingang
|
||||||
blocks.output = Output
|
blocks.output = Ausgang
|
||||||
blocks.booster = Verstärkung
|
blocks.booster = Verstärkung
|
||||||
block.unknown = [LIGHT_GRAY]???
|
block.unknown = [LIGHT_GRAY]???
|
||||||
blocks.powercapacity = Kapazität
|
blocks.powercapacity = Kapazität
|
||||||
@@ -524,12 +524,12 @@ blocks.boosteffect = Verstärkungseffekt
|
|||||||
blocks.maxunits = Max aktive Einheiten
|
blocks.maxunits = Max aktive Einheiten
|
||||||
blocks.health = Lebenspunkte
|
blocks.health = Lebenspunkte
|
||||||
blocks.buildtime = Baudauer
|
blocks.buildtime = Baudauer
|
||||||
blocks.buildcost = Build Cost
|
blocks.buildcost = Baukosten
|
||||||
blocks.inaccuracy = Ungenauigkeit
|
blocks.inaccuracy = Ungenauigkeit
|
||||||
blocks.shots = Schüsse
|
blocks.shots = Schüsse
|
||||||
blocks.reload = Schüsse/Sekunde
|
blocks.reload = Schüsse/Sekunde
|
||||||
blocks.ammo = Munition
|
blocks.ammo = Munition
|
||||||
bar.drilltierreq = Better Drill Required
|
bar.drilltierreq = besserer Bohrer benötigt
|
||||||
bar.drillspeed = Bohrgeschwindigkeit: {0}/s
|
bar.drillspeed = Bohrgeschwindigkeit: {0}/s
|
||||||
bar.pumpspeed = Pump Speed: {0}/s
|
bar.pumpspeed = Pump Speed: {0}/s
|
||||||
bar.efficiency = Effizienz: {0}%
|
bar.efficiency = Effizienz: {0}%
|
||||||
@@ -554,7 +554,7 @@ bullet.knockback = [stat]{0}[lightgray] zurückstoßend
|
|||||||
bullet.freezing = [stat]gefrierend
|
bullet.freezing = [stat]gefrierend
|
||||||
bullet.tarred = [stat]geteert
|
bullet.tarred = [stat]geteert
|
||||||
bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator
|
bullet.multiplier = [stat]{0}[lightgray]x Munition Multiplikator
|
||||||
bullet.reload = [stat]{0}[lightgray]x neu laden
|
bullet.reload = [stat]{0}[lightgray]x Feuerrate
|
||||||
unit.blocks = Blöcke
|
unit.blocks = Blöcke
|
||||||
unit.powersecond = Stromeinheiten/Sekunde
|
unit.powersecond = Stromeinheiten/Sekunde
|
||||||
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
|
unit.liquidsecond = Flüssigkeitseinheiten/Sekunde
|
||||||
@@ -599,25 +599,28 @@ setting.difficulty.insane = Unmöglich
|
|||||||
setting.difficulty.name = Schwierigkeit
|
setting.difficulty.name = Schwierigkeit
|
||||||
setting.screenshake.name = Bildschirmwackeln
|
setting.screenshake.name = Bildschirmwackeln
|
||||||
setting.effects.name = Effekte anzeigen
|
setting.effects.name = Effekte anzeigen
|
||||||
setting.destroyedblocks.name = Display Destroyed Blocks
|
setting.destroyedblocks.name = Zerstörte Blöcke anzeigen
|
||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = Automatische Wegfindung beim Bau von Förderbändern
|
||||||
setting.sensitivity.name = Controller-Empfindlichkeit
|
setting.sensitivity.name = Controller-Empfindlichkeit
|
||||||
setting.saveinterval.name = Autosave Häufigkeit
|
setting.saveinterval.name = Autosave Häufigkeit
|
||||||
setting.seconds = {0} Sekunden
|
setting.seconds = {0} Sekunden
|
||||||
|
setting.blockselecttimeout.name = Block Auswahl Timeout
|
||||||
|
setting.milliseconds = {0} Millisekunden
|
||||||
setting.fullscreen.name = Vollbild
|
setting.fullscreen.name = Vollbild
|
||||||
setting.borderlesswindow.name = Randloses Fenster[LIGHT_GRAY] (Neustart teilweise erforderlich)
|
setting.borderlesswindow.name = Randloses Fenster[LIGHT_GRAY] (Neustart teilweise erforderlich)
|
||||||
setting.fps.name = Zeige FPS
|
setting.fps.name = Zeige FPS
|
||||||
|
setting.blockselectkeys.name = Block Shortcuts anzeigen
|
||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Verpixeln [LIGHT_GRAY](Könnte die Leistung beeinträchtigen)
|
setting.pixelate.name = Verpixeln [LIGHT_GRAY](Könnte die Leistung beeinträchtigen)
|
||||||
setting.minimap.name = Zeige die Minimap
|
setting.minimap.name = Zeige die Minimap
|
||||||
setting.position.name = Show Player Position
|
setting.position.name = Spieler-Position anzeigen
|
||||||
setting.musicvol.name = Musiklautstärke
|
setting.musicvol.name = Musiklautstärke
|
||||||
setting.ambientvol.name = Ambient Volume
|
setting.ambientvol.name = Ambient Volume
|
||||||
setting.mutemusic.name = Musik stummschalten
|
setting.mutemusic.name = Musik stummschalten
|
||||||
setting.sfxvol.name = Audioeffekt-Lautstärke
|
setting.sfxvol.name = Audioeffekt-Lautstärke
|
||||||
setting.mutesound.name = Audioeffekte stummschalten
|
setting.mutesound.name = Audioeffekte stummschalten
|
||||||
setting.crashreport.name = Anonyme Absturzberichte senden
|
setting.crashreport.name = Anonyme Absturzberichte senden
|
||||||
setting.savecreate.name = Auto-Create Saves
|
setting.savecreate.name = Automatisch Speicherstände anlegen
|
||||||
setting.publichost.name = Public Game Visibility
|
setting.publichost.name = Public Game Visibility
|
||||||
setting.chatopacity.name = Chat Deckkraft
|
setting.chatopacity.name = Chat Deckkraft
|
||||||
setting.lasersopacity.name = Power Laser Opacity
|
setting.lasersopacity.name = Power Laser Opacity
|
||||||
@@ -635,24 +638,40 @@ category.multiplayer.name = Mehrspieler
|
|||||||
command.attack = Angreifen
|
command.attack = Angreifen
|
||||||
command.rally = Rally
|
command.rally = Rally
|
||||||
command.retreat = Rückzug
|
command.retreat = Rückzug
|
||||||
|
placement.blockselectkeys = \n[lightgray]Shortcut: [{0},
|
||||||
keybind.clear_building.name = Clear Building
|
keybind.clear_building.name = Clear Building
|
||||||
keybind.press = Drücke eine Taste...
|
keybind.press = Drücke eine Taste...
|
||||||
keybind.press.axis = Drücke eine Taste oder bewege eine Achse...
|
keybind.press.axis = Drücke eine Taste oder bewege eine Achse...
|
||||||
keybind.screenshot.name = Karten Screenshot
|
keybind.screenshot.name = Karten Screenshot
|
||||||
keybind.move_x.name = X-Achse
|
keybind.move_x.name = X-Achse
|
||||||
keybind.move_y.name = Y-Achse
|
keybind.move_y.name = Y-Achse
|
||||||
keybind.schematic_select.name = Select Region
|
keybind.schematic_select.name = Bereich auswählen
|
||||||
keybind.schematic_menu.name = Schematic Menu
|
keybind.schematic_menu.name = Schematic Menu
|
||||||
keybind.schematic_flip_x.name = Flip Schematic X
|
keybind.schematic_flip_x.name = Flip Schematic X
|
||||||
keybind.schematic_flip_y.name = Flip Schematic Y
|
keybind.schematic_flip_y.name = Flip Schematic Y
|
||||||
keybind.fullscreen.name = Toggle Fullscreen
|
keybind.category_prev.name = Vorige Kategorie
|
||||||
|
keybind.category_next.name = Nächste Kategorie
|
||||||
|
keybind.block_select_left.name = Block-Auswahl nach links
|
||||||
|
keybind.block_select_right.name = Block-Auswahl nach rechts
|
||||||
|
keybind.block_select_up.name = Block-Auswahl nach oben
|
||||||
|
keybind.block_select_down.name = Block-Auswahl nach unten
|
||||||
|
keybind.block_select_01.name = Kategorie/Block 1 auswählen
|
||||||
|
keybind.block_select_02.name = Kategorie/Block 2 auswählen
|
||||||
|
keybind.block_select_03.name = Kategorie/Block 3 auswählen
|
||||||
|
keybind.block_select_04.name = Kategorie/Block 4 auswählen
|
||||||
|
keybind.block_select_05.name = Kategorie/Block 5 auswählen
|
||||||
|
keybind.block_select_06.name = Kategorie/Block 6 auswählen
|
||||||
|
keybind.block_select_07.name = Kategorie/Block 7 auswählen
|
||||||
|
keybind.block_select_08.name = Kategorie/Block 8 auswählen
|
||||||
|
keybind.block_select_09.name = Kategorie/Block 9 auswählen
|
||||||
|
keybind.block_select_10.name = Kategorie/Block 10 auswählen
|
||||||
|
keybind.fullscreen.name = Vollbild umschalten
|
||||||
keybind.select.name = Auswählen/Schießen
|
keybind.select.name = Auswählen/Schießen
|
||||||
keybind.diagonal_placement.name = Diagonal platzieren
|
keybind.diagonal_placement.name = Diagonal platzieren
|
||||||
keybind.pick.name = Block Auswählen
|
keybind.pick.name = Block Auswählen
|
||||||
keybind.break_block.name = Block zerstören
|
keybind.break_block.name = Block zerstören
|
||||||
keybind.deselect.name = Auswahl aufheben
|
keybind.deselect.name = Auswahl aufheben
|
||||||
keybind.shoot.name = Schießen
|
keybind.shoot.name = Schießen
|
||||||
keybind.zoom_hold.name = Zoom halten
|
|
||||||
keybind.zoom.name = Zoomen
|
keybind.zoom.name = Zoomen
|
||||||
keybind.menu.name = Menü
|
keybind.menu.name = Menü
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
@@ -710,7 +729,7 @@ rules.title.unit = Einheiten
|
|||||||
content.item.name = Materialien
|
content.item.name = Materialien
|
||||||
content.liquid.name = Flüssigkeiten
|
content.liquid.name = Flüssigkeiten
|
||||||
content.unit.name = Einheiten
|
content.unit.name = Einheiten
|
||||||
content.block.name = Blocks
|
content.block.name = Blöcke
|
||||||
content.mech.name = Mechs
|
content.mech.name = Mechs
|
||||||
item.copper.name = Kupfer
|
item.copper.name = Kupfer
|
||||||
item.lead.name = Blei
|
item.lead.name = Blei
|
||||||
@@ -753,6 +772,7 @@ mech.trident-ship.name = Trident
|
|||||||
mech.trident-ship.weapon = Bombenschacht
|
mech.trident-ship.weapon = Bombenschacht
|
||||||
mech.glaive-ship.name = Glaive
|
mech.glaive-ship.name = Glaive
|
||||||
mech.glaive-ship.weapon = Flammen-Mehrlader
|
mech.glaive-ship.weapon = Flammen-Mehrlader
|
||||||
|
item.corestorable = [lightgray]Im Kern speicherbar: {0}
|
||||||
item.explosiveness = [LIGHT_GRAY]Explosivität: {0}
|
item.explosiveness = [LIGHT_GRAY]Explosivität: {0}
|
||||||
item.flammability = [LIGHT_GRAY]Entflammbarkeit: {0}
|
item.flammability = [LIGHT_GRAY]Entflammbarkeit: {0}
|
||||||
item.radioactivity = [LIGHT_GRAY]Radioaktivität: {0}
|
item.radioactivity = [LIGHT_GRAY]Radioaktivität: {0}
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Destruir Bloque
|
keybind.break_block.name = Destruir Bloque
|
||||||
keybind.deselect.name = Deseleccionar
|
keybind.deselect.name = Deseleccionar
|
||||||
keybind.shoot.name = Disparar
|
keybind.shoot.name = Disparar
|
||||||
keybind.zoom_hold.name = Mantener Zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menú
|
keybind.menu.name = Menú
|
||||||
keybind.pause.name = Pausa
|
keybind.pause.name = Pausa
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Vali blokk
|
|||||||
keybind.break_block.name = Hävita blokk
|
keybind.break_block.name = Hävita blokk
|
||||||
keybind.deselect.name = Tühista valik
|
keybind.deselect.name = Tühista valik
|
||||||
keybind.shoot.name = Tulista
|
keybind.shoot.name = Tulista
|
||||||
keybind.zoom_hold.name = Suumimise režiim
|
|
||||||
keybind.zoom.name = Muuda suumi
|
keybind.zoom.name = Muuda suumi
|
||||||
keybind.menu.name = Menüü
|
keybind.menu.name = Menüü
|
||||||
keybind.pause.name = Paus
|
keybind.pause.name = Paus
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Jaso blokea
|
|||||||
keybind.break_block.name = Apurtu blokea
|
keybind.break_block.name = Apurtu blokea
|
||||||
keybind.deselect.name = Deshautatu
|
keybind.deselect.name = Deshautatu
|
||||||
keybind.shoot.name = Tirokatu
|
keybind.shoot.name = Tirokatu
|
||||||
keybind.zoom_hold.name = Zoom mantenduz
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menua
|
keybind.menu.name = Menua
|
||||||
keybind.pause.name = Pausatu
|
keybind.pause.name = Pausatu
|
||||||
|
|||||||
@@ -547,7 +547,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -99,6 +99,7 @@ mod.enabled = [lightgray]Activé
|
|||||||
mod.disabled = [scarlet]Désactivé
|
mod.disabled = [scarlet]Désactivé
|
||||||
mod.disable = Désactiver
|
mod.disable = Désactiver
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Unable to delete mod. File may be in use.
|
||||||
|
mod.requiresversion = [scarlet]Version du jeu requise : [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]Dépendances manquantes: {0}
|
mod.missingdependencies = [scarlet]Dépendances manquantes: {0}
|
||||||
mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes:[accent] {1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé.
|
mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes:[accent] {1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé.
|
||||||
mod.enable = Activer
|
mod.enable = Activer
|
||||||
@@ -496,6 +497,7 @@ settings.language = Langue
|
|||||||
settings.data = Données du Jeu
|
settings.data = Données du Jeu
|
||||||
settings.reset = Valeurs par Défaut
|
settings.reset = Valeurs par Défaut
|
||||||
settings.rebind = Réattribuer
|
settings.rebind = Réattribuer
|
||||||
|
settings.resetKey = Réinitialiser
|
||||||
settings.controls = Contrôles
|
settings.controls = Contrôles
|
||||||
settings.game = Jeu
|
settings.game = Jeu
|
||||||
settings.sound = Son
|
settings.sound = Son
|
||||||
@@ -589,6 +591,8 @@ unit.persecond = /sec
|
|||||||
unit.timesspeed = x vitesse
|
unit.timesspeed = x vitesse
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = objets
|
unit.items = objets
|
||||||
|
unit.thousands = k
|
||||||
|
unit.millions = mil
|
||||||
category.general = Général
|
category.general = Général
|
||||||
category.power = Énergie
|
category.power = Énergie
|
||||||
category.liquids = Liquides
|
category.liquids = Liquides
|
||||||
@@ -698,7 +702,6 @@ keybind.pick.name = Choisir un bloc
|
|||||||
keybind.break_block.name = Supprimer un bloc
|
keybind.break_block.name = Supprimer un bloc
|
||||||
keybind.deselect.name = Désélectionner
|
keybind.deselect.name = Désélectionner
|
||||||
keybind.shoot.name = Tirer
|
keybind.shoot.name = Tirer
|
||||||
keybind.zoom_hold.name = Maintenir pour zoomer
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
@@ -1084,7 +1087,7 @@ mech.alpha-mech.description = Le mécha standard. Est basé sur une unité Poign
|
|||||||
mech.delta-mech.description = Un mécha rapide, avec une armure légère, conçu pour les attaques de frappe. Il inflige, par contre, peu de dégâts aux structures. Néanmoins il peut tuer de grand groupes d'ennemis très rapidement avec ses arcs électriques.
|
mech.delta-mech.description = Un mécha rapide, avec une armure légère, conçu pour les attaques de frappe. Il inflige, par contre, peu de dégâts aux structures. Néanmoins il peut tuer de grand groupes d'ennemis très rapidement avec ses arcs électriques.
|
||||||
mech.tau-mech.description = Un mécha de support. Soigne les blocs alliés en tirant dessus. Il peut aussi éteindre les feux et soigner ses alliés en zone avec sa compétence.
|
mech.tau-mech.description = Un mécha de support. Soigne les blocs alliés en tirant dessus. Il peut aussi éteindre les feux et soigner ses alliés en zone avec sa compétence.
|
||||||
mech.omega-mech.description = Un mécha cuirassé et large fait pour les assauts frontaux. Sa compétence lui permet de bloquer 90% des dégâts.
|
mech.omega-mech.description = Un mécha cuirassé et large fait pour les assauts frontaux. Sa compétence lui permet de bloquer 90% des dégâts.
|
||||||
mech.dart-ship.description = Le vaisseau standard. Raisonnablement rapide et léger. Il a néanmoins peu d'attaque et une faible vitesse de minage.
|
mech.dart-ship.description = Le vaisseau standard. Il est raisonnablement rapide, léger et possède une vitesse de minage rapide. Néanmoins, ses capacités d'attaque sont faibles.
|
||||||
mech.javelin-ship.description = Un vaisseau de frappe éclair qui, bien que lent au départ, peut accélérer pour atteindre de très grandes vitesses et voler jusqu'aux avant-postes ennemis, faisant d'énormes dégâts avec ses arc électriques obtenus à vitesse maximum et ses missiles.
|
mech.javelin-ship.description = Un vaisseau de frappe éclair qui, bien que lent au départ, peut accélérer pour atteindre de très grandes vitesses et voler jusqu'aux avant-postes ennemis, faisant d'énormes dégâts avec ses arc électriques obtenus à vitesse maximum et ses missiles.
|
||||||
mech.trident-ship.description = Un bombardier lourd, conçu pour la construction et pour la destruction des fortifications ennemies. Assez bien blindé.
|
mech.trident-ship.description = Un bombardier lourd, conçu pour la construction et pour la destruction des fortifications ennemies. Assez bien blindé.
|
||||||
mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Équipé avec un fusil automatique à munitions incendiaires. Est très maniable.
|
mech.glaive-ship.description = Un grand vaisseau de combat cuirassé. Équipé avec un fusil automatique à munitions incendiaires. Est très maniable.
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Choisir un bloc
|
|||||||
keybind.break_block.name = Supprimer un bloc
|
keybind.break_block.name = Supprimer un bloc
|
||||||
keybind.deselect.name = Déselectionner
|
keybind.deselect.name = Déselectionner
|
||||||
keybind.shoot.name = Tirer
|
keybind.shoot.name = Tirer
|
||||||
keybind.zoom_hold.name = Tenir le zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Memilih Blok
|
|||||||
keybind.break_block.name = Menghancurkan Blok
|
keybind.break_block.name = Menghancurkan Blok
|
||||||
keybind.deselect.name = Batal Memilih
|
keybind.deselect.name = Batal Memilih
|
||||||
keybind.shoot.name = Menembak
|
keybind.shoot.name = Menembak
|
||||||
keybind.zoom_hold.name = Tahan Mode Zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Jeda
|
keybind.pause.name = Jeda
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -652,7 +652,6 @@ keybind.pick.name = ブロックの選択
|
|||||||
keybind.break_block.name = ブロックの破壊
|
keybind.break_block.name = ブロックの破壊
|
||||||
keybind.deselect.name = 選択解除
|
keybind.deselect.name = 選択解除
|
||||||
keybind.shoot.name = ショット
|
keybind.shoot.name = ショット
|
||||||
keybind.zoom_hold.name = 長押しズーム
|
|
||||||
keybind.zoom.name = ズーム
|
keybind.zoom.name = ズーム
|
||||||
keybind.menu.name = メニュー
|
keybind.menu.name = メニュー
|
||||||
keybind.pause.name = ポーズ
|
keybind.pause.name = ポーズ
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ load.image = 사진
|
|||||||
load.content = 컨텐츠
|
load.content = 컨텐츠
|
||||||
load.system = 시스템
|
load.system = 시스템
|
||||||
load.mod = 모드
|
load.mod = 모드
|
||||||
|
load.scripts = 스크립트
|
||||||
|
|
||||||
schematic = 설계도
|
schematic = 설계도
|
||||||
schematic.add = 설계도 저장하기
|
schematic.add = 설계도 저장하기
|
||||||
@@ -95,10 +96,11 @@ mods.none = [LIGHT_GRAY]추가한 모드가 없습니다!
|
|||||||
mods.guide = 모드 가이드
|
mods.guide = 모드 가이드
|
||||||
mods.report = 버그 신고
|
mods.report = 버그 신고
|
||||||
mods.openfolder = 모드 폴더 열기
|
mods.openfolder = 모드 폴더 열기
|
||||||
mod.enabled = [firebrick]활성화
|
mod.enabled = [lightgray]활성화
|
||||||
mod.disabled = [lightgray]비활성화
|
mod.disabled = [scarlet]비활성화
|
||||||
mod.disable = 비활성화
|
mod.disable = 비활성화
|
||||||
mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다.
|
mod.delete.error = 모드를 삭제할 수 없습니다. 아마도 해당 모드가 사용중인 것 같습니다.
|
||||||
|
mod.requiresversion = [scarlet]게임의 버전이 낮아 모드를 활성화할 수 없습니다!\n[scarlet]요구되는 게임 버전 : [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]의존되는 모드: {0}
|
mod.missingdependencies = [scarlet]의존되는 모드: {0}
|
||||||
mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 :[accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다.
|
mod.nowdisabled = [scarlet]모드 '{0}'는 다음의 모드에 의존합니다 :[accent] {1}\n[lightgray]이 모드를 먼저 다운로드해야합니다.\n이 모드는 자동으로 비활성화됩니다.
|
||||||
mod.enable = 활성화
|
mod.enable = 활성화
|
||||||
@@ -106,11 +108,13 @@ mod.requiresrestart = 모드 변경사항을 적용하기 위해 게임을 종
|
|||||||
mod.reloadrequired = [scarlet]새로고침 예정됨
|
mod.reloadrequired = [scarlet]새로고침 예정됨
|
||||||
mod.import = 모드 추가
|
mod.import = 모드 추가
|
||||||
mod.import.github = 깃허브 모드 추가
|
mod.import.github = 깃허브 모드 추가
|
||||||
|
mod.item.remove = 이것은 모드[accent] '{0}'[]의 자원입니다. 이 자원을 삭제하려면, 이 모드를 제거해야합니다.
|
||||||
mod.remove.confirm = 이 모드를 삭제하시겠습니까?
|
mod.remove.confirm = 이 모드를 삭제하시겠습니까?
|
||||||
mod.author = [LIGHT_GRAY]제작자 : [] {0}
|
mod.author = [LIGHT_GRAY]제작자 : [] {0}
|
||||||
mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 이 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0}
|
mod.missing = 이 세이브파일에는 설치하지 않은 모드 혹은 이 버전에 속해있지 않은 데이터가 포함되어 있습니다. 이 파일을 불러올 경우 세이브파일의 데이터가 손상될 수 있습니다. 정말로 이 파일을 불러오시겠습니까?\n[lightgray]모드 :\n{0}
|
||||||
mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요.
|
mod.preview.missing = 워크샵에 당신의 모드를 업로드하기 전에 미리보기 이미지를 먼저 추가해야합니다.\n[accent] preview.png[]라는 이름으로 미리보기 이미지를 당신의 모드 폴더안에 준비한 후 다시 시도해주세요.
|
||||||
mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오.
|
mod.folder.missing = 워크샵에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 파일을 폴더에 압축 해제하고 이전 압축파일을 제거한 후, 게임을 재시작하거나 모드를 다시 로드하십시오.
|
||||||
|
mod.scripts.unsupported = 당신의 기기는 모드스크립트를 지원하지 않습니다. 모드의 일부 기능이 작동하지 않을 수 있습니다.
|
||||||
|
|
||||||
about.button = 정보
|
about.button = 정보
|
||||||
name = 이름 :
|
name = 이름 :
|
||||||
@@ -496,6 +500,7 @@ settings.language = 언어
|
|||||||
settings.data = 게임 데이터
|
settings.data = 게임 데이터
|
||||||
settings.reset = 설정 초기화
|
settings.reset = 설정 초기화
|
||||||
settings.rebind = 키 재설정
|
settings.rebind = 키 재설정
|
||||||
|
settings.resetKey = 키 설정
|
||||||
settings.controls = 조작
|
settings.controls = 조작
|
||||||
settings.game = 게임
|
settings.game = 게임
|
||||||
settings.sound = 소리
|
settings.sound = 소리
|
||||||
@@ -589,6 +594,8 @@ unit.persecond = /초
|
|||||||
unit.timesspeed = x 배
|
unit.timesspeed = x 배
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = 자원
|
unit.items = 자원
|
||||||
|
unit.thousands = 천
|
||||||
|
unit.millions = 백만
|
||||||
category.general = 일반
|
category.general = 일반
|
||||||
category.power = 전력
|
category.power = 전력
|
||||||
category.liquids = 액체
|
category.liquids = 액체
|
||||||
@@ -623,7 +630,7 @@ setting.difficulty.name = 난이도 :
|
|||||||
setting.screenshake.name = 화면 흔들기
|
setting.screenshake.name = 화면 흔들기
|
||||||
setting.effects.name = 화면 효과
|
setting.effects.name = 화면 효과
|
||||||
setting.destroyedblocks.name = 부서진 블럭 표시
|
setting.destroyedblocks.name = 부서진 블럭 표시
|
||||||
setting.conveyorpathfinding.name = 컨베이어 설치 보조 기능
|
setting.conveyorpathfinding.name = 교차기 자동 설치
|
||||||
setting.sensitivity.name = 컨트롤러 감도
|
setting.sensitivity.name = 컨트롤러 감도
|
||||||
setting.saveinterval.name = 저장 간격
|
setting.saveinterval.name = 저장 간격
|
||||||
setting.seconds = {0} 초
|
setting.seconds = {0} 초
|
||||||
@@ -644,7 +651,7 @@ setting.sfxvol.name = 효과음 크기
|
|||||||
setting.mutesound.name = 소리 끄기
|
setting.mutesound.name = 소리 끄기
|
||||||
setting.crashreport.name = 익명으로 오류 보고서 자동 전송
|
setting.crashreport.name = 익명으로 오류 보고서 자동 전송
|
||||||
setting.savecreate.name = 자동 저장 활성화
|
setting.savecreate.name = 자동 저장 활성화
|
||||||
setting.publichost.name = 공개 서버 보이기
|
setting.publichost.name = 스팀 공개 서버 보이기
|
||||||
setting.chatopacity.name = 채팅 투명도
|
setting.chatopacity.name = 채팅 투명도
|
||||||
setting.lasersopacity.name = 전력 레이저 밝기
|
setting.lasersopacity.name = 전력 레이저 밝기
|
||||||
setting.playerchat.name = 채팅 말풍선 표시
|
setting.playerchat.name = 채팅 말풍선 표시
|
||||||
@@ -676,10 +683,10 @@ keybind.schematic_flip_x.name = 설계도 X축 뒤집기
|
|||||||
keybind.schematic_flip_y.name = 설계도 Y축 뒤집기
|
keybind.schematic_flip_y.name = 설계도 Y축 뒤집기
|
||||||
keybind.category_prev.name = 이전 목록
|
keybind.category_prev.name = 이전 목록
|
||||||
keybind.category_next.name = 다음 목록
|
keybind.category_next.name = 다음 목록
|
||||||
keybind.block_select_left.name = 블럭 Select Left
|
keybind.block_select_left.name = 블럭 왼쪽 선택
|
||||||
keybind.block_select_right.name = 블럭 Select Right
|
keybind.block_select_right.name = 블럭 오른쪽 선택
|
||||||
keybind.block_select_up.name = 블럭 Select Up
|
keybind.block_select_up.name = 블럭 위쪽 선택
|
||||||
keybind.block_select_down.name = 블럭 Select Down
|
keybind.block_select_down.name = 블럭 아래쪽 선택
|
||||||
keybind.block_select_01.name = 카테고리/블럭 선택 1
|
keybind.block_select_01.name = 카테고리/블럭 선택 1
|
||||||
keybind.block_select_02.name = 카테고리/블럭 선택 2
|
keybind.block_select_02.name = 카테고리/블럭 선택 2
|
||||||
keybind.block_select_03.name = 카테고리/블럭 선택 3
|
keybind.block_select_03.name = 카테고리/블럭 선택 3
|
||||||
@@ -697,7 +704,6 @@ keybind.pick.name = 블록 선택
|
|||||||
keybind.break_block.name = 블록 파괴
|
keybind.break_block.name = 블록 파괴
|
||||||
keybind.deselect.name = 선택해제
|
keybind.deselect.name = 선택해제
|
||||||
keybind.shoot.name = 사격
|
keybind.shoot.name = 사격
|
||||||
keybind.zoom_hold.name = 길게 확대
|
|
||||||
keybind.zoom.name = 확대
|
keybind.zoom.name = 확대
|
||||||
keybind.menu.name = 메뉴
|
keybind.menu.name = 메뉴
|
||||||
keybind.pause.name = 일시중지
|
keybind.pause.name = 일시중지
|
||||||
@@ -804,6 +810,7 @@ mech.trident-ship.name = 트라이던트
|
|||||||
mech.trident-ship.weapon = 폭탄 저장고
|
mech.trident-ship.weapon = 폭탄 저장고
|
||||||
mech.glaive-ship.name = 글레이브
|
mech.glaive-ship.name = 글레이브
|
||||||
mech.glaive-ship.weapon = 중무장 인화성 소총
|
mech.glaive-ship.weapon = 중무장 인화성 소총
|
||||||
|
item.corestorable = [lightgray]코어 잔여 저장공간: {0}
|
||||||
item.explosiveness = [LIGHT_GRAY]폭발성 : {0}
|
item.explosiveness = [LIGHT_GRAY]폭발성 : {0}
|
||||||
item.flammability = [LIGHT_GRAY]인화성 : {0}
|
item.flammability = [LIGHT_GRAY]인화성 : {0}
|
||||||
item.radioactivity = [LIGHT_GRAY]방사능 : {0}
|
item.radioactivity = [LIGHT_GRAY]방사능 : {0}
|
||||||
@@ -986,7 +993,7 @@ block.fortress-factory.name = 포트리스 공장
|
|||||||
block.revenant-factory.name = 망령 전함 공장
|
block.revenant-factory.name = 망령 전함 공장
|
||||||
block.repair-point.name = 수리 지점
|
block.repair-point.name = 수리 지점
|
||||||
block.pulse-conduit.name = 펄스 파이프
|
block.pulse-conduit.name = 펄스 파이프
|
||||||
block.plated-conduit.name = 도금된
|
block.plated-conduit.name = 도금된 파이프
|
||||||
block.phase-conduit.name = 메타 파이프
|
block.phase-conduit.name = 메타 파이프
|
||||||
block.liquid-router.name = 액체 분배기
|
block.liquid-router.name = 액체 분배기
|
||||||
block.liquid-tank.name = 물탱크
|
block.liquid-tank.name = 물탱크
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -10,7 +10,8 @@ link.dev-builds.description = Onstabiele versies
|
|||||||
link.trello.description = Officiële Trello voor geplande toevoegingen.
|
link.trello.description = Officiële Trello voor geplande toevoegingen.
|
||||||
link.itch.io.description = Itch.io pagina met de PC downloads en online versie
|
link.itch.io.description = Itch.io pagina met de PC downloads en online versie
|
||||||
link.google-play.description = Mindustry op Google Play
|
link.google-play.description = Mindustry op Google Play
|
||||||
link.wiki.description = Officiël Mindustry wiki
|
link.f-droid.description = F-Droid catalogus
|
||||||
|
link.wiki.description = Officiële Mindustry-wiki
|
||||||
linkfail = Openen van link mislukt!\nDe link is gekopiëerd naar je klembord.
|
linkfail = Openen van link mislukt!\nDe link is gekopiëerd naar je klembord.
|
||||||
screenshot = Locatie screenshot: {0}
|
screenshot = Locatie screenshot: {0}
|
||||||
screenshot.invalid = Kaart te groot, mogelijks te weinig geheugen voor een screenshot te kunnen maken.
|
screenshot.invalid = Kaart te groot, mogelijks te weinig geheugen voor een screenshot te kunnen maken.
|
||||||
@@ -20,9 +21,9 @@ highscore = [accent]Nieuw record!
|
|||||||
copied = Gekopieerd.
|
copied = Gekopieerd.
|
||||||
load.sound = Geluiden
|
load.sound = Geluiden
|
||||||
load.map = Kaarten
|
load.map = Kaarten
|
||||||
load.image = Images
|
load.image = Afbeeldingen
|
||||||
load.content = Content
|
load.content = Inhoud
|
||||||
load.system = System
|
load.system = Systeem
|
||||||
load.mod = Mods
|
load.mod = Mods
|
||||||
schematic = Blauwdruk
|
schematic = Blauwdruk
|
||||||
schematic.add = Blauwdruk Opslaan...
|
schematic.add = Blauwdruk Opslaan...
|
||||||
@@ -67,22 +68,22 @@ minimap = Kaartje
|
|||||||
position = Positie
|
position = Positie
|
||||||
close = Sluit
|
close = Sluit
|
||||||
website = Website
|
website = Website
|
||||||
quit = Verlaat
|
quit = Verlaten
|
||||||
save.quit = Save & Quit
|
save.quit = Opslaan & Verlaten
|
||||||
maps = Kaarten
|
maps = Kaarten
|
||||||
maps.browse = Browse Maps
|
maps.browse = Bekijk Kaarten
|
||||||
continue = Ga verder
|
continue = Ga verder
|
||||||
maps.none = [LIGHT_GRAY]Geen kaarten gevonden!
|
maps.none = [LIGHT_GRAY]Geen kaarten gevonden!
|
||||||
invalid = Invalid
|
invalid = Ongeldig
|
||||||
preparingconfig = Config Voorbereiden
|
preparingconfig = Configuratie Voorbereiden
|
||||||
preparingcontent = Content Voorbereiden
|
preparingcontent = Inhoud Voorbereiden
|
||||||
uploadingcontent = Content Uploaden
|
uploadingcontent = Inhoud Uploaden
|
||||||
uploadingpreviewfile = Voorbeeldbestand Uploaden
|
uploadingpreviewfile = Voorbeeldbestand Uploaden
|
||||||
committingchanges = Veranderingen Toepassen
|
committingchanges = Veranderingen Toepassen
|
||||||
done = Klaar
|
done = Klaar
|
||||||
feature.unsupported = Uw apparaat ondersteunt deze functie niet.
|
feature.unsupported = Uw apparaat ondersteunt deze functie niet.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
mods.alphainfo = Mods zijn nog in alfa en [scarlet] kunnen zeer onstabiel zijn[].\nMeld problemen die je ondervindt op de Mindustry Github of Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alfa)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]Geen mods gevonden!
|
mods.none = [LIGHT_GRAY]Geen mods gevonden!
|
||||||
mods.guide = Handleiding tot Modding
|
mods.guide = Handleiding tot Modding
|
||||||
@@ -93,8 +94,8 @@ mod.disabled = [scarlet]Uitgeschakeld
|
|||||||
mod.disable = Schakel uit
|
mod.disable = Schakel uit
|
||||||
mod.delete.error = Kan mod niet verwijderen. Bestand is mogelijk in gebruik.
|
mod.delete.error = Kan mod niet verwijderen. Bestand is mogelijk in gebruik.
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]De volgende vereisten ontbreken voor mod '{0}':[accent] {1}\n[lightgray]Deze mods moeten eerst gedownload worden.\nDeze mod wordt automatisch uitgeschakeld.
|
||||||
mod.enable = Enable
|
mod.enable = Schakel in
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Herladen Vereist
|
mod.reloadrequired = [scarlet]Herladen Vereist
|
||||||
mod.import = Importeer Mod
|
mod.import = Importeer Mod
|
||||||
@@ -102,9 +103,9 @@ mod.import.github = Importeer GitHub Mod
|
|||||||
mod.remove.confirm = Deze mod zal worden verwijderd.
|
mod.remove.confirm = Deze mod zal worden verwijderd.
|
||||||
mod.author = [LIGHT_GRAY]Auteur:[] {0}
|
mod.author = [LIGHT_GRAY]Auteur:[] {0}
|
||||||
mod.missing = Dit opslagbestand bevat mods die zijn geupdate of recentelijk zijn verwijderd. Uw opslagbestand kan beschadigd geraken. Bent u zeker dat u wil verdergaan?\n[lightgray]Mods:\n{0}
|
mod.missing = Dit opslagbestand bevat mods die zijn geupdate of recentelijk zijn verwijderd. Uw opslagbestand kan beschadigd geraken. Bent u zeker dat u wil verdergaan?\n[lightgray]Mods:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Voordat je de mod publiceert moet je een afbeelding voor de voorvertoning toevoegen.\nPlaats een afbeelding met de naam[accent] preview.png[] in de modfolder.
|
||||||
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
mod.folder.missing = Mods kunnen enkel gepubliceerd worden in foldervorm.\nOm een mod in foldervorm te zetten exporteer je het modbestand uit de zipfile en verwijder je de oude zipfile. Herlaad vervolgens je mods of herstart het spel.
|
||||||
about.button = Extra info
|
about.button = Over
|
||||||
name = Naam:
|
name = Naam:
|
||||||
noname = Kies eerst[accent] een naam[].
|
noname = Kies eerst[accent] een naam[].
|
||||||
filename = Bestandsnaam:
|
filename = Bestandsnaam:
|
||||||
@@ -118,42 +119,42 @@ players = {0} spelers online
|
|||||||
players.single = {0} speler online
|
players.single = {0} speler online
|
||||||
server.closing = [accent]Server wordt gesloten...
|
server.closing = [accent]Server wordt gesloten...
|
||||||
server.kicked.kick = Je bent uit de server gegooid!
|
server.kicked.kick = Je bent uit de server gegooid!
|
||||||
server.kicked.whitelist = You are not whitelisted here.
|
server.kicked.whitelist = Je bent niet toegestaan om met deze server te verbinden. (Whitelist)
|
||||||
server.kicked.serverClose = Server gesloten.
|
server.kicked.serverClose = Server gesloten.
|
||||||
server.kicked.vote = You have been vote-kicked. Goodbye.
|
server.kicked.vote = Je bent uit de server gegooid na een stemming!
|
||||||
server.kicked.clientOutdated = Verouderde versie! Update Mindustry!
|
server.kicked.clientOutdated = Verouderde versie! Update Mindustry!
|
||||||
server.kicked.serverOutdated = Verouderde server! Vraag de eigenaar van de server om de server te updaten!
|
server.kicked.serverOutdated = Verouderde server! Vraag de eigenaar van de server om de server te updaten!
|
||||||
server.kicked.banned = Je bent verbannen van deze server.
|
server.kicked.banned = Je bent verbannen van deze server.
|
||||||
server.kicked.typeMismatch = This server is not compatible with your build type.
|
server.kicked.typeMismatch = Deze server is niet compatibel met jouw Mindustry build type.
|
||||||
server.kicked.playerLimit = This server is full. Wait for an empty slot.
|
server.kicked.playerLimit = De server is vol, wacht voor een plekje.
|
||||||
server.kicked.recentKick = Je bent daarnet van de server gegooid.\nWacht even voor je weer verbindt
|
server.kicked.recentKick = Je bent zonet van de server gegooid.\nWacht even voor je weer verbindt
|
||||||
server.kicked.nameInUse = Er is al iemand met dezelfde naam op de server.
|
server.kicked.nameInUse = Er is al iemand met dezelfde naam op de server.
|
||||||
server.kicked.nameEmpty = Je gekozen naam is ongeldig.
|
server.kicked.nameEmpty = Je gekozen naam is ongeldig.
|
||||||
server.kicked.idInUse = Je bent al verbonden met de server! Verbinden met 2 clients tegelijk is verboden.
|
server.kicked.idInUse = Je bent al verbonden met de server! Verbinden met 2 clients tegelijk is verboden.
|
||||||
server.kicked.customClient = Deze server ondersteunt geen aangepaste versies (mods). Download een officiële versie.
|
server.kicked.customClient = Deze server ondersteunt geen aangepaste versies (mods). Download een officiële versie.
|
||||||
server.kicked.gameover = Game over!
|
server.kicked.gameover = Game over!
|
||||||
server.versions = Your version:[accent] {0}[]\nServer version:[accent] {1}[]
|
server.versions = Jouw versie:[accent] {0}[]\nServerversie:[accent] {1}[]
|
||||||
host.info = Ook De [accent]host[] knop hosts een server op poort [scarlet]6567[]. \nIedereen die verbonden is met dezelfde [LIGHT_GRAY]wifi of lokaal netwerk[] zou je server moeten zien in zijn server lijst.\n\nAls je wil dat personen kunnen verbinden met je server van ergens anders via IP. Dan is [accent]port forwarding[] is nodig.\n\n[LIGHT_GRAY]Nota: Als iemand problemen heeft met het verbinden tot je LAN spel, zorg dan dat mindustry toestemming heeft tot je lokale netwerk in de Firewall instellingen.
|
host.info = Ook de [accent]host[] knop hosts een server op poort [scarlet]6567[]. \nIedereen die verbonden is met dezelfde [LIGHT_GRAY]wifi of lokaal netwerk[] zou je server moeten zien in zijn server lijst.\n\nAls je wil dat personen kunnen verbinden met je server van ergens anders via IP. Dan is [accent]port forwarding[] is nodig.\n\n[LIGHT_GRAY]Nota: Als iemand problemen heeft met het verbinden tot je LAN spel, zorg dan dat mindustry toestemming heeft tot je lokale netwerk in de Firewall instellingen.
|
||||||
join.info = Hier kan je een [accent]server IP[] invullen waarmee je wil verbinden. Je kan hier ook verbinden met servers op je [accent]lokale netwerk[]. LAN en WAN multiplayer wordt ondersteund.\n\n[LIGHT_GRAY]Belangrijk: er is geen automatische globale server lijst; als je met iemand wil verbinden via een IP adres moet je zijn/haar IP adres vragen.
|
join.info = Hier kan je een [accent]server IP[] invullen waarmee je wil verbinden. Je kan hier ook verbinden met servers op je [accent]lokale netwerk[]. LAN en WAN multiplayer wordt ondersteund.\n\n[LIGHT_GRAY]Belangrijk: er is geen automatische globale server lijst; als je met iemand wil verbinden via een IP adres moet je zijn/haar IP adres vragen.
|
||||||
hostserver = Host Game
|
hostserver = Open server voor LAN
|
||||||
invitefriends = Invite Friends
|
invitefriends = Nodig vrienden uit.
|
||||||
hostserver.mobile = Host\nGame
|
hostserver.mobile = Open\nServer
|
||||||
host = Host
|
host = Open server
|
||||||
hosting = [accent]De server wordt geopend...
|
hosting = [accent]De server wordt geopend...
|
||||||
hosts.refresh = Herlaad
|
hosts.refresh = Herlaad
|
||||||
hosts.discovering = LAN games worden gezocht
|
hosts.discovering = LAN games worden gezocht
|
||||||
hosts.discovering.any = Discovering games
|
hosts.discovering.any = Games worden gezocht
|
||||||
server.refreshing = De server wordt herladen
|
server.refreshing = De server wordt herladen
|
||||||
hosts.none = [lightgray]Geen games op je lokale netwerk gevonden.
|
hosts.none = [lightgray]Geen games op je lokale netwerk gevonden.
|
||||||
host.invalid = [scarlet]Kan niet verbinden met de host (server).
|
host.invalid = [scarlet]Kan niet verbinden met de host (server).
|
||||||
trace = Zoeken speler
|
trace = Spelersinformatie
|
||||||
trace.playername = Naam speler: [accent]{0}
|
trace.playername = Naam: [accent]{0}
|
||||||
trace.ip = IP: [accent]{0}
|
trace.ip = IP: [accent]{0}
|
||||||
trace.id = Uniek ID: [accent]{0}
|
trace.id = Unieke ID: [accent]{0}
|
||||||
trace.mobile = Mobile Client: [accent]{0}
|
trace.mobile = Mobiele Client: [accent]{0}
|
||||||
trace.modclient = Aangepaste Client: [accent]{0}
|
trace.modclient = Aangepaste Client: [accent]{0}
|
||||||
invalidid = Ongeldig client ID! Verstuur een bug report!
|
invalidid = Ongeldige client ID! Verstuur een bug report!
|
||||||
server.bans = Verbannen
|
server.bans = Verbanningen
|
||||||
server.bans.none = Geen verbannen spelers gevonden!
|
server.bans.none = Geen verbannen spelers gevonden!
|
||||||
server.admins = Administrators
|
server.admins = Administrators
|
||||||
server.admins.none = Geen Administrators gevonden!
|
server.admins.none = Geen Administrators gevonden!
|
||||||
@@ -164,29 +165,29 @@ server.outdated = [crimson]Verouderde Server![]
|
|||||||
server.outdated.client = [crimson]Verouderde Client![]
|
server.outdated.client = [crimson]Verouderde Client![]
|
||||||
server.version = [lightgray]Versie: {0} {1}
|
server.version = [lightgray]Versie: {0} {1}
|
||||||
server.custombuild = [yellow]Aangepaste versie
|
server.custombuild = [yellow]Aangepaste versie
|
||||||
confirmban = Ben je zeker dat je deze speler wil verbannen?
|
confirmban = Ben je zeker dat je deze speler wilt verbannen?
|
||||||
confirmkick = Ben je zeker dat je deze speler van de server wil gooien?
|
confirmkick = Ben je zeker dat je deze speler van de server wilt gooien?
|
||||||
confirmvotekick = Are you sure you want to vote-kick this player?
|
confirmvotekick = Ben je zeker dat je een stemming wilt starten om deze speler uit de server to gooien?
|
||||||
confirmunban = Ben je zeker dat je de verbanning ongedaan wil maken?
|
confirmunban = Ben je zeker dat je de verbanning wilt opheffen?
|
||||||
confirmadmin = Ben je zeker dat je deze speler administrator wil maken?
|
confirmadmin = Ben je zeker dat je deze speler administrator wilt maken?
|
||||||
confirmunadmin = Ben je zeker dat je de Administrator status van deze speler ongedaan wilt maken?
|
confirmunadmin = Ben je zeker dat je de administratorstatus van deze speler wilt intrekken?
|
||||||
joingame.title = Verbinden met server
|
joingame.title = Verbinden met server
|
||||||
joingame.ip = IP adres:
|
joingame.ip = IP adres:
|
||||||
disconnect = Verbinding verbroken.
|
disconnect = Verbinding verbroken.
|
||||||
disconnect.error = Connection error.
|
disconnect.error = Verbindingsfout.
|
||||||
disconnect.closed = Connection closed.
|
disconnect.closed = Verbinding afgesloten.
|
||||||
disconnect.timeout = Timed out.
|
disconnect.timeout = Het duurde te lang voordat de server antwoordde.
|
||||||
disconnect.data = Laden map data mislukt!
|
disconnect.data = Laden van mapdata mislukt!
|
||||||
cantconnect = Unable to join game ([accent]{0}[]).
|
cantconnect = Kon niet tot het spel toetreden. ([accent]{0}[]).
|
||||||
connecting = [accent]Verbinden...
|
connecting = [accent]Verbinden...
|
||||||
connecting.data = [accent]Laden map data...
|
connecting.data = [accent]Laden map data...
|
||||||
server.port = Poort:
|
server.port = Poort:
|
||||||
server.addressinuse = Dit adres wordt al gebruikt!
|
server.addressinuse = Dit adres wordt al gebruikt!
|
||||||
server.invalidport = Ongeldige poort!
|
server.invalidport = Ongeldige poort!
|
||||||
server.error = [crimson]Error hosting server: [accent]{0}
|
server.error = [crimson]Fout bij het openen van de server: [accent]{0}
|
||||||
save.new = Nieuwe save
|
save.new = Nieuwe save
|
||||||
save.overwrite = Ben je zeker dat je deze save\nwil overschrijven?
|
save.overwrite = Ben je zeker dat je deze save\nwilt overschrijven?
|
||||||
overwrite = Overschrijf
|
overwrite = Vervang
|
||||||
save.none = Geen saves gevonden!
|
save.none = Geen saves gevonden!
|
||||||
saveload = [accent]Opslaan...
|
saveload = [accent]Opslaan...
|
||||||
savefail = Opslaan mislukt!
|
savefail = Opslaan mislukt!
|
||||||
@@ -197,27 +198,27 @@ save.import.invalid = [accent]Deze save is ongeldig!
|
|||||||
save.import.fail = [crimson]Save importeren mislukt: [accent]{0}
|
save.import.fail = [crimson]Save importeren mislukt: [accent]{0}
|
||||||
save.export.fail = [crimson]Save exporteren mislukt: [accent]{0}
|
save.export.fail = [crimson]Save exporteren mislukt: [accent]{0}
|
||||||
save.import = Importeer Save
|
save.import = Importeer Save
|
||||||
save.newslot = Save naam:
|
save.newslot = Naam van de save:
|
||||||
save.rename = Naam wijzigen
|
save.rename = Naam wijzigen
|
||||||
save.rename.text = Nieuwe naam:
|
save.rename.text = Nieuwe naam:
|
||||||
selectslot = Selecteer een save.
|
selectslot = Selecteer een save.
|
||||||
slot = [accent]Slot {0}
|
slot = [accent]Plaats {0}
|
||||||
editmessage = Edit Message
|
editmessage = Edit Message
|
||||||
save.corrupted = [accent]Save file corrupted or invalid!\nIf you have just updated your game, this is probably a change in the save format and [scarlet]not[] a bug.
|
save.corrupted = [accent]Het savebestand is corrupt of ongeldig.\nAls je zonet je spel geupdatet hebt is dit waarschijnlijk een verandering in de savestructuur en dus[scarlet] geen[] bug.
|
||||||
empty = <empty>
|
empty = <leeg>
|
||||||
on = Aan
|
on = Aan
|
||||||
off = Uit
|
off = Uit
|
||||||
save.autosave = Autosave: {0}
|
save.autosave = Autosave: {0}
|
||||||
save.map = Map: {0}
|
save.map = Map: {0}
|
||||||
save.wave = Golf {0}
|
save.wave = Golf {0}
|
||||||
save.mode = Gamemode: {0}
|
save.mode = Spelmodus: {0}
|
||||||
save.date = Last Saved: {0}
|
save.date = Laatste save: {0}
|
||||||
save.playtime = Playtime: {0}
|
save.playtime = Playtime: {0}
|
||||||
warning = Waarschuwing.
|
warning = Waarschuwing.
|
||||||
confirm = Bevestig
|
confirm = Bevestig
|
||||||
delete = Verwijder
|
delete = Verwijder
|
||||||
view.workshop = View In Workshop
|
view.workshop = Bekijk In Workshop
|
||||||
workshop.listing = Edit Workshop Listing
|
workshop.listing = Bewerk Workshop-Publicatie
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Open
|
open = Open
|
||||||
customize = Pas aan
|
customize = Pas aan
|
||||||
@@ -225,40 +226,40 @@ cancel = Annuleer
|
|||||||
openlink = Open Link
|
openlink = Open Link
|
||||||
copylink = Kopiëer Link
|
copylink = Kopiëer Link
|
||||||
back = Terug
|
back = Terug
|
||||||
data.export = Export Data
|
data.export = Exporteer Data
|
||||||
data.import = Import Data
|
data.import = Importeer Data
|
||||||
data.exported = Data exported.
|
data.exported = Data geëxporteerd.
|
||||||
data.invalid = This isn't valid game data.
|
data.invalid = Dit is geen geldige speldata.
|
||||||
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately.
|
||||||
classic.export = Export Classic Data
|
classic.export = Exporteer Classic-Data
|
||||||
classic.export.text = [accent]Mindustry[] has just had a major update.\nClassic (v3.5 build 40) save or map data has been detected. Would you like to export these saves to your phone's home folder, for use in the Mindustry Classic app?
|
classic.export.text = [accent]Mindustry[] heeft een grote update gehad.\nClassic (v3.5 build 40) save of map data is teruggevonden. Wil je deze data exporteren naar je de home-folder van je telefoon voor gebruik in de Mindustry-Classic app?
|
||||||
quit.confirm = Weet je zeker dat je wilt stoppen?
|
quit.confirm = Weet je zeker dat je wilt stoppen?
|
||||||
quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[]
|
quit.confirm.tutorial = Ben je zeker dat je nu weet wat je doet?\nDe tutorial kan opnieuw gestart worden via[accent] Instellingen->Spel->Herneem Tutorial.[]
|
||||||
loading = [accent]Aan het laden...
|
loading = [accent]Aan het laden...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Mods Herladen...
|
||||||
saving = [accent]Aan het opslaan...
|
saving = [accent]Aan het opslaan...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] om het plan te annuleren
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] om te selecter+kopieren
|
||||||
pausebuilding = [accent][[{0}][] to pause building
|
pausebuilding = [accent][[{0}][] om het bouwen te pauseren
|
||||||
resumebuilding = [scarlet][[{0}][] to resume building
|
resumebuilding = [scarlet][[{0}][] om verder te gaan met bouwen
|
||||||
wave = [accent]Golf {0}
|
wave = [accent]Golf {0}
|
||||||
wave.waiting = [LIGHT_GRAY]Golf in {0}
|
wave.waiting = [LIGHT_GRAY]Golf in {0}
|
||||||
wave.waveInProgress = [LIGHT_GRAY]Wave in progress
|
wave.waveInProgress = [LIGHT_GRAY]Golf bezig
|
||||||
waiting = [LIGHT_GRAY]Waiting...
|
waiting = [LIGHT_GRAY]Wachten...
|
||||||
waiting.players = Aan het wachten voor spelers...
|
waiting.players = Aan het wachten op spelers...
|
||||||
wave.enemies = [LIGHT_GRAY]{0} Vijanden Over
|
wave.enemies = [LIGHT_GRAY]{0} Vijanden Over
|
||||||
wave.enemy = [LIGHT_GRAY]{0} Vijand Over
|
wave.enemy = [LIGHT_GRAY]{0} Vijand Over
|
||||||
loadimage = Laad Afbeelding
|
loadimage = Laad Afbeelding
|
||||||
saveimage = Sla Afbeelding Op
|
saveimage = Sla Afbeelding Op
|
||||||
unknown = Onbekend
|
unknown = Onbekend
|
||||||
custom = Custom
|
custom = Aangepast
|
||||||
builtin = Built-In
|
builtin = Ingebouwd
|
||||||
map.delete.confirm = Weet je zeker dat je deze kaart wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden!
|
map.delete.confirm = Weet je zeker dat je deze kaart wilt verwijderen? Deze actie kan niet ongedaan gemaakt worden!
|
||||||
map.random = [accent]Random Map
|
map.random = [accent]Willekeurige Map
|
||||||
map.nospawn = This map does not have any cores for the player to spawn in! Add a[ROYAL] blue[] core to this map in the editor.
|
map.nospawn = Deze map heeft geen cores voor spelers om te spawnen! Voeg een[ROYAL] blauwe[] core toe in de mapbewerker.
|
||||||
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-blue[] cores to this map in the editor.
|
map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Voeg een[SCARLET] niet-blauwe[] core toe in de mapbewerker.
|
||||||
map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor.
|
map.nospawn.attack = This map does not have any enemy cores for player to attack! Voeg een[SCARLET] rode[] core toe in de mapbewerker.
|
||||||
map.invalid = Error loading map: corrupted or invalid map file.
|
map.invalid = Fout tijdens het laden van de map: Corrupt of ongeldig mapbestand.
|
||||||
workshop.update = Update Item
|
workshop.update = Update Item
|
||||||
workshop.error = Error fetching workshop details: {0}
|
workshop.error = Error fetching workshop details: {0}
|
||||||
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up!
|
map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up!
|
||||||
@@ -652,7 +653,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
@@ -699,7 +699,6 @@ keybind.pick.name = Wybierz Blok
|
|||||||
keybind.break_block.name = Zniszcz Blok
|
keybind.break_block.name = Zniszcz Blok
|
||||||
keybind.deselect.name = Odznacz
|
keybind.deselect.name = Odznacz
|
||||||
keybind.shoot.name = Strzelanie
|
keybind.shoot.name = Strzelanie
|
||||||
keybind.zoom_hold.name = Inicjator przybliżania
|
|
||||||
keybind.zoom.name = Przybliżanie
|
keybind.zoom.name = Przybliżanie
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pauza
|
keybind.pause.name = Pauza
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pegar bloco
|
|||||||
keybind.break_block.name = Quebrar bloco
|
keybind.break_block.name = Quebrar bloco
|
||||||
keybind.deselect.name = Deselecionar
|
keybind.deselect.name = Deselecionar
|
||||||
keybind.shoot.name = Atirar
|
keybind.shoot.name = Atirar
|
||||||
keybind.zoom_hold.name = segurar_zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pausar
|
keybind.pause.name = Pausar
|
||||||
|
|||||||
@@ -700,7 +700,6 @@ keybind.pick.name = Pegar bloco
|
|||||||
keybind.break_block.name = Quebrar bloco
|
keybind.break_block.name = Quebrar bloco
|
||||||
keybind.deselect.name = Deselecionar
|
keybind.deselect.name = Deselecionar
|
||||||
keybind.shoot.name = Atirar
|
keybind.shoot.name = Atirar
|
||||||
keybind.zoom_hold.name = segurar Zoom
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pausar
|
keybind.pause.name = Pausar
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Deselect
|
keybind.deselect.name = Deselect
|
||||||
keybind.shoot.name = Shoot
|
keybind.shoot.name = Shoot
|
||||||
keybind.zoom_hold.name = Zoom Hold
|
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pause
|
keybind.pause.name = Pause
|
||||||
|
|||||||
1202
core/assets/bundles/bundle_th.properties
Normal file
1202
core/assets/bundles/bundle_th.properties
Normal file
File diff suppressed because it is too large
Load Diff
@@ -652,7 +652,6 @@ keybind.pick.name = Pick Block
|
|||||||
keybind.break_block.name = Break Block
|
keybind.break_block.name = Break Block
|
||||||
keybind.deselect.name = Eldeki yapiyi birak
|
keybind.deselect.name = Eldeki yapiyi birak
|
||||||
keybind.shoot.name = Sik
|
keybind.shoot.name = Sik
|
||||||
keybind.zoom_hold.name = Yaklasma basili tutmasi
|
|
||||||
keybind.zoom.name = Yaklas
|
keybind.zoom.name = Yaklas
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Durdur
|
keybind.pause.name = Durdur
|
||||||
|
|||||||
@@ -652,7 +652,6 @@ keybind.pick.name = Blok Seç
|
|||||||
keybind.break_block.name = Blok Kır
|
keybind.break_block.name = Blok Kır
|
||||||
keybind.deselect.name = Seçimleri Kaldır
|
keybind.deselect.name = Seçimleri Kaldır
|
||||||
keybind.shoot.name = Ateş Et
|
keybind.shoot.name = Ateş Et
|
||||||
keybind.zoom_hold.name = Zumu Sabit Tutma
|
|
||||||
keybind.zoom.name = Zum
|
keybind.zoom.name = Zum
|
||||||
keybind.menu.name = Menü
|
keybind.menu.name = Menü
|
||||||
keybind.pause.name = Durdur
|
keybind.pause.name = Durdur
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ load.image = Зображення
|
|||||||
load.content = Зміст
|
load.content = Зміст
|
||||||
load.system = Система
|
load.system = Система
|
||||||
load.mod = Модифікації
|
load.mod = Модифікації
|
||||||
|
load.scripts = Скрипти
|
||||||
|
|
||||||
schematic = Схема
|
schematic = Схема
|
||||||
schematic.add = Зберегти схему…
|
schematic.add = Зберегти схему…
|
||||||
schematics = Схеми
|
schematics = Схеми
|
||||||
@@ -104,17 +106,19 @@ mod.disable = Вимкнути
|
|||||||
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
|
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
|
||||||
mod.requiresversion = [scarlet]Необхідна версія гри: [accent]{0}
|
mod.requiresversion = [scarlet]Необхідна версія гри: [accent]{0}
|
||||||
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
|
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
|
||||||
mod.nowdisabled = [scarlet]Модифікації '{0}' не вистачає залежностей:[accent] {1}\n[lightgray]Ці модифікації потрібно завантажити спочатку.\nЦя модифікація буду автоматично вимкнена.
|
mod.nowdisabled = [scarlet]Модифікації «{0}» не вистачає залежних модифікацій:[accent] {1}\n[lightgray]Ці модифікації потрібно завантажити спочатку.\nЦя модифікація буде автоматично вимкнена.
|
||||||
mod.enable = Увімкнути
|
mod.enable = Увімкнути
|
||||||
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
|
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
|
||||||
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
||||||
mod.import = Імпортувати модифікацію
|
mod.import = Імпортувати модифікацію
|
||||||
mod.import.github = Імпортувати модификацію з Ґітгаб
|
mod.import.github = Імпортувати модификацію з GitHub
|
||||||
|
mod.item.remove =Цей предмет є частиною модифікації [accent] '«{0}»[]. Щоб видалити його, видаліть цю модифікацію.
|
||||||
mod.remove.confirm = Цю модифікацію буде видалено.
|
mod.remove.confirm = Цю модифікацію буде видалено.
|
||||||
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
||||||
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
||||||
mod.preview.missing = До публікації цієї модифікації в Майстерні, ви повинні додати зображення попереднього перегляду.\nПомістіть зображення з назвою [accent] preview.png[] у теку з модификаціями і спробуйте знову.
|
mod.preview.missing = До публікації цієї модифікації в Майстерні, ви повинні додати зображення попереднього перегляду.\nПомістіть зображення з назвою [accent] preview.png[] у теку з модификаціями і спробуйте знову.
|
||||||
mod.folder.missing = Тільки модификації у формі теці можуть бути опубліковані в Майстерні.\nЩоб перетворити будь-яку модификацію у теку, просто розархівуйте цей файлу теку та видаліть старий архів, і потім перезапустіть гру або перезавантажте ваші модификації.
|
mod.folder.missing = Тільки модификації у формі теці можуть бути опубліковані в Майстерні.\nЩоб перетворити будь-яку модификацію у теку, просто розархівуйте цей файлу теку та видаліть старий архів, і потім перезапустіть гру або перезавантажте ваші модификації.
|
||||||
|
mod.scripts.unsupported = Ваш пристрій не підтримує скрипти модифікацій. Деякі модифифікаціх не будуть працювати правильно.
|
||||||
about.button = Про гру
|
about.button = Про гру
|
||||||
name = Ім’я:
|
name = Ім’я:
|
||||||
noname = Спочатку придумайте[accent] собі ім’я[].
|
noname = Спочатку придумайте[accent] собі ім’я[].
|
||||||
@@ -692,7 +696,6 @@ keybind.pick.name = Вибрати блок
|
|||||||
keybind.break_block.name = Зламати блок
|
keybind.break_block.name = Зламати блок
|
||||||
keybind.deselect.name = Скасувати
|
keybind.deselect.name = Скасувати
|
||||||
keybind.shoot.name = Постріл
|
keybind.shoot.name = Постріл
|
||||||
keybind.zoom_hold.name = Керування масштабом
|
|
||||||
keybind.zoom.name = Приблизити
|
keybind.zoom.name = Приблизити
|
||||||
keybind.menu.name = Меню
|
keybind.menu.name = Меню
|
||||||
keybind.pause.name = Пауза
|
keybind.pause.name = Пауза
|
||||||
|
|||||||
@@ -699,7 +699,6 @@ keybind.pick.name = 选择方块
|
|||||||
keybind.break_block.name = 破坏方块
|
keybind.break_block.name = 破坏方块
|
||||||
keybind.deselect.name = 取消选择
|
keybind.deselect.name = 取消选择
|
||||||
keybind.shoot.name = 射击
|
keybind.shoot.name = 射击
|
||||||
keybind.zoom_hold.name = 按住调整缩放
|
|
||||||
keybind.zoom.name = 缩放
|
keybind.zoom.name = 缩放
|
||||||
keybind.menu.name = 菜单
|
keybind.menu.name = 菜单
|
||||||
keybind.pause.name = 暂停
|
keybind.pause.name = 暂停
|
||||||
|
|||||||
@@ -26,6 +26,7 @@ load.image = 圖片載入中
|
|||||||
load.content = 內容載入中
|
load.content = 內容載入中
|
||||||
load.system = 系統載入中
|
load.system = 系統載入中
|
||||||
load.mod = 模組載入中
|
load.mod = 模組載入中
|
||||||
|
load.scripts = 指令檔載入中
|
||||||
|
|
||||||
schematic = 藍圖
|
schematic = 藍圖
|
||||||
schematic.add = 儲存藍圖...
|
schematic.add = 儲存藍圖...
|
||||||
@@ -106,6 +107,7 @@ mod.requiresrestart = 遊戲將立即關閉以套用模組變更。
|
|||||||
mod.reloadrequired = [scarlet]需要重新載入
|
mod.reloadrequired = [scarlet]需要重新載入
|
||||||
mod.import = 匯入模組
|
mod.import = 匯入模組
|
||||||
mod.import.github = 匯入GitHub模組
|
mod.import.github = 匯入GitHub模組
|
||||||
|
mod.item.remove = 此物品是[accent] '{0}'[]模組的一部份。解除安裝模組以移除此物品。
|
||||||
mod.remove.confirm = 該模組將被刪除。
|
mod.remove.confirm = 該模組將被刪除。
|
||||||
mod.author = [lightgray]作者:[] {0}
|
mod.author = [lightgray]作者:[] {0}
|
||||||
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
|
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
|
||||||
@@ -678,7 +680,6 @@ keybind.pick.name = 選擇方塊
|
|||||||
keybind.break_block.name = 移除方塊
|
keybind.break_block.name = 移除方塊
|
||||||
keybind.deselect.name = 取消選取
|
keybind.deselect.name = 取消選取
|
||||||
keybind.shoot.name = 射擊
|
keybind.shoot.name = 射擊
|
||||||
keybind.zoom_hold.name = 按住縮放
|
|
||||||
keybind.zoom.name = 縮放
|
keybind.zoom.name = 縮放
|
||||||
keybind.menu.name = 主選單
|
keybind.menu.name = 主選單
|
||||||
keybind.pause.name = 暫停遊戲
|
keybind.pause.name = 暫停遊戲
|
||||||
@@ -1016,7 +1017,7 @@ unit.fortress.name = 要塞
|
|||||||
unit.revenant.name = 復仇鬼
|
unit.revenant.name = 復仇鬼
|
||||||
unit.eruptor.name = 爆發者
|
unit.eruptor.name = 爆發者
|
||||||
unit.chaos-array.name = 混沌陣列
|
unit.chaos-array.name = 混沌陣列
|
||||||
unit.eradicator.name = 消除者
|
unit.eradicator.name = 殲滅者
|
||||||
unit.lich.name = 巫妖
|
unit.lich.name = 巫妖
|
||||||
unit.reaper.name = 收掠者
|
unit.reaper.name = 收掠者
|
||||||
tutorial.next = [lightgray]<按下以繼續>
|
tutorial.next = [lightgray]<按下以繼續>
|
||||||
|
|||||||
Binary file not shown.
19
core/assets/scripts/base.js
Executable file
19
core/assets/scripts/base.js
Executable file
@@ -0,0 +1,19 @@
|
|||||||
|
const log = function(context, obj){
|
||||||
|
Vars.mods.getScripts().log(context, obj ? String(obj) : "null")
|
||||||
|
}
|
||||||
|
|
||||||
|
const extendContent = function(classType, name, params){
|
||||||
|
return new JavaAdapter(classType, params, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
const extend = function(classType, params){
|
||||||
|
return new JavaAdapter(classType, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
const run = method => new java.lang.Runnable(){run: method}
|
||||||
|
const boolf = method => new Boolf(){get: method}
|
||||||
|
const boolp = method => new Boolp(){get: method}
|
||||||
|
const cons = method => new Cons(){get: method}
|
||||||
|
const prov = method => new Prov(){get: method}
|
||||||
|
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
|
||||||
|
const Calls = Packages.io.anuke.mindustry.gen.Call
|
||||||
78
core/assets/scripts/global.js
Executable file
78
core/assets/scripts/global.js
Executable file
@@ -0,0 +1,78 @@
|
|||||||
|
//Generated class. Do not modify.
|
||||||
|
|
||||||
|
const log = function(context, obj){
|
||||||
|
Vars.mods.getScripts().log(context, obj ? String(obj) : "null")
|
||||||
|
}
|
||||||
|
|
||||||
|
const extendContent = function(classType, name, params){
|
||||||
|
return new JavaAdapter(classType, params, name)
|
||||||
|
}
|
||||||
|
|
||||||
|
const extend = function(classType, params){
|
||||||
|
return new JavaAdapter(classType, params)
|
||||||
|
}
|
||||||
|
|
||||||
|
const run = method => new java.lang.Runnable(){run: method}
|
||||||
|
const boolf = method => new Boolf(){get: method}
|
||||||
|
const boolp = method => new Boolp(){get: method}
|
||||||
|
const cons = method => new Cons(){get: method}
|
||||||
|
const prov = method => new Prov(){get: method}
|
||||||
|
const newEffect = (lifetime, renderer) => new Effects.Effect(lifetime, new Effects.EffectRenderer({render: renderer}))
|
||||||
|
const Calls = Packages.io.anuke.mindustry.gen.Call
|
||||||
|
importPackage(Packages.io.anuke.arc)
|
||||||
|
importPackage(Packages.io.anuke.arc.collection)
|
||||||
|
importPackage(Packages.io.anuke.arc.func)
|
||||||
|
importPackage(Packages.io.anuke.arc.graphics)
|
||||||
|
importPackage(Packages.io.anuke.arc.graphics.g2d)
|
||||||
|
importPackage(Packages.io.anuke.arc.math)
|
||||||
|
importPackage(Packages.io.anuke.arc.scene)
|
||||||
|
importPackage(Packages.io.anuke.arc.scene.actions)
|
||||||
|
importPackage(Packages.io.anuke.arc.scene.event)
|
||||||
|
importPackage(Packages.io.anuke.arc.scene.style)
|
||||||
|
importPackage(Packages.io.anuke.arc.scene.ui)
|
||||||
|
importPackage(Packages.io.anuke.arc.scene.ui.layout)
|
||||||
|
importPackage(Packages.io.anuke.arc.scene.utils)
|
||||||
|
importPackage(Packages.io.anuke.arc.util)
|
||||||
|
importPackage(Packages.io.anuke.mindustry)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.ai)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.content)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.core)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.ctype)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.editor)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.entities)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.entities.bullet)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.entities.effect)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.entities.traits)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.entities.type)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.entities.type.base)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.entities.units)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.game)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.gen)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.graphics)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.input)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.maps)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.maps.filters)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.maps.generators)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.maps.zonegen)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.type)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.ui)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.ui.dialogs)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.ui.fragments)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.ui.layout)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.defense)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.defense.turrets)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.distribution)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.liquid)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.logic)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.power)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.production)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.sandbox)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.storage)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.blocks.units)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.consumers)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.meta)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.meta.values)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.modules)
|
||||||
|
importPackage(Packages.io.anuke.mindustry.world.producers)
|
||||||
10
core/assets/scripts/wrapper.js
Executable file
10
core/assets/scripts/wrapper.js
Executable file
@@ -0,0 +1,10 @@
|
|||||||
|
modName = "$MOD_NAME$"
|
||||||
|
|
||||||
|
!function(){
|
||||||
|
|
||||||
|
const scriptName = "$SCRIPT_NAME$"
|
||||||
|
const print = text => log(scriptName, text);
|
||||||
|
$CODE$
|
||||||
|
|
||||||
|
}();
|
||||||
|
|
||||||
@@ -32,8 +32,8 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setup(){
|
public void setup(){
|
||||||
|
Vars.loadLogger();
|
||||||
Vars.platform = this;
|
Vars.platform = this;
|
||||||
Log.setUseColors(false);
|
|
||||||
beginTime = Time.millis();
|
beginTime = Time.millis();
|
||||||
|
|
||||||
Time.setDeltaProvider(() -> {
|
Time.setDeltaProvider(() -> {
|
||||||
@@ -70,8 +70,11 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
Sounds.load();
|
Sounds.load();
|
||||||
|
|
||||||
assets.loadRun("contentcreate", Content.class, () -> {
|
assets.loadRun("contentcreate", Content.class, () -> {
|
||||||
content.createContent();
|
content.createBaseContent();
|
||||||
content.loadColors();
|
content.loadColors();
|
||||||
|
}, () -> {
|
||||||
|
mods.loadScripts();
|
||||||
|
content.createModContent();
|
||||||
});
|
});
|
||||||
|
|
||||||
add(logic = new Logic());
|
add(logic = new Logic());
|
||||||
@@ -120,7 +123,7 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
for(ApplicationListener listener : modules){
|
for(ApplicationListener listener : modules){
|
||||||
listener.init();
|
listener.init();
|
||||||
}
|
}
|
||||||
mods.each(Mod::init);
|
mods.eachClass(Mod::init);
|
||||||
finished = true;
|
finished = true;
|
||||||
Events.fire(new ClientLoadEvent());
|
Events.fire(new ClientLoadEvent());
|
||||||
super.resize(graphics.getWidth(), graphics.getHeight());
|
super.resize(graphics.getWidth(), graphics.getHeight());
|
||||||
@@ -193,7 +196,8 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform
|
|||||||
|
|
||||||
if(assets.getCurrentLoading() != null){
|
if(assets.getCurrentLoading() != null){
|
||||||
String name = assets.getCurrentLoading().fileName.toLowerCase();
|
String name = assets.getCurrentLoading().fileName.toLowerCase();
|
||||||
String key = name.contains("content") ? "content" : name.contains("mod") ? "mods" : name.contains("msav") || name.contains("maps") ? "map" : name.contains("ogg") || name.contains("mp3") ? "sound" : name.contains("png") ? "image" : "system";
|
String key = name.contains("script") ? "scripts" : name.contains("content") ? "content" : name.contains("mod") ? "mods" : name.contains("msav") ||
|
||||||
|
name.contains("maps") ? "map" : name.contains("ogg") || name.contains("mp3") ? "sound" : name.contains("png") ? "image" : "system";
|
||||||
font.draw(bundle.get("load." + key, ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f - height / 2f - Scl.scl(10f), Align.center);
|
font.draw(bundle.get("load." + key, ""), graphics.getWidth() / 2f, graphics.getHeight() / 2f - height / 2f - Scl.scl(10f), Align.center);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ import io.anuke.arc.files.*;
|
|||||||
import io.anuke.arc.graphics.*;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.scene.ui.layout.*;
|
import io.anuke.arc.scene.ui.layout.*;
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
|
import io.anuke.arc.util.io.*;
|
||||||
import io.anuke.mindustry.ai.*;
|
import io.anuke.mindustry.ai.*;
|
||||||
import io.anuke.mindustry.core.*;
|
import io.anuke.mindustry.core.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
@@ -15,6 +16,7 @@ import io.anuke.mindustry.entities.effect.*;
|
|||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.input.*;
|
import io.anuke.mindustry.input.*;
|
||||||
import io.anuke.mindustry.maps.*;
|
import io.anuke.mindustry.maps.*;
|
||||||
@@ -25,12 +27,14 @@ import io.anuke.mindustry.world.blocks.defense.ForceProjector.*;
|
|||||||
import java.nio.charset.*;
|
import java.nio.charset.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
|
|
||||||
import static io.anuke.arc.Core.*;
|
import static io.anuke.arc.Core.settings;
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class Vars implements Loadable{
|
public class Vars implements Loadable{
|
||||||
/** Whether to load locales.*/
|
/** Whether to load locales.*/
|
||||||
public static boolean loadLocales = true;
|
public static boolean loadLocales = true;
|
||||||
|
/** Whether the logger is loaded. */
|
||||||
|
public static boolean loadedLogger = false;
|
||||||
/** Maximum schematic size.*/
|
/** Maximum schematic size.*/
|
||||||
public static final int maxSchematicSize = 32;
|
public static final int maxSchematicSize = 32;
|
||||||
/** All schematic base64 starts with this string.*/
|
/** All schematic base64 starts with this string.*/
|
||||||
@@ -118,22 +122,24 @@ public class Vars implements Loadable{
|
|||||||
public static boolean headless;
|
public static boolean headless;
|
||||||
/** whether steam is enabled for this game */
|
/** whether steam is enabled for this game */
|
||||||
public static boolean steam;
|
public static boolean steam;
|
||||||
|
/** whether typing into the console is enabled - developers only */
|
||||||
|
public static boolean enableConsole = false;
|
||||||
/** application data directory, equivalent to {@link io.anuke.arc.Settings#getDataDirectory()} */
|
/** application data directory, equivalent to {@link io.anuke.arc.Settings#getDataDirectory()} */
|
||||||
public static FileHandle dataDirectory;
|
public static Fi dataDirectory;
|
||||||
/** data subdirectory used for screenshots */
|
/** data subdirectory used for screenshots */
|
||||||
public static FileHandle screenshotDirectory;
|
public static Fi screenshotDirectory;
|
||||||
/** data subdirectory used for custom mmaps */
|
/** data subdirectory used for custom mmaps */
|
||||||
public static FileHandle customMapDirectory;
|
public static Fi customMapDirectory;
|
||||||
/** data subdirectory used for custom mmaps */
|
/** data subdirectory used for custom mmaps */
|
||||||
public static FileHandle mapPreviewDirectory;
|
public static Fi mapPreviewDirectory;
|
||||||
/** tmp subdirectory for map conversion */
|
/** tmp subdirectory for map conversion */
|
||||||
public static FileHandle tmpDirectory;
|
public static Fi tmpDirectory;
|
||||||
/** data subdirectory used for saves */
|
/** data subdirectory used for saves */
|
||||||
public static FileHandle saveDirectory;
|
public static Fi saveDirectory;
|
||||||
/** data subdirectory used for mods */
|
/** data subdirectory used for mods */
|
||||||
public static FileHandle modDirectory;
|
public static Fi modDirectory;
|
||||||
/** data subdirectory used for schematics */
|
/** data subdirectory used for schematics */
|
||||||
public static FileHandle schematicDirectory;
|
public static Fi schematicDirectory;
|
||||||
/** map file extension */
|
/** map file extension */
|
||||||
public static final String mapExtension = "msav";
|
public static final String mapExtension = "msav";
|
||||||
/** save file extension */
|
/** save file extension */
|
||||||
@@ -190,6 +196,7 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
public static void init(){
|
public static void init(){
|
||||||
Serialization.init();
|
Serialization.init();
|
||||||
|
DefaultSerializers.typeMappings.put("io.anuke.mindustry.type.ContentType", "io.anuke.mindustry.ctype.ContentType");
|
||||||
|
|
||||||
if(loadLocales){
|
if(loadLocales){
|
||||||
//load locales
|
//load locales
|
||||||
@@ -268,6 +275,31 @@ public class Vars implements Loadable{
|
|||||||
maps.load();
|
maps.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void loadLogger(){
|
||||||
|
if(loadedLogger) return;
|
||||||
|
|
||||||
|
String[] tags = {"[green][D][]", "[royal][I][]", "[yellow][W][]", "[scarlet][E][]", ""};
|
||||||
|
String[] stags = {"&lc&fb[D]", "&lg&fb[I]", "&ly&fb[W]", "&lr&fb[E]", ""};
|
||||||
|
|
||||||
|
Array<String> logBuffer = new Array<>();
|
||||||
|
Log.setLogger((level, text, args) -> {
|
||||||
|
String result = Log.format(text, args);
|
||||||
|
System.out.println(Log.format(stags[level.ordinal()] + "&fr " + text, args));
|
||||||
|
|
||||||
|
result = tags[level.ordinal()] + " " + result;
|
||||||
|
|
||||||
|
if(!headless && (ui == null || ui.scriptfrag == null)){
|
||||||
|
logBuffer.add(result);
|
||||||
|
}else if(!headless){
|
||||||
|
ui.scriptfrag.addMessage(result);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Events.on(ClientLoadEvent.class, e -> logBuffer.each(ui.scriptfrag::addMessage));
|
||||||
|
|
||||||
|
loadedLogger = true;
|
||||||
|
}
|
||||||
|
|
||||||
public static void loadSettings(){
|
public static void loadSettings(){
|
||||||
Core.settings.setAppName(appName);
|
Core.settings.setAppName(appName);
|
||||||
|
|
||||||
@@ -285,7 +317,7 @@ public class Vars implements Loadable{
|
|||||||
|
|
||||||
try{
|
try{
|
||||||
//try loading external bundle
|
//try loading external bundle
|
||||||
FileHandle handle = Core.files.local("bundle");
|
Fi handle = Core.files.local("bundle");
|
||||||
|
|
||||||
Locale locale = Locale.ENGLISH;
|
Locale locale = Locale.ENGLISH;
|
||||||
Core.bundle = I18NBundle.createBundle(handle, locale);
|
Core.bundle = I18NBundle.createBundle(handle, locale);
|
||||||
@@ -298,7 +330,7 @@ public class Vars implements Loadable{
|
|||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
//no external bundle found
|
//no external bundle found
|
||||||
|
|
||||||
FileHandle handle = Core.files.internal("bundles/bundle");
|
Fi handle = Core.files.internal("bundles/bundle");
|
||||||
Locale locale;
|
Locale locale;
|
||||||
String loc = Core.settings.getString("locale");
|
String loc = Core.settings.getString("locale");
|
||||||
if(loc.equals("default")){
|
if(loc.equals("default")){
|
||||||
|
|||||||
@@ -7,7 +7,7 @@ import io.anuke.arc.graphics.g2d.*;
|
|||||||
import io.anuke.arc.math.*;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.ctype.ContentList;
|
import io.anuke.mindustry.ctype.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import io.anuke.mindustry.entities.bullet.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
@@ -19,8 +19,7 @@ import io.anuke.mindustry.world.blocks.*;
|
|||||||
import io.anuke.mindustry.world.blocks.defense.*;
|
import io.anuke.mindustry.world.blocks.defense.*;
|
||||||
import io.anuke.mindustry.world.blocks.defense.turrets.*;
|
import io.anuke.mindustry.world.blocks.defense.turrets.*;
|
||||||
import io.anuke.mindustry.world.blocks.distribution.*;
|
import io.anuke.mindustry.world.blocks.distribution.*;
|
||||||
import io.anuke.mindustry.world.blocks.liquid.Conduit;
|
import io.anuke.mindustry.world.blocks.liquid.*;
|
||||||
import io.anuke.mindustry.world.blocks.liquid.LiquidTank;
|
|
||||||
import io.anuke.mindustry.world.blocks.logic.*;
|
import io.anuke.mindustry.world.blocks.logic.*;
|
||||||
import io.anuke.mindustry.world.blocks.power.*;
|
import io.anuke.mindustry.world.blocks.power.*;
|
||||||
import io.anuke.mindustry.world.blocks.production.*;
|
import io.anuke.mindustry.world.blocks.production.*;
|
||||||
@@ -485,7 +484,7 @@ public class Blocks implements ContentList{
|
|||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy());
|
Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
|
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.alpha(Mathf.absin(entity.totalProgress, 3f, 0.9f) * entity.warmup);
|
Draw.alpha(Mathf.absin(entity.totalProgress, 3f, 0.9f) * entity.warmup);
|
||||||
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
|
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
|
||||||
@@ -510,7 +509,7 @@ public class Blocks implements ContentList{
|
|||||||
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name), Core.atlas.find(name + "-weave")};
|
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name), Core.atlas.find(name + "-weave")};
|
||||||
|
|
||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy());
|
Draw.rect(reg(bottomRegion), tile.drawx(), tile.drawy());
|
||||||
Draw.rect(reg(weaveRegion), tile.drawx(), tile.drawy(), entity.totalProgress);
|
Draw.rect(reg(weaveRegion), tile.drawx(), tile.drawy(), entity.totalProgress);
|
||||||
@@ -660,7 +659,7 @@ public class Blocks implements ContentList{
|
|||||||
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-top")};
|
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-top")};
|
||||||
|
|
||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy());
|
Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
Draw.rect(reg(frameRegions[(int)Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
|
Draw.rect(reg(frameRegions[(int)Mathf.absin(entity.totalProgress, 5f, 2.999f)]), tile.drawx(), tile.drawy());
|
||||||
@@ -687,7 +686,7 @@ public class Blocks implements ContentList{
|
|||||||
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-rotator")};
|
drawIcons = () -> new TextureRegion[]{Core.atlas.find(name), Core.atlas.find(name + "-rotator")};
|
||||||
|
|
||||||
drawer = tile -> {
|
drawer = tile -> {
|
||||||
GenericCrafterEntity entity = tile.entity();
|
GenericCrafterEntity entity = tile.ent();
|
||||||
|
|
||||||
Draw.rect(region, tile.drawx(), tile.drawy());
|
Draw.rect(region, tile.drawx(), tile.drawy());
|
||||||
Draw.rect(reg(rotatorRegion), tile.drawx(), tile.drawy(), entity.totalProgress * 2f);
|
Draw.rect(reg(rotatorRegion), tile.drawx(), tile.drawy(), entity.totalProgress * 2f);
|
||||||
@@ -915,6 +914,7 @@ public class Blocks implements ContentList{
|
|||||||
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
phaseConveyor = new ItemBridge("phase-conveyor"){{
|
||||||
requirements(Category.distribution, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10));
|
requirements(Category.distribution, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.lead, 10, Items.graphite, 10));
|
||||||
range = 12;
|
range = 12;
|
||||||
|
canOverdrive = false;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
consumes.power(0.30f);
|
consumes.power(0.30f);
|
||||||
}};
|
}};
|
||||||
@@ -977,7 +977,7 @@ public class Blocks implements ContentList{
|
|||||||
size = 3;
|
size = 3;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
conduit = new io.anuke.mindustry.world.blocks.liquid.Conduit("conduit"){{
|
conduit = new Conduit("conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.metaglass, 1));
|
requirements(Category.liquid, ItemStack.with(Items.metaglass, 1));
|
||||||
health = 45;
|
health = 45;
|
||||||
}};
|
}};
|
||||||
@@ -989,14 +989,14 @@ public class Blocks implements ContentList{
|
|||||||
health = 90;
|
health = 90;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
platedConduit = new io.anuke.mindustry.world.blocks.liquid.ArmoredConduit("plated-conduit"){{
|
platedConduit = new ArmoredConduit("plated-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.thorium, 2, Items.metaglass, 1));
|
requirements(Category.liquid, ItemStack.with(Items.thorium, 2, Items.metaglass, 1, Items.plastanium, 1));
|
||||||
liquidCapacity = 16f;
|
liquidCapacity = 16f;
|
||||||
liquidPressure = 1.025f;
|
liquidPressure = 1.025f;
|
||||||
health = 220;
|
health = 220;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
liquidRouter = new io.anuke.mindustry.world.blocks.liquid.LiquidRouter("liquid-router"){{
|
liquidRouter = new LiquidRouter("liquid-router"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 2));
|
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 2));
|
||||||
liquidCapacity = 20f;
|
liquidCapacity = 20f;
|
||||||
}};
|
}};
|
||||||
@@ -1008,20 +1008,21 @@ public class Blocks implements ContentList{
|
|||||||
health = 500;
|
health = 500;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
liquidJunction = new io.anuke.mindustry.world.blocks.liquid.LiquidJunction("liquid-junction"){{
|
liquidJunction = new LiquidJunction("liquid-junction"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.graphite, 2, Items.metaglass, 2));
|
requirements(Category.liquid, ItemStack.with(Items.graphite, 2, Items.metaglass, 2));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
bridgeConduit = new io.anuke.mindustry.world.blocks.liquid.LiquidExtendingBridge("bridge-conduit"){{
|
bridgeConduit = new LiquidExtendingBridge("bridge-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 8));
|
requirements(Category.liquid, ItemStack.with(Items.graphite, 4, Items.metaglass, 8));
|
||||||
range = 4;
|
range = 4;
|
||||||
hasPower = false;
|
hasPower = false;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
phaseConduit = new io.anuke.mindustry.world.blocks.liquid.LiquidBridge("phase-conduit"){{
|
phaseConduit = new LiquidBridge("phase-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10));
|
requirements(Category.liquid, ItemStack.with(Items.phasefabric, 5, Items.silicon, 7, Items.metaglass, 20, Items.titanium, 10));
|
||||||
range = 12;
|
range = 12;
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
|
canOverdrive = false;
|
||||||
consumes.power(0.30f);
|
consumes.power(0.30f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1359,7 +1360,7 @@ public class Blocks implements ContentList{
|
|||||||
ammo(
|
ammo(
|
||||||
Items.graphite, Bullets.artilleryDense,
|
Items.graphite, Bullets.artilleryDense,
|
||||||
Items.silicon, Bullets.artilleryHoming,
|
Items.silicon, Bullets.artilleryHoming,
|
||||||
Items.pyratite, Bullets.artlleryIncendiary
|
Items.pyratite, Bullets.artilleryIncendiary
|
||||||
);
|
);
|
||||||
reload = 60f;
|
reload = 60f;
|
||||||
recoil = 2f;
|
recoil = 2f;
|
||||||
@@ -1539,9 +1540,9 @@ public class Blocks implements ContentList{
|
|||||||
ammo(
|
ammo(
|
||||||
Items.graphite, Bullets.artilleryDense,
|
Items.graphite, Bullets.artilleryDense,
|
||||||
Items.silicon, Bullets.artilleryHoming,
|
Items.silicon, Bullets.artilleryHoming,
|
||||||
Items.pyratite, Bullets.artlleryIncendiary,
|
Items.pyratite, Bullets.artilleryIncendiary,
|
||||||
Items.blastCompound, Bullets.artilleryExplosive,
|
Items.blastCompound, Bullets.artilleryExplosive,
|
||||||
Items.plastanium, Bullets.arilleryPlastic
|
Items.plastanium, Bullets.artilleryPlastic
|
||||||
);
|
);
|
||||||
size = 3;
|
size = 3;
|
||||||
shots = 4;
|
shots = 4;
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ public class Bullets implements ContentList{
|
|||||||
public static BulletType
|
public static BulletType
|
||||||
|
|
||||||
//artillery
|
//artillery
|
||||||
artilleryDense, arilleryPlastic, artilleryPlasticFrag, artilleryHoming, artlleryIncendiary, artilleryExplosive, artilleryUnit,
|
artilleryDense, artilleryPlastic, artilleryPlasticFrag, artilleryHoming, artilleryIncendiary, artilleryExplosive, artilleryUnit,
|
||||||
|
|
||||||
//flak
|
//flak
|
||||||
flakScrap, flakLead, flakPlastic, flakExplosive, flakSurge, flakGlass, glassFrag,
|
flakScrap, flakLead, flakPlastic, flakExplosive, flakSurge, flakGlass, glassFrag,
|
||||||
@@ -65,7 +65,7 @@ public class Bullets implements ContentList{
|
|||||||
despawnEffect = Fx.none;
|
despawnEffect = Fx.none;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
arilleryPlastic = new ArtilleryBulletType(3.4f, 0, "shell"){{
|
artilleryPlastic = new ArtilleryBulletType(3.4f, 0, "shell"){{
|
||||||
hitEffect = Fx.plasticExplosion;
|
hitEffect = Fx.plasticExplosion;
|
||||||
knockback = 1f;
|
knockback = 1f;
|
||||||
lifetime = 55f;
|
lifetime = 55f;
|
||||||
@@ -91,7 +91,7 @@ public class Bullets implements ContentList{
|
|||||||
homingRange = 50f;
|
homingRange = 50f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
artlleryIncendiary = new ArtilleryBulletType(3f, 0, "shell"){{
|
artilleryIncendiary = new ArtilleryBulletType(3f, 0, "shell"){{
|
||||||
hitEffect = Fx.blastExplosion;
|
hitEffect = Fx.blastExplosion;
|
||||||
knockback = 0.8f;
|
knockback = 0.8f;
|
||||||
lifetime = 60f;
|
lifetime = 60f;
|
||||||
|
|||||||
@@ -48,28 +48,24 @@ public class Fx implements ContentList{
|
|||||||
Draw.rect(unit.getIconRegion(), e.x, e.y,
|
Draw.rect(unit.getIconRegion(), e.x, e.y,
|
||||||
unit.getIconRegion().getWidth() * Draw.scl * scl, unit.getIconRegion().getWidth() * Draw.scl * scl, 180f);
|
unit.getIconRegion().getWidth() * Draw.scl * scl, unit.getIconRegion().getWidth() * Draw.scl * scl, 180f);
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
commandSend = new Effect(28, e -> {
|
commandSend = new Effect(28, e -> {
|
||||||
Draw.color(Pal.command);
|
Draw.color(Pal.command);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
placeBlock = new Effect(16, e -> {
|
placeBlock = new Effect(16, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(3f - e.fin() * 2f);
|
Lines.stroke(3f - e.fin() * 2f);
|
||||||
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
Lines.square(e.x, e.y, tilesize / 2f * e.rotation + e.fin() * 3f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
tapBlock = new Effect(12, e -> {
|
tapBlock = new Effect(12, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(3f - e.fin() * 2f);
|
Lines.stroke(3f - e.fin() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + (tilesize / 1.5f * e.rotation) * e.fin());
|
Lines.circle(e.x, e.y, 4f + (tilesize / 1.5f * e.rotation) * e.fin());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
breakBlock = new Effect(12, e -> {
|
breakBlock = new Effect(12, e -> {
|
||||||
@@ -80,41 +76,35 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 3 + (int)(e.rotation * 3), e.rotation * 2f + (tilesize * e.rotation) * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 3 + (int)(e.rotation * 3), e.rotation * 2f + (tilesize * e.rotation) * e.finpow(), (x, y) -> {
|
||||||
Fill.square(e.x + x, e.y + y, 1f + e.fout() * (3f + e.rotation));
|
Fill.square(e.x + x, e.y + y, 1f + e.fout() * (3f + e.rotation));
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
select = new Effect(23, e -> {
|
select = new Effect(23, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(e.fout() * 3f);
|
Lines.stroke(e.fout() * 3f);
|
||||||
Lines.circle(e.x, e.y, 3f + e.fin() * 14f);
|
Lines.circle(e.x, e.y, 3f + e.fin() * 14f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
smoke = new Effect(100, e -> {
|
smoke = new Effect(100, e -> {
|
||||||
Draw.color(Color.gray, Pal.darkishGray, e.fin());
|
Draw.color(Color.gray, Pal.darkishGray, e.fin());
|
||||||
float size = 7f - e.fin() * 7f;
|
float size = 7f - e.fin() * 7f;
|
||||||
Draw.rect("circle", e.x, e.y, size, size);
|
Draw.rect("circle", e.x, e.y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
magmasmoke = new Effect(110, e -> {
|
magmasmoke = new Effect(110, e -> {
|
||||||
Draw.color(Color.gray);
|
Draw.color(Color.gray);
|
||||||
Fill.circle(e.x, e.y, e.fslope() * 6f);
|
Fill.circle(e.x, e.y, e.fslope() * 6f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
spawn = new Effect(30, e -> {
|
spawn = new Effect(30, e -> {
|
||||||
Lines.stroke(2f * e.fout());
|
Lines.stroke(2f * e.fout());
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 12f);
|
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 12f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
padlaunch = new Effect(10, e -> {
|
padlaunch = new Effect(10, e -> {
|
||||||
Lines.stroke(4f * e.fout());
|
Lines.stroke(4f * e.fout());
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 60f);
|
Lines.poly(e.x, e.y, 4, 5f + e.fin() * 60f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
vtolHover = new Effect(40f, e -> {
|
vtolHover = new Effect(40f, e -> {
|
||||||
@@ -122,7 +112,6 @@ public class Fx implements ContentList{
|
|||||||
float ang = e.rotation + Mathf.randomSeedRange(e.id, 30f);
|
float ang = e.rotation + Mathf.randomSeedRange(e.id, 30f);
|
||||||
Draw.color(Pal.lightFlame, Pal.lightOrange, e.fin());
|
Draw.color(Pal.lightFlame, Pal.lightOrange, e.fin());
|
||||||
Fill.circle(e.x + Angles.trnsx(ang, len), e.y + Angles.trnsy(ang, len), 2f * e.fout());
|
Fill.circle(e.x + Angles.trnsx(ang, len), e.y + Angles.trnsy(ang, len), 2f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
unitDrop = new GroundEffect(30, e -> {
|
unitDrop = new GroundEffect(30, e -> {
|
||||||
@@ -130,7 +119,6 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 9, 3 + 20f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 9, 3 + 20f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.4f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.4f);
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
unitLand = new GroundEffect(30, e -> {
|
unitLand = new GroundEffect(30, e -> {
|
||||||
@@ -138,42 +126,36 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 6, 17f * e.finpow(), (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 17f * e.finpow(), (x, y) -> {
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.3f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 4f + 0.3f);
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
unitPickup = new GroundEffect(18, e -> {
|
unitPickup = new GroundEffect(18, e -> {
|
||||||
Draw.color(Pal.lightishGray);
|
Draw.color(Pal.lightishGray);
|
||||||
Lines.stroke(e.fin() * 2f);
|
Lines.stroke(e.fin() * 2f);
|
||||||
Lines.poly(e.x, e.y, 4, 13f * e.fout());
|
Lines.poly(e.x, e.y, 4, 13f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
landShock = new GroundEffect(12, e -> {
|
landShock = new GroundEffect(12, e -> {
|
||||||
Draw.color(Pal.lancerLaser);
|
Draw.color(Pal.lancerLaser);
|
||||||
Lines.stroke(e.fout() * 3f);
|
Lines.stroke(e.fout() * 3f);
|
||||||
Lines.poly(e.x, e.y, 12, 20f * e.fout());
|
Lines.poly(e.x, e.y, 12, 20f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
pickup = new Effect(18, e -> {
|
pickup = new Effect(18, e -> {
|
||||||
Draw.color(Pal.lightishGray);
|
Draw.color(Pal.lightishGray);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.spikes(e.x, e.y, 1f + e.fin() * 6f, e.fout() * 4f, 6);
|
Lines.spikes(e.x, e.y, 1f + e.fin() * 6f, e.fout() * 4f, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healWave = new Effect(22, e -> {
|
healWave = new Effect(22, e -> {
|
||||||
Draw.color(Pal.heal);
|
Draw.color(Pal.heal);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + e.finpow() * 60f);
|
Lines.circle(e.x, e.y, 4f + e.finpow() * 60f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
heal = new Effect(11, e -> {
|
heal = new Effect(11, e -> {
|
||||||
Draw.color(Pal.heal);
|
Draw.color(Pal.heal);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 2f + e.finpow() * 7f);
|
Lines.circle(e.x, e.y, 2f + e.finpow() * 7f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -193,7 +175,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitFuse = new Effect(14, e -> {
|
hitFuse = new Effect(14, e -> {
|
||||||
@@ -212,7 +193,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitBulletBig = new Effect(13, e -> {
|
hitBulletBig = new Effect(13, e -> {
|
||||||
@@ -224,7 +204,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1.5f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitFlameSmall = new Effect(14, e -> {
|
hitFlameSmall = new Effect(14, e -> {
|
||||||
@@ -236,7 +215,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 3 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitLiquid = new Effect(16, e -> {
|
hitLiquid = new Effect(16, e -> {
|
||||||
@@ -246,7 +224,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitLancer = new Effect(12, e -> {
|
hitLancer = new Effect(12, e -> {
|
||||||
@@ -258,7 +235,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitMeltdown = new Effect(12, e -> {
|
hitMeltdown = new Effect(12, e -> {
|
||||||
@@ -270,14 +246,12 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
hitLaser = new Effect(8, e -> {
|
hitLaser = new Effect(8, e -> {
|
||||||
Draw.color(Color.white, Pal.heal, e.fin());
|
Draw.color(Color.white, Pal.heal, e.fin());
|
||||||
Lines.stroke(0.5f + e.fout());
|
Lines.stroke(0.5f + e.fout());
|
||||||
Lines.circle(e.x, e.y, e.fin() * 5f);
|
Lines.circle(e.x, e.y, e.fin() * 5f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
despawn = new Effect(12, e -> {
|
despawn = new Effect(12, e -> {
|
||||||
@@ -289,7 +263,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 2 + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, ang, e.fout() * 2 + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
flakExplosion = new Effect(20, e -> {
|
flakExplosion = new Effect(20, e -> {
|
||||||
@@ -313,7 +286,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
plasticExplosion = new Effect(24, e -> {
|
plasticExplosion = new Effect(24, e -> {
|
||||||
@@ -337,7 +309,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
plasticExplosionFlak = new Effect(28, e -> {
|
plasticExplosionFlak = new Effect(28, e -> {
|
||||||
@@ -361,7 +332,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
blastExplosion = new Effect(22, e -> {
|
blastExplosion = new Effect(22, e -> {
|
||||||
@@ -385,32 +355,27 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
artilleryTrail = new Effect(50, e -> {
|
artilleryTrail = new Effect(50, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
incendTrail = new Effect(50, e -> {
|
incendTrail = new Effect(50, e -> {
|
||||||
Draw.color(Pal.lightOrange);
|
Draw.color(Pal.lightOrange);
|
||||||
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
missileTrail = new Effect(50, e -> {
|
missileTrail = new Effect(50, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
Fill.circle(e.x, e.y, e.rotation * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
absorb = new Effect(12, e -> {
|
absorb = new Effect(12, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(2f * e.fout());
|
Lines.stroke(2f * e.fout());
|
||||||
Lines.circle(e.x, e.y, 5f * e.fout());
|
Lines.circle(e.x, e.y, 5f * e.fout());
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
flakExplosionBig = new Effect(30, e -> {
|
flakExplosionBig = new Effect(30, e -> {
|
||||||
@@ -434,7 +399,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -445,7 +409,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.1f + e.fout() * 1.4f);
|
Fill.circle(e.x + x, e.y + y, 0.1f + e.fout() * 1.4f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
fire = new Effect(50f, e -> {
|
fire = new Effect(50f, e -> {
|
||||||
@@ -467,7 +430,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
steam = new Effect(35f, e -> {
|
steam = new Effect(35f, e -> {
|
||||||
@@ -477,7 +439,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fslope() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
fireballsmoke = new Effect(25f, e -> {
|
fireballsmoke = new Effect(25f, e -> {
|
||||||
@@ -487,7 +448,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
ballfire = new Effect(25f, e -> {
|
ballfire = new Effect(25f, e -> {
|
||||||
@@ -497,7 +457,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.2f + e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
freezing = new Effect(40f, e -> {
|
freezing = new Effect(40f, e -> {
|
||||||
@@ -507,7 +466,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
melting = new Effect(40f, e -> {
|
melting = new Effect(40f, e -> {
|
||||||
@@ -517,7 +475,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, .2f + e.fout() * 1.2f);
|
Fill.circle(e.x + x, e.y + y, .2f + e.fout() * 1.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
wet = new Effect(40f, e -> {
|
wet = new Effect(40f, e -> {
|
||||||
@@ -527,7 +484,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
oily = new Effect(42f, e -> {
|
oily = new Effect(42f, e -> {
|
||||||
@@ -537,7 +493,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
overdriven = new Effect(20f, e -> {
|
overdriven = new Effect(20f, e -> {
|
||||||
@@ -547,7 +502,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2.3f + 0.5f);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2.3f + 0.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
dropItem = new Effect(20f, e -> {
|
dropItem = new Effect(20f, e -> {
|
||||||
@@ -562,35 +516,30 @@ public class Fx implements ContentList{
|
|||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 2f + 0.2f);
|
Lines.stroke(e.fout() * 2f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 28f);
|
Lines.circle(e.x, e.y, e.fin() * 28f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bigShockwave = new Effect(10f, 80f, e -> {
|
bigShockwave = new Effect(10f, 80f, e -> {
|
||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f);
|
Lines.stroke(e.fout() * 3f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 50f);
|
Lines.circle(e.x, e.y, e.fin() * 50f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
nuclearShockwave = new Effect(10f, 200f, e -> {
|
nuclearShockwave = new Effect(10f, 200f, e -> {
|
||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f + 0.2f);
|
Lines.stroke(e.fout() * 3f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 140f);
|
Lines.circle(e.x, e.y, e.fin() * 140f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
impactShockwave = new Effect(13f, 300f, e -> {
|
impactShockwave = new Effect(13f, 300f, e -> {
|
||||||
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 4f + 0.2f);
|
Lines.stroke(e.fout() * 4f + 0.2f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * 200f);
|
Lines.circle(e.x, e.y, e.fin() * 200f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
spawnShockwave = new Effect(20f, 400f, e -> {
|
spawnShockwave = new Effect(20f, 400f, e -> {
|
||||||
Draw.color(Color.white, Color.lightGray, e.fin());
|
Draw.color(Color.white, Color.lightGray, e.fin());
|
||||||
Lines.stroke(e.fout() * 3f + 0.5f);
|
Lines.stroke(e.fout() * 3f + 0.5f);
|
||||||
Lines.circle(e.x, e.y, e.fin() * (e.rotation + 50f));
|
Lines.circle(e.x, e.y, e.fin() * (e.rotation + 50f));
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
explosion = new Effect(30, e -> {
|
explosion = new Effect(30, e -> {
|
||||||
@@ -613,7 +562,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
dynamicExplosion = new Effect(30, e -> {
|
dynamicExplosion = new Effect(30, e -> {
|
||||||
@@ -638,7 +586,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + out * 4 * (3f + intensity));
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + out * 4 * (3f + intensity));
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
blockExplosion = new Effect(30, e -> {
|
blockExplosion = new Effect(30, e -> {
|
||||||
@@ -661,7 +608,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), 1f + e.fout() * 3f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
blockExplosionSmoke = new Effect(30, e -> {
|
blockExplosionSmoke = new Effect(30, e -> {
|
||||||
@@ -672,7 +618,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
Fill.circle(e.x + x / 2f, e.y + y / 2f, e.fout() * 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -681,7 +626,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1f + 5 * e.fout();
|
float w = 1f + 5 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 15f * e.fout(), e.rotation);
|
Drawf.tri(e.x, e.y, w, 15f * e.fout(), e.rotation);
|
||||||
Drawf.tri(e.x, e.y, w, 3f * e.fout(), e.rotation + 180f);
|
Drawf.tri(e.x, e.y, w, 3f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootHeal = new Effect(8, e -> {
|
shootHeal = new Effect(8, e -> {
|
||||||
@@ -689,7 +633,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1f + 5 * e.fout();
|
float w = 1f + 5 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 17f * e.fout(), e.rotation);
|
Drawf.tri(e.x, e.y, w, 17f * e.fout(), e.rotation);
|
||||||
Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f);
|
Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootSmallSmoke = new Effect(20f, e -> {
|
shootSmallSmoke = new Effect(20f, e -> {
|
||||||
@@ -699,7 +642,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBig = new Effect(9, e -> {
|
shootBig = new Effect(9, e -> {
|
||||||
@@ -707,7 +649,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1.2f + 7 * e.fout();
|
float w = 1.2f + 7 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 25f * e.fout(), e.rotation);
|
Drawf.tri(e.x, e.y, w, 25f * e.fout(), e.rotation);
|
||||||
Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f);
|
Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBig2 = new Effect(10, e -> {
|
shootBig2 = new Effect(10, e -> {
|
||||||
@@ -715,7 +656,6 @@ public class Fx implements ContentList{
|
|||||||
float w = 1.2f + 8 * e.fout();
|
float w = 1.2f + 8 * e.fout();
|
||||||
Drawf.tri(e.x, e.y, w, 29f * e.fout(), e.rotation);
|
Drawf.tri(e.x, e.y, w, 29f * e.fout(), e.rotation);
|
||||||
Drawf.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f);
|
Drawf.tri(e.x, e.y, w, 5f * e.fout(), e.rotation + 180f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBigSmoke = new Effect(17f, e -> {
|
shootBigSmoke = new Effect(17f, e -> {
|
||||||
@@ -725,7 +665,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2f + 0.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2f + 0.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootBigSmoke2 = new Effect(18f, e -> {
|
shootBigSmoke2 = new Effect(18f, e -> {
|
||||||
@@ -735,7 +674,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 2.4f + 0.2f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 2.4f + 0.2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootSmallFlame = new Effect(32f, e -> {
|
shootSmallFlame = new Effect(32f, e -> {
|
||||||
@@ -745,7 +683,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.5f);
|
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootPyraFlame = new Effect(33f, e -> {
|
shootPyraFlame = new Effect(33f, e -> {
|
||||||
@@ -755,7 +692,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.6f);
|
Fill.circle(e.x + x, e.y + y, 0.65f + e.fout() * 1.6f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shootLiquid = new Effect(40f, e -> {
|
shootLiquid = new Effect(40f, e -> {
|
||||||
@@ -765,7 +701,6 @@ public class Fx implements ContentList{
|
|||||||
Fill.circle(e.x + x, e.y + y, 0.5f + e.fout() * 2.5f);
|
Fill.circle(e.x + x, e.y + y, 0.5f + e.fout() * 2.5f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shellEjectSmall = new GroundEffect(30f, 400f, e -> {
|
shellEjectSmall = new GroundEffect(30f, 400f, e -> {
|
||||||
@@ -780,7 +715,6 @@ public class Fx implements ContentList{
|
|||||||
e.y + Angles.trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()),
|
e.y + Angles.trnsy(lr, len) + Mathf.randomSeedRange(e.id + i + 8, 3f * e.fin()),
|
||||||
1f, 2f, rot + e.fin() * 50f * i);
|
1f, 2f, rot + e.fin() * 50f * i);
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shellEjectMedium = new GroundEffect(34f, 400f, e -> {
|
shellEjectMedium = new GroundEffect(34f, 400f, e -> {
|
||||||
@@ -804,7 +738,6 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shellEjectBig = new GroundEffect(22f, 400f, e -> {
|
shellEjectBig = new GroundEffect(22f, 400f, e -> {
|
||||||
@@ -829,7 +762,6 @@ public class Fx implements ContentList{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserShoot = new Effect(21f, e -> {
|
lancerLaserShoot = new Effect(21f, e -> {
|
||||||
@@ -839,7 +771,6 @@ public class Fx implements ContentList{
|
|||||||
Drawf.tri(e.x, e.y, 4f * e.fout(), 29f, e.rotation + 90f * i);
|
Drawf.tri(e.x, e.y, 4f * e.fout(), 29f, e.rotation + 90f * i);
|
||||||
}
|
}
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserShootSmoke = new Effect(26f, e -> {
|
lancerLaserShootSmoke = new Effect(26f, e -> {
|
||||||
@@ -849,7 +780,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fout() * 9f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fout() * 9f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserCharge = new Effect(38f, e -> {
|
lancerLaserCharge = new Effect(38f, e -> {
|
||||||
@@ -859,7 +789,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 3f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 3f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lancerLaserChargeBegin = new Effect(71f, e -> {
|
lancerLaserChargeBegin = new Effect(71f, e -> {
|
||||||
@@ -877,7 +806,6 @@ public class Fx implements ContentList{
|
|||||||
Drawf.tri(e.x + x, e.y + y, e.fslope() * 3f + 1, e.fslope() * 3f + 1, Mathf.angle(x, y));
|
Drawf.tri(e.x + x, e.y + y, e.fslope() * 3f + 1, e.fslope() * 3f + 1, Mathf.angle(x, y));
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
lightningShoot = new Effect(12f, e -> {
|
lightningShoot = new Effect(12f, e -> {
|
||||||
@@ -888,7 +816,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 5f + 2f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 5f + 2f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
@@ -897,7 +824,6 @@ public class Fx implements ContentList{
|
|||||||
float size = 1f + e.fout() * 5f;
|
float size = 1f + e.fout() * 5f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
nuclearsmoke = new Effect(40, e -> {
|
nuclearsmoke = new Effect(40, e -> {
|
||||||
@@ -905,7 +831,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
nuclearcloud = new Effect(90, 200f, e -> {
|
nuclearcloud = new Effect(90, 200f, e -> {
|
||||||
@@ -913,7 +838,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fout() * 14f;
|
float size = e.fout() * 14f;
|
||||||
Draw.color(Color.lime, Color.gray, e.fin());
|
Draw.color(Color.lime, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
impactsmoke = new Effect(60, e -> {
|
impactsmoke = new Effect(60, e -> {
|
||||||
@@ -921,7 +845,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
impactcloud = new Effect(140, 400f, e -> {
|
impactcloud = new Effect(140, 400f, e -> {
|
||||||
@@ -929,7 +852,6 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fout() * 15f;
|
float size = e.fout() * 15f;
|
||||||
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
Draw.color(Pal.lighterOrange, Color.lightGray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
redgeneratespark = new Effect(18, e -> {
|
redgeneratespark = new Effect(18, e -> {
|
||||||
@@ -937,7 +859,6 @@ public class Fx implements ContentList{
|
|||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Pal.redSpark, Color.gray, e.fin());
|
Draw.color(Pal.redSpark, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
generatespark = new Effect(18, e -> {
|
generatespark = new Effect(18, e -> {
|
||||||
@@ -945,7 +866,6 @@ public class Fx implements ContentList{
|
|||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Pal.orangeSpark, Color.gray, e.fin());
|
Draw.color(Pal.orangeSpark, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
fuelburn = new Effect(23, e -> {
|
fuelburn = new Effect(23, e -> {
|
||||||
@@ -953,70 +873,60 @@ public class Fx implements ContentList{
|
|||||||
float len = e.fout() * 4f;
|
float len = e.fout() * 4f;
|
||||||
Draw.color(Color.lightGray, Color.gray, e.fin());
|
Draw.color(Color.lightGray, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
Draw.rect("circle", e.x + x, e.y + y, len, len);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
plasticburn = new Effect(40, e -> {
|
plasticburn = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.valueOf("e9ead3"), Color.gray, e.fin());
|
Draw.color(Color.valueOf("e9ead3"), Color.gray, e.fin());
|
||||||
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
Fill.circle(e.x + x, e.y + y, e.fout() * 1f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverize = new Effect(40, e -> {
|
pulverize = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.stoneGray);
|
Draw.color(Pal.stoneGray);
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeRed = new Effect(40, e -> {
|
pulverizeRed = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.redDust, Pal.stoneGray, e.fin());
|
Draw.color(Pal.redDust, Pal.stoneGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeRedder = new Effect(40, e -> {
|
pulverizeRedder = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 9f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 9f, (x, y) -> {
|
||||||
Draw.color(Pal.redderDust, Pal.stoneGray, e.fin());
|
Draw.color(Pal.redderDust, Pal.stoneGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2.5f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2.5f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeSmall = new Effect(30, e -> {
|
pulverizeSmall = new Effect(30, e -> {
|
||||||
Angles.randLenVectors(e.id, 3, e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 3, e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Pal.stoneGray);
|
Draw.color(Pal.stoneGray);
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
pulverizeMedium = new Effect(30, e -> {
|
pulverizeMedium = new Effect(30, e -> {
|
||||||
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 5, 3f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.stoneGray);
|
Draw.color(Pal.stoneGray);
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 1f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
producesmoke = new Effect(12, e -> {
|
producesmoke = new Effect(12, e -> {
|
||||||
Angles.randLenVectors(e.id, 8, 4f + e.fin() * 18f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, 4f + e.fin() * 18f, (x, y) -> {
|
||||||
Draw.color(Color.white, Pal.accent, e.fin());
|
Draw.color(Color.white, Pal.accent, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 1f + e.fout() * 3f, 45);
|
Fill.square(e.x + x, e.y + y, 1f + e.fout() * 3f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
smeltsmoke = new Effect(15, e -> {
|
smeltsmoke = new Effect(15, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.white, e.color, e.fin());
|
Draw.color(Color.white, e.color, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
formsmoke = new Effect(40, e -> {
|
formsmoke = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 5f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(Pal.plasticSmoke, Color.lightGray, e.fin());
|
Draw.color(Pal.plasticSmoke, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.2f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.2f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
blastsmoke = new Effect(26, e -> {
|
blastsmoke = new Effect(26, e -> {
|
||||||
@@ -1024,7 +934,6 @@ public class Fx implements ContentList{
|
|||||||
float size = 2f + e.fout() * 6f;
|
float size = 2f + e.fout() * 6f;
|
||||||
Draw.color(Color.lightGray, Color.darkGray, e.fin());
|
Draw.color(Color.lightGray, Color.darkGray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
lava = new Effect(18, e -> {
|
lava = new Effect(18, e -> {
|
||||||
@@ -1032,79 +941,66 @@ public class Fx implements ContentList{
|
|||||||
float size = e.fslope() * 4f;
|
float size = e.fslope() * 4f;
|
||||||
Draw.color(Color.orange, Color.gray, e.fin());
|
Draw.color(Color.orange, Color.gray, e.fin());
|
||||||
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
Draw.rect("circle", e.x + x, e.y + y, size, size);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
dooropen = new Effect(10, e -> {
|
dooropen = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize / 2f + e.fin() * 2f);
|
Lines.square(e.x, e.y, tilesize / 2f + e.fin() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
doorclose = new Effect(10, e -> {
|
doorclose = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize / 2f + e.fout() * 2f);
|
Lines.square(e.x, e.y, tilesize / 2f + e.fout() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
dooropenlarge = new Effect(10, e -> {
|
dooropenlarge = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize + e.fin() * 2f);
|
Lines.square(e.x, e.y, tilesize + e.fin() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
doorcloselarge = new Effect(10, e -> {
|
doorcloselarge = new Effect(10, e -> {
|
||||||
Lines.stroke(e.fout() * 1.6f);
|
Lines.stroke(e.fout() * 1.6f);
|
||||||
Lines.square(e.x, e.y, tilesize + e.fout() * 2f);
|
Lines.square(e.x, e.y, tilesize + e.fout() * 2f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
purify = new Effect(10, e -> {
|
purify = new Effect(10, e -> {
|
||||||
Draw.color(Color.royal, Color.gray, e.fin());
|
Draw.color(Color.royal, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
purifyoil = new Effect(10, e -> {
|
purifyoil = new Effect(10, e -> {
|
||||||
Draw.color(Color.black, Color.gray, e.fin());
|
Draw.color(Color.black, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
purifystone = new Effect(10, e -> {
|
purifystone = new Effect(10, e -> {
|
||||||
Draw.color(Color.orange, Color.gray, e.fin());
|
Draw.color(Color.orange, Color.gray, e.fin());
|
||||||
Lines.stroke(2f);
|
Lines.stroke(2f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
Lines.spikes(e.x, e.y, e.fin() * 4f, 2, 6);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
generate = new Effect(11, e -> {
|
generate = new Effect(11, e -> {
|
||||||
Draw.color(Color.orange, Color.yellow, e.fin());
|
Draw.color(Color.orange, Color.yellow, e.fin());
|
||||||
Lines.stroke(1f);
|
Lines.stroke(1f);
|
||||||
Lines.spikes(e.x, e.y, e.fin() * 5f, 2, 8);
|
Lines.spikes(e.x, e.y, e.fin() * 5f, 2, 8);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
mine = new Effect(20, e -> {
|
mine = new Effect(20, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 3f + e.fin() * 6f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 3f + e.fin() * 6f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.lightGray, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
mineBig = new Effect(30, e -> {
|
mineBig = new Effect(30, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 4f + e.fin() * 8f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.lightGray, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.2f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
mineHuge = new Effect(40, e -> {
|
mineHuge = new Effect(40, e -> {
|
||||||
Angles.randLenVectors(e.id, 8, 5f + e.fin() * 10f, (x, y) -> {
|
Angles.randLenVectors(e.id, 8, 5f + e.fin() * 10f, (x, y) -> {
|
||||||
Draw.color(e.color, Color.lightGray, e.fin());
|
Draw.color(e.color, Color.lightGray, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
Fill.square(e.x + x, e.y + y, e.fout() * 2f + 0.5f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
smelt = new Effect(20, e -> {
|
smelt = new Effect(20, e -> {
|
||||||
Angles.randLenVectors(e.id, 6, 2f + e.fin() * 5f, (x, y) -> {
|
Angles.randLenVectors(e.id, 6, 2f + e.fin() * 5f, (x, y) -> {
|
||||||
Draw.color(Color.white, e.color, e.fin());
|
Draw.color(Color.white, e.color, e.fin());
|
||||||
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
Fill.square(e.x + x, e.y + y, 0.5f + e.fout() * 2f, 45);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
teleportActivate = new Effect(50, e -> {
|
teleportActivate = new Effect(50, e -> {
|
||||||
@@ -1121,7 +1017,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
teleport = new Effect(60, e -> {
|
teleport = new Effect(60, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
@@ -1132,7 +1027,6 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fin() * 4f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
teleportOut = new Effect(20, e -> {
|
teleportOut = new Effect(20, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
@@ -1143,13 +1037,11 @@ public class Fx implements ContentList{
|
|||||||
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 4f + 1f);
|
Lines.lineAngle(e.x + x, e.y + y, Mathf.angle(x, y), e.fslope() * 4f + 1f);
|
||||||
});
|
});
|
||||||
|
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
ripple = new GroundEffect(false, 30, e -> {
|
ripple = new GroundEffect(false, 30, e -> {
|
||||||
Draw.color(Tmp.c1.set(e.color).mul(1.2f));
|
Draw.color(Tmp.c1.set(e.color).mul(1.2f));
|
||||||
Lines.stroke(e.fout() + 0.4f);
|
Lines.stroke(e.fout() + 0.4f);
|
||||||
Lines.circle(e.x, e.y, 2f + e.fin() * 4f);
|
Lines.circle(e.x, e.y, 2f + e.fin() * 4f);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
bubble = new Effect(20, e -> {
|
bubble = new Effect(20, e -> {
|
||||||
@@ -1158,56 +1050,47 @@ public class Fx implements ContentList{
|
|||||||
Angles.randLenVectors(e.id, 2, 8f, (x, y) -> {
|
Angles.randLenVectors(e.id, 2, 8f, (x, y) -> {
|
||||||
Lines.circle(e.x + x, e.y + y, 1f + e.fin() * 3f);
|
Lines.circle(e.x + x, e.y + y, 1f + e.fin() * 3f);
|
||||||
});
|
});
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
launch = new Effect(28, e -> {
|
launch = new Effect(28, e -> {
|
||||||
Draw.color(Pal.command);
|
Draw.color(Pal.command);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
Lines.circle(e.x, e.y, 4f + e.finpow() * 120f);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healWaveMend = new Effect(40, e -> {
|
healWaveMend = new Effect(40, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Lines.stroke(e.fout() * 2f);
|
Lines.stroke(e.fout() * 2f);
|
||||||
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
overdriveWave = new Effect(50, e -> {
|
overdriveWave = new Effect(50, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Lines.stroke(e.fout() * 1f);
|
Lines.stroke(e.fout() * 1f);
|
||||||
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
Lines.circle(e.x, e.y, e.finpow() * e.rotation);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healBlock = new Effect(20, e -> {
|
healBlock = new Effect(20, e -> {
|
||||||
Draw.color(Pal.heal);
|
Draw.color(Pal.heal);
|
||||||
Lines.stroke(2f * e.fout() + 0.5f);
|
Lines.stroke(2f * e.fout() + 0.5f);
|
||||||
Lines.square(e.x, e.y, 1f + (e.fin() * e.rotation * tilesize / 2f - 1f));
|
Lines.square(e.x, e.y, 1f + (e.fin() * e.rotation * tilesize / 2f - 1f));
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
healBlockFull = new Effect(20, e -> {
|
healBlockFull = new Effect(20, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Draw.alpha(e.fout());
|
Draw.alpha(e.fout());
|
||||||
Fill.square(e.x, e.y, e.rotation * tilesize / 2f);
|
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
overdriveBlockFull = new Effect(60, e -> {
|
overdriveBlockFull = new Effect(60, e -> {
|
||||||
Draw.color(e.color);
|
Draw.color(e.color);
|
||||||
Draw.alpha(e.fslope() * 0.4f);
|
Draw.alpha(e.fslope() * 0.4f);
|
||||||
Fill.square(e.x, e.y, e.rotation * tilesize);
|
Fill.square(e.x, e.y, e.rotation * tilesize);
|
||||||
Draw.color();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
shieldBreak = new Effect(40, e -> {
|
shieldBreak = new Effect(40, e -> {
|
||||||
Draw.color(Pal.accent);
|
Draw.color(Pal.accent);
|
||||||
Lines.stroke(3f * e.fout());
|
Lines.stroke(3f * e.fout());
|
||||||
Lines.poly(e.x, e.y, 6, e.rotation + e.fin(), 90);
|
Lines.poly(e.x, e.y, 6, e.rotation + e.fin(), 90);
|
||||||
Draw.reset();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
coreLand = new Effect(120f, e -> {
|
coreLand = new Effect(120f, e -> {
|
||||||
|
|||||||
@@ -15,61 +15,71 @@ public class StatusEffects implements ContentList{
|
|||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
|
|
||||||
none = new StatusEffect();
|
none = new StatusEffect("none");
|
||||||
|
|
||||||
burning = new StatusEffect(){{
|
burning = new StatusEffect("burning"){{
|
||||||
damage = 0.06f;
|
damage = 0.06f;
|
||||||
effect = Fx.burning;
|
effect = Fx.burning;
|
||||||
|
|
||||||
opposite(() -> wet, () -> freezing);
|
init(() -> {
|
||||||
trans(() -> tarred, ((unit, time, newTime, result) -> {
|
opposite(wet,freezing);
|
||||||
unit.damage(1f);
|
trans(tarred, ((unit, time, newTime, result) -> {
|
||||||
Effects.effect(Fx.burning, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
unit.damage(1f);
|
||||||
result.set(this, Math.min(time + newTime, 300f));
|
Effects.effect(Fx.burning, unit.x + Mathf.range(unit.getSize() / 2f), unit.y + Mathf.range(unit.getSize() / 2f));
|
||||||
}));
|
result.set(this, Math.min(time + newTime, 300f));
|
||||||
|
}));
|
||||||
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
freezing = new StatusEffect(){{
|
freezing = new StatusEffect("freezing"){{
|
||||||
speedMultiplier = 0.6f;
|
speedMultiplier = 0.6f;
|
||||||
armorMultiplier = 0.8f;
|
armorMultiplier = 0.8f;
|
||||||
effect = Fx.freezing;
|
effect = Fx.freezing;
|
||||||
|
|
||||||
opposite(() -> melting, () -> burning);
|
init(() -> {
|
||||||
|
opposite(melting, burning);
|
||||||
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
wet = new StatusEffect(){{
|
wet = new StatusEffect("wet"){{
|
||||||
speedMultiplier = 0.9f;
|
speedMultiplier = 0.9f;
|
||||||
effect = Fx.wet;
|
effect = Fx.wet;
|
||||||
|
|
||||||
trans(() -> shocked, ((unit, time, newTime, result) -> {
|
init(() -> {
|
||||||
unit.damage(20f);
|
trans(shocked, ((unit, time, newTime, result) -> {
|
||||||
if(unit.getTeam() == waveTeam){
|
unit.damage(20f);
|
||||||
Events.fire(Trigger.shock);
|
if(unit.getTeam() == waveTeam){
|
||||||
}
|
Events.fire(Trigger.shock);
|
||||||
result.set(this, time);
|
}
|
||||||
}));
|
result.set(this, time);
|
||||||
opposite(() -> burning);
|
}));
|
||||||
|
opposite(burning);
|
||||||
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
melting = new StatusEffect(){{
|
melting = new StatusEffect("melting"){{
|
||||||
speedMultiplier = 0.8f;
|
speedMultiplier = 0.8f;
|
||||||
armorMultiplier = 0.8f;
|
armorMultiplier = 0.8f;
|
||||||
damage = 0.3f;
|
damage = 0.3f;
|
||||||
effect = Fx.melting;
|
effect = Fx.melting;
|
||||||
|
|
||||||
trans(() -> tarred, ((unit, time, newTime, result) -> result.set(this, Math.min(time + newTime / 2f, 140f))));
|
init(() -> {
|
||||||
opposite(() -> wet, () -> freezing);
|
trans(tarred, ((unit, time, newTime, result) -> result.set(this, Math.min(time + newTime / 2f, 140f))));
|
||||||
|
opposite(wet, freezing);
|
||||||
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
tarred = new StatusEffect(){{
|
tarred = new StatusEffect("tarred"){{
|
||||||
speedMultiplier = 0.6f;
|
speedMultiplier = 0.6f;
|
||||||
effect = Fx.oily;
|
effect = Fx.oily;
|
||||||
|
|
||||||
trans(() -> melting, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
init(() -> {
|
||||||
trans(() -> burning, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
trans(melting, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
||||||
|
trans(burning, ((unit, time, newTime, result) -> result.set(burning, newTime + time)));
|
||||||
|
});
|
||||||
}};
|
}};
|
||||||
|
|
||||||
overdrive = new StatusEffect(){{
|
overdrive = new StatusEffect("overdrive"){{
|
||||||
armorMultiplier = 0.95f;
|
armorMultiplier = 0.95f;
|
||||||
speedMultiplier = 1.15f;
|
speedMultiplier = 1.15f;
|
||||||
damageMultiplier = 1.4f;
|
damageMultiplier = 1.4f;
|
||||||
@@ -77,20 +87,20 @@ public class StatusEffects implements ContentList{
|
|||||||
effect = Fx.overdriven;
|
effect = Fx.overdriven;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
shielded = new StatusEffect(){{
|
shielded = new StatusEffect("shielded"){{
|
||||||
armorMultiplier = 3f;
|
armorMultiplier = 3f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
boss = new StatusEffect(){{
|
boss = new StatusEffect("boss"){{
|
||||||
armorMultiplier = 3f;
|
armorMultiplier = 3f;
|
||||||
damageMultiplier = 3f;
|
damageMultiplier = 3f;
|
||||||
speedMultiplier = 1.1f;
|
speedMultiplier = 1.1f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
shocked = new StatusEffect();
|
shocked = new StatusEffect("shocked");
|
||||||
|
|
||||||
//no effects, just small amounts of damage.
|
//no effects, just small amounts of damage.
|
||||||
corroded = new StatusEffect(){{
|
corroded = new StatusEffect("corroded"){{
|
||||||
damage = 0.1f;
|
damage = 0.1f;
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ public class UnitTypes implements ContentList{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void load(){
|
public void load(){
|
||||||
draug = new UnitType("draug", Draug::new){{
|
draug = new UnitType("draug", MinerDrone::new){{
|
||||||
flying = true;
|
flying = true;
|
||||||
drag = 0.01f;
|
drag = 0.01f;
|
||||||
speed = 0.3f;
|
speed = 0.3f;
|
||||||
@@ -32,7 +32,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
spirit = new UnitType("spirit", Spirit::new){{
|
spirit = new UnitType("spirit", RepairDrone::new){{
|
||||||
flying = true;
|
flying = true;
|
||||||
drag = 0.01f;
|
drag = 0.01f;
|
||||||
speed = 0.42f;
|
speed = 0.42f;
|
||||||
@@ -53,7 +53,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
phantom = new UnitType("phantom", Phantom::new){{
|
phantom = new UnitType("phantom", BuilderDrone::new){{
|
||||||
flying = true;
|
flying = true;
|
||||||
drag = 0.01f;
|
drag = 0.01f;
|
||||||
mass = 2f;
|
mass = 2f;
|
||||||
@@ -76,7 +76,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
dagger = new UnitType("dagger", Dagger::new){{
|
dagger = new UnitType("dagger", GroundUnit::new){{
|
||||||
maxVelocity = 1.1f;
|
maxVelocity = 1.1f;
|
||||||
speed = 0.2f;
|
speed = 0.2f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
@@ -92,7 +92,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
crawler = new UnitType("crawler", Crawler::new){{
|
crawler = new UnitType("crawler", GroundUnit::new){{
|
||||||
maxVelocity = 1.27f;
|
maxVelocity = 1.27f;
|
||||||
speed = 0.285f;
|
speed = 0.285f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
@@ -123,7 +123,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
titan = new UnitType("titan", Titan::new){{
|
titan = new UnitType("titan", GroundUnit::new){{
|
||||||
maxVelocity = 0.8f;
|
maxVelocity = 0.8f;
|
||||||
speed = 0.22f;
|
speed = 0.22f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
@@ -145,7 +145,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
fortress = new UnitType("fortress", Fortress::new){{
|
fortress = new UnitType("fortress", GroundUnit::new){{
|
||||||
maxVelocity = 0.78f;
|
maxVelocity = 0.78f;
|
||||||
speed = 0.15f;
|
speed = 0.15f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
@@ -167,7 +167,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
eruptor = new UnitType("eruptor", Eruptor::new){{
|
eruptor = new UnitType("eruptor", GroundUnit::new){{
|
||||||
maxVelocity = 0.81f;
|
maxVelocity = 0.81f;
|
||||||
speed = 0.16f;
|
speed = 0.16f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
@@ -189,7 +189,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
chaosArray = new UnitType("chaos-array", Dagger::new){{
|
chaosArray = new UnitType("chaos-array", GroundUnit::new){{
|
||||||
maxVelocity = 0.68f;
|
maxVelocity = 0.68f;
|
||||||
speed = 0.12f;
|
speed = 0.12f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
@@ -213,7 +213,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
eradicator = new UnitType("eradicator", Dagger::new){{
|
eradicator = new UnitType("eradicator", GroundUnit::new){{
|
||||||
maxVelocity = 0.68f;
|
maxVelocity = 0.68f;
|
||||||
speed = 0.12f;
|
speed = 0.12f;
|
||||||
drag = 0.4f;
|
drag = 0.4f;
|
||||||
@@ -238,7 +238,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
wraith = new UnitType("wraith", Wraith::new){{
|
wraith = new UnitType("wraith", FlyingUnit::new){{
|
||||||
speed = 0.3f;
|
speed = 0.3f;
|
||||||
maxVelocity = 1.9f;
|
maxVelocity = 1.9f;
|
||||||
drag = 0.01f;
|
drag = 0.01f;
|
||||||
@@ -257,7 +257,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
ghoul = new UnitType("ghoul", Ghoul::new){{
|
ghoul = new UnitType("ghoul", FlyingUnit::new){{
|
||||||
health = 220;
|
health = 220;
|
||||||
speed = 0.2f;
|
speed = 0.2f;
|
||||||
maxVelocity = 1.4f;
|
maxVelocity = 1.4f;
|
||||||
@@ -281,7 +281,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
revenant = new UnitType("revenant", Revenant::new){{
|
revenant = new UnitType("revenant", HoverUnit::new){{
|
||||||
health = 1000;
|
health = 1000;
|
||||||
mass = 5f;
|
mass = 5f;
|
||||||
hitsize = 20f;
|
hitsize = 20f;
|
||||||
@@ -312,7 +312,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
lich = new UnitType("lich", Revenant::new){{
|
lich = new UnitType("lich", HoverUnit::new){{
|
||||||
health = 6000;
|
health = 6000;
|
||||||
mass = 20f;
|
mass = 20f;
|
||||||
hitsize = 40f;
|
hitsize = 40f;
|
||||||
@@ -345,7 +345,7 @@ public class UnitTypes implements ContentList{
|
|||||||
}};
|
}};
|
||||||
}};
|
}};
|
||||||
|
|
||||||
reaper = new UnitType("reaper", Revenant::new){{
|
reaper = new UnitType("reaper", HoverUnit::new){{
|
||||||
health = 11000;
|
health = 11000;
|
||||||
mass = 30f;
|
mass = 30f;
|
||||||
hitsize = 56f;
|
hitsize = 56f;
|
||||||
|
|||||||
@@ -3,9 +3,11 @@ package io.anuke.mindustry.core;
|
|||||||
import io.anuke.arc.collection.*;
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.func.*;
|
import io.anuke.arc.func.*;
|
||||||
import io.anuke.arc.graphics.*;
|
import io.anuke.arc.graphics.*;
|
||||||
|
import io.anuke.arc.util.ArcAnnotate.*;
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.ctype.*;
|
import io.anuke.mindustry.ctype.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.bullet.*;
|
import io.anuke.mindustry.entities.bullet.*;
|
||||||
import io.anuke.mindustry.mod.Mods.*;
|
import io.anuke.mindustry.mod.Mods.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
@@ -20,10 +22,11 @@ import static io.anuke.mindustry.Vars.mods;
|
|||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public class ContentLoader{
|
public class ContentLoader{
|
||||||
private boolean loaded = false;
|
|
||||||
private ObjectMap<String, MappableContent>[] contentNameMap = new ObjectMap[ContentType.values().length];
|
private ObjectMap<String, MappableContent>[] contentNameMap = new ObjectMap[ContentType.values().length];
|
||||||
private Array<Content>[] contentMap = new Array[ContentType.values().length];
|
private Array<Content>[] contentMap = new Array[ContentType.values().length];
|
||||||
private MappableContent[][] temporaryMapper;
|
private MappableContent[][] temporaryMapper;
|
||||||
|
private @Nullable LoadedMod currentMod;
|
||||||
|
private @Nullable Content lastAdded;
|
||||||
private ObjectSet<Cons<Content>> initialization = new ObjectSet<>();
|
private ObjectSet<Cons<Content>> initialization = new ObjectSet<>();
|
||||||
private ContentList[] content = {
|
private ContentList[] content = {
|
||||||
new Fx(),
|
new Fx(),
|
||||||
@@ -43,35 +46,40 @@ public class ContentLoader{
|
|||||||
new LegacyColorMapper(),
|
new LegacyColorMapper(),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public ContentLoader(){
|
||||||
|
clear();
|
||||||
|
}
|
||||||
|
|
||||||
/** Clears all initialized content.*/
|
/** Clears all initialized content.*/
|
||||||
public void clear(){
|
public void clear(){
|
||||||
contentNameMap = new ObjectMap[ContentType.values().length];
|
contentNameMap = new ObjectMap[ContentType.values().length];
|
||||||
contentMap = new Array[ContentType.values().length];
|
contentMap = new Array[ContentType.values().length];
|
||||||
initialization = new ObjectSet<>();
|
initialization = new ObjectSet<>();
|
||||||
loaded = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
/** Creates all content types. */
|
|
||||||
public void createContent(){
|
|
||||||
if(loaded){
|
|
||||||
Log.info("Content already loaded, skipping.");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(ContentType type : ContentType.values()){
|
for(ContentType type : ContentType.values()){
|
||||||
contentMap[type.ordinal()] = new Array<>();
|
contentMap[type.ordinal()] = new Array<>();
|
||||||
contentNameMap[type.ordinal()] = new ObjectMap<>();
|
contentNameMap[type.ordinal()] = new ObjectMap<>();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/** Creates all base types. */
|
||||||
|
public void createBaseContent(){
|
||||||
for(ContentList list : content){
|
for(ContentList list : content){
|
||||||
list.load();
|
list.load();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Creates mod content, if applicable. */
|
||||||
|
public void createModContent(){
|
||||||
if(mods != null){
|
if(mods != null){
|
||||||
mods.loadContent();
|
mods.loadContent();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//check up ID mapping, make sure it's linear
|
/** Logs content statistics.*/
|
||||||
|
public void logContent(){
|
||||||
|
//check up ID mapping, make sure it's linear (debug only)
|
||||||
for(Array<Content> arr : contentMap){
|
for(Array<Content> arr : contentMap){
|
||||||
for(int i = 0; i < arr.size; i++){
|
for(int i = 0; i < arr.size; i++){
|
||||||
int id = arr.get(i).id;
|
int id = arr.get(i).id;
|
||||||
@@ -81,17 +89,12 @@ public class ContentLoader{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
loaded = true;
|
Log.debug("--- CONTENT INFO ---");
|
||||||
}
|
|
||||||
|
|
||||||
/** Logs content statistics.*/
|
|
||||||
public void logContent(){
|
|
||||||
Log.info("--- CONTENT INFO ---");
|
|
||||||
for(int k = 0; k < contentMap.length; k++){
|
for(int k = 0; k < contentMap.length; k++){
|
||||||
Log.info("[{0}]: loaded {1}", ContentType.values()[k].name(), contentMap[k].size);
|
Log.debug("[{0}]: loaded {1}", ContentType.values()[k].name(), contentMap[k].size);
|
||||||
}
|
}
|
||||||
Log.info("Total content loaded: {0}", Array.with(ContentType.values()).mapInt(c -> contentMap[c.ordinal()].size).sum());
|
Log.debug("Total content loaded: {0}", Array.with(ContentType.values()).mapInt(c -> contentMap[c.ordinal()].size).sum());
|
||||||
Log.info("-------------------");
|
Log.debug("-------------------");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Calls Content#init() on everything. Use only after all modules have been created.*/
|
/** Calls Content#init() on everything. Use only after all modules have been created.*/
|
||||||
@@ -113,8 +116,8 @@ public class ContentLoader{
|
|||||||
try{
|
try{
|
||||||
callable.get(content);
|
callable.get(content);
|
||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
if(content.mod != null){
|
if(content.minfo.mod != null){
|
||||||
mods.handleError(new ModLoadException(content, e), content.mod);
|
mods.handleContentError(content, e);
|
||||||
}else{
|
}else{
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
@@ -145,15 +148,41 @@ public class ContentLoader{
|
|||||||
//clear all content, currently not used
|
//clear all content, currently not used
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleContent(Content content){
|
/** Get last piece of content created for error-handling purposes. */
|
||||||
contentMap[content.getContentType().ordinal()].add(content);
|
public @Nullable Content getLastAdded(){
|
||||||
|
return lastAdded;
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Remove last content added in case of an exception. */
|
||||||
|
public void removeLast(){
|
||||||
|
if(lastAdded != null && contentMap[lastAdded.getContentType().ordinal()].peek() == lastAdded){
|
||||||
|
contentMap[lastAdded.getContentType().ordinal()].pop();
|
||||||
|
if(lastAdded instanceof MappableContent){
|
||||||
|
contentNameMap[lastAdded.getContentType().ordinal()].remove(((MappableContent)lastAdded).name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void handleContent(Content content){
|
||||||
|
this.lastAdded = content;
|
||||||
|
contentMap[content.getContentType().ordinal()].add(content);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setCurrentMod(@Nullable LoadedMod mod){
|
||||||
|
this.currentMod = mod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String transformName(String name){
|
||||||
|
return currentMod == null ? name : currentMod.name + "-" + name;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void handleMappableContent(MappableContent content){
|
public void handleMappableContent(MappableContent content){
|
||||||
if(contentNameMap[content.getContentType().ordinal()].containsKey(content.name)){
|
if(contentNameMap[content.getContentType().ordinal()].containsKey(content.name)){
|
||||||
throw new IllegalArgumentException("Two content objects cannot have the same name! (issue: '" + content.name + "')");
|
throw new IllegalArgumentException("Two content objects cannot have the same name! (issue: '" + content.name + "')");
|
||||||
}
|
}
|
||||||
|
if(currentMod != null){
|
||||||
|
content.minfo.mod = currentMod;
|
||||||
|
}
|
||||||
contentNameMap[content.getContentType().ordinal()].put(content.name, content);
|
contentNameMap[content.getContentType().ordinal()].put(content.name, content);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -262,6 +262,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
state.set(State.playing);
|
state.set(State.playing);
|
||||||
|
state.wavetime = state.rules.waveSpacing;
|
||||||
control.saves.zoneSave();
|
control.saves.zoneSave();
|
||||||
logic.play();
|
logic.play();
|
||||||
Events.fire(Trigger.newGame);
|
Events.fire(Trigger.newGame);
|
||||||
@@ -451,12 +452,12 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
platform.updateRPC();
|
platform.updateRPC();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.pause) && !scene.hasDialog() && !ui.restart.isShown() && (state.is(State.paused) || state.is(State.playing))){
|
if(Core.input.keyTap(Binding.pause) && !scene.hasDialog() && !scene.hasKeyboard() && !ui.restart.isShown() && (state.is(State.paused) || state.is(State.playing))){
|
||||||
state.set(state.is(State.playing) ? State.paused : State.playing);
|
state.set(state.is(State.playing) ? State.paused : State.playing);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.menu) && !ui.restart.isShown()){
|
if(Core.input.keyTap(Binding.menu) && !ui.restart.isShown()){
|
||||||
if(ui.chatfrag.chatOpen()){
|
if(ui.chatfrag.shown()){
|
||||||
ui.chatfrag.hide();
|
ui.chatfrag.hide();
|
||||||
}else if(!ui.paused.isShown() && !scene.hasDialog()){
|
}else if(!ui.paused.isShown() && !scene.hasDialog()){
|
||||||
ui.paused.show();
|
ui.paused.show();
|
||||||
@@ -464,7 +465,7 @@ public class Control implements ApplicationListener, Loadable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!mobile && Core.input.keyTap(Binding.screenshot) && !(scene.getKeyboardFocus() instanceof TextField) && !ui.chatfrag.chatOpen()){
|
if(!mobile && Core.input.keyTap(Binding.screenshot) && !(scene.getKeyboardFocus() instanceof TextField) && !scene.hasKeyboard()){
|
||||||
renderer.takeMapScreenshot();
|
renderer.takeMapScreenshot();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,16 +7,18 @@ import io.anuke.arc.files.*;
|
|||||||
|
|
||||||
/** Handles files in a modded context. */
|
/** Handles files in a modded context. */
|
||||||
public class FileTree implements FileHandleResolver{
|
public class FileTree implements FileHandleResolver{
|
||||||
private ObjectMap<String, FileHandle> files = new ObjectMap<>();
|
private ObjectMap<String, Fi> files = new ObjectMap<>();
|
||||||
|
|
||||||
public void addFile(String path, FileHandle f){
|
public void addFile(String path, Fi f){
|
||||||
files.put(path, f);
|
files.put(path, f);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Gets an asset file.*/
|
/** Gets an asset file.*/
|
||||||
public FileHandle get(String path){
|
public Fi get(String path){
|
||||||
if(files.containsKey(path)){
|
if(files.containsKey(path)){
|
||||||
return files.get(path);
|
return files.get(path);
|
||||||
|
}else if(files.containsKey("/" + path)){
|
||||||
|
return files.get("/" + path);
|
||||||
}else{
|
}else{
|
||||||
return Core.files.internal(path);
|
return Core.files.internal(path);
|
||||||
}
|
}
|
||||||
@@ -28,7 +30,7 @@ public class FileTree implements FileHandleResolver{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileHandle resolve(String fileName){
|
public Fi resolve(String fileName){
|
||||||
return get(fileName);
|
return get(fileName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -52,7 +52,7 @@ public class Logic implements ApplicationListener{
|
|||||||
|
|
||||||
if(block instanceof BuildBlock){
|
if(block instanceof BuildBlock){
|
||||||
|
|
||||||
BuildEntity entity = tile.entity();
|
BuildEntity entity = tile.ent();
|
||||||
|
|
||||||
//update block to reflect the fact that something was being constructed
|
//update block to reflect the fact that something was being constructed
|
||||||
if(entity.cblock != null && entity.cblock.synthetic()){
|
if(entity.cblock != null && entity.cblock.synthetic()){
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import io.anuke.arc.util.io.*;
|
|||||||
import io.anuke.arc.util.serialization.*;
|
import io.anuke.arc.util.serialization.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.core.GameState.*;
|
import io.anuke.mindustry.core.GameState.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
|
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
@@ -22,7 +23,6 @@ import io.anuke.mindustry.net.Administration.*;
|
|||||||
import io.anuke.mindustry.net.Net.*;
|
import io.anuke.mindustry.net.Net.*;
|
||||||
import io.anuke.mindustry.net.*;
|
import io.anuke.mindustry.net.*;
|
||||||
import io.anuke.mindustry.net.Packets.*;
|
import io.anuke.mindustry.net.Packets.*;
|
||||||
import io.anuke.mindustry.type.*;
|
|
||||||
import io.anuke.mindustry.type.TypeID;
|
import io.anuke.mindustry.type.TypeID;
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.modules.*;
|
import io.anuke.mindustry.world.modules.*;
|
||||||
@@ -491,7 +491,7 @@ public class NetClient implements ApplicationListener{
|
|||||||
player.pointerX, player.pointerY, player.rotation, player.baseRotation,
|
player.pointerX, player.pointerY, player.rotation, player.baseRotation,
|
||||||
player.velocity().x, player.velocity().y,
|
player.velocity().x, player.velocity().y,
|
||||||
player.getMineTile(),
|
player.getMineTile(),
|
||||||
player.isBoosting, player.isShooting, ui.chatfrag.chatOpen(), player.isBuilding,
|
player.isBoosting, player.isShooting, ui.chatfrag.shown(), player.isBuilding,
|
||||||
requests,
|
requests,
|
||||||
Core.camera.position.x, Core.camera.position.y,
|
Core.camera.position.x, Core.camera.position.y,
|
||||||
Core.camera.width * viewScale, Core.camera.height * viewScale);
|
Core.camera.width * viewScale, Core.camera.height * viewScale);
|
||||||
|
|||||||
@@ -66,6 +66,10 @@ public class NetServer implements ApplicationListener{
|
|||||||
});
|
});
|
||||||
|
|
||||||
net.handleServer(ConnectPacket.class, (con, packet) -> {
|
net.handleServer(ConnectPacket.class, (con, packet) -> {
|
||||||
|
if(con.address.startsWith("steam:")){
|
||||||
|
packet.uuid = con.address.substring("steam:".length());
|
||||||
|
}
|
||||||
|
|
||||||
String uuid = packet.uuid;
|
String uuid = packet.uuid;
|
||||||
|
|
||||||
if(admins.isIPBanned(con.address)) return;
|
if(admins.isIPBanned(con.address)) return;
|
||||||
@@ -215,7 +219,7 @@ public class NetServer implements ApplicationListener{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void init(){
|
public void init(){
|
||||||
mods.each(mod -> mod.registerClientCommands(clientCommands));
|
mods.eachClass(mod -> mod.registerClientCommands(clientCommands));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void registerCommands(){
|
private void registerCommands(){
|
||||||
|
|||||||
@@ -8,10 +8,12 @@ import io.anuke.arc.func.*;
|
|||||||
import io.anuke.arc.math.*;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.scene.ui.*;
|
import io.anuke.arc.scene.ui.*;
|
||||||
import io.anuke.arc.util.serialization.*;
|
import io.anuke.arc.util.serialization.*;
|
||||||
|
import io.anuke.mindustry.mod.*;
|
||||||
import io.anuke.mindustry.net.*;
|
import io.anuke.mindustry.net.*;
|
||||||
import io.anuke.mindustry.net.Net.*;
|
import io.anuke.mindustry.net.Net.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.ui.dialogs.*;
|
import io.anuke.mindustry.ui.dialogs.*;
|
||||||
|
import org.mozilla.javascript.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.mobile;
|
import static io.anuke.mindustry.Vars.mobile;
|
||||||
|
|
||||||
@@ -33,7 +35,7 @@ public interface Platform{
|
|||||||
default void viewListingID(String mapid){}
|
default void viewListingID(String mapid){}
|
||||||
|
|
||||||
/** Steam: Return external workshop maps to be loaded.*/
|
/** Steam: Return external workshop maps to be loaded.*/
|
||||||
default Array<FileHandle> getWorkshopContent(Class<? extends Publishable> type){
|
default Array<Fi> getWorkshopContent(Class<? extends Publishable> type){
|
||||||
return new Array<>(0);
|
return new Array<>(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,7 +44,18 @@ public interface Platform{
|
|||||||
|
|
||||||
/** Get the networking implementation.*/
|
/** Get the networking implementation.*/
|
||||||
default NetProvider getNet(){
|
default NetProvider getNet(){
|
||||||
return new ArcNetImpl();
|
return new ArcNetProvider();
|
||||||
|
}
|
||||||
|
|
||||||
|
/** Gets the scripting implementation. */
|
||||||
|
default Scripts createScripts(){
|
||||||
|
return new Scripts();
|
||||||
|
}
|
||||||
|
|
||||||
|
default Context getScriptContext(){
|
||||||
|
Context c = Context.enter();
|
||||||
|
c.setOptimizationLevel(9);
|
||||||
|
return c;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Add a text input dialog that should show up after the field is tapped. */
|
/** Add a text input dialog that should show up after the field is tapped. */
|
||||||
@@ -87,7 +100,7 @@ public interface Platform{
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Only used for iOS or android: open the share menu for a map or save. */
|
/** Only used for iOS or android: open the share menu for a map or save. */
|
||||||
default void shareFile(FileHandle file){
|
default void shareFile(Fi file){
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -96,7 +109,7 @@ public interface Platform{
|
|||||||
* @param open Whether to open or save files
|
* @param open Whether to open or save files
|
||||||
* @param extension File extension to filter
|
* @param extension File extension to filter
|
||||||
*/
|
*/
|
||||||
default void showFileChooser(boolean open, String extension, Cons<FileHandle> cons){
|
default void showFileChooser(boolean open, String extension, Cons<Fi> cons){
|
||||||
new FileChooser(open ? "$open" : "$save", file -> file.extension().toLowerCase().equals(extension), open, file -> {
|
new FileChooser(open ? "$open" : "$save", file -> file.extension().toLowerCase().equals(extension), open, file -> {
|
||||||
if(!open){
|
if(!open){
|
||||||
cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension));
|
cons.get(file.parent().child(file.nameWithoutExtension() + "." + extension));
|
||||||
|
|||||||
@@ -456,7 +456,7 @@ public class Renderer implements ApplicationListener{
|
|||||||
buffer.end();
|
buffer.end();
|
||||||
Pixmap fullPixmap = new Pixmap(w, h, Pixmap.Format.RGBA8888);
|
Pixmap fullPixmap = new Pixmap(w, h, Pixmap.Format.RGBA8888);
|
||||||
BufferUtils.copy(lines, 0, fullPixmap.getPixels(), lines.length);
|
BufferUtils.copy(lines, 0, fullPixmap.getPixels(), lines.length);
|
||||||
FileHandle file = screenshotDirectory.child("screenshot-" + Time.millis() + ".png");
|
Fi file = screenshotDirectory.child("screenshot-" + Time.millis() + ".png");
|
||||||
PixmapIO.writePNG(file, fullPixmap);
|
PixmapIO.writePNG(file, fullPixmap);
|
||||||
fullPixmap.dispose();
|
fullPixmap.dispose();
|
||||||
ui.showInfoFade(Core.bundle.format("screenshot", file.toString()));
|
ui.showInfoFade(Core.bundle.format("screenshot", file.toString()));
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
public MenuFragment menufrag;
|
public MenuFragment menufrag;
|
||||||
public HudFragment hudfrag;
|
public HudFragment hudfrag;
|
||||||
public ChatFragment chatfrag;
|
public ChatFragment chatfrag;
|
||||||
|
public ScriptConsoleFragment scriptfrag;
|
||||||
public PlayerListFragment listfrag;
|
public PlayerListFragment listfrag;
|
||||||
public LoadingFragment loadfrag;
|
public LoadingFragment loadfrag;
|
||||||
|
|
||||||
@@ -137,7 +138,7 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
|
Core.assets.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
|
||||||
Core.assets.setLoader(BitmapFont.class, null, new FreetypeFontLoader(resolver){
|
Core.assets.setLoader(BitmapFont.class, null, new FreetypeFontLoader(resolver){
|
||||||
@Override
|
@Override
|
||||||
public BitmapFont loadSync(AssetManager manager, String fileName, FileHandle file, FreeTypeFontLoaderParameter parameter){
|
public BitmapFont loadSync(AssetManager manager, String fileName, Fi file, FreeTypeFontLoaderParameter parameter){
|
||||||
if(fileName.equals("outline")){
|
if(fileName.equals("outline")){
|
||||||
parameter.fontParameters.borderWidth = Scl.scl(2f);
|
parameter.fontParameters.borderWidth = Scl.scl(2f);
|
||||||
parameter.fontParameters.spaceX -= parameter.fontParameters.borderWidth;
|
parameter.fontParameters.spaceX -= parameter.fontParameters.borderWidth;
|
||||||
@@ -211,6 +212,7 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
chatfrag = new ChatFragment();
|
chatfrag = new ChatFragment();
|
||||||
listfrag = new PlayerListFragment();
|
listfrag = new PlayerListFragment();
|
||||||
loadfrag = new LoadingFragment();
|
loadfrag = new LoadingFragment();
|
||||||
|
scriptfrag = new ScriptConsoleFragment();
|
||||||
|
|
||||||
picker = new ColorPicker();
|
picker = new ColorPicker();
|
||||||
editor = new MapEditorDialog();
|
editor = new MapEditorDialog();
|
||||||
@@ -253,6 +255,7 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
menufrag.build(menuGroup);
|
menufrag.build(menuGroup);
|
||||||
chatfrag.container().build(hudGroup);
|
chatfrag.container().build(hudGroup);
|
||||||
listfrag.build(hudGroup);
|
listfrag.build(hudGroup);
|
||||||
|
scriptfrag.container().build(hudGroup);
|
||||||
loadfrag.build(group);
|
loadfrag.build(group);
|
||||||
new FadeInFragment().build(group);
|
new FadeInFragment().build(group);
|
||||||
}
|
}
|
||||||
@@ -371,6 +374,37 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
}}.show();
|
}}.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void showExceptions(String text, String... messages){
|
||||||
|
loadfrag.hide();
|
||||||
|
new Dialog(""){{
|
||||||
|
|
||||||
|
setFillParent(true);
|
||||||
|
cont.margin(15);
|
||||||
|
cont.add("$error.title").colspan(2);
|
||||||
|
cont.row();
|
||||||
|
cont.addImage().width(300f).pad(2).colspan(2).height(4f).color(Color.scarlet);
|
||||||
|
cont.row();
|
||||||
|
cont.add(text).colspan(2).wrap().growX().center().get().setAlignment(Align.center);
|
||||||
|
cont.row();
|
||||||
|
|
||||||
|
//cont.pane(p -> {
|
||||||
|
for(int i = 0; i < messages.length; i += 2){
|
||||||
|
String btext = messages[i];
|
||||||
|
String details = messages[i + 1];
|
||||||
|
Collapser col = new Collapser(base -> base.pane(t -> t.margin(14f).add(details).color(Color.lightGray).left()), true);
|
||||||
|
|
||||||
|
cont.add(btext).right();
|
||||||
|
cont.addButton("$details", Styles.togglet, col::toggle).size(180f, 50f).checked(b -> !col.isCollapsed()).fillX().left();
|
||||||
|
cont.row();
|
||||||
|
cont.add(col).colspan(2).pad(2);
|
||||||
|
cont.row();
|
||||||
|
}
|
||||||
|
//}).colspan(2);
|
||||||
|
|
||||||
|
cont.addButton("$ok", this::hide).size(300, 50).fillX().colspan(2);
|
||||||
|
}}.show();
|
||||||
|
}
|
||||||
|
|
||||||
public void showText(String titleText, String text){
|
public void showText(String titleText, String text){
|
||||||
showText(titleText, text, Align.center);
|
showText(titleText, text, Align.center);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -7,8 +7,6 @@ import io.anuke.arc.files.*;
|
|||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.io.*;
|
import io.anuke.arc.util.io.*;
|
||||||
|
|
||||||
import java.io.*;
|
|
||||||
|
|
||||||
public class Version{
|
public class Version{
|
||||||
/** Build type. 'official' for official releases; 'custom' or 'bleeding edge' are also used. */
|
/** Build type. 'official' for official releases; 'custom' or 'bleeding edge' are also used. */
|
||||||
public static String type;
|
public static String type;
|
||||||
@@ -26,29 +24,25 @@ public class Version{
|
|||||||
public static void init(){
|
public static void init(){
|
||||||
if(!enabled) return;
|
if(!enabled) return;
|
||||||
|
|
||||||
try{
|
Fi file = OS.isAndroid || OS.isIos ? Core.files.internal("version.properties") : new Fi("version.properties", FileType.internal);
|
||||||
FileHandle file = OS.isAndroid || OS.isIos ? Core.files.internal("version.properties") : new FileHandle("version.properties", FileType.Internal);
|
|
||||||
|
|
||||||
ObjectMap<String, String> map = new ObjectMap<>();
|
ObjectMap<String, String> map = new ObjectMap<>();
|
||||||
PropertiesUtils.load(map, file.reader());
|
PropertiesUtils.load(map, file.reader());
|
||||||
|
|
||||||
type = map.get("type");
|
type = map.get("type");
|
||||||
number = Integer.parseInt(map.get("number", "4"));
|
number = Integer.parseInt(map.get("number", "4"));
|
||||||
modifier = map.get("modifier");
|
modifier = map.get("modifier");
|
||||||
if(map.get("build").contains(".")){
|
if(map.get("build").contains(".")){
|
||||||
String[] split = map.get("build").split("\\.");
|
String[] split = map.get("build").split("\\.");
|
||||||
try{
|
try{
|
||||||
build = Integer.parseInt(split[0]);
|
build = Integer.parseInt(split[0]);
|
||||||
revision = Integer.parseInt(split[1]);
|
revision = Integer.parseInt(split[1]);
|
||||||
}catch(Throwable e){
|
}catch(Throwable e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
build = -1;
|
build = -1;
|
||||||
}
|
|
||||||
}else{
|
|
||||||
build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1;
|
|
||||||
}
|
}
|
||||||
}catch(IOException e){
|
}else{
|
||||||
throw new RuntimeException(e);
|
build = Strings.canParseInt(map.get("build")) ? Integer.parseInt(map.get("build")) : -1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,16 +4,14 @@ import io.anuke.arc.files.*;
|
|||||||
import io.anuke.arc.util.ArcAnnotate.*;
|
import io.anuke.arc.util.ArcAnnotate.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.mod.Mods.*;
|
import io.anuke.mindustry.mod.Mods.*;
|
||||||
import io.anuke.mindustry.type.*;
|
|
||||||
|
|
||||||
|
|
||||||
/** Base class for a content type that is loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
|
/** Base class for a content type that is loaded in {@link io.anuke.mindustry.core.ContentLoader}. */
|
||||||
public abstract class Content implements Comparable<Content>{
|
public abstract class Content implements Comparable<Content>{
|
||||||
public final short id;
|
public final short id;
|
||||||
/** The mod that loaded this piece of content. */
|
/** Info on which mod this content was loaded from. */
|
||||||
public @Nullable LoadedMod mod;
|
public @NonNull ModContentInfo minfo = new ModContentInfo();
|
||||||
/** File that this content was loaded from. */
|
|
||||||
public @Nullable FileHandle sourceFile;
|
|
||||||
|
|
||||||
public Content(){
|
public Content(){
|
||||||
this.id = (short)Vars.content.getBy(getContentType()).size;
|
this.id = (short)Vars.content.getBy(getContentType()).size;
|
||||||
@@ -37,6 +35,11 @@ public abstract class Content implements Comparable<Content>{
|
|||||||
public void load(){
|
public void load(){
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return whether an error ocurred during mod loading. */
|
||||||
|
public boolean hasErrored(){
|
||||||
|
return minfo.error != null;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int compareTo(Content c){
|
public int compareTo(Content c){
|
||||||
return Integer.compare(id, c.id);
|
return Integer.compare(id, c.id);
|
||||||
@@ -46,4 +49,15 @@ public abstract class Content implements Comparable<Content>{
|
|||||||
public String toString(){
|
public String toString(){
|
||||||
return getContentType().name() + "#" + id;
|
return getContentType().name() + "#" + id;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ModContentInfo{
|
||||||
|
/** The mod that loaded this piece of content. */
|
||||||
|
public @Nullable LoadedMod mod;
|
||||||
|
/** File that this content was loaded from. */
|
||||||
|
public @Nullable Fi sourceFile;
|
||||||
|
/** The error that occurred during loading, if applicable. Null if no error occurred. */
|
||||||
|
public @Nullable String error;
|
||||||
|
/** Base throwable that caused the error. */
|
||||||
|
public @Nullable Throwable baseError;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
package io.anuke.mindustry.type;
|
package io.anuke.mindustry.ctype;
|
||||||
|
|
||||||
/** Do not rearrange, ever! */
|
/** Do not rearrange, ever! */
|
||||||
public enum ContentType{
|
public enum ContentType{
|
||||||
@@ -13,7 +13,8 @@ public enum ContentType{
|
|||||||
effect,
|
effect,
|
||||||
zone,
|
zone,
|
||||||
loadout,
|
loadout,
|
||||||
typeid;
|
typeid,
|
||||||
|
error;
|
||||||
|
|
||||||
public static final ContentType[] all = values();
|
public static final ContentType[] all = values();
|
||||||
}
|
}
|
||||||
@@ -6,7 +6,7 @@ public abstract class MappableContent extends Content{
|
|||||||
public final String name;
|
public final String name;
|
||||||
|
|
||||||
public MappableContent(String name){
|
public MappableContent(String name){
|
||||||
this.name = name;
|
this.name = Vars.content.transformName(name);
|
||||||
Vars.content.handleMappableContent(this);
|
Vars.content.handleMappableContent(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ public abstract class UnlockableContent extends MappableContent{
|
|||||||
public UnlockableContent(String name){
|
public UnlockableContent(String name){
|
||||||
super(name);
|
super(name);
|
||||||
|
|
||||||
this.localizedName = Core.bundle.get(getContentType() + "." + name + ".name", name);
|
this.localizedName = Core.bundle.get(getContentType() + "." + this.name + ".name", this.name);
|
||||||
this.description = Core.bundle.getOrNull(getContentType() + "." + name + ".description");
|
this.description = Core.bundle.getOrNull(getContentType() + "." + this.name + ".description");
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Generate any special icons for this content. Called asynchronously.*/
|
/** Generate any special icons for this content. Called asynchronously.*/
|
||||||
@@ -42,11 +42,6 @@ public abstract class UnlockableContent extends MappableContent{
|
|||||||
return cicons[icon.ordinal()];
|
return cicons[icon.ordinal()];
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Returns the localized name of this content. */
|
|
||||||
public abstract String localizedName();
|
|
||||||
|
|
||||||
//public abstract TextureRegion getContentIcon();
|
|
||||||
|
|
||||||
/** This should show all necessary info about this content in the specified table. */
|
/** This should show all necessary info about this content in the specified table. */
|
||||||
public abstract void displayInfo(Table table);
|
public abstract void displayInfo(Table table);
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
package io.anuke.mindustry.editor;
|
package io.anuke.mindustry.editor;
|
||||||
|
|
||||||
import io.anuke.arc.collection.StringMap;
|
import io.anuke.arc.collection.StringMap;
|
||||||
import io.anuke.arc.files.FileHandle;
|
import io.anuke.arc.files.Fi;
|
||||||
import io.anuke.arc.func.Cons;
|
import io.anuke.arc.func.Cons;
|
||||||
import io.anuke.arc.func.Boolf;
|
import io.anuke.arc.func.Boolf;
|
||||||
import io.anuke.arc.graphics.Pixmap;
|
import io.anuke.arc.graphics.Pixmap;
|
||||||
@@ -109,7 +109,7 @@ public class MapEditor{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public Map createMap(FileHandle file){
|
public Map createMap(Fi file){
|
||||||
return new Map(file, width(), height(), new StringMap(tags), true);
|
return new Map(file, width(), height(), new StringMap(tags), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
}else{
|
}else{
|
||||||
ui.loadAnd(() -> {
|
ui.loadAnd(() -> {
|
||||||
try{
|
try{
|
||||||
FileHandle result = Core.files.local(editor.getTags().get("name", "unknown") + "." + mapExtension);
|
Fi result = Core.files.local(editor.getTags().get("name", "unknown") + "." + mapExtension);
|
||||||
MapIO.writeMap(result, editor.createMap(result));
|
MapIO.writeMap(result, editor.createMap(result));
|
||||||
platform.shareFile(result);
|
platform.shareFile(result);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
@@ -381,7 +381,7 @@ public class MapEditorDialog extends Dialog implements Disposable{
|
|||||||
editor.renderer().dispose();
|
editor.renderer().dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void beginEditMap(FileHandle file){
|
public void beginEditMap(Fi file){
|
||||||
ui.loadAnd(() -> {
|
ui.loadAnd(() -> {
|
||||||
try{
|
try{
|
||||||
shownWithMap = true;
|
shownWithMap = true;
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import io.anuke.arc.scene.ui.layout.*;
|
|||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.graphics.*;
|
import io.anuke.mindustry.graphics.*;
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ public class Damage{
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < Mathf.clamp(flammability / 4, 0, 30); i++){
|
for(int i = 0; i < Mathf.clamp(flammability / 4, 0, 30); i++){
|
||||||
Time.run(i / 2f, () -> Call.createBullet(Bullets.fireball, x, y, Mathf.random(360f)));
|
Time.run(i / 2f, () -> Call.createBullet(Bullets.fireball, Team.derelict, x, y, Mathf.random(360f), 1, 1));
|
||||||
}
|
}
|
||||||
|
|
||||||
int waves = Mathf.clamp((int)(explosiveness / 4), 0, 30);
|
int waves = Mathf.clamp((int)(explosiveness / 4), 0, 30);
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import io.anuke.arc.Core;
|
|||||||
import io.anuke.arc.collection.Array;
|
import io.anuke.arc.collection.Array;
|
||||||
import io.anuke.arc.func.Cons;
|
import io.anuke.arc.func.Cons;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.Color;
|
||||||
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.arc.math.geom.Position;
|
import io.anuke.arc.math.geom.Position;
|
||||||
import io.anuke.arc.util.pooling.Pools;
|
import io.anuke.arc.util.pooling.Pools;
|
||||||
@@ -36,6 +37,7 @@ public class Effects{
|
|||||||
public static void renderEffect(int id, Effect render, Color color, float life, float rotation, float x, float y, Object data){
|
public static void renderEffect(int id, Effect render, Color color, float life, float rotation, float x, float y, Object data){
|
||||||
container.set(id, color, life, render.lifetime, rotation, x, y, data);
|
container.set(id, color, life, render.lifetime, rotation, x, y, data);
|
||||||
render.draw.render(container);
|
render.draw.render(container);
|
||||||
|
Draw.reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Effect getEffect(int id){
|
public static Effect getEffect(int id){
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import io.anuke.arc.audio.*;
|
|||||||
import io.anuke.arc.math.*;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.ctype.Content;
|
import io.anuke.mindustry.ctype.Content;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.Effects.*;
|
import io.anuke.mindustry.entities.Effects.*;
|
||||||
import io.anuke.mindustry.entities.effect.*;
|
import io.anuke.mindustry.entities.effect.*;
|
||||||
@@ -137,7 +138,7 @@ public abstract class BulletType extends Content{
|
|||||||
}
|
}
|
||||||
|
|
||||||
for(int i = 0; i < lightining; i++){
|
for(int i = 0; i < lightining; i++){
|
||||||
Lightning.create(b.getTeam(), Pal.surge, damage, b.x, b.y, Mathf.random(360f), lightningLength);
|
Lightning.createLighting(Lightning.nextSeed(), b.getTeam(), Pal.surge, damage, b.x, b.y, Mathf.random(360f), lightningLength);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -150,7 +151,7 @@ public abstract class BulletType extends Content{
|
|||||||
public void update(Bullet b){
|
public void update(Bullet b){
|
||||||
|
|
||||||
if(homingPower > 0.0001f){
|
if(homingPower > 0.0001f){
|
||||||
TargetTrait target = Units.closestTarget(b.getTeam(), b.x, b.y, homingRange);
|
TargetTrait target = Units.closestTarget(b.getTeam(), b.x, b.y, homingRange, e -> !e.isFlying() || collidesAir);
|
||||||
if(target != null){
|
if(target != null){
|
||||||
b.velocity().setAngle(Mathf.slerpDelta(b.velocity().angle(), b.angleTo(target), 0.08f));
|
b.velocity().setAngle(Mathf.slerpDelta(b.velocity().angle(), b.angleTo(target), 0.08f));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,10 @@ import io.anuke.mindustry.content.*;
|
|||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.entities.type.TimedEntity;
|
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.type.TypeID;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
@@ -144,7 +144,7 @@ public class Fire extends TimedEntity implements SaveTrait, SyncTrait{
|
|||||||
create(other);
|
create(other);
|
||||||
|
|
||||||
if(Mathf.chance(fireballChance * Time.delta() * Mathf.clamp(flammability / 10f))){
|
if(Mathf.chance(fireballChance * Time.delta() * Mathf.clamp(flammability / 10f))){
|
||||||
Call.createBullet(Bullets.fireball, x, y, Mathf.random(360f));
|
Call.createBullet(Bullets.fireball, Team.derelict, x, y, Mathf.random(360f), 1, 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,7 +44,11 @@ public class Lightning extends TimedEntity implements DrawTrait, TimeTrait{
|
|||||||
|
|
||||||
/** Create a lighting branch at a location. Use Team.none to damage everyone. */
|
/** Create a lighting branch at a location. Use Team.none to damage everyone. */
|
||||||
public static void create(Team team, Color color, float damage, float x, float y, float targetAngle, int length){
|
public static void create(Team team, Color color, float damage, float x, float y, float targetAngle, int length){
|
||||||
Call.createLighting(lastSeed++, team, color, damage, x, y, targetAngle, length);
|
Call.createLighting(nextSeed(), team, color, damage, x, y, targetAngle, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static int nextSeed(){
|
||||||
|
return lastSeed++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Do not invoke! */
|
/** Do not invoke! */
|
||||||
|
|||||||
@@ -1,25 +1,22 @@
|
|||||||
package io.anuke.mindustry.entities.effect;
|
package io.anuke.mindustry.entities.effect;
|
||||||
|
|
||||||
import io.anuke.annotations.Annotations.Loc;
|
import io.anuke.annotations.Annotations.*;
|
||||||
import io.anuke.annotations.Annotations.Remote;
|
import io.anuke.arc.collection.*;
|
||||||
import io.anuke.arc.collection.IntMap;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.graphics.g2d.Draw;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.graphics.g2d.Fill;
|
|
||||||
import io.anuke.arc.math.Angles;
|
|
||||||
import io.anuke.arc.math.Mathf;
|
|
||||||
import io.anuke.arc.math.geom.*;
|
import io.anuke.arc.math.geom.*;
|
||||||
import io.anuke.arc.util.Time;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.pooling.Pool.Poolable;
|
import io.anuke.arc.util.pooling.Pool.*;
|
||||||
import io.anuke.arc.util.pooling.Pools;
|
import io.anuke.arc.util.pooling.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.type.SolidEntity;
|
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.type.TypeID;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.gen.Call;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.world.Tile;
|
import io.anuke.mindustry.type.*;
|
||||||
|
import io.anuke.mindustry.world.*;
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
@@ -118,7 +115,7 @@ public class Puddle extends SolidEntity implements SaveTrait, Poolable, DrawTrai
|
|||||||
(liquid.flammability > 0.3f && dest.temperature > 0.7f)){ //flammable liquid + hot liquid
|
(liquid.flammability > 0.3f && dest.temperature > 0.7f)){ //flammable liquid + hot liquid
|
||||||
Fire.create(tile);
|
Fire.create(tile);
|
||||||
if(Mathf.chance(0.006 * amount)){
|
if(Mathf.chance(0.006 * amount)){
|
||||||
Call.createBullet(Bullets.fireball, x, y, Mathf.random(360f));
|
Call.createBullet(Bullets.fireball, Team.derelict, x, y, Mathf.random(360f), 1f, 1f);
|
||||||
}
|
}
|
||||||
}else if(dest.temperature > 0.7f && liquid.temperature < 0.55f){ //cold liquid poured onto hot puddle
|
}else if(dest.temperature > 0.7f && liquid.temperature < 0.55f){ //cold liquid poured onto hot puddle
|
||||||
if(Mathf.chance(0.5f * amount)){
|
if(Mathf.chance(0.5f * amount)){
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package io.anuke.mindustry.entities.traits;
|
|||||||
|
|
||||||
import io.anuke.arc.*;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.collection.Queue;
|
import io.anuke.arc.collection.Queue;
|
||||||
import io.anuke.arc.collection.*;
|
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.*;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.math.geom.*;
|
import io.anuke.arc.math.geom.*;
|
||||||
@@ -88,7 +87,7 @@ public interface BuilderTrait extends Entity, TeamTrait{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//otherwise, update it.
|
//otherwise, update it.
|
||||||
BuildEntity entity = tile.entity();
|
BuildEntity entity = tile.ent();
|
||||||
|
|
||||||
if(entity == null){
|
if(entity == null){
|
||||||
return;
|
return;
|
||||||
@@ -210,7 +209,7 @@ public interface BuilderTrait extends Entity, TeamTrait{
|
|||||||
}
|
}
|
||||||
Tile tile = world.tile(place.x, place.y);
|
Tile tile = world.tile(place.x, place.y);
|
||||||
if(tile != null && tile.entity instanceof BuildEntity){
|
if(tile != null && tile.entity instanceof BuildEntity){
|
||||||
place.progress = tile.<BuildEntity>entity().progress;
|
place.progress = tile.<BuildEntity>ent().progress;
|
||||||
}
|
}
|
||||||
if(tail){
|
if(tail){
|
||||||
buildQueue().addLast(place);
|
buildQueue().addLast(place);
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import io.anuke.arc.util.*;
|
|||||||
import io.anuke.arc.util.ArcAnnotate.*;
|
import io.anuke.arc.util.ArcAnnotate.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.entities.units.*;
|
import io.anuke.mindustry.entities.units.*;
|
||||||
@@ -107,7 +108,7 @@ public abstract class BaseUnit extends Unit implements ShooterTrait{
|
|||||||
|
|
||||||
public @Nullable UnitCommand getCommand(){
|
public @Nullable UnitCommand getCommand(){
|
||||||
if(isCommanded()){
|
if(isCommanded()){
|
||||||
return indexer.getAllied(team, BlockFlag.comandCenter).first().<CommandCenterEntity>entity().command;
|
return indexer.getAllied(team, BlockFlag.comandCenter).first().<CommandCenterEntity>ent().command;
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -77,16 +77,9 @@ public class Bullet extends SolidEntity implements DamageTrait, ScaleTrait, Pool
|
|||||||
return create(type, parent.owner, parent.team, x, y, angle, velocityScl);
|
return create(type, parent.owner, parent.team, x, y, angle, velocityScl);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Internal use only. */
|
|
||||||
@Remote(called = Loc.server, unreliable = true)
|
@Remote(called = Loc.server, unreliable = true)
|
||||||
public static void createBullet(BulletType type, float x, float y, float angle){
|
public static void createBullet(BulletType type, Team team, float x, float y, float angle, float velocityScl, float lifetimeScl){
|
||||||
create(type, null, Team.derelict, x, y, angle);
|
create(type, null, team, x, y, angle, velocityScl, lifetimeScl, null);
|
||||||
}
|
|
||||||
|
|
||||||
/** ok */
|
|
||||||
@Remote(called = Loc.server, unreliable = true)
|
|
||||||
public static void createBullet(BulletType type, Team team, float x, float y, float angle){
|
|
||||||
create(type, null, team, x, y, angle);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public Entity getOwner(){
|
public Entity getOwner(){
|
||||||
|
|||||||
@@ -15,6 +15,7 @@ import io.anuke.arc.util.pooling.*;
|
|||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.core.*;
|
import io.anuke.mindustry.core.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.*;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
@@ -556,7 +557,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
|
|||||||
updateKeyboard();
|
updateKeyboard();
|
||||||
}
|
}
|
||||||
|
|
||||||
isTyping = ui.chatfrag.chatOpen();
|
isTyping = ui.chatfrag.shown();
|
||||||
|
|
||||||
updateMechanics();
|
updateMechanics();
|
||||||
|
|
||||||
@@ -604,7 +605,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
|
|||||||
|
|
||||||
movement.limit(speed).scl(Time.delta());
|
movement.limit(speed).scl(Time.delta());
|
||||||
|
|
||||||
if(!ui.chatfrag.chatOpen()){
|
if(!Core.scene.hasKeyboard()){
|
||||||
velocity.add(movement.x, movement.y);
|
velocity.add(movement.x, movement.y);
|
||||||
}else{
|
}else{
|
||||||
isShooting = false;
|
isShooting = false;
|
||||||
@@ -613,7 +614,7 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
|
|||||||
updateVelocityStatus();
|
updateVelocityStatus();
|
||||||
moved = dst(prex, prey) > 0.001f;
|
moved = dst(prex, prey) > 0.001f;
|
||||||
|
|
||||||
if(!ui.chatfrag.chatOpen()){
|
if(!Core.scene.hasKeyboard()){
|
||||||
float baseLerp = mech.getRotationAlpha(this);
|
float baseLerp = mech.getRotationAlpha(this);
|
||||||
if(!isShooting() || !mech.turnCursor){
|
if(!isShooting() || !mech.turnCursor){
|
||||||
if(!movement.isZero()){
|
if(!movement.isZero()){
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
|
|||||||
public PowerModule power;
|
public PowerModule power;
|
||||||
public ItemModule items;
|
public ItemModule items;
|
||||||
public LiquidModule liquids;
|
public LiquidModule liquids;
|
||||||
public ConsumeModule cons;
|
public @Nullable ConsumeModule cons;
|
||||||
|
|
||||||
/** List of (cached) tiles with entities in proximity, used for outputting to */
|
/** List of (cached) tiles with entities in proximity, used for outputting to */
|
||||||
private Array<Tile> proximity = new Array<>(8);
|
private Array<Tile> proximity = new Array<>(8);
|
||||||
|
|||||||
@@ -24,6 +24,7 @@ public class BuilderDrone extends BaseDrone implements BuilderTrait{
|
|||||||
private static final IntIntMap totals = new IntIntMap();
|
private static final IntIntMap totals = new IntIntMap();
|
||||||
|
|
||||||
protected Queue<BuildRequest> placeQueue = new Queue<>();
|
protected Queue<BuildRequest> placeQueue = new Queue<>();
|
||||||
|
protected BuildRequest lastFound;
|
||||||
protected boolean isBreaking;
|
protected boolean isBreaking;
|
||||||
protected Player playerTarget;
|
protected Player playerTarget;
|
||||||
|
|
||||||
@@ -57,6 +58,9 @@ public class BuilderDrone extends BaseDrone implements BuilderTrait{
|
|||||||
buildQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y));
|
buildQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y));
|
||||||
}else{
|
}else{
|
||||||
buildQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y, entity.tile.rotation(), entity.cblock));
|
buildQueue().addLast(new BuildRequest(entity.tile.x, entity.tile.y, entity.tile.rotation(), entity.cblock));
|
||||||
|
if(lastFound != null && lastFound.hasConfig){
|
||||||
|
buildQueue().last().configure(lastFound.config);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -171,9 +175,10 @@ public class BuilderDrone extends BaseDrone implements BuilderTrait{
|
|||||||
BuildRequest req = player.buildRequest();
|
BuildRequest req = player.buildRequest();
|
||||||
Tile tile = world.tile(req.x, req.y);
|
Tile tile = world.tile(req.x, req.y);
|
||||||
if(tile != null && tile.entity instanceof BuildEntity){
|
if(tile != null && tile.entity instanceof BuildEntity){
|
||||||
BuildEntity b = tile.entity();
|
BuildEntity b = tile.ent();
|
||||||
float dist = Math.min(b.dst(x, y) - placeDistance, 0);
|
float dist = Math.min(b.dst(x, y) - placeDistance, 0);
|
||||||
if(dist / type.maxVelocity < b.buildCost * 0.9f){
|
if(dist / type.maxVelocity < b.buildCost * 0.9f){
|
||||||
|
lastFound = req;
|
||||||
target = b;
|
target = b;
|
||||||
this.isBreaking = req.breaking;
|
this.isBreaking = req.breaking;
|
||||||
setState(build);
|
setState(build);
|
||||||
|
|||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Crawler extends GroundUnit{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Dagger extends GroundUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Draug extends MinerDrone{
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Eruptor extends GroundUnit{
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Fortress extends GroundUnit{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Ghoul extends FlyingUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -5,7 +5,7 @@ import io.anuke.arc.math.Angles;
|
|||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.Mathf;
|
||||||
import io.anuke.mindustry.entities.Units;
|
import io.anuke.mindustry.entities.Units;
|
||||||
|
|
||||||
public class Revenant extends FlyingUnit{
|
public class HoverUnit extends FlyingUnit{
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawWeapons(){
|
public void drawWeapons(){
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Phantom extends BuilderDrone{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Spirit extends RepairDrone{
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Titan extends GroundUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
package io.anuke.mindustry.entities.type.base;
|
|
||||||
|
|
||||||
public class Wraith extends FlyingUnit{
|
|
||||||
|
|
||||||
}
|
|
||||||
@@ -6,6 +6,7 @@ import io.anuke.arc.graphics.*;
|
|||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.pooling.*;
|
import io.anuke.arc.util.pooling.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.traits.*;
|
import io.anuke.mindustry.entities.traits.*;
|
||||||
import io.anuke.mindustry.entities.type.*;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
|
|||||||
@@ -95,6 +95,10 @@ public class EventType{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static class ServerLoadEvent{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
public static class ContentReloadEvent{
|
public static class ContentReloadEvent{
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -135,9 +139,19 @@ public class EventType{
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when a player withdraws items from a block. Tutorial only.*/
|
/** Called when the player withdraws items from a block. */
|
||||||
public static class WithdrawEvent{
|
public static class WithdrawEvent{
|
||||||
|
public final Tile tile;
|
||||||
|
public final Player player;
|
||||||
|
public final Item item;
|
||||||
|
public final int amount;
|
||||||
|
|
||||||
|
public WithdrawEvent(Tile tile, Player player, Item item, int amount){
|
||||||
|
this.tile = tile;
|
||||||
|
this.player = player;
|
||||||
|
this.item = item;
|
||||||
|
this.amount = amount;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Called when a player deposits items to a block.*/
|
/** Called when a player deposits items to a block.*/
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import io.anuke.arc.files.*;
|
|||||||
import io.anuke.arc.util.io.*;
|
import io.anuke.arc.util.io.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.ctype.UnlockableContent;
|
import io.anuke.mindustry.ctype.*;
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
|
|
||||||
@@ -35,8 +35,8 @@ public class GlobalData{
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void exportData(FileHandle file) throws IOException{
|
public void exportData(Fi file) throws IOException{
|
||||||
Array<FileHandle> files = new Array<>();
|
Array<Fi> files = new Array<>();
|
||||||
files.add(Core.settings.getSettingsFile());
|
files.add(Core.settings.getSettingsFile());
|
||||||
files.addAll(customMapDirectory.list());
|
files.addAll(customMapDirectory.list());
|
||||||
files.addAll(saveDirectory.list());
|
files.addAll(saveDirectory.list());
|
||||||
@@ -46,7 +46,7 @@ public class GlobalData{
|
|||||||
String base = Core.settings.getDataDirectory().path();
|
String base = Core.settings.getDataDirectory().path();
|
||||||
|
|
||||||
try(OutputStream fos = file.write(false, 2048); ZipOutputStream zos = new ZipOutputStream(fos)){
|
try(OutputStream fos = file.write(false, 2048); ZipOutputStream zos = new ZipOutputStream(fos)){
|
||||||
for(FileHandle add : files){
|
for(Fi add : files){
|
||||||
if(add.isDirectory()) continue;
|
if(add.isDirectory()) continue;
|
||||||
zos.putNextEntry(new ZipEntry(add.path().substring(base.length())));
|
zos.putNextEntry(new ZipEntry(add.path().substring(base.length())));
|
||||||
Streams.copyStream(add.read(), zos);
|
Streams.copyStream(add.read(), zos);
|
||||||
@@ -56,12 +56,12 @@ public class GlobalData{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void importData(FileHandle file){
|
public void importData(Fi file){
|
||||||
FileHandle dest = Core.files.local("zipdata.zip");
|
Fi dest = Core.files.local("zipdata.zip");
|
||||||
file.copyTo(dest);
|
file.copyTo(dest);
|
||||||
FileHandle zipped = new ZipFileHandle(dest);
|
Fi zipped = new ZipFi(dest);
|
||||||
|
|
||||||
FileHandle base = Core.settings.getDataDirectory();
|
Fi base = Core.settings.getDataDirectory();
|
||||||
if(!zipped.child("settings.bin").exists()){
|
if(!zipped.child("settings.bin").exists()){
|
||||||
throw new IllegalArgumentException("Not valid save data.");
|
throw new IllegalArgumentException("Not valid save data.");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ public class Saves{
|
|||||||
private AsyncExecutor previewExecutor = new AsyncExecutor(1);
|
private AsyncExecutor previewExecutor = new AsyncExecutor(1);
|
||||||
private boolean saving;
|
private boolean saving;
|
||||||
private float time;
|
private float time;
|
||||||
private FileHandle zoneFile;
|
private Fi zoneFile;
|
||||||
|
|
||||||
private long totalPlaytime;
|
private long totalPlaytime;
|
||||||
private long lastTimestamp;
|
private long lastTimestamp;
|
||||||
@@ -48,7 +48,7 @@ public class Saves{
|
|||||||
saves.clear();
|
saves.clear();
|
||||||
zoneFile = saveDirectory.child("-1.msav");
|
zoneFile = saveDirectory.child("-1.msav");
|
||||||
|
|
||||||
for(FileHandle file : saveDirectory.list()){
|
for(Fi file : saveDirectory.list()){
|
||||||
if(!file.name().contains("backup") && SaveIO.isSaveValid(file)){
|
if(!file.name().contains("backup") && SaveIO.isSaveValid(file)){
|
||||||
SaveSlot slot = new SaveSlot(file);
|
SaveSlot slot = new SaveSlot(file);
|
||||||
saves.add(slot);
|
saves.add(slot);
|
||||||
@@ -121,7 +121,7 @@ public class Saves{
|
|||||||
return slot;
|
return slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public SaveSlot importSave(FileHandle file) throws IOException{
|
public SaveSlot importSave(Fi file) throws IOException{
|
||||||
SaveSlot slot = new SaveSlot(getNextSlotFile());
|
SaveSlot slot = new SaveSlot(getNextSlotFile());
|
||||||
slot.importFile(file);
|
slot.importFile(file);
|
||||||
slot.setName(file.nameWithoutExtension());
|
slot.setName(file.nameWithoutExtension());
|
||||||
@@ -136,9 +136,9 @@ public class Saves{
|
|||||||
return slot == null || slot.getZone() == null ? null : slot;
|
return slot == null || slot.getZone() == null ? null : slot;
|
||||||
}
|
}
|
||||||
|
|
||||||
public FileHandle getNextSlotFile(){
|
public Fi getNextSlotFile(){
|
||||||
int i = 0;
|
int i = 0;
|
||||||
FileHandle file;
|
Fi file;
|
||||||
while((file = saveDirectory.child(i + "." + saveExtension)).exists()){
|
while((file = saveDirectory.child(i + "." + saveExtension)).exists()){
|
||||||
i ++;
|
i ++;
|
||||||
}
|
}
|
||||||
@@ -151,11 +151,11 @@ public class Saves{
|
|||||||
|
|
||||||
public class SaveSlot{
|
public class SaveSlot{
|
||||||
//public final int index;
|
//public final int index;
|
||||||
public final FileHandle file;
|
public final Fi file;
|
||||||
boolean requestedPreview;
|
boolean requestedPreview;
|
||||||
SaveMeta meta;
|
SaveMeta meta;
|
||||||
|
|
||||||
public SaveSlot(FileHandle file){
|
public SaveSlot(Fi file){
|
||||||
this.file = file;
|
this.file = file;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -216,11 +216,11 @@ public class Saves{
|
|||||||
return file.nameWithoutExtension();
|
return file.nameWithoutExtension();
|
||||||
}
|
}
|
||||||
|
|
||||||
private FileHandle previewFile(){
|
private Fi previewFile(){
|
||||||
return mapPreviewDirectory.child("save_slot_" + index() + ".png");
|
return mapPreviewDirectory.child("save_slot_" + index() + ".png");
|
||||||
}
|
}
|
||||||
|
|
||||||
private FileHandle loadPreviewFile(){
|
private Fi loadPreviewFile(){
|
||||||
return previewFile().sibling(previewFile().name() + ".spreview");
|
return previewFile().sibling(previewFile().name() + ".spreview");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -293,7 +293,7 @@ public class Saves{
|
|||||||
Core.settings.save();
|
Core.settings.save();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void importFile(FileHandle from) throws IOException{
|
public void importFile(Fi from) throws IOException{
|
||||||
try{
|
try{
|
||||||
from.copyTo(file);
|
from.copyTo(file);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
@@ -301,7 +301,7 @@ public class Saves{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void exportFile(FileHandle to) throws IOException{
|
public void exportFile(Fi to) throws IOException{
|
||||||
try{
|
try{
|
||||||
file.copyTo(to);
|
file.copyTo(to);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
|
|||||||
@@ -16,7 +16,8 @@ public class Schematic implements Publishable, Comparable<Schematic>{
|
|||||||
public final Array<Stile> tiles;
|
public final Array<Stile> tiles;
|
||||||
public StringMap tags;
|
public StringMap tags;
|
||||||
public int width, height;
|
public int width, height;
|
||||||
public @Nullable FileHandle file;
|
public @Nullable
|
||||||
|
Fi file;
|
||||||
/** Associated mod. If null, no mod is associated with this schematic. */
|
/** Associated mod. If null, no mod is associated with this schematic. */
|
||||||
public @Nullable LoadedMod mod;
|
public @Nullable LoadedMod mod;
|
||||||
|
|
||||||
@@ -94,15 +95,15 @@ public class Schematic implements Publishable, Comparable<Schematic>{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileHandle createSteamFolder(String id){
|
public Fi createSteamFolder(String id){
|
||||||
FileHandle directory = tmpDirectory.child("schematic_" + id).child("schematic." + schematicExtension);
|
Fi directory = tmpDirectory.child("schematic_" + id).child("schematic." + schematicExtension);
|
||||||
file.copyTo(directory);
|
file.copyTo(directory);
|
||||||
return directory;
|
return directory;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public FileHandle createSteamPreview(String id){
|
public Fi createSteamPreview(String id){
|
||||||
FileHandle preview = tmpDirectory.child("schematic_preview_" + id + ".png");
|
Fi preview = tmpDirectory.child("schematic_preview_" + id + ".png");
|
||||||
schematics.savePreview(this, preview);
|
schematics.savePreview(this, preview);
|
||||||
return preview;
|
return preview;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,12 +13,12 @@ import io.anuke.arc.util.io.Streams.*;
|
|||||||
import io.anuke.arc.util.serialization.*;
|
import io.anuke.arc.util.serialization.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
|
import io.anuke.mindustry.entities.traits.BuilderTrait.*;
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.game.Schematic.*;
|
import io.anuke.mindustry.game.Schematic.*;
|
||||||
import io.anuke.mindustry.input.*;
|
import io.anuke.mindustry.input.*;
|
||||||
import io.anuke.mindustry.input.Placement.*;
|
import io.anuke.mindustry.input.Placement.*;
|
||||||
import io.anuke.mindustry.type.*;
|
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.blocks.*;
|
import io.anuke.mindustry.world.blocks.*;
|
||||||
import io.anuke.mindustry.world.blocks.production.*;
|
import io.anuke.mindustry.world.blocks.production.*;
|
||||||
@@ -69,7 +69,7 @@ public class Schematics implements Loadable{
|
|||||||
public void load(){
|
public void load(){
|
||||||
all.clear();
|
all.clear();
|
||||||
|
|
||||||
for(FileHandle file : schematicDirectory.list()){
|
for(Fi file : schematicDirectory.list()){
|
||||||
loadFile(file);
|
loadFile(file);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -111,7 +111,7 @@ public class Schematics implements Loadable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private @Nullable Schematic loadFile(FileHandle file){
|
private @Nullable Schematic loadFile(Fi file){
|
||||||
if(!file.extension().equals(schematicExtension)) return null;
|
if(!file.extension().equals(schematicExtension)) return null;
|
||||||
|
|
||||||
try{
|
try{
|
||||||
@@ -144,7 +144,7 @@ public class Schematics implements Loadable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void savePreview(Schematic schematic, FileHandle file){
|
public void savePreview(Schematic schematic, Fi file){
|
||||||
FrameBuffer buffer = getBuffer(schematic);
|
FrameBuffer buffer = getBuffer(schematic);
|
||||||
Draw.flush();
|
Draw.flush();
|
||||||
buffer.begin();
|
buffer.begin();
|
||||||
@@ -272,7 +272,7 @@ public class Schematics implements Loadable{
|
|||||||
public void add(Schematic schematic){
|
public void add(Schematic schematic){
|
||||||
all.add(schematic);
|
all.add(schematic);
|
||||||
try{
|
try{
|
||||||
FileHandle file = schematicDirectory.child(Time.millis() + "." + schematicExtension);
|
Fi file = schematicDirectory.child(Time.millis() + "." + schematicExtension);
|
||||||
write(schematic, file);
|
write(schematic, file);
|
||||||
schematic.file = file;
|
schematic.file = file;
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
@@ -372,7 +372,7 @@ public class Schematics implements Loadable{
|
|||||||
return read(new ByteArrayInputStream(Base64Coder.decode(schematic)));
|
return read(new ByteArrayInputStream(Base64Coder.decode(schematic)));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Schematic read(FileHandle file) throws IOException{
|
public static Schematic read(Fi file) throws IOException{
|
||||||
Schematic s = read(new DataInputStream(file.read(1024)));
|
Schematic s = read(new DataInputStream(file.read(1024)));
|
||||||
if(!s.tags.containsKey("name")){
|
if(!s.tags.containsKey("name")){
|
||||||
s.tags.put("name", file.nameWithoutExtension());
|
s.tags.put("name", file.nameWithoutExtension());
|
||||||
@@ -425,7 +425,7 @@ public class Schematics implements Loadable{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void write(Schematic schematic, FileHandle file) throws IOException{
|
public static void write(Schematic schematic, Fi file) throws IOException{
|
||||||
write(schematic, file.write(false, 1024));
|
write(schematic, file.write(false, 1024));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ import io.anuke.arc.util.serialization.Json;
|
|||||||
import io.anuke.arc.util.serialization.Json.Serializable;
|
import io.anuke.arc.util.serialization.Json.Serializable;
|
||||||
import io.anuke.arc.util.serialization.JsonValue;
|
import io.anuke.arc.util.serialization.JsonValue;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.entities.type.BaseUnit;
|
import io.anuke.mindustry.entities.type.BaseUnit;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
|
|
||||||
|
|||||||
@@ -138,7 +138,7 @@ public class BlockRenderer implements Disposable{
|
|||||||
Block b = content.block(block.block);
|
Block b = content.block(block.block);
|
||||||
if(!camera.bounds(Tmp.r1).grow(tilesize * 2f).overlaps(Tmp.r2.setSize(b.size * tilesize).setCenter(block.x * tilesize + b.offset(), block.y * tilesize + b.offset()))) continue;
|
if(!camera.bounds(Tmp.r1).grow(tilesize * 2f).overlaps(Tmp.r2.setSize(b.size * tilesize).setCenter(block.x * tilesize + b.offset(), block.y * tilesize + b.offset()))) continue;
|
||||||
|
|
||||||
Draw.alpha(0.53f * brokenFade);
|
Draw.alpha(0.33f * brokenFade);
|
||||||
Draw.mixcol(Color.white, 0.2f + Mathf.absin(Time.globalTime(), 6f, 0.2f));
|
Draw.mixcol(Color.white, 0.2f + Mathf.absin(Time.globalTime(), 6f, 0.2f));
|
||||||
Draw.rect(b.icon(Cicon.full), block.x * tilesize + b.offset(), block.y * tilesize + b.offset(), b.rotate ? block.rotation * 90 : 0f);
|
Draw.rect(b.icon(Cicon.full), block.x * tilesize + b.offset(), block.y * tilesize + b.offset(), b.rotate ? block.rotation * 90 : 0f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,8 +40,7 @@ public enum Binding implements KeyBind{
|
|||||||
block_select_08(KeyCode.NUM_8),
|
block_select_08(KeyCode.NUM_8),
|
||||||
block_select_09(KeyCode.NUM_9),
|
block_select_09(KeyCode.NUM_9),
|
||||||
block_select_10(KeyCode.NUM_0),
|
block_select_10(KeyCode.NUM_0),
|
||||||
zoom_hold(KeyCode.CONTROL_LEFT, "view"),
|
zoom(new Axis(KeyCode.SCROLL), "view"),
|
||||||
zoom(new Axis(KeyCode.SCROLL)),
|
|
||||||
menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE),
|
menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE),
|
||||||
fullscreen(KeyCode.F11),
|
fullscreen(KeyCode.F11),
|
||||||
pause(KeyCode.SPACE),
|
pause(KeyCode.SPACE),
|
||||||
@@ -54,6 +53,7 @@ public enum Binding implements KeyBind{
|
|||||||
chat_history_prev(KeyCode.UP),
|
chat_history_prev(KeyCode.UP),
|
||||||
chat_history_next(KeyCode.DOWN),
|
chat_history_next(KeyCode.DOWN),
|
||||||
chat_scroll(new Axis(KeyCode.SCROLL)),
|
chat_scroll(new Axis(KeyCode.SCROLL)),
|
||||||
|
console(KeyCode.F8),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final KeybindValue defaultValue;
|
private final KeybindValue defaultValue;
|
||||||
|
|||||||
@@ -122,7 +122,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
drawSelected(sreq.x, sreq.y, sreq.block, getRequest(sreq.x, sreq.y, sreq.block.size, sreq) != null ? Pal.remove : Pal.accent);
|
drawSelected(sreq.x, sreq.y, sreq.block, getRequest(sreq.x, sreq.y, sreq.block.size, sreq) != null ? Pal.remove : Pal.accent);
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyDown(Binding.schematic_select) && !ui.chatfrag.chatOpen()){
|
if(Core.input.keyDown(Binding.schematic_select) && !Core.scene.hasKeyboard()){
|
||||||
drawSelection(schemX, schemY, cursorX, cursorY, Vars.maxSchematicSize);
|
drawSelection(schemX, schemY, cursorX, cursorY, Vars.maxSchematicSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -139,7 +139,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
player.isShooting = false;
|
player.isShooting = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!state.is(State.menu) && Core.input.keyTap(Binding.minimap) && (scene.getKeyboardFocus() == ui.minimap || !scene.hasDialog()) && !ui.chatfrag.chatOpen() && !(scene.getKeyboardFocus() instanceof TextField)){
|
if(!state.is(State.menu) && Core.input.keyTap(Binding.minimap) && (scene.getKeyboardFocus() == ui.minimap || !scene.hasDialog()) && !Core.scene.hasKeyboard() && !(scene.getKeyboardFocus() instanceof TextField)){
|
||||||
if(!ui.minimap.isShown()){
|
if(!ui.minimap.isShown()){
|
||||||
ui.minimap.show();
|
ui.minimap.show();
|
||||||
}else{
|
}else{
|
||||||
@@ -149,8 +149,8 @@ public class DesktopInput extends InputHandler{
|
|||||||
|
|
||||||
if(state.is(State.menu) || Core.scene.hasDialog()) return;
|
if(state.is(State.menu) || Core.scene.hasDialog()) return;
|
||||||
|
|
||||||
//zoom things
|
//zoom camera
|
||||||
if(Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && Core.input.keyDown(Binding.zoom_hold)){
|
if(!Core.scene.hasScroll() && Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){
|
||||||
renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
|
renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -166,11 +166,6 @@ public class DesktopInput extends InputHandler{
|
|||||||
mode = none;
|
mode = none;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(mode != none || isPlacing()){
|
|
||||||
selectRequests.clear();
|
|
||||||
lastSchematic = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(player.isShooting && !canShoot()){
|
if(player.isShooting && !canShoot()){
|
||||||
player.isShooting = false;
|
player.isShooting = false;
|
||||||
}
|
}
|
||||||
@@ -182,8 +177,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
selectScale = 0f;
|
selectScale = 0f;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Core.input.keyDown(Binding.zoom_hold) && Math.abs((int)Core.input.axisTap(Binding.rotate)) > 0){
|
if(!Core.input.keyDown(Binding.diagonal_placement) && Math.abs((int)Core.input.axisTap(Binding.rotate)) > 0){
|
||||||
|
|
||||||
rotation = Mathf.mod(rotation + (int)Core.input.axisTap(Binding.rotate), 4);
|
rotation = Mathf.mod(rotation + (int)Core.input.axisTap(Binding.rotate), 4);
|
||||||
|
|
||||||
if(sreq != null){
|
if(sreq != null){
|
||||||
@@ -293,12 +287,12 @@ public class DesktopInput extends InputHandler{
|
|||||||
player.clearBuilding();
|
player.clearBuilding();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.schematic_select) && !ui.chatfrag.chatOpen()){
|
if(Core.input.keyTap(Binding.schematic_select) && !Core.scene.hasKeyboard()){
|
||||||
schemX = rawCursorX;
|
schemX = rawCursorX;
|
||||||
schemY = rawCursorY;
|
schemY = rawCursorY;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyTap(Binding.schematic_menu) && !ui.chatfrag.chatOpen()){
|
if(Core.input.keyTap(Binding.schematic_menu) && !Core.scene.hasKeyboard()){
|
||||||
if(ui.schematics.isShown()){
|
if(ui.schematics.isShown()){
|
||||||
ui.schematics.hide();
|
ui.schematics.hide();
|
||||||
}else{
|
}else{
|
||||||
@@ -311,7 +305,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
selectRequests.clear();
|
selectRequests.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(Core.input.keyRelease(Binding.schematic_select) && !ui.chatfrag.chatOpen()){
|
if(Core.input.keyRelease(Binding.schematic_select) && !Core.scene.hasKeyboard()){
|
||||||
lastSchematic = schematics.create(schemX, schemY, rawCursorX, rawCursorY);
|
lastSchematic = schematics.create(schemX, schemY, rawCursorX, rawCursorY);
|
||||||
useSchematic(lastSchematic);
|
useSchematic(lastSchematic);
|
||||||
if(selectRequests.isEmpty()){
|
if(selectRequests.isEmpty()){
|
||||||
@@ -355,7 +349,9 @@ public class DesktopInput extends InputHandler{
|
|||||||
if(Core.input.keyTap(Binding.select) && !Core.scene.hasMouse()){
|
if(Core.input.keyTap(Binding.select) && !Core.scene.hasMouse()){
|
||||||
BuildRequest req = getRequest(cursorX, cursorY);
|
BuildRequest req = getRequest(cursorX, cursorY);
|
||||||
|
|
||||||
if(!selectRequests.isEmpty()){
|
if(Core.input.keyDown(Binding.break_block)){
|
||||||
|
mode = none;
|
||||||
|
}else if(!selectRequests.isEmpty()){
|
||||||
flushRequests(selectRequests);
|
flushRequests(selectRequests);
|
||||||
}else if(isPlacing()){
|
}else if(isPlacing()){
|
||||||
selectX = cursorX;
|
selectX = cursorX;
|
||||||
@@ -371,15 +367,18 @@ public class DesktopInput extends InputHandler{
|
|||||||
}else if(selected != null){
|
}else if(selected != null){
|
||||||
//only begin shooting if there's no cursor event
|
//only begin shooting if there's no cursor event
|
||||||
if(!tileTapped(selected) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && (player.buildQueue().size == 0 || !player.isBuilding) && !droppingItem &&
|
if(!tileTapped(selected) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && (player.buildQueue().size == 0 || !player.isBuilding) && !droppingItem &&
|
||||||
!tryBeginMine(selected) && player.getMineTile() == null && !ui.chatfrag.chatOpen()){
|
!tryBeginMine(selected) && player.getMineTile() == null && !Core.scene.hasKeyboard()){
|
||||||
player.isShooting = true;
|
player.isShooting = true;
|
||||||
}
|
}
|
||||||
}else if(!ui.chatfrag.chatOpen()){ //if it's out of bounds, shooting is just fine
|
}else if(!Core.scene.hasKeyboard()){ //if it's out of bounds, shooting is just fine
|
||||||
player.isShooting = true;
|
player.isShooting = true;
|
||||||
}
|
}
|
||||||
}else if(Core.input.keyTap(Binding.deselect) && block != null){
|
}else if(Core.input.keyTap(Binding.deselect) && isPlacing()){
|
||||||
block = null;
|
block = null;
|
||||||
mode = none;
|
mode = none;
|
||||||
|
}else if(Core.input.keyTap(Binding.deselect) && !selectRequests.isEmpty()){
|
||||||
|
selectRequests.clear();
|
||||||
|
lastSchematic = null;
|
||||||
}else if(Core.input.keyTap(Binding.break_block) && !Core.scene.hasMouse()){
|
}else if(Core.input.keyTap(Binding.break_block) && !Core.scene.hasMouse()){
|
||||||
//is recalculated because setting the mode to breaking removes potential multiblock cursor offset
|
//is recalculated because setting the mode to breaking removes potential multiblock cursor offset
|
||||||
deleting = false;
|
deleting = false;
|
||||||
|
|||||||
@@ -221,7 +221,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{
|
|||||||
|
|
||||||
public boolean requestMatches(BuildRequest request){
|
public boolean requestMatches(BuildRequest request){
|
||||||
Tile tile = world.tile(request.x, request.y);
|
Tile tile = world.tile(request.x, request.y);
|
||||||
return tile != null && tile.block() instanceof BuildBlock && tile.<BuildEntity>entity().cblock == request.block;
|
return tile != null && tile.block() instanceof BuildBlock && tile.<BuildEntity>ent().cblock == request.block;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void drawBreaking(int x, int y){
|
public void drawBreaking(int x, int y){
|
||||||
|
|||||||
@@ -587,8 +587,8 @@ public class MobileInput extends InputHandler implements GestureListener{
|
|||||||
mode = none;
|
mode = none;
|
||||||
}
|
}
|
||||||
|
|
||||||
//zoom things
|
//zoom camera
|
||||||
if(Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && (Core.input.keyDown(Binding.zoom_hold))){
|
if(Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){
|
||||||
renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
|
renderer.scaleCamera(Core.input.axisTap(Binding.zoom));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
package io.anuke.mindustry.input;
|
package io.anuke.mindustry.input;
|
||||||
|
|
||||||
enum PlaceMode{
|
public enum PlaceMode{
|
||||||
none, breaking, placing, schematicSelect
|
none, breaking, placing, schematicSelect
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ import io.anuke.arc.util.serialization.Json.*;
|
|||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.ctype.*;
|
import io.anuke.mindustry.ctype.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
|
|||||||
@@ -6,10 +6,10 @@ import io.anuke.arc.graphics.*;
|
|||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.serialization.*;
|
import io.anuke.arc.util.serialization.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
|
import io.anuke.mindustry.ctype.ContentType;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.io.MapIO.*;
|
import io.anuke.mindustry.io.MapIO.*;
|
||||||
import io.anuke.mindustry.maps.*;
|
import io.anuke.mindustry.maps.*;
|
||||||
import io.anuke.mindustry.type.*;
|
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.LegacyColorMapper.*;
|
import io.anuke.mindustry.world.LegacyColorMapper.*;
|
||||||
import io.anuke.mindustry.world.blocks.*;
|
import io.anuke.mindustry.world.blocks.*;
|
||||||
@@ -26,7 +26,7 @@ public class LegacyMapIO{
|
|||||||
private static final Json json = new Json();
|
private static final Json json = new Json();
|
||||||
|
|
||||||
/* Convert a map from the old format to the new format. */
|
/* Convert a map from the old format to the new format. */
|
||||||
public static void convertMap(FileHandle in, FileHandle out) throws IOException{
|
public static void convertMap(Fi in, Fi out) throws IOException{
|
||||||
Map map = readMap(in, true);
|
Map map = readMap(in, true);
|
||||||
|
|
||||||
String waves = map.tags.get("waves", "[]");
|
String waves = map.tags.get("waves", "[]");
|
||||||
@@ -45,7 +45,7 @@ public class LegacyMapIO{
|
|||||||
MapIO.writeMap(out, map);
|
MapIO.writeMap(out, map);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Map readMap(FileHandle file, boolean custom) throws IOException{
|
public static Map readMap(Fi file, boolean custom) throws IOException{
|
||||||
try(DataInputStream stream = new DataInputStream(file.read(1024))){
|
try(DataInputStream stream = new DataInputStream(file.read(1024))){
|
||||||
StringMap tags = new StringMap();
|
StringMap tags = new StringMap();
|
||||||
|
|
||||||
@@ -76,11 +76,11 @@ public class LegacyMapIO{
|
|||||||
readTiles(map.file, map.width, map.height, tiles);
|
readTiles(map.file, map.width, map.height, tiles);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void readTiles(FileHandle file, int width, int height, Tile[][] tiles) throws IOException{
|
private static void readTiles(Fi file, int width, int height, Tile[][] tiles) throws IOException{
|
||||||
readTiles(file, width, height, (x, y) -> tiles[x][y]);
|
readTiles(file, width, height, (x, y) -> tiles[x][y]);
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void readTiles(FileHandle file, int width, int height, TileProvider tiles) throws IOException{
|
private static void readTiles(Fi file, int width, int height, TileProvider tiles) throws IOException{
|
||||||
try(BufferedInputStream input = file.read(bufferSize)){
|
try(BufferedInputStream input = file.read(bufferSize)){
|
||||||
|
|
||||||
//read map
|
//read map
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user