Ejemplo n.º 1
0
 def __init__(self,
              center: List[int],
              color: List[int],
              font: pygame.font.Font, 
              text: str, 
              pressed_color: List[int],
              padding: List[int],
              text_color: Optional[List[int]] = [0,0,0],
              on_click: Optional[Callable] = (lambda: None),
              on_press: Optional[Callable] = (lambda: None),
              on_hold: Optional[Callable] = (lambda: None), 
              on_release: Optional[Callable] = (lambda: None)):
     
     def onpress():
         self.change_press_color()
         on_press()
     
     def onrelease():
         self.change_release_color()
         on_release()
     
     super().__init__(center, 
                      color,
                      [],
                      on_click, 
                      onpress, 
                      on_hold, 
                      onrelease)
     
     self.base_color = color
     self.pressed_color = pressed_color
     self.text = TextObject(center, color, font, text)
     self.padding = padding
     self.__build__()
Ejemplo n.º 2
0
class Button(Clickable): 
    def __init__(self,
                 center: List[int],
                 color: List[int],
                 font: pygame.font.Font, 
                 text: str, 
                 pressed_color: List[int],
                 padding: List[int],
                 text_color: Optional[List[int]] = [0,0,0],
                 on_click: Optional[Callable] = (lambda: None),
                 on_press: Optional[Callable] = (lambda: None),
                 on_hold: Optional[Callable] = (lambda: None), 
                 on_release: Optional[Callable] = (lambda: None)):
        
        def onpress():
            self.change_press_color()
            on_press()
        
        def onrelease():
            self.change_release_color()
            on_release()
        
        super().__init__(center, 
                         color,
                         [],
                         on_click, 
                         onpress, 
                         on_hold, 
                         onrelease)
        
        self.base_color = color
        self.pressed_color = pressed_color
        self.text = TextObject(center, color, font, text)
        self.padding = padding
        self.__build__()
    
    def __build__(self):
        self.text.center = self.center
        self.text.__build__()
        p_x, p_y = self.padding
        left, top, width, height = list(self.text.text_rect)
        self.points = np.array([[left - p_x, top - p_y],
                                [left + width + p_x, top - p_y],
                                [left + width + p_x, top + height + p_y],
                                [left - p_x, top + height + p_y]])
    
    def change_press_color(self):
        self.color = self.pressed_color
    
    def change_release_color(self): 
        self.color = self.base_color
          
    def draw(self, screen: pygame.display):
        if self.is_visible:
            pygame.draw.polygon(screen, self.color, self.points)
            self.text.draw(screen)
Ejemplo n.º 3
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import pygame

min_dist_tag = TextObject([0, 0], [255, 0, 0], pygame.font.SysFont(
    'arial', 20), 'Minimum distance(px):    {}'.format(params['min_dist']))


def adj_min_dist_func():
    params.update({
        'min_dist':
        max(20, min(50, adjs['delta_min_dist'] + params['min_dist']))
    })
    min_dist_tag.set_text('Minimum distance(px):    {}'.format(
        params['min_dist']))
    min_dist_tag.__build__()
    pygame.time.wait(150)


adjust_min_dist = Button([0, 0], [255, 0, 0],
                         pygame.font.SysFont('arial', 20),
                         'Adjust Min Distance', [0, 255, 0], [30, 10],
                         on_hold=adj_min_dist_func)
Ejemplo n.º 4
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import numpy as np
import pygame

influence_tag = TextObject([0, 0], [255, 0, 0], pygame.font.SysFont(
    'arial', 20), 'Visual perception(px):    {}'.format(params['influence']))


def adj_influence_func():
    params.update({
        'influence':
        max(20, min(800, adjs['delta_influence'] + params['influence']))
    })
    influence_tag.set_text('Visual perception(px):    {}'.format(
        params['influence']))
    influence_tag.__build__()
    pygame.time.wait(150)


adjust_influence = Button([0, 0], [255, 0, 0],
                          pygame.font.SysFont('arial', 20),
                          'Adjust Influence', [0, 255, 0], [30, 10],
                          on_hold=adj_influence_func)
Ejemplo n.º 5
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import pygame

noise_tag = TextObject([0, 0], [255, 0, 0], pygame.font.SysFont('arial', 20),
                       'Noise Bounds:    +-{}'.format(params['noise']))


def adj_noise_func():
    params.update(
        {'noise': max(0, min(30, adjs['delta_noise'] + params['noise']))})
    noise_tag.set_text('Noise Bounds:    +-{}'.format(params['noise']))
    noise_tag.__build__()
    pygame.time.wait(150)


adjust_noise = Button([0, 0], [255, 0, 0],
                      pygame.font.SysFont('arial', 20),
                      'Adjust Noise', [0, 255, 0], [30, 10],
                      on_hold=adj_noise_func)

toggle_noise_adj_direction = ToggleButton(
    [0, 0], [[255, 0, 0], [0, 255, 0]],
    pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10],
Ejemplo n.º 6
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import numpy as np
import pygame

jitter_tag = TextObject([0,0],
                           [255, 0, 0],
                           pygame.font.SysFont('arial', 20),
                           'Jitter (Radians):    PI/{}'.format(params['jitter']))

def adj_jitter_func():
    params.update({'jitter' : max(0, min(100, adjs['delta_jitter'] + params['jitter']))})
    if params['jitter'] > 0: jitter_tag.set_text('Jitter (Radians):    PI/{}'.format(params['jitter']))
    else: jitter_tag.set_text('Jitter (Radians):    OFF')
    jitter_tag.__build__()
    pygame.time.wait(150)

adjust_jitter = Button([0, 0],
                       [255, 0, 0],
                       pygame.font.SysFont('arial', 20),
                       'Adjust jitter',
                       [0, 255, 0],
                       [30, 10],
                       on_hold = adj_jitter_func)
Ejemplo n.º 7
0
from config import window_size
from config import params

from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import pygame

always_limit_speed_tag = TextObject([0, 0], [255, 0, 0],
                                    pygame.font.SysFont('arial', 20),
                                    'Always Limit Speed:   ')

toggle_always_limit_speed = ToggleButton(
    [0, 0], [[255, 0, 0], [255, 0, 0]],
    pygame.font.SysFont('arial', 20), ['ACTIVE', 'INACTIVE'], [30, 10],
    on_click=lambda: params.update({'always_limit_speed': False}) if params[
        'always_limit_speed'] else params.update({'always_limit_speed': True}))

always_limit_speed_row = RowBorder(
    [window_size[0] // 4, 590], [0, 255, 255], 950, 10,
    [always_limit_speed_tag, toggle_always_limit_speed])
Ejemplo n.º 8
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import numpy as np
import pygame

cohesion_factor_tag = TextObject([0, 0], [255, 0, 0],
                                 pygame.font.SysFont('arial', 20),
                                 'Cohesion Factor:    {:.2f}'.format(
                                     round(params['cohesion_factor'], 2)))


def adj_cohesion_factor_func():
    params.update({
        'cohesion_factor':
        max(
            0,
            min(0.99,
                adjs['delta_cohesion_factor'] + params['cohesion_factor']))
    })
    cohesion_factor_tag.set_text('Cohesion Factor:    {:.2f}'.format(
        round(params['cohesion_factor'], 2)))
    cohesion_factor_tag.__build__()
    pygame.time.wait(150)
Ejemplo n.º 9
0
from typing import List
from boid import Boid

demo_boid = Boid([1425, 950],
                 params['max_speed'],
                 params['influence'],
                 params['min_dist'],
                 params['obj_margin'],
                 window_size,
                 params['cohesion_factor'],
                 params['separation_factor'],
                 params['align_factor'],
                 random_theta=False)

jitter_demo_text = TextObject([demo_boid.center[0], demo_boid.center[1] - 20],
                              [0, 0, 0], pygame.font.SysFont('arial', 20),
                              'Jitter Demo')

demo_boid.__jitter__(np.pi / (2 * params['jitter']))

#Speed line
speed_offset_x = 175
speed_offset_y = 50
speed_p1 = [
    demo_boid.center[0] - speed_offset_x, demo_boid.center[1] - speed_offset_y
]
speed_text = TextObject([
    demo_boid.center[0] - speed_offset_x,
    demo_boid.center[1] - speed_offset_y + 10 - params['max_speed']
], [0, 0, 0], pygame.font.SysFont('arial', 20), 'Speed')
#Perception line
Ejemplo n.º 10
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import numpy as np
import pygame

align_factor_tag = TextObject([0, 0], [255, 0, 0],
                              pygame.font.SysFont('arial', 20),
                              'Alignment Factor:    {:.2f}'.format(
                                  round(params['align_factor'], 2)))


def adj_align_factor_func():
    params.update({
        'align_factor':
        max(0, min(0.5, adjs['delta_align_factor'] + params['align_factor']))
    })
    align_factor_tag.set_text('Alignment Factor:    {:.2f}'.format(
        round(params['align_factor'], 2)))
    align_factor_tag.__build__()
    pygame.time.wait(150)


adjust_align_factor = Button([0, 0], [255, 0, 0],
                             pygame.font.SysFont('arial', 20),
Ejemplo n.º 11
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import pygame

max_speed_tag = TextObject([0, 0], [255, 0, 0],
                           pygame.font.SysFont('arial', 20),
                           'Max Speed(px):    {}'.format(params['max_speed']))


def adj_max_speed_func():
    params.update({
        'max_speed':
        max(1, min(30, params['max_speed'] + adjs['delta_max_speed']))
    })
    max_speed_tag.set_text('Max Speed(px):    {}'.format(params['max_speed']))
    max_speed_tag.__build__()
    pygame.time.wait(150)


adjust_max_speed = Button([0, 0], [255, 0, 0],
                          pygame.font.SysFont('arial', 20),
                          'Adjust Speed', [0, 255, 0], [30, 10],
                          on_hold=adj_max_speed_func)
Ejemplo n.º 12
0
from config import window_size
from config import params
from settings_ui.setting_config import adjs

from pygameui.clickable.button import Button
from pygameui.clickable.toggle_button import ToggleButton
from pygameui.text_object import TextObject
from pygameui.row_border import RowBorder

import numpy as np
import pygame

obj_margin_tag = TextObject([0,0],
                           [255, 0, 0],
                           pygame.font.SysFont('arial', 20),
                           'Object Margin(px):    {}'.format(params['obj_margin']))

def adj_obj_margin_func():
    params.update({'obj_margin' : max(75, min(250, adjs['delta_obj_margin'] + params['obj_margin']))})
    obj_margin_tag.set_text('Object Margin(px):    {}'.format(params['obj_margin']))
    obj_margin_tag.__build__()
    pygame.time.wait(150)

adjust_obj_margin = Button([0, 0],
                          [255, 0, 0],
                          pygame.font.SysFont('arial', 20),
                          'Adjust Object Margin',
                          [0, 255, 0],
                          [30, 10],
                          on_hold = adj_obj_margin_func)