73 lines
1.3 KiB
ActionScript
73 lines
1.3 KiB
ActionScript
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;
|
|
}
|
|
};
|