Skip to main content

Rampant on the Tracks's Track generation logic, leveraging Voronout and optimized for a web service.

Project description

RampantTrackGeneration is..

.. the Track generation logic for Rampant on the Tracks.

The logic is invoked by calling

@staticmethod
def generateTrack(
    diagramWidth: int,
    diagramHeight: int,
    numWalkersOnTrack: int,
    numDestinationsOnTrack: int,
    diagramEdgePercentageToProcess: float, 
    newConnectionAngleMinQuantile: float, 
    lonelyConnectionMinLengthQuantile: float, 
    connectionLengthVertexPadding: float, 
    connectionLengthNodeBuffer: float
) -> Track:

in TrackGenerator.

Track

@dataclass(frozen=True)
class Track:
    nodes: dict[uuid4, Point]
    stops: dict[uuid4, tuple[Point]]
    edges: dict[uuid4, EdgeVertexInfo]

describes a set of edges, each a connection between two Points. nodes are the Points - stops are intervals on each edge, a gameplay mechanic that'll be elaborated later.

generateTrack derives the Track from a randomly generated Voronoi diagram.

It preserves the organic appeal of the diagram's shape - connectivity of varying lengths between unevenly spaced points - and goes on to enhance that by removing a subset of the smallest edges, replacing them with longer " reconnections ". The reconnections' intersections with other edges are calculated. Intersections that could be removed without newly isolating either of the involved Points are removed - this, and further trimming, increase the variance of the resulting Track's shape and its appeal in both visual and gameplay terms.

It uses Voronout to generate the diagram and networkX to model the diagram's transformation into a Track.

RampantTrackGeneration works by..

.. doing the following:

  • calculating numRegions (numWalkersOnTrack * numDestinationsOnTrack * 2)
  • generating #numRegions Voronoi diagram sites (0 <= x <= diagramWidth, 0 <= y <= diagramHeight)
  • generating the Voronoi diagram
  • using newConnectionAngleMinQuantile to calculate initialDiagramMinAcceptableAngle, the minimum angle any new reconnection should make with any of the edges at either of its vertices
    • rejecting any reconnection that does not satisfy that constraint minimizes the probability of getting Track edges that make awkwardly small angles with other edges
  • reconnecting diagramEdgePercentageToProcess * 100% of the smallest edges in the diagram
  • removing all intersection edges created by reconnection that can be safely removed
  • removing all " lonely " edges (ones where one vertex is only connected to that edge) with length <= lonelyConnectionMinLengthQuantile * 100% of all edge lengths
  • placing Stops on the remaining edges
    • to avoid the awkwardness of placing on " too small edges ", we only place on edges whose length is greater than (connectionLengthVertexPadding + connectionLengthNodeBuffer) * 100% of edges
    • to space Stops organically on an edge, we place them at least connectionLengthVertexPadding * 100% of the edge length away from either of points - and make the distance between each Stop at least connectionLengthNodeBuffer * 100% of the edge length

The resulting enhancement can be seen in the below illustration of Voronoi diagram -> Track:

GIF visualizing TrackGeneration.generateTrack()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rampanttrackgeneration-0.0.1.1.1.tar.gz (3.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rampanttrackgeneration-0.0.1.1.1-py3-none-any.whl (14.4 kB view details)

Uploaded Python 3

File details

Details for the file rampanttrackgeneration-0.0.1.1.1.tar.gz.

File metadata

File hashes

Hashes for rampanttrackgeneration-0.0.1.1.1.tar.gz
Algorithm Hash digest
SHA256 6cf9cd35b7f9f21e3ffa3bb91d3ec7c28801bb40c10cd37dc4d66c69705810a8
MD5 e568a8c7c48313d484ca0a4ffe967a86
BLAKE2b-256 975ee247e59f8575964e3100c08bf02ccd2678b904ed88306c37c59f9f8aa11b

See more details on using hashes here.

File details

Details for the file rampanttrackgeneration-0.0.1.1.1-py3-none-any.whl.

File metadata

File hashes

Hashes for rampanttrackgeneration-0.0.1.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 0b232dc0cba9b63f207f8a75e0dda1b81cffe6d1e08f82898a8bc62405810a35
MD5 0d4bba3f89502f2c08dcd28e9c0cb2bb
BLAKE2b-256 cc44af3a2c14e1bcfc69b261b3b29c4d0348bf4c131c356dd66df4c732225e8e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page