def changeMoveType(self, general, move, user=None): generalDomain = Army_Factory.get(general) move = int(move) if move not in [1,2,3,4]: raise exceptions.args.EnumError("Wrong move mode") return super().changeMoveType(generalDomain, move, user)
def load(self, armyUser, position, config=None, user=None): if config is None: config = dict() detail = config['detail'] if 'detail' in config else False inBuild = config['inBuild'] if 'inBuild' in config else None return Army_Factory.getByPosition(armyUser, position, detail=detail, inBuild=inBuild)
def load(leader): suite = leader.getSuite() army = Army_Factory.getCollectionByGeneral(leader) # army.extract() armyData = [] for domain in army: if not suite or suite.getId() != domain.getId(): armyData.append(load(domain)) return {'current': leader, 'suite': suite, 'sub_army': armyData}
def move(self, general, path, user=None): general = Army_Factory.get(general) mapPath = [] for coordinate in path: try: x, y, direction = coordinate except ValueError: raise WrongArgumentType() mapPath.append({ 'pos_id': helpers.MapCoordinate.MapCoordinate(x=x, y=y).getPosId(), 'direction': direction }) return super().move(general, mapPath, user)
def loadDetail(self, armyUser, _id, user=None): def load(leader): suite = leader.getSuite() army = Army_Factory.getCollectionByGeneral(leader) # army.extract() armyData = [] for domain in army: if not suite or suite.getId() != domain.getId(): armyData.append(load(domain)) return {'current': leader, 'suite': suite, 'sub_army': armyData} commander = Army_Factory.get(_id) return load(commander)
def _calculateUnitsSize(self, armyDomain): size = 0 if armyDomain.getUnit().getType() == Common.TYPE_SOLIDER: return armyDomain.getCount() suiteArmy = armyDomain.getSuite() if suiteArmy: size += suiteArmy.getCount() armyCollection = Army_Factory.getCollectionByGeneral(armyDomain) for army in armyCollection: if army.getUnit().getType() == Common.TYPE_GENERAL: size += self._calculateUnitsSize(army) continue size += army.getCount() return size
def _create(self, unit, town, count): data = { 'unit': unit, 'user': town.getUser(), 'count': count, 'commander': None, 'map': town.getMap(), 'in_build': True, 'power': 100, 'mode': 1, 'move_path': [], 'suite': None, 'is_general': unit.getType() == Common.TYPE_GENERAL, 'last_power_update': int(time.time()), 'formation_attack': Front.TYPE_AVANGARD, 'formation_defence': Front.TYPE_AVANGARD } domain = Army_Factory.getDomainFromData(data) domain.getMapper().save(domain) return domain
def removeSolidersFromGeneral(self, generalArmy, solidersCollection, user=None): solidersCollection = [objectId(i) for i in solidersCollection] domain = Army_Factory.get(generalArmy) collection = Army_Factory.getByIds(solidersCollection) return super().removeSolidersFromGeneral(domain, collection, user)
def removeSuite(self, generalArmy, solidersArmy, user=None): generalDomain = Army_Factory.get(generalArmy) soliderDomain = Army_Factory.get(solidersArmy) return super().removeSuite(generalDomain, soliderDomain, user)
def updatePathMove(self, general): general = Army_Factory.get(general) return super().updatePathMove(general)
def dissolution(self, armyDomain, user=None): domain = Army_Factory.get(armyDomain) return super().dissolution(domain, user)
def _hasDeepGeneral(self, armyDomain): collection = Army_Factory.getSubGenerals(armyDomain) return bool(len(collection))
def loadByMapCollectionWithoutUser(self, user, collection): return Army_Factory.loadByMapCollectionWithoutUser(user, collection)
def loadByMapCollection(self, collection): """ :type collection: collection.MapCollection.Map_Collection """ return Army_Factory.loadByMapCollection(collection)
def get(self, _id, user=None): return Army_Factory.get(_id)
def moveOutBuild(self, armyDomain, user=None): domain = Army_Factory.get(armyDomain) return super().moveOutBuild(domain, user)
def merge(self, armyCollection, user=None): armyCollection = [objectId(i) for i in armyCollection] collection = Army_Factory.getByIds(armyCollection) return super().merge(collection, user)
def split(self, armyDomain, size, user=None): domain = Army_Factory.get(armyDomain) size = int(size) return super().split(domain, size, user)