some more fixes

This commit is contained in:
nquidox 2026-04-13 14:02:44 +03:00
parent a81f9fa8ac
commit c1e53bdab0
9 changed files with 34 additions and 20 deletions

16
Cargo.lock generated
View file

@ -4184,14 +4184,6 @@ version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832" checksum = "19b30a45b0cd0bcca8037f3d0dc3421eaf95327a17cad11964fb8179b4fc4832"
[[package]]
name = "rgg-zuma"
version = "0.1.0"
dependencies = [
"bevy",
"rand 0.10.0",
]
[[package]] [[package]]
name = "rodio" name = "rodio"
version = "0.20.1" version = "0.20.1"
@ -5993,3 +5985,11 @@ name = "zmij"
version = "1.0.21" version = "1.0.21"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa" checksum = "b8848ee67ecc8aedbaf3e4122217aff892639231befc6a1b58d29fff4c2cabaa"
[[package]]
name = "zuma-like"
version = "0.1.0"
dependencies = [
"bevy",
"rand 0.10.0",
]

View file

@ -1,5 +1,5 @@
[package] [package]
name = "rgg-zuma" name = "zuma-like"
version = "0.1.0" version = "0.1.0"
edition = "2024" edition = "2024"

View file

@ -73,7 +73,7 @@ fn setup_game(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.entity(root).add_child(menu_root); commands.entity(root).add_child(menu_root);
//бэкграунд //бэкграунд
let bg: Handle<Image> = asset_server.load("bg/game.png"); let bg: Handle<Image> = asset_server.load("sprites/bg/game.png");
let bg_entity = spawn_background(&mut commands, bg, GameStateRootMarker); let bg_entity = spawn_background(&mut commands, bg, GameStateRootMarker);
let mm_button_style = ButtonStyle { let mm_button_style = ButtonStyle {

View file

@ -20,10 +20,10 @@ pub enum BallType {
impl BallType { impl BallType {
pub const fn asset_path(&self) -> &'static str { pub const fn asset_path(&self) -> &'static str {
match self { match self {
BallType::First => "balls/1.png", BallType::First => "sprites/balls/1.png",
BallType::Second => "balls/2.png", BallType::Second => "sprites/balls/2.png",
BallType::Third => "balls/3.png", BallType::Third => "sprites/balls/3.png",
BallType::Forth => "balls/4.png", BallType::Forth => "sprites/balls/4.png",
} }
} }

View file

@ -232,7 +232,7 @@ pub fn check_wave_completion(
} }
// проверка на количество поинтов для победы // проверка на количество поинтов для победы
if score.0 == POINTS_TO_WIN { if score.0 >= POINTS_TO_WIN {
game_win.0 = true; game_win.0 = true;
return; return;
} }

View file

@ -4,7 +4,7 @@ use bevy::window::PrimaryWindow;
use std::collections::HashSet; use std::collections::HashSet;
pub fn setup_cannon(mut commands: Commands, asset_server: Res<AssetServer>) { pub fn setup_cannon(mut commands: Commands, asset_server: Res<AssetServer>) {
let texture: Handle<Image> = asset_server.load("cannon/cannon.png"); let texture: Handle<Image> = asset_server.load("sprites/cannon/cannon.png");
commands.spawn(( commands.spawn((
LevelMarker, LevelMarker,
@ -133,7 +133,13 @@ pub fn update_cannon_preview(
if let Ok(muzzle_entity) = muzzle_query.single() { if let Ok(muzzle_entity) = muzzle_query.single() {
// усли шарик у дула есть, то обновляем спрайт // усли шарик у дула есть, то обновляем спрайт
commands.entity(muzzle_entity).insert(Sprite::from_image(muzzle_image)); commands.entity(muzzle_entity).insert(
Sprite{
image: muzzle_image,
custom_size: Some(Vec2::splat(SLOT_SIZE)),
..default()
}
);
} else { } else {
//иначе создаем //иначе создаем
let preview_entity = commands.spawn(( let preview_entity = commands.spawn((
@ -153,7 +159,11 @@ pub fn update_cannon_preview(
let next_image = asset_server.load(cannon_state.next_type.asset_path()); let next_image = asset_server.load(cannon_state.next_type.asset_path());
if let Ok(next_entity) = next_query.single() { if let Ok(next_entity) = next_query.single() {
commands.entity(next_entity).insert(Sprite::from_image(next_image)); commands.entity(next_entity).insert(Sprite{
image: next_image,
custom_size: Some(Vec2::splat(SLOT_SIZE)),
..default()
});
} else { } else {
let preview_entity = commands.spawn(( let preview_entity = commands.spawn((
NextPreviewMarker, NextPreviewMarker,
@ -236,6 +246,8 @@ pub fn detect_projectile_hit(
} }
// проверяем попадание // проверяем попадание
// FIXME из-за рассинхрона прогресса и индекса иногда шарик-снаряд
// пролетает насквозь визуально через другой шарик
let hit = match HITBOX_TYPE { let hit = match HITBOX_TYPE {
HitboxType::Circle => { HitboxType::Circle => {
min_dist < HIT_THRESHOLD min_dist < HIT_THRESHOLD
@ -279,6 +291,7 @@ pub fn detect_projectile_hit(
// ищем конец непрерывной очереди начиная с insert_idx // ищем конец непрерывной очереди начиная с insert_idx
// строим набор занятых индексов (обязательно до вставки) // строим набор занятых индексов (обязательно до вставки)
// FIXME если оторванных групп больше одной, то слияние очереди нарушается в механике, хотя визуально все ок
let occupied: HashSet<usize> = balls.iter() let occupied: HashSet<usize> = balls.iter()
.map(|(_, b)| b.slot_index) .map(|(_, b)| b.slot_index)
.collect(); .collect();

View file

@ -34,6 +34,7 @@ pub fn setup_track_with_buffer() -> TrackPath {
// for debug // for debug
fn make_track() -> Vec<Vec2> { fn make_track() -> Vec<Vec2> {
// make_track_40()
make_track_80() make_track_80()
} }

View file

@ -67,7 +67,7 @@ fn setup_main_menu(mut commands: Commands, asset_server: Res<AssetServer>) {
commands.entity(root).add_child(menu_root); commands.entity(root).add_child(menu_root);
//бэкграунд //бэкграунд
let bg: Handle<Image> = asset_server.load("bg/main_menu.png"); let bg: Handle<Image> = asset_server.load("sprites/bg/main_menu.png");
spawn_background(&mut commands, bg, MainMenuRootMarker); spawn_background(&mut commands, bg, MainMenuRootMarker);
//задаем стиль кнопкам главного меню //задаем стиль кнопкам главного меню

View file

@ -31,7 +31,7 @@ fn setup_settings_menu(mut commands: Commands, asset_server: Res<AssetServer>) {
)) ))
.id(); .id();
let bg: Handle<Image> = asset_server.load("bg/settings.png"); let bg: Handle<Image> = asset_server.load("sprites/bg/settings.png");
spawn_background(&mut commands, bg, SettingsRootMarker); spawn_background(&mut commands, bg, SettingsRootMarker);
let mm_button_style = ButtonStyle { let mm_button_style = ButtonStyle {