Simple art pass

The goal here is not to get final art, just to get _something_ in place.

Art should be toggle-able so we can turn it on/off for the simple boxes
(to debug) and to create a space that better art can easily be added.

I know I _should_ fix the bug where two blocks occupy the same spot...
... but I am chasing the dopamine.
main
Elijah Voigt 3 weeks ago
parent 824cb998ff
commit a53e65af9a

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@ -0,0 +1,7 @@
#!/bin/sh
# placeholder_protagonist.png
# placeholder_enemy.png
# shape_block.png
# bg_block.png
blender -b assets/tetris/placeholder.blend -S monkey -o //placeholder_## -f 01

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

@ -0,0 +1,6 @@
[cargo]
allTargets = false
targetDir = true
[check]
allTargets = false

@ -38,6 +38,12 @@ fn main() {
init_battler, init_battler,
), ),
) )
.add_systems(
OnEnter(DebuggingState::On), toggle_visuals
)
.add_systems(
OnExit(DebuggingState::On), toggle_visuals
)
.add_systems( .add_systems(
Update, Update,
game_state_machine.run_if(state_changed::<GameState>) game_state_machine.run_if(state_changed::<GameState>)
@ -315,6 +321,7 @@ impl Display for LevelGoal {
#[derive(Resource, Debug)] #[derive(Resource, Debug)]
struct Visuals { struct Visuals {
art: Art,
mesh: Handle<Mesh>, mesh: Handle<Mesh>,
material_o: Handle<ColorMaterial>, material_o: Handle<ColorMaterial>,
material_t: Handle<ColorMaterial>, material_t: Handle<ColorMaterial>,
@ -325,6 +332,12 @@ struct Visuals {
material_i: Handle<ColorMaterial>, material_i: Handle<ColorMaterial>,
} }
/// Stores the art assets that may be toggled on and off for development
#[derive(Component, Debug, Clone)]
struct Art {
texture: Handle<Image>
}
#[derive(Resource, Debug, Default)] #[derive(Resource, Debug, Default)]
struct Score(usize); struct Score(usize);
@ -373,36 +386,47 @@ fn init_tetris(
mut commands: Commands, mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>, mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>, mut materials: ResMut<Assets<ColorMaterial>>,
server: Res<AssetServer>,
) { ) {
let mesh = meshes.add(Rectangle::new(SCALE, SCALE)); let mesh = meshes.add(Rectangle::new(SCALE, SCALE));
commands.insert_resource(Visuals { commands.insert_resource(Visuals {
mesh: mesh.clone(), mesh: mesh.clone(),
art: Art {
texture: server.load("tetris/shape_block.png"),
},
material_o: materials.add(ColorMaterial { material_o: materials.add(ColorMaterial {
color: YELLOW.into(), color: YELLOW.into(),
texture: Some(server.load("tetris/shape_block.png")),
..default() ..default()
}), }),
material_t: materials.add(ColorMaterial { material_t: materials.add(ColorMaterial {
color: PURPLE.into(), color: PURPLE.into(),
texture: Some(server.load("tetris/shape_block.png")),
..default() ..default()
}), }),
material_l: materials.add(ColorMaterial { material_l: materials.add(ColorMaterial {
color: ORANGE.into(), color: ORANGE.into(),
texture: Some(server.load("tetris/shape_block.png")),
..default() ..default()
}), }),
material_j: materials.add(ColorMaterial { material_j: materials.add(ColorMaterial {
color: BLUE.into(), color: BLUE.into(),
texture: Some(server.load("tetris/shape_block.png")),
..default() ..default()
}), }),
material_s: materials.add(ColorMaterial { material_s: materials.add(ColorMaterial {
color: LIME.into(), color: LIME.into(),
texture: Some(server.load("tetris/shape_block.png")),
..default() ..default()
}), }),
material_z: materials.add(ColorMaterial { material_z: materials.add(ColorMaterial {
color: RED.into(), color: RED.into(),
texture: Some(server.load("tetris/shape_block.png")),
..default() ..default()
}), }),
material_i: materials.add(ColorMaterial { material_i: materials.add(ColorMaterial {
color: AQUA.into(), color: AQUA.into(),
texture: Some(server.load("tetris/shape_block.png")),
..default() ..default()
}), }),
}); });
@ -414,8 +438,12 @@ fn init_tetris(
Mesh2d(mesh.clone()), Mesh2d(mesh.clone()),
MeshMaterial2d(materials.add(ColorMaterial { MeshMaterial2d(materials.add(ColorMaterial {
color: BLACK.into(), color: BLACK.into(),
texture: Some(server.load("tetris/bg_block.png")),
..default() ..default()
})), })),
Art {
texture: server.load("tetris/bg_block.png"),
},
GridPosition { x, y }, GridPosition { x, y },
Transform::from_xyz(0.0, 0.0, -1.0), Transform::from_xyz(0.0, 0.0, -1.0),
GridBackground, GridBackground,
@ -438,17 +466,23 @@ fn init_battler(
mut commands: Commands, mut commands: Commands,
mut meshes: ResMut<Assets<Mesh>>, mut meshes: ResMut<Assets<Mesh>>,
mut materials: ResMut<Assets<ColorMaterial>>, mut materials: ResMut<Assets<ColorMaterial>>,
server: Res<AssetServer>,
) { ) {
{ {
let mat = materials.add(ColorMaterial { let mat = materials.add(ColorMaterial {
color: BLUE.into(), color: BLUE.into(),
texture: Some(server.load("tetris/placeholder_protagonist.png")),
..default() ..default()
}); });
let mesh = meshes.add(Ellipse::new(SCALE, SCALE * 2.0)); let mesh = meshes.add(Ellipse::new(SCALE, SCALE * 2.0));
let art = Art {
texture: server.load("tetris/placeholder_protagonist.png"),
};
let t = Transform::from_xyz(-3.0 * SCALE, 0.0, 0.0); let t = Transform::from_xyz(-3.0 * SCALE, 0.0, 0.0);
commands.spawn(( commands.spawn((
Mesh2d(mesh), Mesh2d(mesh),
MeshMaterial2d(mat), MeshMaterial2d(mat),
art,
t, t,
BATTLER, BATTLER,
Health(100.0), Health(100.0),
@ -460,13 +494,18 @@ fn init_battler(
{ {
let mat = materials.add(ColorMaterial { let mat = materials.add(ColorMaterial {
color: RED.into(), color: RED.into(),
texture: Some(server.load("tetris/placeholder_enemy.png")),
..default() ..default()
}); });
let art = Art {
texture: server.load("tetris/placeholder_enemy.png"),
};
let mesh = meshes.add(Ellipse::new(SCALE, SCALE)); let mesh = meshes.add(Ellipse::new(SCALE, SCALE));
let t = Transform::from_xyz(3.0 * SCALE, 0.0, 0.0); let t = Transform::from_xyz(3.0 * SCALE, 0.0, 0.0);
commands.spawn(( commands.spawn((
Mesh2d(mesh), Mesh2d(mesh),
MeshMaterial2d(mat), MeshMaterial2d(mat),
art,
t, t,
BATTLER, BATTLER,
Health(100.0), Health(100.0),
@ -955,12 +994,13 @@ fn on_add_shape_layout(
Shape::Z => &visuals.material_z, Shape::Z => &visuals.material_z,
Shape::I => &visuals.material_i, Shape::I => &visuals.material_i,
}; };
let art = visuals.art.clone();
commands commands
.entity(e) .entity(e)
.with_related_entities::<ShapeBlock>(|parent| { .with_related_entities::<ShapeBlock>(|parent| {
sl.coordinates_at(center).for_each(|gp| { sl.coordinates_at(center).for_each(|gp| {
parent parent
.spawn((mesh.clone(), MeshMaterial2d(mat.clone()), gp.unwrap(), Block, TETRIS)) .spawn((mesh.clone(), MeshMaterial2d(mat.clone()), art.clone(), gp.unwrap(), Block, TETRIS))
.observe(movement); .observe(movement);
}); });
}); });
@ -1451,3 +1491,19 @@ fn check_level_fail(
} }
}); });
} }
fn toggle_visuals(
state: Res<State<DebuggingState>>,
query: Query<(&MeshMaterial2d<ColorMaterial>, &Art)>,
mut color_materials: ResMut<Assets<ColorMaterial>>,
) {
query.iter().for_each(|(mm, a)| {
let texture: Option<Handle<Image>> = match state.get() {
DebuggingState::Off => Some(a.texture.clone()),
DebuggingState::On => None,
};
let cm = color_materials.get_mut(mm.0.id()).unwrap();
cm.texture = texture;
});
}

Loading…
Cancel
Save