Redone sprite loading
This commit is contained in:
parent
1031e06024
commit
dfc25d0b77
9 changed files with 189 additions and 117 deletions
BIN
assets/atlas.png
BIN
assets/atlas.png
Binary file not shown.
|
Before Width: | Height: | Size: 16 KiB |
182
assets/atlas.svg
182
assets/atlas.svg
|
|
@ -2,9 +2,9 @@
|
|||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
width="1920"
|
||||
height="1080"
|
||||
viewBox="0 0 1920 1080"
|
||||
width="258.83063"
|
||||
height="363.80368"
|
||||
viewBox="0 0 258.83063 363.80368"
|
||||
version="1.1"
|
||||
id="svg1"
|
||||
inkscape:version="1.4.2 (ebf0e940d0, 2025-05-08)"
|
||||
|
|
@ -14,6 +14,7 @@
|
|||
inkscape:export-ydpi="96"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:svg="http://www.w3.org/2000/svg">
|
||||
<sodipodi:namedview
|
||||
|
|
@ -26,64 +27,147 @@
|
|||
inkscape:pagecheckerboard="1"
|
||||
inkscape:deskcolor="#d1d1d1"
|
||||
inkscape:document-units="px"
|
||||
inkscape:zoom="0.5"
|
||||
inkscape:cx="818"
|
||||
inkscape:cy="503"
|
||||
inkscape:zoom="1"
|
||||
inkscape:cx="-81.5"
|
||||
inkscape:cy="418.5"
|
||||
inkscape:window-width="1890"
|
||||
inkscape:window-height="1012"
|
||||
inkscape:window-x="0"
|
||||
inkscape:window-y="0"
|
||||
inkscape:window-maximized="1"
|
||||
inkscape:current-layer="layer1" />
|
||||
inkscape:current-layer="g50">
|
||||
<inkscape:page
|
||||
x="0"
|
||||
y="0"
|
||||
width="258.83063"
|
||||
height="363.80368"
|
||||
id="page2"
|
||||
margin="0"
|
||||
bleed="0"
|
||||
inkscape:label="CardFront" />
|
||||
<inkscape:page
|
||||
x="258.83061"
|
||||
y="3.3378601e-06"
|
||||
width="166.27165"
|
||||
height="166.27165"
|
||||
id="page3"
|
||||
inkscape:label="HandGUI" />
|
||||
<inkscape:page
|
||||
x="2.1457672e-06"
|
||||
y="363.80369"
|
||||
width="258.83031"
|
||||
height="363.80368"
|
||||
id="page50"
|
||||
inkscape:label="CardBack" />
|
||||
</sodipodi:namedview>
|
||||
<defs
|
||||
id="defs1" />
|
||||
id="defs1">
|
||||
<pattern
|
||||
inkscape:collect="always"
|
||||
xlink:href="#Wave 2"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
id="pattern50"
|
||||
patternTransform="matrix(1.2144712,0,0,2.1737454,331.65722,1107.2246)"
|
||||
x="0"
|
||||
y="0" />
|
||||
<pattern
|
||||
patternUnits="userSpaceOnUse"
|
||||
width="30"
|
||||
height="9"
|
||||
patternTransform="translate(435,777)"
|
||||
preserveAspectRatio="xMidYMid"
|
||||
style="fill:#8c6e58"
|
||||
id="Wave 2"
|
||||
inkscape:collect="always"
|
||||
inkscape:isstock="true"
|
||||
inkscape:label="Wave 2">
|
||||
<path
|
||||
id="path37"
|
||||
style="stroke:none;stroke-linecap:butt;stroke-linejoin:bevel;paint-order:stroke markers fill;stop-color:#000000"
|
||||
d="M 8,9 15,5.5 22,9 Z M 0,9 V 4 L 8,0 h 14 l 8,4 V 9 L 15,1 Z"
|
||||
sodipodi:nodetypes="cccccccccccc" />
|
||||
</pattern>
|
||||
<clipPath
|
||||
clipPathUnits="userSpaceOnUse"
|
||||
id="clipPath24">
|
||||
<rect
|
||||
style="fill:none;stroke:#000000;stroke-width:0.999999;stroke-linecap:butt;stroke-linejoin:bevel;paint-order:stroke markers fill;stop-color:#000000"
|
||||
id="rect24"
|
||||
width="44.999748"
|
||||
height="77.937294"
|
||||
x="251.53429"
|
||||
y="222.73541" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g
|
||||
inkscape:label="Layer 1"
|
||||
inkscape:groupmode="layer"
|
||||
id="layer1">
|
||||
<g
|
||||
id="g7"
|
||||
transform="matrix(5.6603117,0,0,5.6603117,-524.28637,-261.14501)">
|
||||
<rect
|
||||
style="fill:#d7c0b4;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="rect1-6"
|
||||
width="44.727272"
|
||||
height="63.272728"
|
||||
x="93.125"
|
||||
y="46.636154"
|
||||
ry="4.6061144" />
|
||||
<path
|
||||
d="M 137.85191,92.272164 H 93.125353 v 13.029296 c 0,2.55179 2.053681,4.60742 4.605469,4.60742 h 35.515618 c 2.55179,0 4.60547,-2.05563 4.60547,-4.60742 z"
|
||||
style="fill:#b89c8d;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="path6" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#8b6f57;stroke-opacity:1"
|
||||
id="rect1"
|
||||
width="44.727272"
|
||||
height="63.272728"
|
||||
x="93.125"
|
||||
y="46.636154"
|
||||
ry="4.6061144" />
|
||||
id="g1">
|
||||
<g
|
||||
id="g7"
|
||||
transform="matrix(5.6603117,0,0,5.6603117,-524.28637,-261.14501)">
|
||||
<rect
|
||||
style="fill:#d7c0b4;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="rect1-6"
|
||||
width="44.727272"
|
||||
height="63.272728"
|
||||
x="93.125"
|
||||
y="46.636154"
|
||||
ry="4.6061144" />
|
||||
<path
|
||||
d="M 137.85191,92.272164 H 93.125353 v 13.029296 c 0,2.55179 2.053681,4.60742 4.605469,4.60742 h 35.515618 c 2.55179,0 4.60547,-2.05563 4.60547,-4.60742 z"
|
||||
style="fill:#b89c8d;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="path6" />
|
||||
<rect
|
||||
style="fill:none;fill-opacity:1;stroke:#8b6f57;stroke-opacity:1"
|
||||
id="rect1"
|
||||
width="44.727272"
|
||||
height="63.272728"
|
||||
x="93.125"
|
||||
y="46.636154"
|
||||
ry="4.6061144" />
|
||||
</g>
|
||||
<g
|
||||
id="g6"
|
||||
transform="matrix(6.4466105,0,0,6.4466105,-291.48878,180.06403)">
|
||||
<circle
|
||||
style="fill:#333a8f;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="path2"
|
||||
cx="79.977272"
|
||||
cy="23.113636"
|
||||
r="4.4490924" />
|
||||
<path
|
||||
d="m 84.352399,23.924183 c -1.842583,-0.133374 -3.612919,-1.030539 -5.410156,-1.330078 -0.959384,-0.159898 -2.058666,0.03909 -2.966797,0.341797 -0.137414,0.0458 -0.29102,0.10665 -0.447266,0.177734 a 4.4490924,4.4490924 0 0 1 0,0.002 4.4490924,4.4490924 0 0 0 4.449219,4.449219 4.4490924,4.4490924 0 0 0 4.375,-3.640625 z"
|
||||
style="fill:#18229c;fill-opacity:1"
|
||||
id="path4" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:1;stroke:#09118b;stroke-opacity:1"
|
||||
id="path2-3"
|
||||
cx="79.977272"
|
||||
cy="23.113636"
|
||||
r="4.4490924" />
|
||||
</g>
|
||||
</g>
|
||||
<g
|
||||
id="g6"
|
||||
transform="matrix(6.4466105,0,0,6.4466105,-291.48878,180.06403)">
|
||||
<circle
|
||||
style="fill:#333a8f;fill-opacity:1;stroke:none;stroke-opacity:1"
|
||||
id="path2"
|
||||
cx="79.977272"
|
||||
cy="23.113636"
|
||||
r="4.4490924" />
|
||||
<path
|
||||
d="m 84.352399,23.924183 c -1.842583,-0.133374 -3.612919,-1.030539 -5.410156,-1.330078 -0.959384,-0.159898 -2.058666,0.03909 -2.966797,0.341797 -0.137414,0.0458 -0.29102,0.10665 -0.447266,0.177734 a 4.4490924,4.4490924 0 0 1 0,0.002 4.4490924,4.4490924 0 0 0 4.449219,4.449219 4.4490924,4.4490924 0 0 0 4.375,-3.640625 z"
|
||||
style="fill:#18229c;fill-opacity:1"
|
||||
id="path4" />
|
||||
<circle
|
||||
style="fill:none;fill-opacity:1;stroke:#09118b;stroke-opacity:1"
|
||||
id="path2-3"
|
||||
cx="79.977272"
|
||||
cy="23.113636"
|
||||
r="4.4490924" />
|
||||
id="g50">
|
||||
<rect
|
||||
style="mix-blend-mode:normal;fill:#ba8071;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:5.66031;stroke-opacity:1"
|
||||
id="rect1-0-0"
|
||||
width="253.1703"
|
||||
height="358.14337"
|
||||
x="2.8301558"
|
||||
y="366.63385"
|
||||
ry="26.072042" />
|
||||
<rect
|
||||
style="mix-blend-mode:normal;fill:url(#pattern50);fill-opacity:1;fill-rule:nonzero;stroke:#8b6f57;stroke-width:5.66031;stroke-opacity:1"
|
||||
id="rect1-0"
|
||||
width="253.17"
|
||||
height="358.14337"
|
||||
x="2.830157"
|
||||
y="366.63385"
|
||||
ry="26.072042" />
|
||||
</g>
|
||||
<rect
|
||||
style="fill:#6e4b37;fill-opacity:1;stroke:#50351e;stroke-width:5.66031;stroke-opacity:1"
|
||||
|
|
@ -91,7 +175,7 @@
|
|||
width="160.61134"
|
||||
height="160.61134"
|
||||
x="261.66077"
|
||||
y="2.8301561"
|
||||
y="2.8301582"
|
||||
ry="0" />
|
||||
</g>
|
||||
</svg>
|
||||
|
|
|
|||
|
Before Width: | Height: | Size: 3.2 KiB After Width: | Height: | Size: 5.7 KiB |
BIN
assets/atlas_CardBack.png
Normal file
BIN
assets/atlas_CardBack.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 82 KiB |
BIN
assets/atlas_CardFront.png
Normal file
BIN
assets/atlas_CardFront.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.6 KiB |
BIN
assets/atlas_HandGUI.png
Normal file
BIN
assets/atlas_HandGUI.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 663 B |
|
|
@ -1,13 +1,23 @@
|
|||
use crate::lofpara_atlas::*;
|
||||
use bevy::prelude::*;
|
||||
|
||||
use crate::sprite_loading::SpriteRegistry;
|
||||
|
||||
pub mod hand;
|
||||
|
||||
pub struct CardsPlugin;
|
||||
|
||||
impl Plugin for CardsPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_observer(on_create_card);
|
||||
app.add_observer(on_create_card)
|
||||
.add_systems(Startup, |mut commands: Commands| {
|
||||
commands.spawn(Camera2d);
|
||||
for i in 0..4 {
|
||||
commands.trigger(CreateCard {
|
||||
parent: None,
|
||||
transform: Transform::from_xyz(100. * (i as f32), 0., 0.),
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -16,26 +26,21 @@ pub struct Card;
|
|||
|
||||
#[derive(Event)]
|
||||
pub struct CreateCard {
|
||||
parent: Option<Entity>,
|
||||
pub parent: Option<Entity>,
|
||||
pub transform: Transform,
|
||||
}
|
||||
|
||||
pub fn on_create_card(
|
||||
event: On<CreateCard>,
|
||||
mut commands: Commands,
|
||||
atlas_layout: Res<LofparaAtlasLayout>,
|
||||
atlas_sprite: Res<LofparaAtlasImage>,
|
||||
) {
|
||||
pub fn on_create_card(event: On<CreateCard>, mut commands: Commands, sprites: Res<SpriteRegistry>) {
|
||||
let Some(sprite) = sprites.0.get("card_front") else {
|
||||
return;
|
||||
};
|
||||
if let Some(parent) = event.parent {
|
||||
commands.spawn((
|
||||
Card,
|
||||
Transform::from_xyz(0., 0., 0.),
|
||||
event.transform,
|
||||
Sprite {
|
||||
image: atlas_sprite.get(),
|
||||
image: sprite.clone(),
|
||||
image_mode: SpriteImageMode::Auto,
|
||||
texture_atlas: Some(TextureAtlas {
|
||||
layout: atlas_layout.get(),
|
||||
index: 0,
|
||||
}),
|
||||
..default()
|
||||
},
|
||||
ChildOf(parent),
|
||||
|
|
@ -43,14 +48,10 @@ pub fn on_create_card(
|
|||
} else {
|
||||
commands.spawn((
|
||||
Card,
|
||||
Transform::from_xyz(0., 0., 0.),
|
||||
event.transform,
|
||||
Sprite {
|
||||
image: atlas_sprite.get(),
|
||||
image: sprite.clone(),
|
||||
image_mode: SpriteImageMode::Auto,
|
||||
texture_atlas: Some(TextureAtlas {
|
||||
layout: atlas_layout.get(),
|
||||
index: 0,
|
||||
}),
|
||||
..default()
|
||||
},
|
||||
));
|
||||
|
|
|
|||
|
|
@ -1,43 +0,0 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
#[derive(Resource)]
|
||||
pub struct LofparaAtlasLayout(Handle<TextureAtlasLayout>);
|
||||
|
||||
impl LofparaAtlasLayout {
|
||||
pub fn get(&self) -> Handle<TextureAtlasLayout> {
|
||||
return self.0.clone();
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Resource)]
|
||||
pub struct LofparaAtlasImage(Handle<Image>);
|
||||
|
||||
impl LofparaAtlasImage {
|
||||
pub fn get(&self) -> Handle<Image> {
|
||||
return self.0.clone();
|
||||
}
|
||||
}
|
||||
|
||||
pub struct LofparaAtlasPlugin;
|
||||
|
||||
impl Plugin for LofparaAtlasPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_systems(Startup, startup_image);
|
||||
}
|
||||
}
|
||||
|
||||
fn startup_image(
|
||||
mut commands: Commands,
|
||||
asset_server: Res<AssetServer>,
|
||||
mut atlas_layouts: ResMut<Assets<TextureAtlasLayout>>,
|
||||
) {
|
||||
commands.insert_resource(LofparaAtlasImage(asset_server.load("atlas.png")));
|
||||
|
||||
let mut atlas_layout = TextureAtlasLayout::new_empty(UVec2::new(1920, 1080));
|
||||
//Card, index = 0
|
||||
atlas_layout.add_texture(URect::new(0, 0, 258, 363));
|
||||
//Cardholder, index = 1
|
||||
atlas_layout.add_texture(URect::new(259, 0, 166, 166));
|
||||
|
||||
commands.insert_resource(LofparaAtlasLayout(atlas_layouts.add(atlas_layout)));
|
||||
}
|
||||
|
|
@ -1,11 +1,12 @@
|
|||
use bevy::prelude::*;
|
||||
|
||||
use crate::cards::CardsPlugin;
|
||||
use crate::lofpara_atlas::LofparaAtlasPlugin;
|
||||
use crate::{cards::CardsPlugin, sprite_loading::SpriteLoadingPlugin};
|
||||
|
||||
mod cards;
|
||||
mod lofpara_atlas;
|
||||
mod sprite_loading;
|
||||
|
||||
fn main() {
|
||||
App::new().add_plugins((DefaultPlugins, LofparaAtlasPlugin, CardsPlugin));
|
||||
App::new()
|
||||
.add_plugins((DefaultPlugins, CardsPlugin, SpriteLoadingPlugin))
|
||||
.run();
|
||||
}
|
||||
|
|
|
|||
29
src/sprite_loading.rs
Normal file
29
src/sprite_loading.rs
Normal file
|
|
@ -0,0 +1,29 @@
|
|||
use bevy::prelude::*;
|
||||
use std::collections::HashMap;
|
||||
|
||||
#[derive(Resource)]
|
||||
pub struct SpriteRegistry(pub HashMap<String, Handle<Image>>);
|
||||
|
||||
pub struct SpriteLoadingPlugin;
|
||||
|
||||
impl Plugin for SpriteLoadingPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.insert_resource(SpriteRegistry(HashMap::new()))
|
||||
.add_systems(Startup, setup_sprite_registry);
|
||||
}
|
||||
}
|
||||
|
||||
pub fn setup_sprite_registry(mut sprites: ResMut<SpriteRegistry>, asset_server: Res<AssetServer>) {
|
||||
sprites.0.insert(
|
||||
"card_back".to_string(),
|
||||
asset_server.load("atlas_CardBack.png"),
|
||||
);
|
||||
sprites.0.insert(
|
||||
"card_front".to_string(),
|
||||
asset_server.load("atlas_CardFront.png"),
|
||||
);
|
||||
sprites.0.insert(
|
||||
"hand_gui".to_string(),
|
||||
asset_server.load("atlas_HandGUI.png"),
|
||||
);
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue