Open source Star Ruler 2 source code!

This commit is contained in:
Lucas de Vries
2018-07-17 14:15:37 +02:00
commit cc307720ff
4342 changed files with 2365070 additions and 0 deletions
+72
View File
@@ -0,0 +1,72 @@
import orders.Order;
tidy class ScanOrder : Order {
Anomaly@ target;
int moveId = -1;
int64 beam = 0;
ScanOrder(Anomaly& targ) {
@target = targ;
moveId = -1;
}
ScanOrder(SaveFile& msg) {
Order::load(msg);
msg >> target;
msg >> moveId;
}
~ScanOrder() {
removeBeam();
}
void save(SaveFile& msg) {
Order::save(msg);
msg << target;
msg << moveId;
}
OrderType get_type() {
return OT_Scan;
}
string get_name() {
return "Scan " + target.name;
}
bool get_hasMovement() {
return true;
}
vec3d getMoveDestination(const Object& obj) {
return target.position;
}
void removeBeam() {
if(beam != 0) {
removeGfxEffect(ALL_PLAYERS, beam);
beam = 0;
}
}
OrderStatus tick(Object& obj, double time) {
if(!obj.hasMover || !target.valid || target.getEmpireProgress(obj.owner) >= 1.f) {
removeBeam();
return OS_COMPLETED;
}
if(obj.position.distanceTo(target.position) < 30.0 + target.radius + obj.radius) {
target.addProgress(obj.owner, time);
if(beam == 0) {
beam = (obj.id << 32) | (0x2 << 24);
makeBeamEffect(ALL_PLAYERS, beam, obj, target, 0xffffffff, obj.radius, "Tractor", -1.0);
}
}
else {
obj.moveTo(target, moveId, 15.0 + target.radius + obj.radius, enterOrbit=false);
removeBeam();
}
return OS_BLOCKING;
}
};