示例#1
0
文件: fit.py 项目: a-tal/Pyfa
    def clearFit(self, fitID):
        if fitID is None:
            return None

        fit = getFit(fitID)
        fit.clear()
        return fit
示例#2
0
文件: fit.py 项目: a-tal/Pyfa
    def addCargo(self, fitID, itemID, amount=1, replace=False):
        """
        Adds cargo via typeID of item. If replace = True, we replace amount with
        given parameter, otherwise we increment
        """

        if fitID is None:
            return False

        fit = getFit(fitID)
        item = getItem(itemID)
        cargo = None

        # adding from market
        for x in fit.cargo.find(item):
            if x is not None:
                # found item already in cargo, use previous value and remove old
                cargo = x
                fit.cargo.remove(x)
                break

        if cargo is None:
            # if we don't have the item already in cargo, use default values
            cargo = es_Cargo(item)

        fit.cargo.append(cargo)
        if replace:
            cargo.amount = amount
        else:
            cargo.amount += amount

        self.recalc(fit)
        eds_queries.commit()

        return True
示例#3
0
文件: fit.py 项目: a-tal/Pyfa
    def refreshFit(self, fitID):
        if fitID is None:
            return None

        fit = getFit(fitID)
        eds_queries.commit()
        self.recalc(fit)
示例#4
0
文件: fit.py 项目: a-tal/Pyfa
    def addDrone(self, fitID, itemID):
        if fitID is None:
            return False

        fit = getFit(fitID)
        item = getItem(itemID, eager=("attributes", "group.category"))
        if item.category.name == "Drone":
            drone = None
            for d in fit.drones.find(item):
                if d is not None and d.amountActive == 0 and d.amount < max(
                        5, fit.extraAttributes["maxActiveDrones"]):
                    drone = d
                    break

            if drone is None:
                drone = es_Drone(item)
                if drone.fits(fit) is True:
                    fit.drones.append(drone)
                else:
                    return False
            drone.amount += 1
            eds_queries.commit()
            self.recalc(fit)
            return True
        else:
            return False
示例#5
0
文件: fit.py 项目: a-tal/Pyfa
    def changeModule(self, fitID, position, newItemID):
        fit = getFit(fitID)

        # Dummy it out in case the next bit fails
        fit.modules.toDummy(position)

        item = getItem(newItemID, eager=("attributes", "group.category"))
        try:
            m = es_Module(item)
        except ValueError:
            return False

        if m.fits(fit):
            m.owner = fit
            fit.modules.toModule(position, m)
            if m.isValidState(State.ACTIVE):
                m.state = State.ACTIVE

            # As some items may affect state-limiting attributes of the ship, calculate new attributes first
            self.recalc(fit)
            # Then, check states of all modules and change where needed. This will recalc if needed
            self.checkStates(fit, m)

            fit.fill()
            eds_queries.commit()

            return True
        else:
            return None
示例#6
0
文件: fit.py 项目: a-tal/Pyfa
    def appendModule(self, fitID, itemID):
        fit = getFit(fitID)
        item = getItem(itemID, eager=("attributes", "group.category"))
        try:
            m = es_Module(item)
        except ValueError:
            return False

        if m.item.category.name == "Subsystem":
            fit.modules.freeSlot(m.getModifiedItemAttr("subSystemSlot"))

        if m.fits(fit):
            m.owner = fit
            numSlots = len(fit.modules)
            fit.modules.append(m)
            if m.isValidState(State.ACTIVE):
                m.state = State.ACTIVE

            # As some items may affect state-limiting attributes of the ship, calculate new attributes first
            self.recalc(fit)
            # Then, check states of all modules and change where needed. This will recalc if needed
            self.checkStates(fit, m)

            fit.fill()
            eds_queries.commit()

            return numSlots != len(fit.modules)
        else:
            return None
示例#7
0
文件: fit.py 项目: a-tal/Pyfa
    def getFit(self, fitID, projected=False, basic=False):
        ''' Gets fit from database, and populates fleet data.
        Projected is a recursion flag that is set to reduce recursions into projected fits
        Basic is a flag to simply return the fit without any other processing
        '''
        if fitID is None:
            return None
        fit = getFit(fitID)

        if basic:
            return fit

        inited = getattr(fit, "inited", None)

        if inited is None or inited is False:
            sFleet = Fleet.getInstance()
            f = sFleet.getLinearFleet(fit)
            if f is None:
                sFleet.removeAssociatedFleetData(fit)
                fit.fleet = None
            else:
                fit.fleet = f

            if not projected:
                for fitP in fit.projectedFits:
                    self.getFit(fitP.ID, projected=True)
                self.recalc(fit, withBoosters=True)
                fit.fill()

            # Check that the states of all modules are valid
            self.checkStates(fit, None)

            eds_queries.commit()
            fit.inited = True
        return fit
示例#8
0
文件: fit.py 项目: a-tal/Pyfa
    def toggleImplantSource(self, fitID, source):
        fit = getFit(fitID)
        fit.implantSource = source

        eds_queries.commit()
        self.recalc(fit)
        return True
示例#9
0
文件: fit.py 项目: a-tal/Pyfa
    def removeFighter(self, fitID, i):
        fit = getFit(fitID)
        f = fit.fighters[i]
        fit.fighters.remove(f)

        eds_queries.commit()
        self.recalc(fit)
        return True
示例#10
0
文件: fit.py 项目: a-tal/Pyfa
    def toggleFighter(self, fitID, i):
        fit = getFit(fitID)
        f = fit.fighters[i]
        f.active = not f.active

        eds_queries.commit()
        self.recalc(fit)
        return True
示例#11
0
文件: fit.py 项目: a-tal/Pyfa
    def toggleImplant(self, fitID, i):
        fit = getFit(fitID)
        implant = fit.implants[i]
        implant.active = not implant.active

        eds_queries.commit()
        self.recalc(fit)
        return True
示例#12
0
文件: fit.py 项目: a-tal/Pyfa
    def toggleBooster(self, fitID, i):
        fit = getFit(fitID)
        booster = fit.boosters[i]
        booster.active = not booster.active

        eds_queries.commit()
        self.recalc(fit)
        return True
示例#13
0
文件: fit.py 项目: a-tal/Pyfa
    def toggleCommandFit(self, fitID, thing):
        fit = getFit(fitID)
        commandInfo = thing.getCommandInfo(fitID)
        if commandInfo:
            commandInfo.active = not commandInfo.active

        eds_queries.commit()
        self.recalc(fit)
示例#14
0
文件: fit.py 项目: a-tal/Pyfa
    def toggleFactorReload(self, fitID):
        if fitID is None:
            return None

        fit = getFit(fitID)
        fit.factorReload = not fit.factorReload
        eds_queries.commit()
        self.recalc(fit)
示例#15
0
文件: fit.py 项目: a-tal/Pyfa
    def removeBooster(self, fitID, position):
        if fitID is None:
            return False

        fit = getFit(fitID)
        booster = fit.boosters[position]
        fit.boosters.remove(booster)
        self.recalc(fit)
        return True
示例#16
0
文件: fit.py 项目: a-tal/Pyfa
    def removeImplant(self, fitID, position):
        if fitID is None:
            return False

        fit = getFit(fitID)
        implant = fit.implants[position]
        fit.implants.remove(implant)
        self.recalc(fit)
        return True
示例#17
0
文件: fit.py 项目: a-tal/Pyfa
    def setMode(self, fitID, mode):
        if fitID is None:
            return

        fit = getFit(fitID)
        fit.mode = mode
        eds_queries.commit()

        self.recalc(fit)
示例#18
0
文件: fit.py 项目: a-tal/Pyfa
    def setDamagePattern(self, fitID, pattern):
        if fitID is None:
            return

        fit = getFit(fitID)
        fit.damagePattern = self.pattern = pattern
        eds_queries.commit()

        self.recalc(fit)
示例#19
0
文件: fit.py 项目: a-tal/Pyfa
    def removeCargo(self, fitID, position):
        if fitID is None:
            return False

        fit = getFit(fitID)
        charge = fit.cargo[position]
        fit.cargo.remove(charge)
        self.recalc(fit)
        return True
示例#20
0
文件: fit.py 项目: a-tal/Pyfa
    def setTargetResists(self, fitID, pattern):
        if fitID is None:
            return

        fit = getFit(fitID)
        fit.targetResists = pattern
        eds_queries.commit()

        self.recalc(fit)
示例#21
0
文件: fit.py 项目: a-tal/Pyfa
    def changeAmount(self, fitID, projected_fit, amount):
        """Change amount of projected fits"""
        fit = getFit(fitID)
        amount = min(20, max(1, amount))  # 1 <= a <= 20
        projectionInfo = projected_fit.getProjectionInfo(fitID)
        if projectionInfo:
            projectionInfo.amount = amount

        eds_queries.commit()
        self.recalc(fit)
示例#22
0
文件: fit.py 项目: a-tal/Pyfa
    def changeChar(self, fitID, charID):
        if fitID is None or charID is None:
            if charID is not None:
                self.character = Character.getInstance().all5()

            return

        fit = getFit(fitID)
        fit.character = self.character = getCharacter(charID)
        self.recalc(fit)
示例#23
0
文件: fit.py 项目: a-tal/Pyfa
    def toggleDrone(self, fitID, i):
        fit = getFit(fitID)
        d = fit.drones[i]
        if d.amount == d.amountActive:
            d.amountActive = 0
        else:
            d.amountActive = d.amount

        eds_queries.commit()
        self.recalc(fit)
        return True
示例#24
0
文件: fit.py 项目: a-tal/Pyfa
    def setAmmo(self, fitID, ammoID, modules):
        if fitID is None:
            return

        fit = getFit(fitID)
        ammo = getItem(ammoID) if ammoID else None

        for mod in modules:
            if mod.isValidCharge(ammo):
                mod.charge = ammo

        self.recalc(fit)
示例#25
0
文件: fit.py 项目: a-tal/Pyfa
    def removeModule(self, fitID, position):
        fit = getFit(fitID)
        if fit.modules[position].isEmpty:
            return None

        numSlots = len(fit.modules)
        fit.modules.toDummy(position)
        self.recalc(fit)
        self.checkStates(fit, None)
        fit.fill()
        eds_queries.commit()
        return numSlots != len(fit.modules)
示例#26
0
文件: fit.py 项目: a-tal/Pyfa
    def deleteFit(self, fitID):
        fit = getFit(fitID)
        sFleet = Fleet.getInstance()
        sFleet.removeAssociatedFleetData(fit)

        eds_queries.remove(fit)

        # refresh any fits this fit is projected onto. Otherwise, if we have
        # already loaded those fits, they will not reflect the changes
        for projection in fit.projectedOnto.values():
            if projection.victim_fit in sqlAlchemy.saveddata_session:  # GH issue #359
                sqlAlchemy.saveddata_session.refresh(projection.victim_fit)
示例#27
0
文件: fit.py 项目: a-tal/Pyfa
    def removeDrone(self, fitID, i, numDronesToRemove=1):
        fit = getFit(fitID)
        d = fit.drones[i]
        d.amount -= numDronesToRemove
        if d.amountActive > 0:
            d.amountActive -= numDronesToRemove

        if d.amount == 0:
            del fit.drones[i]

        eds_queries.commit()
        self.recalc(fit)
        return True
示例#28
0
文件: fit.py 项目: a-tal/Pyfa
    def swapModules(self, fitID, src, dst):
        fit = getFit(fitID)
        # Gather modules
        srcMod = fit.modules[src]
        dstMod = fit.modules[dst]

        # To swap, we simply remove mod and insert at destination.
        fit.modules.remove(srcMod)
        fit.modules.insert(dst, srcMod)
        fit.modules.remove(dstMod)
        fit.modules.insert(src, dstMod)

        eds_queries.commit()
示例#29
0
文件: fit.py 项目: a-tal/Pyfa
    def moveCargoToModule(self, fitID, moduleIdx, cargoIdx, copyMod=False):
        """
        Moves cargo to fitting window. Can either do a copy, move, or swap with current module
        If we try to copy/move into a spot with a non-empty module, we swap instead.
        To avoid redundancy in converting Cargo item, this function does the
        sanity checks as opposed to the GUI View. This is different than how the
        normal .swapModules() does things, which is mostly a blind swap.
        """
        fit = getFit(fitID)

        module = fit.modules[moduleIdx]
        cargo = fit.cargo[cargoIdx]

        # Gather modules and convert Cargo item to Module, silently return if not a module
        try:
            cargoP = Module(cargo.item)
            cargoP.owner = fit
            if cargoP.isValidState(State.ACTIVE):
                cargoP.state = State.ACTIVE
        except:
            return

        if cargoP.slot != module.slot:  # can't swap modules to different racks
            return

        # remove module that we are trying to move cargo to
        fit.modules.remove(module)

        if not cargoP.fits(fit):  # if cargo doesn't fit, rollback and return
            fit.modules.insert(moduleIdx, module)
            return

        fit.modules.insert(moduleIdx, cargoP)

        if not copyMod:  # remove existing cargo if not cloning
            if cargo.amount == 1:
                fit.cargo.remove(cargo)
            else:
                cargo.amount -= 1

        if not module.isEmpty:  # if module is placeholder, we don't want to convert/add it
            for x in fit.cargo.find(module.item):
                x.amount += 1
                break
            else:
                moduleP = es_Cargo(module.item)
                moduleP.amount = 1
                fit.cargo.insert(cargoIdx, moduleP)

        eds_queries.commit()
        self.recalc(fit)
示例#30
0
文件: fit.py 项目: a-tal/Pyfa
    def removeProjected(self, fitID, thing):
        fit = getFit(fitID)
        if isinstance(thing, es_Drone):
            fit.projectedDrones.remove(thing)
        elif isinstance(thing, es_Module):
            fit.projectedModules.remove(thing)
        elif isinstance(thing, es_Fighter):
            fit.projectedFighters.remove(thing)
        else:
            del fit.__projectedFits[thing.ID]
            # fit.projectedFits.remove(thing)

        eds_queries.commit()
        self.recalc(fit)