109 lines
2.1 KiB
ActionScript
109 lines
2.1 KiB
ActionScript
from obj_selection import selectedObjects, selectedObject;
|
|
import ftl;
|
|
|
|
import void targetHyperdrive() from "targeting.Hyperdrive";
|
|
import void targetJumpdrive() from "targeting.Jumpdrive";
|
|
import void targetFling() from "targeting.Fling";
|
|
import void targetSlipstream() from "targeting.Slipstream";
|
|
|
|
bool canMove() {
|
|
Object@[]@ selected = selectedObjects;
|
|
if(selected.length == 0)
|
|
return false;
|
|
for(uint i = 0, cnt = selected.length; i < cnt; ++i) {
|
|
if(!selected[i].hasMover)
|
|
return false;
|
|
if(!selected[i].owner.controlled)
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool canHyperdrive() {
|
|
Object@[]@ selected = selectedObjects;
|
|
if(selected.length == 0)
|
|
return false;
|
|
for(uint i = 0, cnt = selected.length; i < cnt; ++i) {
|
|
if(!canHyperdrive(selected[i]))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool canJumpdrive() {
|
|
Object@[]@ selected = selectedObjects;
|
|
if(selected.length == 0)
|
|
return false;
|
|
for(uint i = 0, cnt = selected.length; i < cnt; ++i) {
|
|
if(!canJumpdrive(selected[i]))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool canFling() {
|
|
Object@[]@ selected = selectedObjects;
|
|
if(selected.length == 0 || !playerEmpire.hasFlingBeacons)
|
|
return false;
|
|
for(uint i = 0, cnt = selected.length; i < cnt; ++i) {
|
|
Object@ obj = selected[i];
|
|
if(obj.owner is null || !obj.owner.valid)
|
|
return false;
|
|
if(!canFling(obj))
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
bool canSlipstream() {
|
|
Object@[]@ selected = selectedObjects;
|
|
for(uint i = 0, cnt = selected.length; i < cnt; ++i) {
|
|
Object@ obj = selected[i];
|
|
if(canSlipstream(obj))
|
|
return true;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool targetFTL() {
|
|
if(!canMove())
|
|
return false;
|
|
|
|
//Check for fling
|
|
if(canFling()) {
|
|
targetFling();
|
|
return true;
|
|
}
|
|
|
|
//Check for hyperdrive
|
|
if(canHyperdrive()) {
|
|
targetHyperdrive();
|
|
return true;
|
|
}
|
|
|
|
//Check for jumpdrive
|
|
if(canJumpdrive()) {
|
|
targetJumpdrive();
|
|
return true;
|
|
}
|
|
|
|
//Check for slipstream
|
|
if(canSlipstream()) {
|
|
targetSlipstream();
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void FTLBind(bool pressed) {
|
|
if(!pressed) {
|
|
if(!targetFTL())
|
|
sound::error.play(priority=true);
|
|
}
|
|
}
|
|
|
|
void init() {
|
|
keybinds::Global.addBind(KB_FTL, "FTLBind");
|
|
}
|