Planet sector metadata
This commit is contained in:
@@ -39,7 +39,7 @@ public class Stats{
|
||||
|
||||
//weigh used fractions
|
||||
float frac = 0f;
|
||||
Array<Item> obtainable = Array.with(zone.resources).select(i -> i instanceof Item && ((Item)i).type == ItemType.material).as(Item.class);
|
||||
Array<Item> obtainable = Array.with(zone.data.resources).select(i -> i instanceof Item && ((Item)i).type == ItemType.material).as(Item.class);
|
||||
for(Item item : obtainable){
|
||||
frac += Mathf.clamp((float)itemsDelivered.get(item, 0) / capacity) / (float)obtainable.size;
|
||||
}
|
||||
|
||||
@@ -49,7 +49,7 @@ public class MapGenerator extends Generator{
|
||||
|
||||
for(Tile tile : tiles){
|
||||
if(tile.block() instanceof StorageBlock && !(tile.block() instanceof CoreBlock) && world.getSector() != null){
|
||||
for(Content content : world.getSector().resources){
|
||||
for(Content content : world.getSector().data.resources){
|
||||
if(content instanceof Item && Mathf.chance(0.3)){
|
||||
tile.entity.items().add((Item)content, Math.min(Mathf.random(500), tile.block().itemCapacity));
|
||||
}
|
||||
|
||||
@@ -65,7 +65,6 @@ public class TestPlanetGenerator implements PlanetGenerator{
|
||||
height *= 1.2f;
|
||||
height = Mathf.clamp(height);
|
||||
|
||||
|
||||
return arr[Mathf.clamp((int)(temp * arr.length), 0, arr.length - 1)][Mathf.clamp((int)(height * arr[0].length), 0, arr[0].length - 1)];
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,10 +3,10 @@ package mindustry.mod;
|
||||
import arc.*;
|
||||
import arc.assets.*;
|
||||
import arc.audio.*;
|
||||
import arc.audio.mock.*;
|
||||
import arc.files.*;
|
||||
import arc.func.*;
|
||||
import arc.graphics.*;
|
||||
import arc.mock.MockSound;
|
||||
import arc.struct.Array;
|
||||
import arc.struct.*;
|
||||
import arc.util.ArcAnnotate.*;
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
package mindustry.mod;
|
||||
|
||||
import arc.audio.*;
|
||||
import arc.audio.mock.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.mock.MockSound;
|
||||
import arc.util.ArcAnnotate.*;
|
||||
|
||||
public class ModLoadingSound implements Sound{
|
||||
|
||||
@@ -1,14 +1,18 @@
|
||||
package mindustry.type;
|
||||
|
||||
import arc.files.*;
|
||||
import arc.math.geom.*;
|
||||
import arc.scene.ui.layout.*;
|
||||
import arc.struct.*;
|
||||
import arc.util.ArcAnnotate.*;
|
||||
import arc.util.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.graphics.*;
|
||||
import mindustry.graphics.PlanetGrid.*;
|
||||
import mindustry.maps.planet.*;
|
||||
import mindustry.type.Sector.*;
|
||||
|
||||
public class Planet extends UnlockableContent{
|
||||
/** Mesh used for rendering. Created on load() - will be null on the server! */
|
||||
@@ -32,9 +36,25 @@ public class Planet extends UnlockableContent{
|
||||
this.size = 3;
|
||||
|
||||
grid = PlanetGrid.newGrid(size);
|
||||
|
||||
sectors = new Array<>(grid.tiles.length);
|
||||
for(int i = 0; i < grid.tiles.length; i++){
|
||||
sectors.add(new Sector(this, grid.tiles[i]));
|
||||
//TODO load sector data
|
||||
sectors.add(new Sector(this, grid.tiles[i], new SectorData()));
|
||||
}
|
||||
|
||||
//read data
|
||||
Fi data = Vars.tree.get("planets/" + name + ".dat");
|
||||
if(data.exists()){
|
||||
try(Reads read = data.reads()){
|
||||
short dsize = read.s();
|
||||
for(int i = 0; i < dsize; i++){
|
||||
sectors.get(i).data.read(read);
|
||||
}
|
||||
}
|
||||
}else{
|
||||
//TODO crash instead - this is a critical error!
|
||||
Log.err("Planet {0} is missing its data file.");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2,10 +2,11 @@ package mindustry.type;
|
||||
|
||||
import arc.math.geom.*;
|
||||
import arc.util.*;
|
||||
import arc.util.io.*;
|
||||
import mindustry.*;
|
||||
import mindustry.ctype.*;
|
||||
import mindustry.graphics.PlanetGrid.*;
|
||||
|
||||
import static mindustry.Vars.state;
|
||||
import mindustry.world.*;
|
||||
|
||||
/** A small section of a planet. */
|
||||
public class Sector{
|
||||
@@ -14,16 +15,16 @@ public class Sector{
|
||||
public final Ptile tile;
|
||||
public final int id;
|
||||
|
||||
//TODO generate a class file with 2D arrays of resources for each sector for each planet
|
||||
public final Content[] resources = {};
|
||||
public final SectorData data;
|
||||
//TODO implement a dynamic (?) launch period
|
||||
public int launchPeriod = 10;
|
||||
|
||||
public Sector(Planet planet, Ptile tile){
|
||||
public Sector(Planet planet, Ptile tile, SectorData data){
|
||||
this.planet = planet;
|
||||
this.tile = tile;
|
||||
this.rect = makeRect();
|
||||
this.id = tile.id;
|
||||
this.data = data;
|
||||
}
|
||||
|
||||
//TODO implement
|
||||
@@ -31,7 +32,6 @@ public class Sector{
|
||||
return metCondition() && wave % launchPeriod == 0;
|
||||
}
|
||||
|
||||
|
||||
public boolean metCondition(){
|
||||
//TODO implement
|
||||
return false;
|
||||
@@ -83,4 +83,43 @@ public class Sector{
|
||||
return result.set(center).add(right, nx).add(top, ny);
|
||||
}
|
||||
}
|
||||
|
||||
/** Cached data about a sector. */
|
||||
public static class SectorData{
|
||||
public Content[] resources = {};
|
||||
public int spawnX, spawnY;
|
||||
|
||||
public Block[] floors = {};
|
||||
public int[] floorCounts = {};
|
||||
|
||||
public void write(Writes write){
|
||||
write.s(resources.length);
|
||||
for(Content resource : resources){
|
||||
write.b(resource.getContentType().ordinal());
|
||||
write.s(resource.id);
|
||||
}
|
||||
write.s(spawnX);
|
||||
write.s(spawnY);
|
||||
write.s(floors.length);
|
||||
for(int i = 0; i < floors.length; i++){
|
||||
write.s(floors[i].id);
|
||||
write.i(floorCounts[i]);
|
||||
}
|
||||
}
|
||||
|
||||
public void read(Reads read){
|
||||
resources = new Content[read.s()];
|
||||
for(int i = 0; i < resources.length; i++){
|
||||
resources[i] = Vars.content.getByID(ContentType.all[read.b()], read.s());
|
||||
}
|
||||
spawnX = read.s();
|
||||
spawnY = read.s();
|
||||
floors = new Block[read.s()];
|
||||
floorCounts = new int[floors.length];
|
||||
for(int i = 0; i < floors.length; i++){
|
||||
floors[i] = Vars.content.block(read.s());
|
||||
floorCounts[i] = read.i();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user