Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Part 2 #10

Open
wants to merge 86 commits into
base: part-1
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
bc4a368
Add util for spawning bundles and make better looking floor
KatKlo Jun 16, 2022
96ae00e
Merge pull request #2 from mimuw-jnp2-rust/kasia
KatKlo Jun 16, 2022
c852d03
Add easy menu after death
KatKlo Jun 16, 2022
b28c0c0
Move spawn util into game module
KatKlo Jun 16, 2022
989bbe2
Add end menu and finish line
KatKlo Jun 16, 2022
b44a3f3
Merge branch 'main' into menu
KatKlo Jun 16, 2022
5beadf6
Make player falling impossible
KatKlo Jun 16, 2022
c31c446
More refactor
KatKlo Jun 17, 2022
c8200c6
player_textures -> game_textures
Jun 17, 2022
b647db7
Booster -> Powerup
Jun 17, 2022
d704378
Adding living being component and killing player as event
Jun 17, 2022
ca9c16d
Killing enemies by event and removing NASA calculations
Jun 17, 2022
02092c2
Adding kira audio
Jun 17, 2022
b7d2e5c
Adding basic audio
Jun 18, 2022
46862ee
Adding differents hit sound effects
Jun 18, 2022
b02da3a
Exetending audio features
Jun 18, 2022
742d98c
Add random generator
KatKlo Jun 18, 2022
1a20fb2
Better menu
KatKlo Jun 18, 2022
de3382e
Add missing files
KatKlo Jun 18, 2022
1e6dc69
Audio pretty much finished
Jun 18, 2022
f1d3e82
better ai
Jun 18, 2022
420fe5c
Fixing bug with double despawn of monsters
Jun 18, 2022
bad074d
Adding shooting timestep
Jun 18, 2022
08b3b5c
Removing it cuz it sucks
Jun 18, 2022
a2c4488
Add input for seed in menu
KatKlo Jun 18, 2022
2489769
Resolving bug with double despawning monsters
Jun 18, 2022
6086f20
Adding timers for powerups
Jun 18, 2022
49d702f
Adding assets
Jun 18, 2022
f7c0f87
Merging changes
Jun 18, 2022
c88f506
Add basic levels
KatKlo Jun 19, 2022
1e346ab
Merge changes
KatKlo Jun 19, 2022
c4d618f
Delete unused imports
KatKlo Jun 19, 2022
154fcdc
Better map generating
KatKlo Jun 19, 2022
9235489
Better spawning objects with components
KatKlo Jun 19, 2022
5436742
Add sensor colliders and fix problems with bullets and powerups
KatKlo Jun 19, 2022
3d0bbb0
Cleaner way of taking player from query
KatKlo Jun 19, 2022
22e0eb5
small fix in player's collider
KatKlo Jun 19, 2022
86e2932
Menu + sensors + refactor
KatKlo Jun 19, 2022
ac53128
Merging changes
Jun 19, 2022
285629c
Refactoring with rustfm
Jun 19, 2022
15d88d1
Better ai
Jun 19, 2022
99f2605
Player cant jump using bullets
Jun 19, 2022
0f4762a
Add images in win/fail menu
KatKlo Jun 19, 2022
2f201d3
Add difficulty and few images
KatKlo Jun 19, 2022
6cc72f2
Proper jumping reset
Jun 19, 2022
350b543
Refactoring events
Jun 19, 2022
f913617
Moving powerups functionalities to its own plugin
Jun 19, 2022
e2ad785
Handling death event
Jun 19, 2022
71793a8
Increasing jump impulse
Jun 19, 2022
0438c1c
Improving performance of ai by avoiding iterating over all enemies
Jun 19, 2022
3941b06
Deleting redundant comment
Jun 19, 2022
e180d88
Merge branch 'kasia' into patryk
Jun 19, 2022
3a06087
Merging branches
Jun 19, 2022
5569af3
Monster doesnt collide with powerups
Jun 19, 2022
89a9b6b
Renaming
Jun 19, 2022
ebca2f4
Enhancing performance by avoiding iterating over bullets
Jun 19, 2022
9b6e602
Pleasing clippy...
Jun 19, 2022
c73de5d
Adding valgrind
Jun 19, 2022
cf37120
Improving toml
Jun 19, 2022
1fa3970
Valgrinds shoot properly
Jun 20, 2022
96b6b70
Try to add audio trait but fails cuz of build-in events lifetimes
Jun 20, 2022
df7c20e
Previous audio
Jun 20, 2022
f271749
Before deleting livingbeing module
Jun 20, 2022
7d74257
Deleting livingbeing module
Jun 20, 2022
2e65fe1
Making bullets module seperate plugin
Jun 20, 2022
b79b719
Add finish line as wall and insert enemy type based on level
KatKlo Jun 20, 2022
6d1958d
Pleasing clippy
Jun 20, 2022
595c98c
Merge branch 'kasia' into patryk
Jun 20, 2022
8a23c4a
Adding com
PBundyra Jun 21, 2022
4aedda0
Deleting redundant functions
Jun 21, 2022
d34979e
Merge branch 'patryk' of github.com:mimuw-jnp2-rust/project-katklo-pb…
Jun 21, 2022
2b40988
Improving style
Jun 21, 2022
d121759
Updating readme
Jun 21, 2022
0590c2d
Updating readme
Jun 21, 2022
fcfb057
Update Cargo.toml
PBundyra Jun 22, 2022
994b923
Cleaner rng in audio
Jun 22, 2022
ed283d2
Fix review issues
KatKlo Jun 26, 2022
4cb403e
Better audio
Jun 26, 2022
bae4ace
Better jumping
Jun 26, 2022
53c92e7
Merge branch 'part-2' into patryk
Jun 26, 2022
86c9fa7
More generic audio plugin
Jun 26, 2022
b243605
Resolving a bug with bullets flying beyond the map
Jun 26, 2022
bbdcca1
A sligh improvement of the complex audio event handler
Jun 26, 2022
933e568
Fixing a typo
Jun 26, 2022
e8c103b
Merge pull request #12 from mimuw-jnp2-rust/patryk
PBundyra Jun 26, 2022
71a9a8d
Fixing a typo
Jun 26, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
23 changes: 20 additions & 3 deletions Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,12 +1,29 @@
[package]
name = "mario_mim"
version = "0.1.0"
authors = [
"Katarzyna Kloc <[email protected]>",
"Patryk Bundyra <[email protected]>",
]
edition = "2021"

[dependencies]
bevy = "0.7"
bevy_rapier2d = "0.13.2"
rand = "*"
bevy = { version = "0.7", features = [
"render",
"animation",
"bevy_winit",
"bevy_gilrs",
"png",
"hdr",
"filesystem_watcher",
"x11"
] }
bevy_rapier2d = "0.13"
bevy_kira_audio = { version = "0.9", features = ["ogg"] }
rand = "0.8"
rand_pcg = "0.3"
rand_seeder = "0.2"
wasm-bindgen = "0.2"

[profile.dev.package.bevy_rapier2d]
opt-level = 3
47 changes: 45 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
[Katarzyna Kloc](https://github.com/KatKlo) - [email protected]\
[Patryk Bundyra](https://github.com/PBundyra) - [email protected]

# Part 0
## Opis
Odkąd CLion wypluł pierwsze segfaulty chcieliśmy napisać grę komputerową inspirowaną studencką przygodą na MIMie.\
GigaChadTytuł będzie to gra platformowa, w której chodzi o to, żeby… zdać. Chcemy stworzyć grę inspirowaną Super Mario Bros, ale w mimowskim wydaniu. Student będzie musiał pokonać bugi, wzmonić się pijąc kawę i kto wie, może nawet stawi czoła niektórym prowadzącym...
Expand Down Expand Up @@ -38,7 +39,7 @@ W drugiej części dodamy:
## Biblioteki
- Bevy

## Update po 1 części
# Part 1

Robiąc pierwszą część korzystaliśmy głównie z tych tutoriali:

Expand All @@ -55,6 +56,48 @@ Choć dużą część kodu wzieliśmy z ww. poradników, to używając najnowsze
- wzmocnienia
- menu początowe

Widzimy też pole na poprawę i rzeczy które chcemy dodać w kolejnej części projektu. Są to m. in. timery i fizykę wzmocnień (bardzo uciążliwe, bo rapier nie posiada akutalnej dokumentacji), czy dodanie własnych eventów i obsługa pewnych akcji w grze właśnie przez customowe eventy. Duża częśc logiki gry polega na losowaniu. To gdzie zostanie umieszczony przeciwnik, kiedy skoczy, jakie dostaniemy wzmocnienie jest oparte na z góry zadanym prawdopobieństwu. Korzystając z komponentów pogrupowaliśmy odpowiednie struktury, takie jak Enemy, albo Booster, dzięki czemu zapewniliśmy skalowalność rozwiązania i zostawiliśmy sobie furtkę na dodanie kolejnych przeciwników i wzmocnień. Mimo, że żeby zapewnić rozgrywkę na wysokim poziomie potrzeba jeszcze dużo pracy, to gra jest obecnie w niezłym stanie, można w nią sensownie pograć i mieć odrobinę frajdy - gwarantujemy jej zwiększenie w kolejnej części :)
Widzimy też pole na poprawę i rzeczy które chcemy dodać w kolejnej części projektu. Są to m. in. timery i fizykę wzmocnień (bardzo uciążliwe, bo rapier nie posiada akutalnej dokumentacji), czy dodanie własnych eventów i obsługa pewnych akcji w grze właśnie przez customowe eventy. Duża częśc logiki gry polega na losowaniu. To gdzie zostanie umieszczony przeciwnik, kiedy skoczy, jakie dostaniemy wzmocnienie jest oparte na z góry zadanym prawdopobieństwu. Korzystając z komponentów pogrupowaliśmy odpowiednie struktury, takie jak Enemy, albo Powerup, dzięki czemu zapewniliśmy skalowalność rozwiązania i zostawiliśmy sobie furtkę na dodanie kolejnych przeciwników i wzmocnień. Mimo, że żeby zapewnić rozgrywkę na wysokim poziomie potrzeba jeszcze dużo pracy, to gra jest obecnie w niezłym stanie, można w nią sensownie pograć i mieć odrobinę frajdy - gwarantujemy jej zwiększenie w kolejnej części :)


# Part 2
## Opis:
Włączcie Sweden i znów poczujcie się jak wtedy,
gdy mając 12 lat w swoim pokoju, przekopywaliście się przez kolejne stone'y,
żeby dostać upragnione diamenty.
Ah, nie, nie musicie tego robić,
bo kolejna wersja „Mario MIM” dzięki swojej wyjątkowej szacie audiowizualnej
przeniesie was do stanu tej błogiej nostalgii.
Wspomnienia przywoływane przez grę będą sięgać również bliższej przeszłości,
gdy jako młodzi kadeci Podstaw Matematyki dostaliście pierwsze oceny,
pierwszy raz zobaczyliście zielony komunikat o poprawnie wykonanych testach w swoich terminalach
czy zamieniliście C++ na Rusta.
Jako studenci MIM-u musicie stawić czoła różnym bugom lub - co gorsza - Valgrindowi…
Aby jakoś przebrnąć do końca kolejnego semestru możecie wzmocnić się kawą lub
nauczyć najbardziej uwielbianego języka na świecie.
Chcecie podzielić się rozgrywką z innymi studentami MIM-u?
Nic prostszego, ponieważ możecie zagrać [online](https://pbundyra.github.io/wasm-deploy/)
i dzięki seedowi wygenerować tę samą mapę, co Twój towarzysz studenckiej podróży.
## Zmiany:
- poprawienie wydajności
- poprawienie fizyki powerup-ów
- dodanie timerów do powerup-ów
- dodanie kolejnych elementów menu
- dodanie seed-u generującego mapę
- poprawienie poruszania się przeciwników
- dodanie kolejnego przeciwnika, który potrafi strzelać
- dodanie efektów dźwiękowych
- poprawienie collider-ów ścian
- deploy gry używając WebAssembly i Github Pages - https://pbundyra.github.io/wasm-deploy/
- dodanie mechaniki poziomów ze zwiększającym się poziomem trudności
- podział poziomów na 3 różne rodzaje
- naprawa bugów
- poprawa stylu i przejrzystości kodu z poprzedniej części

## Czego nie udało nam się zrobić i dlaczego:
Nie zrobiliśmy finałowego bossa, ponieważ zmieniliśmy koncepcję stopniowania trudności poziomów oraz co ważniejsze, chcieliśmy dostarczyć kod który będzie zawierał trochę mniej feature’ów, ale za to będzie lepszej jakości. Zrobiliśmy ogromny refactor pierwszej części, korzystając z mechaniki Eventów w Bevy oraz dodaliśmy kolejne ważne Pluginy. Postawiliśmy na jakość, zamiast ilość i po ukończeniu projektu uważamy, że była to lepsza decyzja.
Czy są bugi? Są, ale bardzo rzadko- prawdopodobnie podczas rozgrywki nie będziecie mieli szansy ich nawet zauważyć (więc nie będziemy ich zdradzać), oprócz tych, które sami musicie pokonać. Naprawiliśmy bardzo dużo bugów z poprzedniej części, ale zabrakło zasobów, żeby złapać je wszystkie ;)
## Final thoughts:
Była to nasza pierwsza gra i jesteśmy w niej w pełni dumni. Bardzo dużo się nauczyliśmy, a Bevy okazało się świetną biblioteką, jednak potrzebowaliśmy trochę czasu (1 część projektu) żeby trochę się z nią oswoić. Mamy nadzieję, że będzie wam się w nią przyjemnie grało oraz przede wszystkim, że niejednokrotnie wywoła uśmiech na waszych twarzach.



Binary file added assets/audio/background.ogg
Binary file not shown.
Binary file added assets/audio/death.ogg
Binary file not shown.
Binary file added assets/audio/drink1.ogg
Binary file not shown.
Binary file added assets/audio/drink2.ogg
Binary file not shown.
Binary file added assets/audio/drink3.ogg
Binary file not shown.
Binary file added assets/audio/fast_shoot.ogg
Binary file not shown.
Binary file added assets/audio/hit1.ogg
Binary file not shown.
Binary file added assets/audio/hit2.ogg
Binary file not shown.
Binary file added assets/audio/hit3.ogg
Binary file not shown.
Binary file added assets/audio/levelup.ogg
Binary file not shown.
Binary file added assets/audio/menu.ogg
Binary file not shown.
Binary file added assets/audio/shear.ogg
Binary file not shown.
Binary file added assets/audio/shoot.ogg
Binary file not shown.
Binary file removed assets/background.png
Binary file not shown.
Binary file removed assets/bug.png
Binary file not shown.
Binary file removed assets/coffee.jpg
Binary file not shown.
Binary file added assets/images/bug.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/cobblestone.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Binary file added assets/images/enemy_bullet.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/finish_line.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/images/floor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
File renamed without changes
File renamed without changes
Binary file added assets/images/valgrind.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
File renamed without changes
Binary file added assets/images/wojownik.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/exit.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/main.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative1.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative10.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative11.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative12.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative13.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative2.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative3.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative4.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added assets/menu/negative5.png
Binary file added assets/menu/negative6.png
Binary file added assets/menu/negative7.png
Binary file added assets/menu/negative8.png
Binary file added assets/menu/negative9.png
Binary file added assets/menu/neutral1.png
Binary file added assets/menu/play.png
Binary file added assets/menu/positive1.png
Binary file added assets/menu/positive2.png
Binary file added assets/menu/positive3.png
Binary file added assets/menu/positive4.png
Binary file added assets/menu/positive5.png
Binary file added assets/menu/positive6.png
Binary file added assets/menu/positive7.png
Binary file added assets/menu/positive8.png
Binary file added assets/menu/positive9.png
Binary file added assets/menu/retry.png
88 changes: 88 additions & 0 deletions src/game/audio.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
use bevy::prelude::*;
use bevy_kira_audio::{Audio, AudioChannel, AudioPlugin, AudioSource};
use rand::{thread_rng, Rng};

use crate::AppState;

pub struct GameAudioPlugin;

pub struct SimpleAudioEvent {
pub audio_src: Handle<AudioSource>,
}

pub struct ComplexAudioEvent {
pub audio_src: Vec<Handle<AudioSource>>,
}

pub struct AudioAssets {
pub bg: Handle<AudioSource>,
pub menu: Handle<AudioSource>,
pub hits: Vec<Handle<AudioSource>>,
pub death: Handle<AudioSource>,
pub drinks: Vec<Handle<AudioSource>>,
pub shoot: Handle<AudioSource>,
pub fast_shoot: Handle<AudioSource>,
pub lvlup: Handle<AudioSource>,
pub bg_channel: AudioChannel,
pub menu_channel: AudioChannel,
}

impl Plugin for GameAudioPlugin {
fn build(&self, app: &mut App) {
app.add_plugin(AudioPlugin)
.add_startup_system_to_stage(StartupStage::PreStartup, load_audio)
.add_system_set(SystemSet::on_enter(AppState::InGame).with_system(play_bg_music))
.add_system_set(SystemSet::on_exit(AppState::InGame).with_system(play_menu_music))
.add_system(play_simple_audio)
.add_system(play_complex_audio)
.add_startup_system(play_menu_music)
.add_event::<SimpleAudioEvent>()
.add_event::<ComplexAudioEvent>();
}
}

pub fn play_simple_audio(audio: Res<Audio>, mut audio_event: EventReader<SimpleAudioEvent>) {
audio_event.iter().for_each(|event| {
audio.play(event.audio_src.clone());
});
}

pub fn play_complex_audio(audio: Res<Audio>, mut audio_event: EventReader<ComplexAudioEvent>) {
audio_event.iter().for_each(|event| {
let sound_id = thread_rng().gen_range(0..event.audio_src.len());
audio.play(event.audio_src[sound_id].clone());
});
}

fn play_bg_music(audio: Res<Audio>, audio_state: Res<AudioAssets>) {
audio.stop_channel(&audio_state.menu_channel);
audio.play_looped_in_channel(audio_state.bg.clone(), &audio_state.bg_channel);
}

fn play_menu_music(audio: Res<Audio>, audio_state: Res<AudioAssets>) {
audio.stop_channel(&audio_state.bg_channel);
audio.play_looped_in_channel(audio_state.menu.clone(), &audio_state.menu_channel);
}

fn load_audio(mut commands: Commands, assets: Res<AssetServer>) {
commands.insert_resource(AudioAssets {
bg: assets.load("audio/background.ogg"),
menu: assets.load("audio/menu.ogg"),
hits: vec![
assets.load("audio/hit1.ogg"),
assets.load("audio/hit2.ogg"),
assets.load("audio/hit3.ogg"),
],
death: assets.load("audio/death.ogg"),
drinks: vec![
assets.load("audio/drink1.ogg"),
assets.load("audio/drink2.ogg"),
assets.load("audio/drink3.ogg"),
],
shoot: assets.load("audio/shoot.ogg"),
fast_shoot: assets.load("audio/fast_shoot.ogg"),
lvlup: assets.load("audio/levelup.ogg"),
bg_channel: AudioChannel::new("bg".to_string()),
menu_channel: AudioChannel::new("menu".to_string()),
});
}
138 changes: 0 additions & 138 deletions src/game/boosters.rs

This file was deleted.

Loading