Files
2018-07-17 14:15:37 +02:00

129 lines
2.5 KiB
ActionScript

#priority init 2010
import resources;
from saving import SaveIdentifier;
final class Biome {
uint8 id = 0;
string ident;
string name;
string description;
Color color;
Sprite tile;
uint frequency = 1;
float useWeight = 1.f;
float buildCost = 1.f, buildTime = 1.f;
//Temp and humidity range from 0 to 1 (lowest to highest)
float temp = 0.5f, humidity = 0.5f;
bool isCrystallic = false;
bool isVoid = false;
bool buildable = true;
bool isWater = false;
bool isMoon = false;
vec4f picks(0.f, 0.f, 0.f, -0.025f);
vec2f lookupRange(0.f, 0.f);
};
final class ColonizationOrder : Serializable, Savable {
Object@ target;
double targetPopulation;
double inTransit;
double totalSent;
ColonizationOrder() {
targetPopulation = 1.0;
inTransit = 0.0;
totalSent = 0.0;
}
void save(SaveFile& msg) {
msg << target;
msg << targetPopulation;
msg << inTransit;
msg << totalSent;
}
void load(SaveFile& msg) {
msg >> target;
msg >> targetPopulation;
msg >> inTransit;
if(msg >= SV_0148)
msg >> totalSent;
}
void write(Message& msg) {
msg << target;
msg << targetPopulation;
msg << inTransit;
}
void read(Message& msg) {
msg >> target;
msg >> targetPopulation;
msg >> inTransit;
}
};
namespace biomes {
::array<::Biome@> biomes;
::dictionary biomeIdents;
::uint totalFrequency = 0;
};
uint getBiomeCount() {
return biomes::biomes.length;
}
const Biome@ getBiome(uint id) {
if(id < biomes::biomes.length)
return biomes::biomes[id];
else
return null;
}
int getBiomeID(const string& ident) {
auto@ type = getBiome(ident);
if(type is null)
return -1;
return int(type.id);
}
string getBiomeIdent(int id) {
auto@ type = getBiome(id);
if(type is null)
return "";
return type.ident;
}
const Biome@ getBiome(const string& name) {
Biome@ b;
biomes::biomeIdents.get(name, @b);
return b;
}
const Biome@ getDistributedBiome() {
uint num = randomi(1, biomes::totalFrequency);
for(uint i = 0, cnt = biomes::biomes.length; i < cnt; ++i) {
if(num <= biomes::biomes[i].frequency)
return biomes::biomes[i];
num -= biomes::biomes[i].frequency;
}
return biomes::biomes[0];
}
void addBiome(Biome@ biome) {
biome.id = biomes::biomes.length;
biomes::biomes.insertLast(biome);
biomes::biomeIdents.set(biome.ident, @biome);
biomes::totalFrequency += biome.frequency;
}
void saveIdentifiers(SaveFile& file) {
for(uint i = 0, cnt = biomes::biomes.length; i < cnt; ++i) {
Biome@ type = biomes::biomes[i];
file.addIdentifier(SI_Biome, type.id, type.ident);
}
}