Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,108 @@
|
||||
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");
|
||||
}
|
||||
Reference in New Issue
Block a user