Content loading improvements

This commit is contained in:
Anuken 2019-12-07 15:41:52 -05:00
parent 07598e3f2f
commit d3747f0d4c
11 changed files with 38 additions and 26 deletions

View File

@ -3,7 +3,7 @@ const log = function(context, obj){
} }
const extendContent = function(classType, name, params){ const extendContent = function(classType, name, params){
return new JavaAdapter(classType, params, modName + "-" + name) return new JavaAdapter(classType, params, name)
} }
const extend = function(classType, params){ const extend = function(classType, params){

View File

@ -5,7 +5,7 @@ const log = function(context, obj){
} }
const extendContent = function(classType, name, params){ const extendContent = function(classType, name, params){
return new JavaAdapter(classType, params, modName + "-" + name) return new JavaAdapter(classType, params, name)
} }
const extend = function(classType, params){ const extend = function(classType, params){

View File

@ -3,6 +3,7 @@ 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.*;
@ -23,6 +24,7 @@ public class ContentLoader{
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 ObjectSet<Cons<Content>> initialization = new ObjectSet<>(); private ObjectSet<Cons<Content>> initialization = new ObjectSet<>();
private ContentList[] content = { private ContentList[] content = {
new Fx(), new Fx(),
@ -144,13 +146,23 @@ public class ContentLoader{
public void handleContent(Content content){ public void handleContent(Content content){
contentMap[content.getContentType().ordinal()].add(content); contentMap[content.getContentType().ordinal()].add(content);
}
public void setCurrentMod(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.mod = currentMod;
}
contentNameMap[content.getContentType().ordinal()].put(content.name, content); contentNameMap[content.getContentType().ordinal()].put(content.name, content);
} }

View File

@ -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);
} }

View File

@ -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.*/

View File

@ -382,8 +382,10 @@ public class Mods implements Loadable{
public void loadScripts(){ public void loadScripts(){
Time.mark(); Time.mark();
try{
for(LoadedMod mod : loaded){ for(LoadedMod mod : loaded){
if(mod.root.child("scripts").exists()){ if(mod.root.child("scripts").exists()){
content.setCurrentMod(mod.name);
mod.scripts = mod.root.child("scripts").findAll(f -> f.extension().equals("js")); mod.scripts = mod.root.child("scripts").findAll(f -> f.extension().equals("js"));
Log.info("[{0}] Found {1} scripts.", mod.meta.name, mod.scripts.size); Log.info("[{0}] Found {1} scripts.", mod.meta.name, mod.scripts.size);
@ -404,6 +406,9 @@ public class Mods implements Loadable{
} }
} }
} }
}finally{
content.setCurrentMod(null);
}
Log.info("Time to initialize modded scripts: {0}", Time.elapsed()); Log.info("Time to initialize modded scripts: {0}", Time.elapsed());
} }

View File

@ -34,7 +34,6 @@ public class Item extends UnlockableContent{
public Item(String name, Color color){ public Item(String name, Color color){
super(name); super(name);
this.color = color; this.color = color;
this.description = Core.bundle.getOrNull("item." + this.name + ".description");
} }
public Item(String name){ public Item(String name){

View File

@ -31,7 +31,6 @@ public class Liquid extends UnlockableContent{
public Liquid(String name, Color color){ public Liquid(String name, Color color){
super(name); super(name);
this.color = new Color(color); this.color = new Color(color);
this.description = Core.bundle.getOrNull("liquid." + name + ".description");
} }
/** For modding only.*/ /** For modding only.*/

View File

@ -39,7 +39,6 @@ public class Mech extends UnlockableContent{
public Mech(String name, boolean flying){ public Mech(String name, boolean flying){
super(name); super(name);
this.flying = flying; this.flying = flying;
this.description = Core.bundle.get("mech." + name + ".description");
} }
public Mech(String name){ public Mech(String name){

View File

@ -51,7 +51,6 @@ public class UnitType extends UnlockableContent{
public <T extends BaseUnit> UnitType(String name){ public <T extends BaseUnit> UnitType(String name){
super(name); super(name);
this.description = Core.bundle.getOrNull("unit." + name + ".description");
} }
public <T extends BaseUnit> void create(Prov<T> mainConstructor){ public <T extends BaseUnit> void create(Prov<T> mainConstructor){

View File

@ -156,7 +156,6 @@ public class Block extends BlockStorage{
public Block(String name){ public Block(String name){
super(name); super(name);
this.description = Core.bundle.getOrNull("block." + name + ".description");
this.solid = false; this.solid = false;
} }