Example #1
0
 def map_to_grid(self, position) -> tuple:
     return (int(
         utils.clamp(position.x, MAP_TILE_SIZE,
                     self.map_size.x - MAP_TILE_SIZE - 1) / GRID_CELL_SIZE),
             int(
                 utils.clamp(position.y, MAP_TILE_SIZE, self.map_size.y -
                             MAP_TILE_SIZE - 1) / GRID_CELL_SIZE))
Example #2
0
 def handle_mouse(self, event):
     if event.type == pygame.MOUSEBUTTONDOWN:
         # Right button (1) : Drag map
         if event.button == 3:
             self.screen_drag = True
             pygame.mouse.get_rel()
         # Left button (3) : Select creature
         if event.button == 1:
             click_pos = pygame.math.Vector2(pygame.mouse.get_pos())
             selection_pos = self.screen_to_map(click_pos)
             selection_rect = pygame.Rect(selection_pos - (8, 8), (16, 16))
             for c in self.creatures:
                 if c.rect.colliderect(selection_rect):
                     self.selected = c
     elif event.type == pygame.MOUSEBUTTONUP:
         if event.button == 3:
             self.screen_drag = False
     elif event.type == pygame.MOUSEMOTION:
         if self.screen_drag:
             self.screen_offset += pygame.math.Vector2(
                 pygame.mouse.get_rel()) / self.world_scale
     # Zoom
     elif event.type == pygame.MOUSEWHEEL:
         focus = self.screen_to_map((self.screen_size / 2).vector2)
         self.world_scale = utils.clamp(self.world_scale + 0.05 * event.y,
                                        *WORLD_SCALE)
         self.screen_offset += self.screen_to_map(
             (self.screen_size / 2).vector2) - focus
Example #3
0
 def handle_keyboard(self, event):
     # http://thepythongamebook.com/en:glossary:p:pygame:keycodes
     if event.type == pygame.KEYDOWN:
         # Simulation speed
         # - Faster
         if event.key == pygame.K_UP:
             self.speed = utils.clamp(self.speed + 1, *ENGINE_SPEED)
         if event.key == pygame.K_PAGEUP:
             self.speed = utils.clamp(self.speed + 10, *ENGINE_SPEED)
         # - Slower
         if event.key == pygame.K_DOWN:
             self.speed = utils.clamp(self.speed - 1, *ENGINE_SPEED)
         if event.key == pygame.K_PAGEDOWN:
             self.speed = utils.clamp(self.speed - 10, *ENGINE_SPEED)
         # - Reset
         if event.key == pygame.K_SPACE:
             self.speed = 30
         # Chart selection
         if event.key in (pygame.K_LSHIFT, pygame.K_RSHIFT):
             self.chart_active = next(self.chart.active)
         # Quit
         if event.key == pygame.K_ESCAPE:
             self.running = False
Example #4
0
 def clamp_map_position(
         self, position: pygame.math.Vector2) -> pygame.math.Vector2:
     return pygame.math.Vector2(
         utils.clamp(position.x, MAP_MARGIN, self.map_size.x - MAP_MARGIN),
         utils.clamp(position.y, MAP_MARGIN, self.map_size.y - MAP_MARGIN))
Example #5
0
 def mutate(self):
     vrange = (self.VMAX - self.VMIN) * self.MUTATION_RATIO
     return self.__class__(
         utils.clamp(self.value + random.uniform(-vrange, vrange),
                     self.VMIN, self.VMAX))
Example #6
0
 def __init__(self, value=None):
     if value is None:
         value = self.DEFAULT
     self.value = utils.clamp(value, self.VMIN, self.VMAX)
     self.cost = self._cost() * self.COST_RATIO