Merge branch 'main' of ssh://tudbut.de:222/HAWGameJam13/game

This commit is contained in:
TudbuT 2024-11-24 18:37:40 +01:00
commit 718f5f7c78
7 changed files with 133 additions and 1085 deletions

View file

@ -1,6 +1,6 @@
[target.x86_64-unknown-linux-gnu]
linker = "clang"
rustflags = [
"-C", "link-arg=-fuse-ld=mold",
]
# linker = "clang"
# rustflags = [
# "-C", "link-arg=-fuse-ld=mold",
# ]

1086
Cargo.lock generated

File diff suppressed because it is too large Load diff

View file

@ -6,7 +6,7 @@ edition = "2021"
[dependencies]
bevy = { version = "0.14.2" }
bevy_rapier2d = {version = "0.27.0", features = ["debug-render-2d", "simd-stable", "parallel"]}
bevy_editor_pls = "0.10"
# bevy_editor_pls = "0.10"
readformat = "0.1.2"
# Enable a small amount of optimization in the dev profile.

View file

@ -7,7 +7,7 @@ use crate::AppState;
mod player;
mod scene;
mod set;
pub mod set;
pub const WORLD_DEPTH: f32 = 0.5;
pub const PLAYER_DEPTH: f32 = 0.4;

View file

@ -59,7 +59,8 @@ pub(super) fn player_plugin(app: &mut App) {
move_player,
debug_player_pos,
run_animations::<PlayerAnimations>,
),
)
.in_set(IngameSet),
)
.init_resource::<PlayerSpawnOneshot>();
}

View file

@ -13,6 +13,7 @@ use crate::parallax::{parallax, Parallax};
use crate::AppState;
use super::player::PlayerSpawnOneshot;
use super::set::IngameSet;
use super::{PLAYER_DEPTH, PLAYER_SIZE_FRACTION};
#[derive(Component)]
@ -52,7 +53,7 @@ impl From<PlayerCoords> for Transform {
pub(super) fn scene_plugin(app: &mut App) {
// app.add_plugins(EditorPlugin::default());
// app.add_systems(, )
app.add_systems(Startup, (import_text_world,));
app.add_systems(Startup, (import_text_world,).in_set(IngameSet));
}
#[derive(Default, Resource)]

View file

@ -1,7 +1,8 @@
#![allow(unused)]
use bevy::prelude::*;
use bevy_rapier2d::prelude::*;
use game::game_plugin;
use game::{game_plugin, set::IngameSet};
use parallax::parallax_plugin;
mod game;
@ -13,6 +14,7 @@ const METER: f32 = 100.;
enum AppState {
#[default]
MainMenu,
StoryPics,
InGame,
GameOver,
}
@ -24,6 +26,15 @@ enum PausedState {
Running,
}
#[derive(States, Debug, Clone, PartialEq, Eq, Hash, Default)]
enum StoryPics {
#[default]
Pic0,
Pic1,
Pic2,
Pic3,
}
fn main() {
let rapier_config = RapierConfiguration {
scaled_shape_subdivision: 2,
@ -46,11 +57,110 @@ fn main() {
.add_plugins(parallax_plugin)
.init_state::<AppState>()
.init_state::<PausedState>()
.insert_state(AppState::InGame) // TODO dont
.insert_state(AppState::StoryPics) // TODO dont
.init_state::<StoryPics>()
.insert_resource(rapier_config)
.configure_sets(Update, IngameSet.run_if(in_state(AppState::InGame)))
.add_systems(OnEnter(AppState::StoryPics), setup_storypics)
.add_systems(
Update,
(storypic_next_thingy, update_storypics).run_if(in_state(AppState::StoryPics)),
)
.add_systems(OnExit(AppState::StoryPics), cleanup_storypics)
.run();
}
fn setup_camera(mut commands: Commands) {
commands.spawn(Camera2dBundle::default());
}
#[derive(Component)]
struct StoryPicMarker;
#[derive(Component)]
struct StoryPicNextBtnMarker;
fn setup_storypics(mut commands: Commands, asset_server: Res<AssetServer>) {
let pic0 = asset_server.load("SC01_Once upon a time.png");
// force preloads
let _pic1: Handle<Image> = asset_server.load("SC02_Gargels_Tower.png");
let _pic2: Handle<Image> = asset_server.load("SC03_The Egg.png");
let _pic3: Handle<Image> = asset_server.load("SC04_The Letter.png");
commands
.spawn(ImageBundle {
image: UiImage {
texture: pic0,
..Default::default()
},
style: Style {
width: Val::Percent(100.),
height: Val::Percent(100.),
justify_content: JustifyContent::End,
align_items: AlignItems::End,
..Default::default()
},
..Default::default()
})
.insert(StoryPicMarker)
.with_children(|parent| {
parent
.spawn((ButtonBundle {
..Default::default()
},))
.insert(StoryPicNextBtnMarker)
.with_children(|parent| {
parent.spawn(TextBundle::from_section(
"Weiter...",
TextStyle {
font_size: 64.,
..Default::default()
},
));
});
});
}
fn storypic_next_thingy(
interaction_query: Query<&Interaction, (Changed<Interaction>, With<StoryPicNextBtnMarker>)>,
cur_pic: Res<State<StoryPics>>,
mut pic_switcher: ResMut<NextState<StoryPics>>,
mut game_state: ResMut<NextState<AppState>>,
) {
let Ok(interaction) = interaction_query.get_single() else {
return ();
};
if *interaction == Interaction::Pressed && *cur_pic == StoryPics::Pic3 {
game_state.set(AppState::InGame);
} else if *interaction == Interaction::Pressed {
pic_switcher.set(match cur_pic.clone() {
StoryPics::Pic0 => StoryPics::Pic1,
StoryPics::Pic1 => StoryPics::Pic2,
StoryPics::Pic2 => StoryPics::Pic3,
StoryPics::Pic3 => unreachable!(),
});
}
}
fn update_storypics(
mut commands: Commands,
mut cur_pic: Query<&mut UiImage, With<StoryPicMarker>>,
cur_pic_state: Res<State<StoryPics>>,
asset_server: Res<AssetServer>,
) {
if cur_pic_state.is_changed() {
let mut pic = cur_pic.single_mut();
pic.texture = asset_server.load(match cur_pic_state.clone() {
StoryPics::Pic0 => "SC01_Once upon a time.png",
StoryPics::Pic1 => "SC02_Gargels_Tower.png",
StoryPics::Pic2 => "SC03_The Egg.png",
StoryPics::Pic3 => "SC04_The Letter.png",
})
}
}
fn cleanup_storypics(mut commands: Commands, to_delete: Query<Entity, With<StoryPicMarker>>) {
for e in &to_delete {
commands.entity(e).despawn_recursive();
}
}