Open source Star Ruler 2 source code!
This commit is contained in:
@@ -0,0 +1,50 @@
|
||||
from designs import checkCoreFacingBackwards;
|
||||
|
||||
bool checkRamjet(Design& design, Subsystem& sys) {
|
||||
if(checkCoreFacingBackwards(design, sys))
|
||||
return true;
|
||||
|
||||
//Check all the scoops
|
||||
auto@ scoop = sys.type.module("Scoop");
|
||||
bool failed = false;
|
||||
for(uint i = 0, cnt = sys.hexCount; i < cnt; ++i) {
|
||||
vec2u hex = sys.hexagon(i);
|
||||
if(sys.module(i) is scoop) {
|
||||
if(!design.hull.active.valid(hex, HEX_UpRight) || design.hull.isExteriorInDirection(hex, HEX_UpRight))
|
||||
continue;
|
||||
if(!design.hull.active.valid(hex, HEX_DownRight) || design.hull.isExteriorInDirection(hex, HEX_DownRight))
|
||||
continue;
|
||||
design.addErrorHex(hex);
|
||||
failed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(failed) {
|
||||
design.addError(true, locale::ERROR_SCOOP_FACE_FRONT, null, null, vec2u());
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
bool checkSurroundedInSystem(Design& design, Subsystem& sys, const vec2u& hex) {
|
||||
bool valid = true;
|
||||
for(uint d = 0; d < 6; ++d) {
|
||||
vec2u other = hex;
|
||||
if(design.hull.active.advance(other, HexGridAdjacency(d))) {
|
||||
auto@ otherSys = design.subsystem(other);
|
||||
auto@ otherMod = design.module(other);
|
||||
if(otherSys !is sys || (otherMod !is sys.type.defaultModule && otherMod !is sys.type.coreModule)) {
|
||||
design.addErrorHex(other);
|
||||
valid = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!valid) {
|
||||
auto@ mod = design.module(hex.x, hex.y);
|
||||
design.addErrorHex(hex);
|
||||
design.addError(true, format(locale::ERROR_MUST_SURROUND, mod.name, sys.type.name), null, mod, hex);
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
Reference in New Issue
Block a user