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 "@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-node-stroke = 1pt
#let default-edge-stroke = 1pt #let default-edge-stroke = 1pt
@ -47,7 +49,7 @@
// Standard arrow edge // Standard arrow edge
#let std-edge(..args) = { #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 // Fork/parallel function
@ -121,3 +123,78 @@
elements 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. */ 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 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( #figure(
caption: [\0. līmeņa DPD], 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> ) <dpd-0>
== Vispārējie ierobežojumi == 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 == Funkcionālās prasības
\1. līmeņa datu plūsmas diagramma (sk. @fig:dpd-1) ilustrē galvenos \1. līmeņa datu plūsmas diagramma (sk. @fig:dpd-1) ilustrē galvenos
procesus spēles "Maze Ascension" sistēmā. procesus spēles "Maze Ascension" sistēmā.
Diagrammā attēloti septiņi galvenie procesi: Diagrammā attēloti seši galvenie procesi, viens izstrādes process un viens
ievades apstrādāšanas modulis, ārējs (bibliotēkas) process(-i) process:
spēles stāvokļa pārvalības modulis, stāva pārvaldības modulis,
labirinta ģenerēšanas un pārvaldības moduļi,
spēlētāja modulis, spēlētāja modulis,
labirinta ģenerēšanas modulis, spēles stāvokļa pārvalības modulis,
spēles līmeņu pārvaldības modulis, papildspēju modulis
atveidošanas jeb renderēšanas un skaņas jeb audio moduļi. un izstrādes rīku modulis.
Šie procesi mijiedarbojas ar vienu datu krātuvi -- operatīvo atmiņu (RAM) -- un vienu Šie procesi mijiedarbojas ar vienu datu krātuvi -- operatīvo atmiņu (RAM) -- un vienu
ārējo lietotāju -- spēlētājs. ā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. 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. 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( #figure(
caption: [\1. līmeņa DPD], 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> ) <dpd-1>
=== Funkciju sadalījums moduļos === 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 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. 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]], [#link(<screen-F02>)[SSPMF02]],
[Attēlot sākumekrānu], [Attēlot sākumekrānu],
[#link(<screen-F03>)[SSPMF03]], [#link(<screen-F03>)[SSPMF03]],
rowspanx(3)[Papildspēju modulis], // power_up
), ),
) <function-modules> ) <function-modules>