Files
starruler-linux/scripts/server/construction/TerraformConstructible.as
T
2018-07-17 14:15:37 +02:00

70 lines
1.4 KiB
ActionScript

import construction.Constructible;
import resources;
tidy class TerraformConstructible : Constructible {
Planet@ planet;
const ResourceType@ resource;
TerraformConstructible(Object& obj, Planet@ p, const ResourceType@ r, double cost, double labor) {
@planet = p;
@resource = r;
buildCost = cost;
totalLabor = labor;
}
TerraformConstructible(SaveFile& file) {
Constructible::load(file);
uint rid = file.readIdentifier(SI_Resource);
@resource = getResource(rid);
file >> planet;
}
bool pay(Object& obj) override {
if(!Constructible::pay(obj))
return false;
planet.startTerraform();
return true;
}
bool repeat(Object& obj) {
return false;
}
void save(SaveFile& file) {
Constructible::save(file);
file.writeIdentifier(SI_Resource, resource.id);
file << planet;
}
ConstructibleType get_type() {
return CT_Terraform;
}
string get_name() {
return format(locale::BUILD_ASTEROID, resource.name);
}
void cancel(Object& obj) {
planet.stopTerraform();
Constructible::cancel(obj);
}
TickResult tick(Object& obj, double time) override {
if(obj.owner !is planet.owner || !planet.isTerraforming()) {
cancel(obj);
return TR_Remove;
}
return TR_UsedLabor;
}
void complete(Object& obj) {
planet.terraformTo(resource.id);
}
void write(Message& msg) {
Constructible::write(msg);
msg << resource.id;
msg << planet;
}
};