64 lines
1.0 KiB
ActionScript
64 lines
1.0 KiB
ActionScript
import orders.Order;
|
|
|
|
tidy class OddityGateOrder : Order {
|
|
Oddity@ target;
|
|
int moveId = -1;
|
|
|
|
OddityGateOrder(Oddity& targ) {
|
|
@target = targ;
|
|
moveId = -1;
|
|
}
|
|
|
|
OddityGateOrder(SaveFile& msg) {
|
|
Order::load(msg);
|
|
msg >> target;
|
|
msg >> moveId;
|
|
}
|
|
|
|
void save(SaveFile& msg) {
|
|
Order::save(msg);
|
|
msg << target;
|
|
msg << moveId;
|
|
}
|
|
|
|
OrderType get_type() {
|
|
return OT_OddityGate;
|
|
}
|
|
|
|
string get_name() {
|
|
return "Warp with " + target.name;
|
|
}
|
|
|
|
bool get_hasMovement() {
|
|
return true;
|
|
}
|
|
|
|
vec3d getMoveDestination(const Object& obj) {
|
|
return target.position;
|
|
}
|
|
|
|
OrderStatus tick(Object& obj, double time) {
|
|
if(!obj.hasMover)
|
|
return OS_COMPLETED;
|
|
if(!target.isGate())
|
|
return OS_COMPLETED;
|
|
|
|
if(obj.moveTo(target, moveId, target.radius + obj.radius, enterOrbit=false)) {
|
|
vec3d toPos = target.getGateDest();
|
|
if(toPos == vec3d())
|
|
return OS_COMPLETED;
|
|
|
|
if(obj.hasLeaderAI) {
|
|
obj.teleportTo(toPos);
|
|
}
|
|
else {
|
|
obj.position = toPos;
|
|
obj.wake();
|
|
}
|
|
return OS_COMPLETED;
|
|
}
|
|
|
|
return OS_BLOCKING;
|
|
}
|
|
};
|