Ammo system redesign
This commit is contained in:
@@ -325,8 +325,6 @@ public class ClassMap{
|
||||
classes.put("ReconstructorBuild", mindustry.world.blocks.units.Reconstructor.ReconstructorBuild.class);
|
||||
classes.put("RepairPoint", mindustry.world.blocks.units.RepairPoint.class);
|
||||
classes.put("RepairPointBuild", mindustry.world.blocks.units.RepairPoint.RepairPointBuild.class);
|
||||
classes.put("ResupplyPoint", mindustry.world.blocks.units.ResupplyPoint.class);
|
||||
classes.put("ResupplyPointBuild", mindustry.world.blocks.units.ResupplyPoint.ResupplyPointBuild.class);
|
||||
classes.put("UnitBlock", mindustry.world.blocks.units.UnitBlock.class);
|
||||
classes.put("UnitBuild", mindustry.world.blocks.units.UnitBlock.UnitBuild.class);
|
||||
classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class);
|
||||
|
||||
@@ -29,6 +29,7 @@ import mindustry.gen.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.mod.Mods.*;
|
||||
import mindustry.type.*;
|
||||
import mindustry.type.AmmoTypes.*;
|
||||
import mindustry.type.weather.*;
|
||||
import mindustry.world.*;
|
||||
import mindustry.world.blocks.units.*;
|
||||
@@ -95,6 +96,16 @@ public class ContentParser{
|
||||
readFields(result, data);
|
||||
return result;
|
||||
});
|
||||
put(AmmoType.class, (type, data) -> {
|
||||
if(data.isString()){
|
||||
return field(AmmoTypes.class, data);
|
||||
}
|
||||
var bc = resolve(data.getString("type", ""), ItemAmmoType.class);
|
||||
data.remove("type");
|
||||
AmmoType result = make(bc);
|
||||
readFields(result, data);
|
||||
return result;
|
||||
});
|
||||
put(DrawBlock.class, (type, data) -> {
|
||||
if(data.isString()){
|
||||
//try to instantiate
|
||||
@@ -346,6 +357,16 @@ public class ContentParser{
|
||||
if(!value.has("sector") || !value.get("sector").isNumber()) throw new RuntimeException("SectorPresets must have a sector number.");
|
||||
|
||||
return new SectorPreset(name, locate(ContentType.planet, value.getString("planet", "serpulo")), value.getInt("sector"));
|
||||
},
|
||||
ContentType.ammo, (TypeParser<AmmoType>)(mod, name, value) -> {
|
||||
if(value.isString()){
|
||||
return (AmmoType)field(AmmoTypes.class, value.asString());
|
||||
}
|
||||
|
||||
AmmoType item = make(resolve(value.getString("type", null), ItemAmmoType.class));
|
||||
currentContent = item;
|
||||
read(() -> readFields(item, value));
|
||||
return item;
|
||||
}
|
||||
);
|
||||
|
||||
@@ -746,7 +767,7 @@ public class ContentParser{
|
||||
/** Tries to resolve a class from the class type map. */
|
||||
<T> Class<T> resolve(String base, Class<T> def){
|
||||
//no base class specified
|
||||
if(base.isEmpty() && def != null) return def;
|
||||
if((base == null || base.isEmpty()) && def != null) return def;
|
||||
|
||||
//return mapped class if found in the global map
|
||||
var out = ClassMap.classes.get(!base.isEmpty() && Character.isLowerCase(base.charAt(0)) ? Strings.capitalize(base) : base);
|
||||
|
||||
Reference in New Issue
Block a user