feat: describe components

This commit is contained in:
Kristofers Solo 2024-12-30 21:23:04 +02:00
parent db6ce3325a
commit cd602f30c1
4 changed files with 358 additions and 70 deletions

View File

@ -7,22 +7,22 @@ typst:
- Haug - Haug
- Martin - Martin
- Typst Projekta Izstrādātāji - Typst Projekta Izstrādātāji
url: https://typst.app/ url: {value: "https://typst.app/", date: 2024-12-02}
hex_grid: hex-grid:
type: Web type: Web
title: Hexagonal Grids title: Hexagonal Grids
author: Red Blob Games author: Red Blob Games
url: {value: "https://www.redblobgames.com/grids/hexagons/", date: 2024-09-10} url: {value: "https://www.redblobgames.com/grids/hexagons/", date: 2024-09-15}
bevy_examples: bevy-examples:
type: Web type: Web
title: Bevy Examples title: Bevy Examples
author: author:
url: {value: "https://bevyengine.org/examples/", date: 2024-09-10} url: {value: "https://bevyengine.org/examples/", date: 2024-09-14}
bevy_cheatbook: bevy-cheatbook:
type: Web type: Web
title: Unofficial Bevy Cheat Book title: Unofficial Bevy Cheat Book
author: author:
url: {value: "https://bevy-cheatbook.github.io/", date: 2024-09-10} url: {value: "https://bevy-cheatbook.github.io/", date: 2024-09-14}
lvs_68: lvs_68:
type: Book type: Book
title: Programmatūras prasību specifikācijas ceļvedis title: Programmatūras prasību specifikācijas ceļvedis
@ -48,11 +48,11 @@ backtracking:
type: Web type: Web
title: Backtracking title: Backtracking
url: https://en.wikipedia.org/wiki/Backtracking url: https://en.wikipedia.org/wiki/Backtracking
maze_generation: maze-generation:
type: Web type: Web
title: Maze Generation title: Maze Generation
url: https://rosettacode.org/wiki/Maze_generation url: https://rosettacode.org/wiki/Maze_generation
bevy_quickstart: bevy-quickstart:
type: Web type: Web
title: Bevy New 2D title: Bevy New 2D
url: https://github.com/TheBevyFlock/bevy_new_2d url: https://github.com/TheBevyFlock/bevy_new_2d
@ -60,7 +60,7 @@ git:
type: Web type: Web
title: Versijas kontroles sistēmas git dokumentācija title: Versijas kontroles sistēmas git dokumentācija
url: https://git-scm.com/doc url: https://git-scm.com/doc
sem_ver: sem-ver:
type: Web type: Web
title: Semantiskā versiju veidošana title: Semantiskā versiju veidošana
url: https://semver.org/ url: https://semver.org/
@ -71,26 +71,6 @@ omg-uml:
date: 2015-03 date: 2015-03
url: https://www.omg.org/spec/UML/2.5/PDF url: https://www.omg.org/spec/UML/2.5/PDF
page-total: 794 page-total: 794
clippy:
type: Web
title: Clippy
author: Rust Projekta Izstādātāji
url: https://doc.rust-lang.org/clippy/usage.html
rustfmt:
type: Web
title: Rustfmt
author: Rust Projekta Izstādātāji
url: https://github.com/rust-lang/rustfmt
cargo-doc:
type: Web
title: cargo-doc
author: Rust Projekta Izstādātāji
url: https://doc.rust-lang.org/cargo/commands/cargo-doc.html
rust-style:
type: Web
title: Rust stila ceļvedis
author: Rust Projekta Izstādātāji
url: https://doc.rust-lang.org/nightly/style-guide/
hexlab: hexlab:
type: Web type: Web
title: Hexlab bibliotēka title: Hexlab bibliotēka
@ -101,14 +81,9 @@ hexlab-docs:
title: Hexlab bibliotēkas dokumentācija title: Hexlab bibliotēkas dokumentācija
author: Kristiāns Francis Cagulis author: Kristiāns Francis Cagulis
url: https://docs.rs/hexlab/latest/hexlab/ url: https://docs.rs/hexlab/latest/hexlab/
justfile:
type: Web
title: Just programmētāja rokasgrāmata
author: Casey Rodarmor
url: https://just.systems/man/en/
gh-release: gh-release:
type: Web type: Web
title: Par laidieniem title: About Releases
author: GitHub komanda author: GitHub komanda
url: https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases url: https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases
gh-actions: gh-actions:
@ -142,3 +117,27 @@ cargo-tarpaulin:
title: Tarpaulin title: Tarpaulin
author: xd009642 author: xd009642
url: https://crates.io/crates/cargo-tarpaulin url: https://crates.io/crates/cargo-tarpaulin
ecs:
type: Web
title: ECS
url: https://en.wikipedia.org/wiki/Entity_component_system
bevy-ecs:
type: Web
title: Bevy ECS
url: https://bevyengine.org/learn/quick-start/getting-started/ecs/
SRP:
type: Web
title: Single-responsibility principle
url: https://en.wikipedia.org/wiki/Single-responsibility_principle
SoC:
type: Web
title: Separation of concerns
url: https://en.wikipedia.org/wiki/Separation_of_concerns
bitflags:
type: Book
title: Patterns for Beginning Programmers
author: David Bernstein
chapter: Bit Flags
page-total: 197
page-range: 58-64
url: https://pressbooks.lib.jmu.edu/programmingpatterns/

View File

@ -11,7 +11,7 @@
#let project( #let project(
university: "", university: "",
faculty: "", faculty: "",
type: "", thesis_type: "",
title: [], title: [],
authors: (), authors: (),
advisor: "", advisor: "",
@ -104,7 +104,7 @@
upper( upper(
text( text(
size: 16pt, size: 16pt,
type, thesis_type,
), ),
), ),
) )
@ -150,6 +150,12 @@
) )
/* Title page config end */ /* Title page config end */
// Start page numbering
set page(
numbering: "1",
number-align: center,
)
// WARNING: remove before sending // WARNING: remove before sending
outline(title: "TODOs", target: figure.where(kind: "todo")) outline(title: "TODOs", target: figure.where(kind: "todo"))
@ -186,11 +192,18 @@
it it
} }
set ref(supplement: it => { }) // disable default reference suppliments // disable default reference suppliments
set ref(supplement: it => { })
// Custom show rule for references
show ref: it => { show ref: it => {
let el = it.element let el = it.element
if el != none and el.func() == heading { if el == none {
return it
}
if el.func() == heading {
return link( return link(
el.location(), el.location(),
numbering( numbering(
@ -200,6 +213,43 @@
) )
} }
if el.func() == figure {
let kind = el.kind
// Map for different kinds of supplements
let supplement_map = (
i-figured-table: "tab.",
i-figured-image: "att.",
)
// Get the supplement value properly
let supplement = if type(it.supplement) != function {
it.supplement
} else {
if kind in supplement_map {
supplement_map.at(kind)
} else {
""
}
}
// Create counter based on the kind
return link(
el.location(),
numbering(
el.numbering,
..counter(figure.where(kind: kind)).at(
el.location(),
),
) + if supplement != "" {
" " + supplement
} else {
""
},
)
}
// Default case for non-figure elements
it it
} }
/* --- Figure/Table config end --- */ /* --- Figure/Table config end --- */
@ -232,11 +282,6 @@
) )
/* ToC config end */ /* ToC config end */
// Start page numbering
set page(
numbering: "1",
number-align: center,
)
// show link: set text(fill: blue.darken(20%)) // show link: set text(fill: blue.darken(20%))

243
main.typ
View File

@ -9,7 +9,7 @@
#show: project.with( #show: project.with(
university: "Latvijas Universitāte", university: "Latvijas Universitāte",
faculty: "Eksakto zinātņu un tehnoloģiju fakultāte", faculty: "Eksakto zinātņu un tehnoloģiju fakultāte",
type: "Kvalifikācijas darbs", thesis_type: "Kvalifikācijas darbs",
title: [Spēles izstrāde, izmantojot\ Bevy spēļu dzinēju], title: [Spēles izstrāde, izmantojot\ Bevy spēļu dzinēju],
authors: ("Kristiāns Francis Cagulis, kc22015",), authors: ("Kristiāns Francis Cagulis, kc22015",),
advisor: "prof. Mg. dat. Jānis Iljins", advisor: "prof. Mg. dat. Jānis Iljins",
@ -21,7 +21,7 @@
/ Audio: Skaņas komponentes, kas ietver gan skaņas efektus, gan fona mūziku. / Audio: Skaņas komponentes, kas ietver gan skaņas efektus, gan fona mūziku.
/ CI/CD: nepārtraukta integrācija un nepārtraukta izvietošana; / CI/CD: nepārtraukta integrācija un nepārtraukta izvietošana;
/ DPD: datu plūsmas diagramma; / DPD: datu plūsmas diagramma;
/ ECS: entitāšu komponentu sistēma (angl. Entity-Component-System#footnote[https://en.wikipedia.org/wiki/Entity_component_system]); / ECS: entitāšu komponenšu sistēma (angl. Entity-Component-System#footnote[https://en.wikipedia.org/wiki/Entity_component_system]);
/ GitHub#footnote[https://en.wikipedia.org/wiki/GitHub]: izstrādātāju platforma, kas ļauj izstrādātājiem izveidot, glabāt, pārvaldīt un kopīgot savu kodu; / GitHub#footnote[https://en.wikipedia.org/wiki/GitHub]: izstrādātāju platforma, kas ļauj izstrādātājiem izveidot, glabāt, pārvaldīt un kopīgot savu kodu;
/ Jaucējtabula#footnote[https://lv.wikipedia.org/wiki/Jauc%C4%93jtabula]: jeb heštabula (angl. hash table#footnote[https://en.wikipedia.org/wiki/Hash_table]) ir datu struktūra, kas saista identificējošās vērtības ar piesaistītajām vērtībām. / Jaucējtabula#footnote[https://lv.wikipedia.org/wiki/Jauc%C4%93jtabula]: jeb heštabula (angl. hash table#footnote[https://en.wikipedia.org/wiki/Hash_table]) ir datu struktūra, kas saista identificējošās vērtības ar piesaistītajām vērtībām.
/ Laidiens: Programmatūras versija, kas ir gatava izplatīšanai lietotājiem un satur īpašas funkcijas, uzlabojumus vai labojumus. / Laidiens: Programmatūras versija, kas ir gatava izplatīšanai lietotājiem un satur īpašas funkcijas, uzlabojumus vai labojumus.
@ -169,7 +169,7 @@ 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
(skat. @fig:dpd-0 att.) (sk. @fig:dpd-0)
#figure( #figure(
caption: [\0. līmeņa DPD], caption: [\0. līmeņa DPD],
@ -213,7 +213,7 @@ Ar lietotājiem saistītās datu plūsmas ir attēlotas sistēmas nultā līmeņ
= Programmatūras prasību specifikācija = Programmatūras prasību specifikācija
== Funkcionālās prasības == Funkcionālās prasības
\1. līmeņa datu plūsmas diagramma (skat. @fig:dpd-1 att.) 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 septiņi galvenie procesi:
ievades apstrādāšanas modulis, ievades apstrādāšanas modulis,
@ -322,7 +322,7 @@ attēlošanai un apstrādei, lai konfigurētu labirinta parametrus.
bibliotēkas, izveido logu "Maze Controls" (labirinta vadības bibliotēkas, izveido logu "Maze Controls" (labirinta vadības
elementi), kurā tiek parādītas dažādas elementi), kurā tiek parādītas dažādas
konfigurācijas opcijas, piemēram, sēkla, rādiuss, augstums, labirinta izmērs, konfigurācijas opcijas, piemēram, sēkla, rādiuss, augstums, labirinta izmērs,
orientācija un sākuma/galapunkta pozīcijas (skat @tbl:dev_tools-F01 tab.). orientācija un sākuma/galapunkta pozīcijas (sk @tbl:dev_tools-F01).
Lietotāji var mijiedarboties ar šiem vadības elementiem, lai mainītu labirinta Lietotāji var mijiedarboties ar šiem vadības elementiem, lai mainītu labirinta
izkārtojumu un izskatu. izkārtojumu un izskatu.
Modulis pārbauda, vai konfigurācijā nav notikušas izmaiņas, un izraisa attiecīgus Modulis pārbauda, vai konfigurācijā nav notikušas izmaiņas, un izraisa attiecīgus
@ -385,8 +385,8 @@ gala lietotāji nevar piekļūt šīm uzlabotajām konfigurācijas opcijām.
Apakšnodaļa ietver labirinta moduļa funkcijas. Moduļa funkcionalitāte ir Apakšnodaļa ietver labirinta moduļa funkcijas. Moduļa funkcionalitāte ir
izmantota sešstūraina labirinta ģenerēšanai. izmantota sešstūraina labirinta ģenerēšanai.
Moduļa funkciju datu Moduļa funkciju datu
plūsmas ir parādītas 2. līmeņa datu plūsmas diagrammā (skat. @fig:dpd-2-maze-gen att.) plūsmas ir parādītas 2. līmeņa datu plūsmas diagrammā (sk. @fig:dpd-2-maze-gen)
Labirinta būvēšanas funkcija ir aprakstītas atsevišķā tabulā (skat. @hexlab-F01 tab.) Labirinta būvēšanas funkcija ir aprakstītas atsevišķā tabulā (sk. @tbl:hexlab-F01)
Modularitātes un atkārtotas lietojamības apsvērumu dēļ labirinta ģenerēšanas Modularitātes un atkārtotas lietojamības apsvērumu dēļ labirinta ģenerēšanas
funkcionalitāte tika pārnesta uz ārēju bibliotēku "hexlib"@hexlab. Šis lēmums funkcionalitāte tika pārnesta uz ārēju bibliotēku "hexlib"@hexlab. Šis lēmums
@ -464,13 +464,13 @@ programmu.
atbilstošās komponente. atbilstošās komponente.
+ Atkarībā no tā, vai tas ir pašreizējais vai nākamais stāvs, pievieno + Atkarībā no tā, vai tas ir pašreizējais vai nākamais stāvs, pievieno
attiecīgo komponenti. attiecīgo komponenti.
+ Izsauc atsevišķu funkciju labirinta flīžu izveidei. + Izsauc atsevišķu funkciju labirinta plākšņu izveidei. #todo("rework")
], ],
[ [
Izvades datu sistēmai nav. Izvades datu sistēmai nav.
], ],
[ [
+ "Stāvs x jau eksistē." + "Stāvs _x_ jau eksistē."
+ "Neizdevās ģenerēt labirintu stāvam x." + "Neizdevās ģenerēt labirintu stāvam x."
], ],
) <maze-F01> ) <maze-F01>
@ -544,8 +544,8 @@ programmu.
"SSPMF03", "SSPMF03",
"Sākt atskaņot spēles mūziku gameplay režīmā.", "Sākt atskaņot spēles mūziku gameplay režīmā.",
[ Ievades dati: + GameplayMusic resurss + AudioSource resurss ], [ Ievades dati: + GameplayMusic resurss + AudioSource resurss ],
[ + Izveido jaunu audio entītiju + Pievieno AudioPlayer komponenti + Iestata atskaņošanas iestatījumus uz LOOP ], [ + Izveido jaunu audio entitāšu + Pievieno AudioPlayer komponenti + Iestata atskaņošanas iestatījumus uz LOOP ],
[ + Aktīva audio atskaņošanas entītija ], [ + Aktīva audio atskaņošanas entitāte ],
[ Nav definēti specifiski kļūdu ziņojumi. ], [ Nav definēti specifiski kļūdu ziņojumi. ],
) <screen-F03> */ ) <screen-F03> */
@ -554,12 +554,12 @@ programmu.
"SSPMF04", "SSPMF04",
"Apturēt spēles mūziku, izejot no gameplay režīma.", "Apturēt spēles mūziku, izejot no gameplay režīma.",
[ [
+ GameplayMusic resurss ar entītijas ID + GameplayMusic resurss ar entitāte ID
], ],
[ [
+ Pārbauda, vai eksistē mūzikas entītija: + Pārbauda, vai eksistē mūzikas entitāte:
+ Ja neeksistē, ... + Ja neeksistē, ...
+ Ja eksistē, likvidē entītiju rekursīvi + Ja eksistē, likvidē entitāte rekursīvi
], ],
[ [
Izvades datu sistēmai nav. Izvades datu sistēmai nav.
@ -611,7 +611,201 @@ ir noteiktas, lai nodrošinātu plašu pieejamību, vienlaikus saglabājot veikt
=== Ārējās saskarnes prasības === Ārējās saskarnes prasības
= Programmatūras projektējuma apraksts = Programmatūras projektējuma apraksts
== Datu struktūru projektējums
Spēle ir veidota, izmantojot Bevy spēles dzinēju, kas īstenu
entitāšu komponenšu sistēmu (ECS) arhitektūras modeli.
Šis modelis sadala spēles loģiku trīs galvenajās daļās: entitātes jeb spēles
objekti, komponentes jeb dati un sistēmas -- loģika, kas darbojas ar entitātēm
ar konkrētām komponentēm @ecs @bevy-ecs @bevy-cheatbook[nod. ~14.7].
Šis modelis ļauj efektīvi apstrādāt datus un skaidri nodalīt atsevišķus
pienākumus.
=== Komponentes
Komponentes Bevy ir vienkāršas datu struktūras, kuras var pievienot entitātēm.
Tās nosaka spēles objektu īpašības un iespējas.
Šajā spēlē komponentes tiek izmantotas, lai attēlotu dažādus spēles vienību
aspektus, sākot ar to fiziskajām īpašībām un beidzot ar to vizuālo attēlojumu.
Komponentes ir izstrādātas būt minimālām un mērķtiecīgām, ievērojot vienotas
atbildības principus @SRP @SoC.
Šīs komponentes var iedalīt trīs galvenajās grupās: ar stāvu/līmeni, labirintu un
spēlētāju saistītās komponentes, kā redzams @tbl:components-floor[],
@tbl:components-maze[] un @tbl:components-player[tabulās].
==== Stāva komponentes
Stāva komponentes pārvalda vertikālo progresu un kustību spēlē.
Kā redzams @tbl:components-floor[tabulā], šīs komponentes pārvalda stāvu numurus,
pašreizējā un nākamā stāva stāvokli un vertikālās kustības mehāniku.
#components-table(
caption: "Ar stāviem saistītās komponentes",
`Floor`,
"Stāva numurs",
"Identificē, kurai entitātei ir kurš stāvs.",
`CurrentFloor`,
"Atzīmē pašreizējo stāvu",
"Identificē pašreizējo stāvu.",
`NextFloor`,
"Atzīmē nākamo stāvu",
"Identificē progresa mērķa līmeni, uz kuru jāpāriet. Var būt arī līmenis zemāk.",
`MovementState`,
"Veic stāvu vertikālo kustību",
"Kontrolē stāvu pārejas animācijas.",
) <components-floor>
==== Labirinta komponentes
Labirinta struktūru pārvalda vairāki savstarpēji saistītas komponentes.
Tabulā @tbl:components-maze[] ir redzamas sastāvdaļas, kas ir atbildīgas par
labirinta izveidi un uzturēšanu.
#components-table(
caption: "Ar labirintiem saistītās komponentes",
`HexMaze`,
"Galvenais labirinta marķieris",
"Identificē labirinta entitāti un pieprasa nepieciešamās atkarības.",
`Tile`,
"Apzīmē labirinta sešstūra plāksnes",
"Identificē labirinta vietas, pa kurām var staigāt.",
`Wall`,
"Apzīmē labirinta sienas",
"Identificē sadursmju robežas.",
`MazeConfig`,
"Glabā labirinta parametrus",
"Konfigurē labirinta ģenerēšanu ar rādiusu, pozīcijām un izkārtojumu.",
`Maze`,
"Glabā sešstūra labirinta datu",
"Glabā pilnu labirinta struktūru, izmantojot jaucējtabulu (hashmap)",
`Walls`,
"Apzīmē sienu konfigurāciju",
[Pārvalda sienas stāvokļus, izmantojot bitu karodziņus @bitflags.],
) <components-maze>
==== Spēlētāja komponentes
Spēlētāju kustību un mijiedarbību nodrošina specializētu komponenšu kopums.
@tbl:components-player[tabulā] ir redzamas sastāvdaļas, kas pārvalda ar
spēlētāju saistītās funkcijas.
#components-table(
caption: "Ar spēlētāju saistītās komponentes",
`Player`,
"Apzīmē spēlētāja entitāti",
"Identificē spēlētāju un pieprasa nepieciešamās sastāvdaļas.",
`CurrentPosition`,
"Glabā spēlētāj pozīciju",
"nosaka pašreizējo atrašanās vietu labirintā.",
`MovementSpeed`,
"Glabā kustības ātrumu",
"Nosaka spēlētāja pārvietošanās ātrumu.",
`MovementTarget`,
"Glabā pārvietošanās mērķi",
"Pārvalda spēlētāju pārvietošanās virzienus.",
) <components-player>
=== Notikumi
Notikumi Bevy nodrošina paziņojumu apmaiņas mehānismu, kas nodrošina brīvu
sasaisti starp sistēmām.
Šī uz notikumiem balstītā arhitektūra ļauj dažādām sistēmas daļām spēles daļām
sazināties bez tiešas atkarības.
Notikumi ir īpaši noderīgi lietotāja ievades, fizikas mijiedarbības un spēles
stāvokļa pāreju apstrādei @bevy-cheatbook[nod. ~14.11].
Notikumi arī ir iedalīti trīs galvenajās grupās: ar labirintu, pāreju uz citu stāvu
un ar spēlētāju saistīti notikumi, kas redzams @tbl:events-maze[],
@tbl:events-floor[] un @tbl:events-player[tabulās].
==== Labirintu notikumi
Labirinta notikumi pārvalda labirinta entitāšu dzīves ciklu spēlē. Kā redzams
@tbl:events-maze[tabulā], šie notikumi pārvalda labirinta izveidi, atjaunošanu
un likvidēšanu.
#events-table(
caption: "Ar labirintiem saistīti notikumi",
`SpawnMaze`,
"Izveido jaunu labirintu",
"Inicializē labirintu ar norādīto grīdu un konfigurāciju.",
`RespawnMaze`,
"Atjauno esošo labirintu",
"Atjauno labirintu.",
`DespawnMaze`,
"Noņem labirintu",
"Izdzēš labirinta entitātes norādītajam stāvam.",
) <events-maze>
==== Stāvu notikumi
Stāvu pārejas sistēma izmanto vienu uzskaitītu notikumu tipu (sk.
@tbl:events-floor), kas pārvalda vertikālo kustību starp stāviem.
#figure(
caption: "Ar stāviem saistīti notikumi",
kind: table,
tablex(
columns: (1fr, 1fr, 2fr),
[*Notikums*],
[*Variants*],
[*Pielietojums*],
`TransitionFloor`,
`Ascend`,
"Izraisa visu stāvu augšupejošu pāreju.",
`TransitionFloor`,
`Descend`,
"Izraisa visu stāvu lejupejošu pāreju.",
),
) <events-floor>
==== Spēlētāju notikumi
Ar spēlētāju saistītie notikumi pārvalda spēlētāja entitātes dzīves ciklu (sk.
@tbl:events-player).
Līdzīgi kā labirintu notikumiem, šie apstrādā spēlētāja izveidošanu, atjaunošanu
un likvidēšanu.
#events-table(
caption: "Ar spēlētaju saistīti notikumi",
`SpawnPlayer`,
"Izveido spēlētāja entitāti",
"Inicializē jaunu spēlētāju starta pozīcijā.",
`RespawnPlayer`,
"Atjauno spēlētāju",
"Atiestata spēlētāju uz pašreizējā stāva sākuma pozīciju.",
`DespawnPlayer`,
"Noņem spēlētāju",
"Izdzēš spēlētāja entitātes.",
) <events-player>
=== Resursi
Bevy resursi kalpo kā globāli stāvokļa konteineri, kuriem var piekļūt jebkura
sistēma.
Atšķirībā no komponentiem, kas ir piesaistīti konkrētām entitātēm, resursi
nodrošina spēles mēroga datus un konfigurāciju.
Tie ir īpaši noderīgi kopīgu stāvokļu un iestatījumu pārvaldībai, kas var
ietekmē vairākas sistēmas@bevy-cheatbook[nod. ~14.6].
Spēle izmanto vairākus resursus globālās konfigurācijas un stāvokļa pārvaldībai
(sk. @tbl:resources)
#resources-table(
caption: "Globālie resursi",
`MazePluginLoaded`,
"Spraudņa stāvokļa marķieris",
"Norāda labirinta spraudņa inicializāciju.",
`GlobalMazeConfig`,
"Labirinta vizuālie iestatījumi",
"Uzglabā globālos labirinta izskata parametrus.",
) <resources>
Resurss "`GlobalMazeConfig`" ir īpaši svarīgs, jo tas pārvalda labirinta vizuālo
attēlojumu, ietverot tādus parametrus kā sešstūra lielums, sienu biezums un
vertikālais augstums.
== Daļējs funkciju projektējums == Daļējs funkciju projektējums
#todo("pievienot funkciju projektējumu +diagrammas") #todo("pievienot funkciju projektējumu +diagrammas")
/* Apraksta svarīgākās, sarežģītākās funkcijas vai sistēmas darbības aspektus; /* Apraksta svarīgākās, sarežģītākās funkcijas vai sistēmas darbības aspektus;
* obligāti jālieto vismaz 4 dažādi diagrammu veidi, izņemot DPD un lietošanas * obligāti jālieto vismaz 4 dažādi diagrammu veidi, izņemot DPD un lietošanas
@ -641,7 +835,7 @@ programmatūru, meklējot kļūdas un problēmas pirmkodā. [12] Rīks satur vai
problēmu kopas, kas var tikt izmantotas analīzē. Tika izmantota „clang-analyzer“ problēmu problēmu kopas, kas var tikt izmantotas analīzē. Tika izmantota „clang-analyzer“ problēmu
kopa. Vieglākai statisko testu darbināšanai tika izmantots vienkāršs programmēšanas valodas kopa. Vieglākai statisko testu darbināšanai tika izmantots vienkāršs programmēšanas valodas
„Python“ skripts, kas atlasa visus failus, kuru paplašinājums ir „cpp“ (valodas „C++“ pirmkoda „Python“ skripts, kas atlasa visus failus, kuru paplašinājums ir „cpp“ (valodas „C++“ pirmkoda
fails) vai „h“ (galvenes fails) un darbina statiskās analīzes rīku ar katru failu atsevišķi (skat. fails) vai „h“ (galvenes fails) un darbina statiskās analīzes rīku ar katru failu atsevišķi (sk.
izpildes rezultātu attēlā 4.3.). */ izpildes rezultātu attēlā 4.3.). */
== Dinamiskā testēšana == Dinamiskā testēšana
@ -660,6 +854,8 @@ izpildes soļus, gaidāmo rezultātu un faktisko rezultātu (veiksmīga testa
gadījumā apzīmēts ar "Ok", bet neveiksmīgu -- ar "Err"). gadījumā apzīmēts ar "Ok", bet neveiksmīgu -- ar "Err").
Izvēlētie testu gadījumi ir detalizēti aprakstīti #todo("tab") tabulā. Izvēlētie testu gadījumi ir detalizēti aprakstīti #todo("tab") tabulā.
#todo("add tests table")
=== Automatizēti testi === Automatizēti testi
Automatizētā testēšanas sistēma plaši pārklāj bibliotēku "hexlab", jo tā ir Automatizētā testēšanas sistēma plaši pārklāj bibliotēku "hexlab", jo tā ir
@ -703,20 +899,17 @@ Augstas koda kvalitātes nodrošināšana ir jebkura projekta būtisks aspekts.
Lai to panāktu, tiek izmantoti vairāki rīki un prakses, kas palīdz uzturēt tīru, Lai to panāktu, tiek izmantoti vairāki rīki un prakses, kas palīdz uzturēt tīru,
efektīvu un uzticamu koda. efektīvu un uzticamu koda.
Viens no galvenajiem rīkiem, kas tiek izmantots ir "Clippy"@clippy, kas analizē Viens no galvenajiem rīkiem, kas tiek izmantots ir "Clippy#footnote[https://doc.rust-lang.org/clippy/usage.html]<clippy>", kas analizē
iespējamās problēmas un iesaka uzlabojumus (skat. @static-tests nodaļu). iespējamās problēmas un iesaka uzlabojumus (sk. @static-tests nodaļu).
Kopā ar "Clippy" tiek arī izmantots "Rustfmt"@rustfmt, koda formatētājs, lai Kopā ar "Clippy" tiek arī izmantots "Rustfmt#footnote[https://github.com/rust-lang/rustfmt]<rustfmt>", koda formatētājs, lai
uzturētu vienotu koda formatējumu visā projektā. Šis rīks automātiski formatē uzturētu vienotu koda formatējumu visā projektā. Šis rīks automātiski formatē
kodu saskaņā ar Rust stila vadlīnijām@rust-style. kodu saskaņā ar Rust stila
vadlīnijām#footnote[https://doc.rust-lang.org/nightly/style-guide/]<rust-style>.
Turklāt visas publiskās funkcijas un datu struktūras Turklāt visas publiskās funkcijas un datu struktūras
hexlab bibliotēkā ir dokumentētas@hexlab-docs. Šajā dokumentācijā ir ietverti hexlab bibliotēkā ir dokumentētas@hexlab-docs. Šajā dokumentācijā ir ietverti
detalizēti apraksti un lietošanas piemēri, kas ne tikai palīdz saprast kodu, bet detalizēti apraksti un lietošanas piemēri, kas ne tikai palīdz saprast kodu, bet
arī kalpo kā dokumentācijas testēšanas veids. Darbinot "cargo doc"@cargo-doc,
tiek ģenerēja un validēja dokumentācija, nodrošinot, ka piemēri ir pareizi un
aktuāli.
Programmatūras prasības specifikācija ir izstrādāta, ievērojot LVS 68:1996 Programmatūras prasības specifikācija ir izstrādāta, ievērojot LVS 68:1996
standarta "Programmatūras prasību specifikācijas ceļvedis"@lvs_68 un LVS 72:1996 standarta "Programmatūras prasību specifikācijas ceļvedis"@lvs_68 un LVS 72:1996
standarta "Ieteicamā prakse programmatūras projektējuma aprakstīšanai"@lvs_72 standarta "Ieteicamā prakse programmatūras projektējuma aprakstīšanai"@lvs_72
@ -730,7 +923,7 @@ standarta prasības.
Pirmkods tiek pārvaldīts, izmantojot "git"@git versiju kontroles sistēmu. Pirmkods tiek pārvaldīts, izmantojot "git"@git versiju kontroles sistēmu.
Repozitorijs tiek izvietots platformā "GitHub". Repozitorijs tiek izvietots platformā "GitHub".
Rīku konfigurācija ir definēta vairākos failos: Rīku konfigurācija ir definēta vairākos failos:
- "justfile"@justfile -- satur atkļūdošanas un - "justfile#footnote[https://just.systems/man/en/]<justfile>" -- satur atkļūdošanas un
laidiena komandas dažādām vidēm: laidiena komandas dažādām vidēm:
- atkļūdošanas kompilācijas ar iespējotu pilnu atpakaļsekošanu; - atkļūdošanas kompilācijas ar iespējotu pilnu atpakaļsekošanu;
- laidiena kompilācijas ar iespējotu optimizāciju. - laidiena kompilācijas ar iespējotu optimizāciju.
@ -742,7 +935,7 @@ Rīku konfigurācija ir definēta vairākos failos:
- publicē bināros failus GitHub platformā; - publicē bināros failus GitHub platformā;
- izvieto tīmekļa versiju itch.io@itch-io platformā. - izvieto tīmekļa versiju itch.io@itch-io platformā.
Versiju specifikācija notiek pēc semantiskās versiju atlases@sem_ver (MAJOR.MINOR.PATCH): Versiju specifikācija notiek pēc semantiskās versiju atlases@sem-ver (MAJOR.MINOR.PATCH):
+ MAJOR -- galvenā versija, nesaderīgas izmaiņas, būtiskas koda izmaiņas. + MAJOR -- galvenā versija, nesaderīgas izmaiņas, būtiskas koda izmaiņas.
+ MINOR -- atpakaļsaderīgas funkcionalitātes papildinājumi. + MINOR -- atpakaļsaderīgas funkcionalitātes papildinājumi.
+ PATCH -- ar iepriekšējo versiju saderīgu kļūdu labojumi. + PATCH -- ar iepriekšējo versiju saderīgu kļūdu labojumi.

View File

@ -201,3 +201,54 @@
#let red(body) = { #let red(body) = {
text(body, fill: rgb(255, 0, 0)) text(body, fill: rgb(255, 0, 0))
} }
#let components-table(
caption: str,
..body,
) = {
figure(
caption: caption,
kind: table,
tablex(
columns: 3,
[*Komponente*],
[*Apraksts*],
[*Pielietojums*],
..body,
),
)
}
#let events-table(
caption: str,
..body,
) = {
figure(
caption: caption,
kind: table,
tablex(
columns: 3,
[*Notikums*],
[*Apraksts*],
[*Pielietojums*],
..body,
),
)
}
#let resources-table(
caption: str,
..body,
) = {
figure(
caption: caption,
kind: table,
tablex(
columns: 3,
[*Resurss*],
[*Apraksts*],
[*Pielietojums*],
..body,
),
)
}