refactor(dpd): update dpd1

This commit is contained in:
Kristofers Solo 2025-01-01 17:32:27 +02:00
parent c68065abc7
commit 96f6289552
2 changed files with 213 additions and 14 deletions

View File

@ -1,5 +1,7 @@
#import "@preview/fletcher:0.5.3" as fletcher: diagram, node, edge
#import fletcher.shapes: diamond
#import fletcher.shapes: diamond, ellipse
#import "@preview/cetz:0.3.1"
#import cetz: draw
#let default-node-stroke = 1pt
#let default-edge-stroke = 1pt
@ -47,7 +49,7 @@
// Standard arrow edge
#let std-edge(..args) = {
edge(..args, "-|>", label-pos: 0.1, stroke: default-edge-stroke)
edge(label-pos: 0.1, stroke: default-edge-stroke, ..args, "-|>")
}
// Fork/parallel function
@ -121,3 +123,78 @@
elements
}
#let data-store(pos, text) = {
node(
pos,
text,
inset: 20pt,
stroke: default-node-stroke,
)
}
#let process(..args) = {
node(
inset: 10pt,
shape: ellipse,
stroke: default-node-stroke,
..args,
)
}
#let dpd-edge(..args) = {
edge(
label-pos: 0.5,
stroke: default-edge-stroke,
label-anchor: "center",
label-fill: white,
corner-radius: 4pt,
..args,
"-|>",
)
}
// Database shape
#let database(node, extrude) = {
let (w, h) = node.size
// Calculate dimensions for the cylinder parts
let ellipse-height = h * 0.15
let cap-ratio = 0.2 // Cap height will be 30% of width
let cap-height = w * cap-ratio
// Main body sides (without bottom line)
draw.line(
(-w, -h + cap-height), // Start at top-left
(-w, h - cap-height), // Left side
)
draw.line(
(w, h - cap-height), // To bottom-right
(w, -h + cap-height), // Right side
)
// Top ellipse
draw.circle(
(0, h - cap-height),
radius: (w, cap-height),
)
// Bottom elliptical cap (front arc only)
draw.arc(
(-w, -h + cap-height),
radius: (w, cap-height),
start: 180deg,
delta: 180deg,
)
}
#let dpd-database(..args) = {
node(
shape: database,
height: 4em,
stroke: default-node-stroke,
fill: white,
..args,
)
}

146
main.typ
View File

@ -193,11 +193,23 @@ brīža.
nepieciešams automātiskai spēles gaitas pārvaldībai. */
Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņa DPD
(sk. @fig:dpd-0)
(sk. @fig:dpd-0).
#figure(
caption: [\0. līmeņa DPD],
image("assets/images/dpd/dpd0.svg"),
diagram(
data-store((0, 0), [Spēlētājs]),
dpd-edge("rr,ddd,ll", [Ievades ierīces\ dati]),
process((0, 3), [Spēle], inset: 20pt),
dpd-edge(
"lll,uuu,rrr",
[Vizuālās\ izvades dati],
),
dpd-edge(
"l,uuu,r",
[Audio\ izvades dati],
),
),
) <dpd-0>
== Vispārējie ierobežojumi
@ -239,16 +251,16 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ
== Funkcionālās prasības
\1. līmeņa datu plūsmas diagramma (sk. @fig:dpd-1) ilustrē galvenos
procesus spēles "Maze Ascension" sistēmā.
Diagrammā attēloti septiņi galvenie procesi:
ievades apstrādāšanas modulis,
spēles stāvokļa pārvalības modulis,
Diagrammā attēloti seši galvenie procesi, viens izstrādes process un viens
ārējs (bibliotēkas) process(-i) process:
stāva pārvaldības modulis,
labirinta ģenerēšanas un pārvaldības moduļi,
spēlētāja modulis,
labirinta ģenerēšanas modulis,
spēles līmeņu pārvaldības modulis,
atveidošanas jeb renderēšanas un skaņas jeb audio moduļi.
spēles stāvokļa pārvalības modulis,
papildspēju modulis
un izstrādes rīku modulis.
Šie procesi mijiedarbojas ar vienu datu krātuvi -- operatīvo atmiņu (RAM) -- un vienu
ārējo lietotāju -- spēlētājs.
#todo("update module list")
Ievades apstrādes modulis uztver un apstrādā spēlētāja ievades datus.
Spēles stāvokļa modulis pārrauga vispārējo spēles stāvokli.
@ -264,12 +276,120 @@ Renderēšanas un audio moduļi pārvalda attiecīgi vizuālo un audio izvadi.
#figure(
caption: [\1. līmeņa DPD],
image("assets/images/dpd/dpd1.svg"),
diagram({
dpd-database((0, 0), [Operatīvā\ atmiņa], snap: -1)
dpd-edge(
"u,ull",
align(center)[Visi spēles\ dati],
shift: (-29pt, 0),
label-pos: 0.8,
) // dev_tools
dpd-edge(
"uuu",
align(center)[Visi spēles\ dati],
shift: -20pt,
) // bevy
dpd-edge("rru,u", [Stāva dati]) // floor
dpd-edge(
(2.5, 0),
align(center)[Labirinta\ konfigurācijas dati],
label-sep: -0.5em,
shift: -22pt,
) // hexlab
dpd-edge(
"rrd,d",
align(center)[Labirinta\ izkārtojuma dati],
shift: 20pt,
label-pos: 0.501,
label-sep: 4em,
) // maze
dpd-edge(
"d,drr",
align(center)[Labirinta\ konfigurācijas dati],
shift: (-29pt, 0),
label-pos: 0.7,
) // maze
dpd-edge(
"ddd",
align(center)[Spēlētaja\ dati],
shift: 10pt,
label-pos: 0.4,
) // player
dpd-edge(
"d,dll",
align(center)[Spēles\ stāvokļa dati],
shift: (29pt, 0),
label-pos: 0.7,
) // screns
dpd-edge(
(-2.5, 0),
align(center)[Papildspēju\ stāvokļa dati],
shift: 15pt,
label-sep: -0.5em,
) // power_ups
process(
(0, -3),
[Bevy],
inset: 20pt,
extrude: (-4pt, 0),
stroke: (thickness: 1pt, dash: "dashed"),
)
dpd-edge("uu", align(center)[Vizuālās\ izvades dati])
dpd-edge("l,uu,r", align(center)[Audio\ izvades dati])
dpd-edge("ddd", [Ievades dati], shift: (-20pt, -20pt), label-pos: 0.3)
data-store((0, -5), [Spēlētājs])
dpd-edge(
"r,dd,l",
align(center)[Neapstrādāti ievades\ ierīces dati],
label-sep: -0.3em,
)
process((-2, -2), [Izstrādes rīku\ modulis])
dpd-edge(
"d,drr",
align(center)[Atjaunoti\ spēles dati],
label-pos: 0.4,
)
process((2, -2), [Stāva pārvaldības\ modulis])
dpd-edge("ddll", align(center)[Atjaunoti\ stāva dati])
process((2.5, 0), [Labirinta\ ģenerēšanas\ modulis])
dpd-edge((0, 0), align(center)[Labirinta\ izkārtojuma dati], shift: -10pt)
process((2, 2), [Labirinta\ pārvaldības\ modulis])
dpd-edge(
"ll,uu",
align(center)[Labirinta dati],
label-pos: 0.3,
shift: (0, 22pt),
)
process((0, 3), [Spēlētāja\ modulis])
dpd-edge(
"uuu",
align(center)[Atjaunoti\ spēlētāja\ dati],
shift: 20pt,
label-pos: 0.3,
)
process((-2, 2), [Spēles stāvokļa\ pārvaldības modulis])
dpd-edge(
"u,urr",
align(center)[Atjaunoti spēles\ stāvokļa dati],
shift: (0, 10pt),
label-pos: 0.3,
)
process((-2.5, 0), [Papildspēju\ modulis])
dpd-edge((0, 0), align(center)[Papildspēju\ dati], shift: 15pt)
}),
) <dpd-1>
=== Funkciju sadalījums moduļos
Tabulā @tbl:function-modules ir sniegts visaptverošs spēles funkcionalitātes
Tabulā @tbl:function-modules[] ir sniegts visaptverošs spēles funkcionalitātes
sadalījums pa tās galvenajiem moduļiem. Katram modulim ir noteikti konkrēti
pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu.
@ -330,6 +450,8 @@ pienākumi, un tas ietver funkcijas, kas veicina kopējo spēles sistēmu.
[#link(<screen-F02>)[SSPMF02]],
[Attēlot sākumekrānu],
[#link(<screen-F03>)[SSPMF03]],
rowspanx(3)[Papildspēju modulis], // power_up
),
) <function-modules>