'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) toggle_influence_adj_direction = ToggleButton( [0, 0], [[255, 0, 0], [0, 255, 0]], pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10], on_click=lambda: adjs.update( {'delta_influence': adjs['delta_influence'] * -1})) toggle_delta_influence = ToggleButton( [0, 0], [[255, 0, 0], [255, 0, 0], [255, 0, 0]], pygame.font.SysFont('arial', 20), ['1', '10', '100'], [30, 10], on_click=lambda: adjs.update( {'delta_influence': adjs['delta_influence'] * 10}) if -100 < adjs['delta_influence'] < 100 else adjs.update( {'delta_influence': np.sign(adjs['delta_influence'])}))
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) toggle_min_dist_adj_direction = ToggleButton( [0, 0], [[255, 0, 0], [0, 255, 0]], pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10], on_click=lambda: adjs.update( {'delta_min_dist': adjs['delta_min_dist'] * -1})) min_dist_row = RowBorder( [window_size[0] // 4, 240], [0, 255, 255], 950, 10, [min_dist_tag, adjust_min_dist, toggle_min_dist_adj_direction])
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], on_click=lambda: adjs.update({'delta_noise': adjs['delta_noise'] * -1})) noise_row = RowBorder([window_size[0] // 4, 730], [0, 255, 255], 950, 10, [noise_tag, adjust_noise, toggle_noise_adj_direction])
else: for boid in boids: boid.set_speed(params['max_speed']) boid.set_inf_2(params['influence']) boid.set_min_dist_2(params['min_dist']) boid.set_obj_margin_2(params['obj_margin']) boid.set_cohesion_factor(params['cohesion_factor']) boid.set_separation_factor(params['separation_factor']) boid.set_align_factor(params['align_factor']) state.update({'active screen' : ActiveScreen.Main}) settings = Button([0, 0], [255, 0, 0], pygame.font.SysFont('arial', 20), 'Settings', [0, 255, 0], [30, 10], on_click = on_click_settings) main_clickables = [settings] topbar = RowBorder([950, 30], [0,0,0], 1900, 10, main_clickables) def main_loop(screen: pygame.display, boids : List[Boid], screen_objects : List[ScreenObject], noise: int, always_limit_speed: bool, jitter: float): for obj in screen_objects: obj.draw(screen)
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) toggle_jitter_adj_direction = ToggleButton([0, 0], [[255, 0, 0], [0, 255, 0]], pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10], on_click = lambda: adjs.update({'delta_jitter' : adjs['delta_jitter'] * -1})) toggle_delta_jitter = ToggleButton([0, 0], [[255, 0, 0], [255, 0, 0]], pygame.font.SysFont('arial', 20), ['1', '10'],
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) adjust_cohesion_factor = Button([0, 0], [255, 0, 0], pygame.font.SysFont('arial', 20), 'Adjust Cohesion Factor', [0, 255, 0], [30, 10], on_hold=adj_cohesion_factor_func) toggle_cohesion_factor_adj_direction = ToggleButton( [0, 0], [[255, 0, 0], [0, 255, 0]], pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10], on_click=lambda: adjs.update( {'delta_cohesion_factor': adjs['delta_cohesion_factor'] * -1})) toggle_delta_cohesion_factor = ToggleButton( [0, 0], [[255, 0, 0], [255, 0, 0], [255, 0, 0]], pygame.font.SysFont('arial', 20), ['0.01', '0.1'], [30, 10], on_click=lambda: adjs.update({ 'delta_cohesion_factor': 0.1 * np.sign(adjs['delta_cohesion_factor'])
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), 'Adjust Alignment Factor', [0, 255, 0], [30, 10], on_hold=adj_align_factor_func) toggle_align_factor_adj_direction = ToggleButton( [0, 0], [[255, 0, 0], [0, 255, 0]], pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10], on_click=lambda: adjs.update( {'delta_align_factor': adjs['delta_align_factor'] * -1.0})) toggle_delta_align_factor = ToggleButton( [0, 0], [[255, 0, 0], [255, 0, 0], [255, 0, 0]], pygame.font.SysFont('arial', 20), ['0.01', '0.1'], [30, 10], on_click=lambda: adjs.update( {'delta_align_factor': 0.1 * np.sign(adjs['delta_align_factor'])}) if -0.05 < adjs['delta_align_factor'] < 0.05 else adjs.update( {'delta_align_factor': 0.01 * np.sign(adjs['delta_align_factor'])}))
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) toggle_max_speed_adj_direction = ToggleButton( [0, 0], [[255, 0, 0], [0, 255, 0]], pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10], on_click=lambda: adjs.update( {'delta_max_speed': adjs['delta_max_speed'] * -1})) max_speed_row = RowBorder( [window_size[0] // 4, 100], [0, 255, 255], 950, 10, [max_speed_tag, adjust_max_speed, toggle_max_speed_adj_direction])
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) toggle_obj_margin_adj_direction = ToggleButton([0, 0], [[255, 0, 0], [0, 255, 0]], pygame.font.SysFont('arial', 20), ['INCREASE', 'DECREASE'], [30, 10], on_click = lambda: adjs.update({'delta_obj_margin' : adjs['delta_obj_margin'] * -1})) toggle_delta_obj_margin = ToggleButton([0, 0], [[255, 0, 0], [255, 0, 0], [255, 0 ,0]], pygame.font.SysFont('arial', 20), ['1', '10', '100'],