def redo_buttons(self, button_ids: list[str], building: BuildingBase):
        self.scatter = get_screen("BaseBuildScreen").ids["scatter"]
        # Hacky fix so its not got every time the scatter is transformed

        self.clear_buttons()

        self.custom_buttons_holder.add_widget(self.spacer1)

        button_id: str
        for button_id in button_ids:
            button = BetterButton(button_id=button_id,
                                  size_type="big",
                                  on_release=button_pressed,
                                  button_storage=building)
            self.custom_buttons_holder.add_widget(button)

        self.custom_buttons_holder.add_widget(self.spacer2)

        if building.movable:  # TODO: Fix problem of buttons going everywhere because of fix of positioning
            self.transform_button_1 = BetterButton(
                button_id="move",
                size_type="small",
                on_touch_down=self.button_touch_down,
                on_touch_move=self.button_touch_move,
                on_touch_up=self.button_touch_up,
                button_storage=building)
            self.transform_button_2 = BetterButton(
                button_id="rotate",
                size_type="small",
                on_touch_down=self.button_touch_down,
                on_touch_move=self.button_touch_move,
                on_touch_up=self.button_touch_up,
                button_storage=building)
            GlobalEvents.bind(on_scatter_transformed=lambda: self.
                              redo_building_move_buttons(building))

            self.move_buttons_holder.add_widget(self.transform_button_1)
            self.move_buttons_holder.add_widget(self.transform_button_2)

            # TODO: Find better solution
            Clock.schedule_once(
                lambda _elapsed_time: self.redo_building_move_buttons(building
                                                                      ), 0)

        self.log_deep_debug("Added buttons to self, they are",
                            self.custom_buttons_holder.children)
    def fix_transform_edges(self, touch: MotionEvent):
        (left, bottom), (width, height) = self.bbox
        right, top = left + width, bottom + height

        dx, dy, dz = 0, 0, 0

        if left > 0:
            dx = 0 - left

        elif right < graphics.width():
            dx = graphics.width() - right

        if bottom > 0:
            dy = 0 - bottom

        elif top < graphics.height():
            dy = graphics.height() - top

        self.apply_transform(Matrix().translate(dx, dy, dz))
        self.dispatch("on_transform_with_touch", touch)
        GlobalEvents.dispatch("on_scatter_transformed")
    def on_touch_down(self, touch: MotionEvent):
        if touch.is_mouse_scrolling:
            # dx, dy, dz = 0, 0, 0
            # z = self.scale

            if touch.button == 'scrolldown':

                if self.scale < self.scale_max:

                    nextScale = self.scale * (1 + self.scroll_sensitivity)
                    if nextScale < self.scale_max:
                        self.scale = nextScale

                    else:
                        self.scale = self.scale_max

            elif touch.button == 'scrollup':
                if self.scale > self.scale_min:

                    nextScale = self.scale * (1 - self.scroll_sensitivity)
                    if nextScale > self.scale_min:
                        self.scale = nextScale

                    else:
                        self.scale = self.scale_min

            else:
                self.log_warning(
                    "Touch event was sent and mouse was scrolling but not up or down - ",
                    touch)

            # bdz = self.scale - z
            # self.dispatch("on_transformed", dx, dy, dz)
            self.dispatch("on_transform_with_touch", touch)
            GlobalEvents.dispatch("on_scatter_transformed")

        else:
            ScatterLayout.on_touch_down(self, touch)

        self.fix_transform_edges(touch)
예제 #4
0
    def __init__(self, **kwargs):
        BetterLogger.__init__(self)
        FloatLayout.__init__(self, **kwargs)

        GlobalEvents.bind(mine_batch_finished=self.batch_finished)
        GlobalEvents.bind(remove_mine_finished_icon=self.remove_finished_icon)
        GlobalEvents.bind(on_scatter_transformed=self.update_positions)
    def __init__(self, **kwargs):
        BetterLogger.__init__(self)
        FloatLayout.__init__(self, **kwargs)

        self.create_renderer()
        if userSettings.get("debug", "building_hit_boxes"):
            self.bind(buildings=lambda _instance, _value: self.redraw_hit_boxes())
            GlobalEvents.bind(building_moved=lambda _instance, _x, _y: self.redraw_hit_boxes(),
                              building_rotated=lambda _instance, _rotation: self.redraw_hit_boxes())

        self.log_info("Created renderer, starting to create building objects")

        for building_id in gameData.get("placed_buildings"):
            building_info = gameData.get("placed_buildings", building_id)
            building_class = str_to_building[building_info.pop("type")]
            building = building_class(**building_info)
            building.id = building_id

            self.log_debug("Created building object for building", building_id, "with info", building_info)
            self.add_building(building)

        self.log_info("Created objects -", self.buildings)
 def on_rotation(self, _instance, value):
     self._obj.rotation.z = value
     GlobalEvents.dispatch("building_rotated", self, value)
 def on_y(self, _instance, value):
     self._obj.pos.y = value
     GlobalEvents.dispatch("building_moved", self, self.x, value)
 def on_x(self, _instance, value):
     self._obj.pos.x = value
     GlobalEvents.dispatch("building_moved", self, value, self.y)
    def mine_batch_finished(self):
        self.log_deep_debug("Finished mining batch of", self.mine_batch_amount,
                            self.mine_item)

        GlobalEvents.dispatch("mine_batch_finished", self)
    def reset(self):
        self.scale = 1
        self.rotation = 0
        self.pos = 0, 0

        GlobalEvents.dispatch("on_scatter_transformed")
예제 #11
0
 def done_removing(self):
     GlobalEvents.dispatch("remove_mine_finished_icon", self)