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__()
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)
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)
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)
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],
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)
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])
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)
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
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),
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)
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)