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