mirror of
https://github.com/kristoferssolo/Qualification-Thesis.git
synced 2025-10-21 20:10:37 +00:00
feat: describe components
This commit is contained in:
parent
db6ce3325a
commit
cd602f30c1
@ -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/
|
||||||
|
|||||||
63
layout.typ
63
layout.typ
@ -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
243
main.typ
@ -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.
|
||||||
|
|||||||
51
utils.typ
51
utils.typ
@ -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,
|
||||||
|
),
|
||||||
|
)
|
||||||
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user