game_qu.gui_components.component API documentation

# Module `game_qu.gui_components.component`

Expand source code

    from game_qu.base.history_keeper import HistoryKeeper
    from game_qu.base.velocity_calculator import VelocityCalculator
    from game_qu.gui_components.dimensions import Dimensions
    from game_qu.base.utility_functions import load_image, render_image, render_rectangle, mouse_is_clicked, \
        is_mouse_collision, do_nothing
    from game_qu.base.id_creator import id_creator
    from game_qu.base.events import Event

    class Component(Dimensions):
        """ The components that are added to the game's window. If a screen's get_components() method returns a component,
            that components run and render methods will be called"""

        color = None
        path_to_image = None
        name = ""
        is_addable = True
        is_runnable = True  # Sometimes the screen has to run the player, so some components shouldn't be run
        last_frame_id_when_visible = 0
        image_length = 1
        image_height = 1

        # So these functions by default do nothing when called
        mouse_enter_function = do_nothing
        mouse_exit_function = do_nothing
        mouse_enter_event = None
        mouse_exit_event = None

        def __init__(self, path_to_image=""):
            """Initializes the object and loads an image if the path_to_image is not empty"""

            self.path_to_image = path_to_image

            if path_to_image != "":
                self.image_length, self.image_height = load_image(path_to_image)

            self.name = id_creator.get_unique_id()
            self.mouse_enter_event = Event()
            self.mouse_exit_event = Event()

        def run(self):
            """Runs everything the component needs every game cycle"""

            self.mouse_enter_event.run(is_mouse_collision(self))
            self.mouse_exit_event.run(not is_mouse_collision(self))

            # 'is_click()' in this circumstance means whether the mouse has either first exited this component or first
            # entered this component
            if self.mouse_enter_event.is_click():
                self.mouse_enter_function()

            if self.mouse_exit_event.is_click():
                self.mouse_exit_function()

        def render(self):
            """ Renders the component onto the screen- it will either render the image if 'self.path_to_image' is not empty
                otherwise it will render a rectangle with the color from 'self.color'"""

            if self.path_to_image != "":
                render_image(self.path_to_image, self.left_edge, self.top_edge, self.length, self.height)

            else:
                render_rectangle(self.left_edge, self.top_edge, self.length, self.height, self.color)

            self.last_frame_id_when_visible = HistoryKeeper.get_frame_id(VelocityCalculator.current_cycle_number)

        def got_clicked(self):
            """
                 Returns:
                    bool: the mouse is over the component and the mouse was clicked"""

            was_visible_last_cycle = self.last_frame_id_when_visible == HistoryKeeper.last_frame_id
            return mouse_is_clicked() and is_mouse_collision(self) and was_visible_last_cycle

        def get_scaled_dimensions(self, unscaled_length, unscaled_height):
            """
                 Returns:
                    list[float]: [scaled_length, scaled_height]; the length and height of the image that is scaled by the
                    smallest of the two, so there is no stretching"""

            horizontal_scale_factor = unscaled_length / self.image_length
            vertical_scale_factor = unscaled_height / self.image_height

            smaller_scale_factor = horizontal_scale_factor if horizontal_scale_factor < vertical_scale_factor else vertical_scale_factor

            return [self.image_length * smaller_scale_factor, self.image_height * smaller_scale_factor]

        def set_mouse_functions(self, mouse_enter_function, mouse_exit_function):
            """Sets the functions that are called when the mouse enters and exits the component"""

            self.set_mouse_enter_function(mouse_enter_function)
            self.mouse_exit_function(mouse_exit_function)

        def set_mouse_enter_function(self, mouse_enter_function):
            """Sets the action that happens when a mouse enters this object"""

            self.mouse_enter_function = mouse_enter_function

        def set_mouse_exit_function(self, mouse_exit_function):
            """Sets the function that is called when the mouse exits this object"""

            self.mouse_exit_function = mouse_exit_function

        def set_color(self, color):
            """ Sets the color of the component. Only matters if 'path_to_image' is not set. If 'path_to_image' is set,
                then the image will be rendered instead of the default rectangle with a color of 'color'"""

            self.color = color

        def get_color(self):
            return self.color

## Classes

`class Component (path_to_image='')`

  The components that are added to the game's window. If a screen's get_components() method returns a component, that components run and render methods will be called

  Initializes the object and loads an image if the path_to_image is not empty

  Expand source code

      class Component(Dimensions):
          """ The components that are added to the game's window. If a screen's get_components() method returns a component,
              that components run and render methods will be called"""

          color = None
          path_to_image = None
          name = ""
          is_addable = True
          is_runnable = True  # Sometimes the screen has to run the player, so some components shouldn't be run
          last_frame_id_when_visible = 0
          image_length = 1
          image_height = 1

          # So these functions by default do nothing when called
          mouse_enter_function = do_nothing
          mouse_exit_function = do_nothing
          mouse_enter_event = None
          mouse_exit_event = None

          def __init__(self, path_to_image=""):
              """Initializes the object and loads an image if the path_to_image is not empty"""

              self.path_to_image = path_to_image

              if path_to_image != "":
                  self.image_length, self.image_height = load_image(path_to_image)

              self.name = id_creator.get_unique_id()
              self.mouse_enter_event = Event()
              self.mouse_exit_event = Event()

          def run(self):
              """Runs everything the component needs every game cycle"""

              self.mouse_enter_event.run(is_mouse_collision(self))
              self.mouse_exit_event.run(not is_mouse_collision(self))

              # 'is_click()' in this circumstance means whether the mouse has either first exited this component or first
              # entered this component
              if self.mouse_enter_event.is_click():
                  self.mouse_enter_function()

              if self.mouse_exit_event.is_click():
                  self.mouse_exit_function()

          def render(self):
              """ Renders the component onto the screen- it will either render the image if 'self.path_to_image' is not empty
                  otherwise it will render a rectangle with the color from 'self.color'"""

              if self.path_to_image != "":
                  render_image(self.path_to_image, self.left_edge, self.top_edge, self.length, self.height)

              else:
                  render_rectangle(self.left_edge, self.top_edge, self.length, self.height, self.color)

              self.last_frame_id_when_visible = HistoryKeeper.get_frame_id(VelocityCalculator.current_cycle_number)

          def got_clicked(self):
              """
                   Returns:
                      bool: the mouse is over the component and the mouse was clicked"""

              was_visible_last_cycle = self.last_frame_id_when_visible == HistoryKeeper.last_frame_id
              return mouse_is_clicked() and is_mouse_collision(self) and was_visible_last_cycle

          def get_scaled_dimensions(self, unscaled_length, unscaled_height):
              """
                   Returns:
                      list[float]: [scaled_length, scaled_height]; the length and height of the image that is scaled by the
                      smallest of the two, so there is no stretching"""

              horizontal_scale_factor = unscaled_length / self.image_length
              vertical_scale_factor = unscaled_height / self.image_height

              smaller_scale_factor = horizontal_scale_factor if horizontal_scale_factor < vertical_scale_factor else vertical_scale_factor

              return [self.image_length * smaller_scale_factor, self.image_height * smaller_scale_factor]

          def set_mouse_functions(self, mouse_enter_function, mouse_exit_function):
              """Sets the functions that are called when the mouse enters and exits the component"""

              self.set_mouse_enter_function(mouse_enter_function)
              self.mouse_exit_function(mouse_exit_function)

          def set_mouse_enter_function(self, mouse_enter_function):
              """Sets the action that happens when a mouse enters this object"""

              self.mouse_enter_function = mouse_enter_function

          def set_mouse_exit_function(self, mouse_exit_function):
              """Sets the function that is called when the mouse exits this object"""

              self.mouse_exit_function = mouse_exit_function

          def set_color(self, color):
              """ Sets the color of the component. Only matters if 'path_to_image' is not set. If 'path_to_image' is set,
                  then the image will be rendered instead of the default rectangle with a color of 'color'"""

              self.color = color

          def get_color(self):
              return self.color

  ### Ancestors

  - Dimensions

  ### Subclasses

  - Ball
  - Player
  - HUD
  - Screen
  - TextBox

  ### Class variables

  `var color`
  `var image_height`
  `var image_length`
  `var is_addable`
  `var is_runnable`
  `var last_frame_id_when_visible`
  `var mouse_enter_event`
  `var mouse_exit_event`
  `var name`
  `var path_to_image`

  ### Methods

  `def get_color(self)`
    Expand source code

        def get_color(self):
            return self.color

  `def get_scaled_dimensions(self, unscaled_length, unscaled_height)`

    ## Returns

    `list[float]`
      [scaled_length, scaled_height]; the length and height of the image that is scaled by the

    smallest of the two, so there is no stretching

    Expand source code

        def get_scaled_dimensions(self, unscaled_length, unscaled_height):
            """
                 Returns:
                    list[float]: [scaled_length, scaled_height]; the length and height of the image that is scaled by the
                    smallest of the two, so there is no stretching"""

            horizontal_scale_factor = unscaled_length / self.image_length
            vertical_scale_factor = unscaled_height / self.image_height

            smaller_scale_factor = horizontal_scale_factor if horizontal_scale_factor < vertical_scale_factor else vertical_scale_factor

            return [self.image_length * smaller_scale_factor, self.image_height * smaller_scale_factor]

  `def got_clicked(self)`

    ## Returns

    `bool`
      the mouse is over the component and the mouse was clicked
    Expand source code

        def got_clicked(self):
            """
                 Returns:
                    bool: the mouse is over the component and the mouse was clicked"""

            was_visible_last_cycle = self.last_frame_id_when_visible == HistoryKeeper.last_frame_id
            return mouse_is_clicked() and is_mouse_collision(self) and was_visible_last_cycle

  `def mouse_enter_function(*args)`

    This function does absolutely nothing (useful if you want to have a command and have it by default do nothing)

    Expand source code

        def do_nothing(*args):
            """This function does absolutely nothing (useful if you want to have a command and have it by default do nothing)"""

            pass

  `def mouse_exit_function(*args)`

    This function does absolutely nothing (useful if you want to have a command and have it by default do nothing)

    Expand source code

        def do_nothing(*args):
            """This function does absolutely nothing (useful if you want to have a command and have it by default do nothing)"""

            pass

  `def render(self)`

    Renders the component onto the screen- it will either render the image if 'self.path_to_image' is not empty otherwise it will render a rectangle with the color from 'self.color'

    Expand source code

        def render(self):
            """ Renders the component onto the screen- it will either render the image if 'self.path_to_image' is not empty
                otherwise it will render a rectangle with the color from 'self.color'"""

            if self.path_to_image != "":
                render_image(self.path_to_image, self.left_edge, self.top_edge, self.length, self.height)

            else:
                render_rectangle(self.left_edge, self.top_edge, self.length, self.height, self.color)

            self.last_frame_id_when_visible = HistoryKeeper.get_frame_id(VelocityCalculator.current_cycle_number)

  `def run(self)`

    Runs everything the component needs every game cycle

    Expand source code

        def run(self):
            """Runs everything the component needs every game cycle"""

            self.mouse_enter_event.run(is_mouse_collision(self))
            self.mouse_exit_event.run(not is_mouse_collision(self))

            # 'is_click()' in this circumstance means whether the mouse has either first exited this component or first
            # entered this component
            if self.mouse_enter_event.is_click():
                self.mouse_enter_function()

            if self.mouse_exit_event.is_click():
                self.mouse_exit_function()

  `def set_color(self, color)`

    Sets the color of the component. Only matters if 'path_to_image' is not set. If 'path_to_image' is set, then the image will be rendered instead of the default rectangle with a color of 'color'

    Expand source code

        def set_color(self, color):
            """ Sets the color of the component. Only matters if 'path_to_image' is not set. If 'path_to_image' is set,
                then the image will be rendered instead of the default rectangle with a color of 'color'"""

            self.color = color

  `def set_mouse_enter_function(self, mouse_enter_function)`

    Sets the action that happens when a mouse enters this object

    Expand source code

        def set_mouse_enter_function(self, mouse_enter_function):
            """Sets the action that happens when a mouse enters this object"""

            self.mouse_enter_function = mouse_enter_function

  `def set_mouse_exit_function(self, mouse_exit_function)`

    Sets the function that is called when the mouse exits this object

    Expand source code

        def set_mouse_exit_function(self, mouse_exit_function):
            """Sets the function that is called when the mouse exits this object"""

            self.mouse_exit_function = mouse_exit_function

  `def set_mouse_functions(self, mouse_enter_function, mouse_exit_function)`

    Sets the functions that are called when the mouse enters and exits the component

    Expand source code

        def set_mouse_functions(self, mouse_enter_function, mouse_exit_function):
            """Sets the functions that are called when the mouse enters and exits the component"""

            self.set_mouse_enter_function(mouse_enter_function)
            self.mouse_exit_function(mouse_exit_function)

  ### Inherited members

  - `Dimensions`:
    - `bottom_edge`
    - `horizontal_midpoint`
    - `number_set_dimensions`
    - `percentage_set_dimensions`
    - `right_edge`
    - `vertical_midpoint`