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
|
||||
- Martin
|
||||
- Typst Projekta Izstrādātāji
|
||||
url: https://typst.app/
|
||||
hex_grid:
|
||||
url: {value: "https://typst.app/", date: 2024-12-02}
|
||||
hex-grid:
|
||||
type: Web
|
||||
title: Hexagonal Grids
|
||||
author: Red Blob Games
|
||||
url: {value: "https://www.redblobgames.com/grids/hexagons/", date: 2024-09-10}
|
||||
bevy_examples:
|
||||
url: {value: "https://www.redblobgames.com/grids/hexagons/", date: 2024-09-15}
|
||||
bevy-examples:
|
||||
type: Web
|
||||
title: Bevy Examples
|
||||
author:
|
||||
url: {value: "https://bevyengine.org/examples/", date: 2024-09-10}
|
||||
bevy_cheatbook:
|
||||
url: {value: "https://bevyengine.org/examples/", date: 2024-09-14}
|
||||
bevy-cheatbook:
|
||||
type: Web
|
||||
title: Unofficial Bevy Cheat Book
|
||||
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:
|
||||
type: Book
|
||||
title: Programmatūras prasību specifikācijas ceļvedis
|
||||
@ -48,11 +48,11 @@ backtracking:
|
||||
type: Web
|
||||
title: Backtracking
|
||||
url: https://en.wikipedia.org/wiki/Backtracking
|
||||
maze_generation:
|
||||
maze-generation:
|
||||
type: Web
|
||||
title: Maze Generation
|
||||
url: https://rosettacode.org/wiki/Maze_generation
|
||||
bevy_quickstart:
|
||||
bevy-quickstart:
|
||||
type: Web
|
||||
title: Bevy New 2D
|
||||
url: https://github.com/TheBevyFlock/bevy_new_2d
|
||||
@ -60,7 +60,7 @@ git:
|
||||
type: Web
|
||||
title: Versijas kontroles sistēmas git dokumentācija
|
||||
url: https://git-scm.com/doc
|
||||
sem_ver:
|
||||
sem-ver:
|
||||
type: Web
|
||||
title: Semantiskā versiju veidošana
|
||||
url: https://semver.org/
|
||||
@ -71,26 +71,6 @@ omg-uml:
|
||||
date: 2015-03
|
||||
url: https://www.omg.org/spec/UML/2.5/PDF
|
||||
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:
|
||||
type: Web
|
||||
title: Hexlab bibliotēka
|
||||
@ -101,14 +81,9 @@ hexlab-docs:
|
||||
title: Hexlab bibliotēkas dokumentācija
|
||||
author: Kristiāns Francis Cagulis
|
||||
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:
|
||||
type: Web
|
||||
title: Par laidieniem
|
||||
title: About Releases
|
||||
author: GitHub komanda
|
||||
url: https://docs.github.com/en/repositories/releasing-projects-on-github/about-releases
|
||||
gh-actions:
|
||||
@ -142,3 +117,27 @@ cargo-tarpaulin:
|
||||
title: Tarpaulin
|
||||
author: xd009642
|
||||
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(
|
||||
university: "",
|
||||
faculty: "",
|
||||
type: "",
|
||||
thesis_type: "",
|
||||
title: [],
|
||||
authors: (),
|
||||
advisor: "",
|
||||
@ -104,7 +104,7 @@
|
||||
upper(
|
||||
text(
|
||||
size: 16pt,
|
||||
type,
|
||||
thesis_type,
|
||||
),
|
||||
),
|
||||
)
|
||||
@ -150,6 +150,12 @@
|
||||
)
|
||||
/* Title page config end */
|
||||
|
||||
// Start page numbering
|
||||
set page(
|
||||
numbering: "1",
|
||||
number-align: center,
|
||||
)
|
||||
|
||||
// WARNING: remove before sending
|
||||
outline(title: "TODOs", target: figure.where(kind: "todo"))
|
||||
|
||||
@ -186,11 +192,18 @@
|
||||
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 => {
|
||||
let el = it.element
|
||||
|
||||
if el != none and el.func() == heading {
|
||||
if el == none {
|
||||
return it
|
||||
}
|
||||
|
||||
if el.func() == heading {
|
||||
return link(
|
||||
el.location(),
|
||||
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
|
||||
}
|
||||
/* --- Figure/Table config end --- */
|
||||
@ -232,11 +282,6 @@
|
||||
)
|
||||
/* ToC config end */
|
||||
|
||||
// Start page numbering
|
||||
set page(
|
||||
numbering: "1",
|
||||
number-align: center,
|
||||
)
|
||||
|
||||
|
||||
// show link: set text(fill: blue.darken(20%))
|
||||
|
||||
243
main.typ
243
main.typ
@ -9,7 +9,7 @@
|
||||
#show: project.with(
|
||||
university: "Latvijas Universitā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],
|
||||
authors: ("Kristiāns Francis Cagulis, kc22015",),
|
||||
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.
|
||||
/ CI/CD: nepārtraukta integrācija un nepārtraukta izvietošana;
|
||||
/ 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;
|
||||
/ 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.
|
||||
@ -169,7 +169,7 @@ 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
|
||||
(skat. @fig:dpd-0 att.)
|
||||
(sk. @fig:dpd-0)
|
||||
|
||||
#figure(
|
||||
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
|
||||
== 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ā.
|
||||
Diagrammā attēloti septiņi galvenie procesi:
|
||||
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
|
||||
elementi), kurā tiek parādītas dažādas
|
||||
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
|
||||
izkārtojumu un izskatu.
|
||||
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
|
||||
izmantota sešstūraina labirinta ģenerēšanai.
|
||||
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.)
|
||||
Labirinta būvēšanas funkcija ir aprakstītas atsevišķā tabulā (skat. @hexlab-F01 tab.)
|
||||
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ā (sk. @tbl:hexlab-F01)
|
||||
|
||||
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
|
||||
@ -464,13 +464,13 @@ programmu.
|
||||
atbilstošās komponente.
|
||||
+ Atkarībā no tā, vai tas ir pašreizējais vai nākamais stāvs, pievieno
|
||||
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.
|
||||
],
|
||||
[
|
||||
+ "Stāvs x jau eksistē."
|
||||
+ "Stāvs _x_ jau eksistē."
|
||||
+ "Neizdevās ģenerēt labirintu stāvam x."
|
||||
],
|
||||
) <maze-F01>
|
||||
@ -544,8 +544,8 @@ programmu.
|
||||
"SSPMF03",
|
||||
"Sākt atskaņot spēles mūziku gameplay režīmā.",
|
||||
[ Ievades dati: + GameplayMusic resurss + AudioSource resurss ],
|
||||
[ + Izveido jaunu audio entītiju + Pievieno AudioPlayer komponenti + Iestata atskaņošanas iestatījumus uz LOOP ],
|
||||
[ + Aktīva audio atskaņošanas entītija ],
|
||||
[ + Izveido jaunu audio entitāšu + Pievieno AudioPlayer komponenti + Iestata atskaņošanas iestatījumus uz LOOP ],
|
||||
[ + Aktīva audio atskaņošanas entitāte ],
|
||||
[ Nav definēti specifiski kļūdu ziņojumi. ],
|
||||
) <screen-F03> */
|
||||
|
||||
@ -554,12 +554,12 @@ programmu.
|
||||
"SSPMF04",
|
||||
"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 eksistē, likvidē entītiju rekursīvi
|
||||
+ Ja eksistē, likvidē entitāte rekursīvi
|
||||
],
|
||||
[
|
||||
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
|
||||
|
||||
= 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
|
||||
|
||||
#todo("pievienot funkciju projektējumu +diagrammas")
|
||||
/* 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
|
||||
@ -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
|
||||
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
|
||||
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.). */
|
||||
|
||||
== 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").
|
||||
Izvēlētie testu gadījumi ir detalizēti aprakstīti #todo("tab") tabulā.
|
||||
|
||||
#todo("add tests table")
|
||||
|
||||
=== Automatizēti testi
|
||||
|
||||
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,
|
||||
efektīvu un uzticamu koda.
|
||||
|
||||
Viens no galvenajiem rīkiem, kas tiek izmantots ir "Clippy"@clippy, kas analizē
|
||||
iespējamās problēmas un iesaka uzlabojumus (skat. @static-tests nodaļu).
|
||||
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 (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ē
|
||||
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
|
||||
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
|
||||
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
|
||||
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
|
||||
@ -730,7 +923,7 @@ standarta prasības.
|
||||
Pirmkods tiek pārvaldīts, izmantojot "git"@git versiju kontroles sistēmu.
|
||||
Repozitorijs tiek izvietots platformā "GitHub".
|
||||
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:
|
||||
- atkļūdošanas kompilācijas ar iespējotu pilnu atpakaļsekošanu;
|
||||
- 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ā;
|
||||
- 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.
|
||||
+ MINOR -- atpakaļsaderīgas funkcionalitātes papildinājumi.
|
||||
+ PATCH -- ar iepriekšējo versiju saderīgu kļūdu labojumi.
|
||||
|
||||
51
utils.typ
51
utils.typ
@ -201,3 +201,54 @@
|
||||
#let red(body) = {
|
||||
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