Beispiel #1
0
    def create(cls, person, utg_name):
        from the_tale.game.map.places.storage import buildings_storage

        building = buildings_storage.get_by_person_id(person.id)

        if building:
            return building

        # remove any destroyed buildings for person
        cls._model_class.objects.filter(person_id=person.id).delete()

        x, y = random.choice(list(cls.get_available_positions(person.place.x, person.place.y)))

        model = Building.objects.create(x=x,
                                        y=y,
                                        data=s11n.to_json({'name': utg_name.serialize()}),
                                        place=person.place._model,
                                        person=person._model,
                                        state=BUILDING_STATE.WORKING,
                                        created_at_turn=TimePrototype.get_current_turn_number(),
                                        type=person.type.building_type)

        prototype = cls(model=model)

        buildings_storage.add_item(prototype.id, prototype)
        buildings_storage.update_version()

        return prototype
Beispiel #2
0
    def apply(self, bill=None):
        building = buildings_storage.get_by_person_id(self.person.id)

        if building is None or building.state.is_DESTROYED:
            return

        building.destroy()
Beispiel #3
0
    def create(cls, person, utg_name):
        from the_tale.game.map.places.storage import buildings_storage

        building = buildings_storage.get_by_person_id(person.id)

        if building:
            return building

        # remove any destroyed buildings for person
        cls._model_class.objects.filter(person_id=person.id).delete()

        x, y = random.choice(
            list(cls.get_available_positions(person.place.x, person.place.y)))

        model = Building.objects.create(
            x=x,
            y=y,
            data=s11n.to_json({'name': utg_name.serialize()}),
            place=person.place._model,
            person=person._model,
            state=BUILDING_STATE.WORKING,
            created_at_turn=TimePrototype.get_current_turn_number(),
            type=person.type.building_type)

        prototype = cls(model=model)

        buildings_storage.add_item(prototype.id, prototype)
        buildings_storage.update_version()

        return prototype
Beispiel #4
0
    def apply(self, bill=None):
        building = buildings_storage.get_by_person_id(self.person.id)

        if building is None or building.state.is_DESTROYED:
            return

        building.destroy()
Beispiel #5
0
    def initialize_with_user_data(self, user_form):
        super(BuildingRenaming, self).initialize_with_user_data(user_form)
        self.new_building_name_forms = user_form.c.name

        building = buildings_storage.get_by_person_id(self.person_id)
        if building is not None:
            self.old_building_name_forms = building.utg_name
Beispiel #6
0
    def initialize_with_user_data(self, user_form):
        super(BuildingRenaming, self).initialize_with_user_data(user_form)
        self.new_building_name_forms = user_form.c.name

        building = buildings_storage.get_by_person_id(self.person_id)
        if building is not None:
            self.old_building_name_forms = building.utg_name
Beispiel #7
0
    def apply(self, bill=None):
        building = buildings_storage.get_by_person_id(self.person.id)

        if building is None or building.state.is_DESTROYED:
            return

        building.set_utg_name(self.new_building_name_forms)
        building.save()
Beispiel #8
0
    def apply(self, bill=None):
        building = buildings_storage.get_by_person_id(self.person.id)

        if building is None or building.state.is_DESTROYED:
            return

        building.set_utg_name(self.new_building_name_forms)
        building.save()
Beispiel #9
0
    def amortization_delta(self, turns_number):
        from the_tale.game.map.places.storage import buildings_storage

        buildings_number = sum(buildings_storage.get_by_person_id(person.id) is not None
                               for person in self.place.persons)

        per_one_building = float(turns_number) / c.TURNS_IN_HOUR * c.BUILDING_AMORTIZATION_SPEED
        return per_one_building * c.BUILDING_AMORTIZATION_MODIFIER**(buildings_number-1)
Beispiel #10
0
    def __init__(self, building_name_forms=None, **kwargs):
        super(BuildingDestroy, self).__init__(**kwargs)

        self.building_name_forms = building_name_forms

        if self.building_name_forms is None:
            building = buildings_storage.get_by_person_id(self.person_id)
            if building is not None:
                self.building_name_forms = building.utg_name
Beispiel #11
0
    def __init__(self, building_name_forms=None, **kwargs):
        super(BuildingDestroy, self).__init__(**kwargs)

        self.building_name_forms = building_name_forms

        if self.building_name_forms is None:
            building = buildings_storage.get_by_person_id(self.person_id)
            if building is not None:
                self.building_name_forms = building.utg_name
Beispiel #12
0
    def __init__(self, old_building_name_forms=None, new_building_name_forms=None, **kwargs):
        super(BuildingRenaming, self).__init__(**kwargs)

        self.old_building_name_forms = old_building_name_forms
        self.new_building_name_forms = new_building_name_forms

        if self.old_building_name_forms is None:
            building = buildings_storage.get_by_person_id(self.person_id)
            if building is not None:
                self.old_building_name_forms = building.utg_name
Beispiel #13
0
    def move_out_game(self):
        self._model.out_game_at = datetime.datetime.now()
        self._model.state = PERSON_STATE.OUT_GAME

        self.place.persons_changed_at_turn = TimePrototype.get_current_turn_number()

        building = buildings_storage.get_by_person_id(self.id)

        if building:
            building.destroy()
Beispiel #14
0
    def move_out_game(self):
        self._model.out_game_at = datetime.datetime.now()
        self._model.state = PERSON_STATE.OUT_GAME

        self.place.persons_changed_at_turn = TimePrototype.get_current_turn_number(
        )

        building = buildings_storage.get_by_person_id(self.id)

        if building:
            building.destroy()
Beispiel #15
0
    def amortization_delta(self, turns_number):
        from the_tale.game.map.places.storage import buildings_storage

        buildings_number = sum(
            buildings_storage.get_by_person_id(person.id) is not None
            for person in self.place.persons)

        per_one_building = float(
            turns_number) / c.TURNS_IN_HOUR * c.BUILDING_AMORTIZATION_SPEED
        return per_one_building * c.BUILDING_AMORTIZATION_MODIFIER**(
            buildings_number - 1)
Beispiel #16
0
    def __init__(self,
                 old_building_name_forms=None,
                 new_building_name_forms=None,
                 **kwargs):
        super(BuildingRenaming, self).__init__(**kwargs)

        self.old_building_name_forms = old_building_name_forms
        self.new_building_name_forms = new_building_name_forms

        if self.old_building_name_forms is None:
            building = buildings_storage.get_by_person_id(self.person_id)
            if building is not None:
                self.old_building_name_forms = building.utg_name
Beispiel #17
0
    def initialize_with_user_data(self, user_form):
        super(BuildingDestroy, self).initialize_with_user_data(user_form)

        building = buildings_storage.get_by_person_id(self.person_id)
        if building is not None:
            self.building_name_forms = building.utg_name
Beispiel #18
0
    def initialize_with_user_data(self, user_form):
        super(BuildingDestroy, self).initialize_with_user_data(user_form)

        building = buildings_storage.get_by_person_id(self.person_id)
        if building is not None:
            self.building_name_forms = building.utg_name
Beispiel #19
0
 def _person_has_building(cls, place, person):  # pylint: disable=W0613
     return buildings_storage.get_by_person_id(person.id) is not None
Beispiel #20
0
 def mastery(self):
     mastery = PROFESSION_TO_RACE_MASTERY[self.type.value][self.race.value]
     building = buildings_storage.get_by_person_id(self.id)
     if building:
         mastery += c.BUILDING_MASTERY_BONUS * building.integrity
     return min(mastery, 1)
Beispiel #21
0
 def mastery(self):
     mastery = PROFESSION_TO_RACE_MASTERY[self.type.value][self.race.value]
     building = buildings_storage.get_by_person_id(self.id)
     if building:
         mastery += c.BUILDING_MASTERY_BONUS * building.integrity
     return min(mastery, 1)
Beispiel #22
0
    def has_building(self): return buildings_storage.get_by_person_id(self.id) is not None

    @property
Beispiel #23
0
 def has_building(self):
     return buildings_storage.get_by_person_id(self.id) is not None
Beispiel #24
0
 def has_meaning(self):
     return self.person and self.person.in_game and buildings_storage.get_by_person_id(
         self.person.id) is None
Beispiel #25
0
 def _person_has_building(cls, place, person): # pylint: disable=W0613
     return buildings_storage.get_by_person_id(person.id) is not None
Beispiel #26
0
 def building(self):
     return buildings_storage.get_by_person_id(self.person.id)
Beispiel #27
0
 def has_meaning(self):
     return self.person and self.person.in_game and buildings_storage.get_by_person_id(self.person.id) is None
Beispiel #28
0
 def building(self):
     return buildings_storage.get_by_person_id(self.person.id)