def itemOnVehicleComparator(vehicle, item):
    vehicleParams = params.VehicleParams(vehicle).getParamsDict()
    withItemParams = vehicleParams
    mayInstall, reason = vehicle.descriptor.mayInstallComponent(item.intCD)
    if item.itemTypeID == ITEM_TYPES.vehicleTurret:
        mayInstall, reason = vehicle.descriptor.mayInstallTurret(item.intCD, vehicle.gun.intCD)
        if not mayInstall:
            properGun = findFirst(lambda gun: vehicle.descriptor.mayInstallComponent(gun['compactDescr'])[0], item.descriptor['guns'])
            if properGun is not None:
                removedModules = vehicle.descriptor.installTurret(item.intCD, properGun['compactDescr'])
                withItemParams = params.VehicleParams(vehicle).getParamsDict()
                vehicle.descriptor.installTurret(*removedModules)
            else:
                LOG_ERROR('not possible to install turret', item, reason)
        else:
            removedModules = vehicle.descriptor.installTurret(item.intCD, vehicle.gun.intCD)
            withItemParams = params.VehicleParams(vehicle).getParamsDict()
            vehicle.descriptor.installTurret(*removedModules)
    elif not mayInstall and reason == 'not for current vehicle' and item.itemTypeID == ITEM_TYPES.vehicleGun:
        turret = g_paramsCache.getPrecachedParameters(item.intCD).getTurretsForVehicle(vehicle.intCD)[0]
        removedModules = vehicle.descriptor.installTurret(turret, vehicle.gun.intCD)
        vehicleParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installTurret(turret, item.intCD)
        withItemParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installTurret(*removedModules)
    else:
        removedModule = vehicle.descriptor.installComponent(item.intCD)
        withItemParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installComponent(removedModule[0])
    return VehiclesComparator(withItemParams, vehicleParams)
def itemOnVehicleComparator(vehicle, item):
    vehicleParams = params.VehicleParams(vehicle).getParamsDict()
    withItemParams = vehicleParams
    mayInstall, reason = vehicle.descriptor.mayInstallComponent(item.intCD)
    if item.itemTypeID == ITEM_TYPES.vehicleTurret:
        mayInstall, reason = vehicle.descriptor.mayInstallTurret(item.intCD, vehicle.gun.intCD)
        if not mayInstall:
            properGun = findFirst(lambda gun: vehicle.descriptor.mayInstallComponent(gun.compactDescr)[0], item.descriptor.guns)
            if properGun is not None:
                removedModules = vehicle.descriptor.installTurret(item.intCD, properGun.compactDescr)
                withItemParams = params.VehicleParams(vehicle).getParamsDict()
                vehicle.descriptor.installTurret(*removedModules)
            else:
                LOG_ERROR('not possible to install turret', item, reason)
        else:
            removedModules = vehicle.descriptor.installTurret(item.intCD, vehicle.gun.intCD)
            withItemParams = params.VehicleParams(vehicle).getParamsDict()
            vehicle.descriptor.installTurret(*removedModules)
    elif not mayInstall:
        if reason == 'not for current vehicle' and item.itemTypeID == ITEM_TYPES.vehicleGun:
            turret = g_paramsCache.getPrecachedParameters(item.intCD).getTurretsForVehicle(vehicle.intCD)[0]
            removedModules = vehicle.descriptor.installTurret(turret, vehicle.gun.intCD)
            vehicleParams = params.VehicleParams(vehicle).getParamsDict()
            vehicle.descriptor.installTurret(turret, item.intCD)
            withItemParams = params.VehicleParams(vehicle).getParamsDict()
            vehicle.descriptor.installTurret(*removedModules)
        else:
            LOG_WARNING('Module {} cannot be installed on vehicle {}'.format(item, vehicle))
            return VehiclesComparator(withItemParams, vehicleParams)
    else:
        removedModule = vehicle.descriptor.installComponent(item.intCD)
        withItemParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installComponent(removedModule[0])
    return VehiclesComparator(withItemParams, vehicleParams)
Exemplo n.º 3
0
    def __getSuitableModulesForGun(self, gunIntCD, vehicle):
        """
        Get suitable turrets and chassis for particular gun.
        Turrets also may be unsuitable because of high weight,
        in that case need to find suitable chassis
        :param gunIntCD: int compact descriptor of gun module
        :param gui.shared.gui_items.Vehicle:
        :return: tuple: (turrets int compact descriptors, chassis int compact descriptors)
        """
        chassisCDs = []
        turretsCDs = g_paramsCache.getPrecachedParameters(
            gunIntCD).getTurretsForVehicle(vehicle.intCD)
        for turretIntCS in turretsCDs:
            suitableTurret = _getModule(turretIntCS)
            isFit, reason = suitableTurret.mayInstall(vehicle)
            if not isFit:
                if reason == 'too heavy':
                    chassisCDs = map(lambda ch: ch.intCD,
                                     getSuitableChassis(vehicle))
            else:
                currentTurret = vehicle.turret
                _installModule(vehicle, suitableTurret)
                gun = _getModule(gunIntCD)
                isFit, reason = gun.mayInstall(vehicle)
                if not isFit:
                    if reason == 'too heavy':
                        chassisCDs = _getSuitableChassisIDs(vehicle)
                _installModule(vehicle, currentTurret)

        return (turretsCDs, chassisCDs)
Exemplo n.º 4
0
def itemOnVehicleComparator(vehicle, item):
    vehicleParams = params.VehicleParams(vehicle).getParamsDict()
    mayInstall, reason = vehicle.descriptor.mayInstallComponent(item.intCD)
    if item.itemTypeID == ITEM_TYPES.vehicleTurret:
        removedModules = vehicle.descriptor.installTurret(item.intCD, vehicle.gun.intCD)
        withItemParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installTurret(*removedModules)
    elif not mayInstall and reason == 'not for current vehicle' and item.itemTypeID == ITEM_TYPES.vehicleGun:
        turret = g_paramsCache.getPrecachedParameters(item.intCD).getTurretsForVehicle(vehicle.intCD)[0]
        removedModules = vehicle.descriptor.installTurret(turret, vehicle.gun.intCD)
        vehicleParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installTurret(turret, item.intCD)
        withItemParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installTurret(*removedModules)
    else:
        removedModule = vehicle.descriptor.installComponent(item.intCD)
        withItemParams = params.VehicleParams(vehicle).getParamsDict()
        vehicle.descriptor.installComponent(removedModule[0])
    return VehiclesComparator(withItemParams, vehicleParams)
    def __getSuitableModulesForGun(self, gunIntCD, vehicle):
        """
        Get suitable turrets and chassis for particular gun.
        Turrets also may be unsuitable because of high weight,
        in that case need to find suitable chassis
        :param gunIntCD: int compact descriptor of gun module
        :param gui.shared.gui_items.Vehicle:
        :return: tuple: (turrets int compact descriptors, chassis int compact descriptors)
        """
        chassisCDs = []
        turretsCDs = g_paramsCache.getPrecachedParameters(gunIntCD).getTurretsForVehicle(vehicle.intCD)
        for turretIntCS in turretsCDs:
            turret = _getModule(turretIntCS)
            isFit, reason = turret.mayInstall(vehicle)
            if not isFit:
                if reason == 'too heavy':
                    chassisCDs = map(lambda ch: ch.intCD, getSuitableChassis(vehicle))

        return (turretsCDs, chassisCDs)
    def __getSuitableModulesForGun(self, gunIntCD, vehicle):
        chassisCDs = []
        turretsCDs = g_paramsCache.getPrecachedParameters(
            gunIntCD).getTurretsForVehicle(vehicle.intCD)
        for turretIntCS in turretsCDs:
            suitableTurret = _getModule(turretIntCS)
            isFit, reason = suitableTurret.mayInstall(vehicle)
            if not isFit:
                if reason == 'too heavy':
                    chassisCDs = [
                        ch.intCD for ch in getSuitableChassis(vehicle)
                    ]
            currentTurret = vehicle.turret
            _installModule(vehicle, suitableTurret)
            gun = _getModule(gunIntCD)
            isFit, reason = gun.mayInstall(vehicle)
            if not isFit:
                if reason == 'too heavy':
                    chassisCDs = _getSuitableChassisIDs(vehicle)
            _installModule(vehicle, currentTurret)

        return (turretsCDs, chassisCDs)
Exemplo n.º 7
0
 def precachedParams(self):
     if self.__preCached is None:
         self.__preCached = g_paramsCache.getPrecachedParameters(self._itemDescr['compactDescr'])
     return self.__preCached
 def _getPrecachedInfo(self):
     if self.__preCachedInfo is None:
         self.__preCachedInfo = g_paramsCache.getPrecachedParameters(self._itemDescr.compactDescr)
     return self.__preCachedInfo
Exemplo n.º 9
0
 def precachedParams(self):
     if self.__preCached is None:
         self.__preCached = g_paramsCache.getPrecachedParameters(
             self._itemDescr['compactDescr'])
     return self.__preCached