protected override MechPowerPath[] GetMechPowerExits(MechPowerPath pathDir) { BlockFacing face = pathDir.OutFacing; BELargeGear3m beg = Blockentity as BELargeGear3m; int index = 0; if (face == BlockFacing.UP || face == BlockFacing.DOWN) { MechPowerPath[] paths = new MechPowerPath[2 + beg.CountGears(Api)]; paths[index] = pathDir; paths[++index] = new MechPowerPath(pathDir.OutFacing.Opposite, pathDir.gearingRatio, null, !pathDir.invert); bool sideInvert = face == BlockFacing.DOWN ^ pathDir.invert; for (int i = 0; i < 4; i++) { BlockFacing horizFace = BlockFacing.HORIZONTALS[i]; if (beg.HasGearAt(Api, Position.AddCopy(horizFace))) { paths[++index] = new MechPowerPath(horizFace, pathDir.gearingRatio * ratio, null, sideInvert); //invert all horizontal output paths } } return(paths); } MechPowerPath[] pathss = new MechPowerPath[2 + beg.CountGears(Api)]; bool invert = pathDir.IsInvertedTowards(Position); pathss[0] = new MechPowerPath(BlockFacing.DOWN, pathDir.gearingRatio / ratio, null, invert); pathss[1] = new MechPowerPath(BlockFacing.UP, pathDir.gearingRatio / ratio, null, !invert); index = 1; bool sidesInvert = face == BlockFacing.DOWN ^ !invert; //invert power in the opposite sense if power fed in from one of the sides instead of through up/down axle for (int i = 0; i < 4; i++) { BlockFacing horizFace = BlockFacing.HORIZONTALS[i]; if (beg.HasGearAt(Api, Position.AddCopy(horizFace))) { pathss[++index] = new MechPowerPath(horizFace, pathDir.gearingRatio, null, sidesInvert); //horizontals match the gearing ratio of the input horizontal } } return(pathss); }
protected override MechPowerPath[] GetMechPowerExits(MechPowerPath pathDir) { BlockFacing face = pathDir.OutFacing; BELargeGear3m beg = Blockentity as BELargeGear3m; int index = 0; if (face == BlockFacing.UP || face == BlockFacing.DOWN) { MechPowerPath[] paths = new MechPowerPath[2 + beg.CountGears(Api)]; paths[index] = pathDir; paths[++index] = new MechPowerPath(pathDir.OutFacing.Opposite, pathDir.gearingRatio, null, !pathDir.invert); for (int i = 0; i < 4; i++) { BlockFacing horizFace = BlockFacing.HORIZONTALS[i]; if (beg.HasGearAt(Api, Position.AddCopy(horizFace))) { paths[++index] = new MechPowerPath(horizFace, pathDir.gearingRatio * ratio, null, face == BlockFacing.DOWN ^ pathDir.invert); //invert all horizontal output paths } } return(paths); } MechPowerPath[] pathss = new MechPowerPath[2 + beg.CountGears(Api)]; bool invert = pathDir.IsInvertedTowards(Position); pathss[0] = new MechPowerPath(BlockFacing.DOWN, pathDir.gearingRatio / ratio, null, invert); pathss[1] = new MechPowerPath(BlockFacing.UP, pathDir.gearingRatio / ratio, null, !invert); index = 1; for (int i = 0; i < 4; i++) { BlockFacing horizFace = BlockFacing.HORIZONTALS[i]; if (beg.HasGearAt(Api, Position.AddCopy(horizFace))) { pathss[++index] = new MechPowerPath(horizFace, pathDir.gearingRatio, null, (face.Opposite == horizFace || face == BlockFacing.DOWN) ^ !invert); //horizontals match the gearing ratio of the input horizontal; invert unless its the input side } } return(pathss); }