Promote BSPRoomGenerator.Configuration to RoomGenerator.Configuration

This configuration object can actually apply to all room generators.

Notably: copy the default configuration object before setting it to self.configuration.
This commit is contained in:
Eryn Wells 2023-02-10 21:12:12 -08:00
parent 643ab0990b
commit 9d00f3b638

View file

@ -1,4 +1,5 @@
import random
from copy import copy
from dataclasses import dataclass
from typing import List, Optional
@ -6,7 +7,7 @@ import numpy as np
import tcod
from ... import log
from ...geometry import Direction, Point, Rect, Size
from ...geometry import Point, Rect, Size
from ..room import Room, RectangularRoom
from ..tile import Empty, Floor, StairsUp, StairsDown, Wall
@ -14,8 +15,20 @@ from ..tile import Empty, Floor, StairsUp, StairsDown, Wall
class RoomGenerator:
'''Abstract room generator class.'''
def __init__(self, *, size: Size):
@dataclass
class Configuration:
number_of_rooms: int
minimum_room_size: Size
maximum_room_size: Size
DefaultConfiguration = Configuration(
number_of_rooms=30,
minimum_room_size=Size(7, 7),
maximum_room_size=Size(20, 20))
def __init__(self, *, size: Size, config: Optional[Configuration] = None):
self.size = size
self.configuration = config if config else copy(RoomGenerator.DefaultConfiguration)
self.rooms: List[Room] = []
self.up_stairs: List[Point] = []
self.down_stairs: List[Point] = []
@ -102,6 +115,8 @@ class BSPRoomGenerator(RoomGenerator):
class BSPRoomGenerator(RoomGenerator):
'''Generate a rooms-and-corridors style map with BSP.'''
def __init__(self, *, size: Size, config: Optional[RoomGenerator.Configuration] = None):
super().__init__(size=size, config=config)
self.rng: tcod.random.Random = tcod.random.Random()
def _generate(self) -> bool: