basic bg texturing
This commit is contained in:
parent
2b95cbb3b3
commit
f53daafa09
@ -1,7 +1,7 @@
|
||||
use dirty_fsm::{Action, ActionFlag};
|
||||
use raylib::prelude::*;
|
||||
|
||||
use crate::{character::{CharacterState, MainCharacter}, context::GameContext, utilities::render_layer::{FrameUpdate, ScreenSpaceRender, WorldSpaceRender}};
|
||||
use crate::{character::{CharacterState, MainCharacter}, context::GameContext, utilities::{render_layer::{FrameUpdate, ScreenSpaceRender, WorldSpaceRender}, world_paint_texture::WorldPaintTexture}};
|
||||
|
||||
use super::{Scenes, ScreenError};
|
||||
use tracing::{debug, trace};
|
||||
@ -14,11 +14,12 @@ mod world;
|
||||
pub struct InGameScreen {
|
||||
camera: Camera2D,
|
||||
player: MainCharacter,
|
||||
world_background: WorldPaintTexture
|
||||
}
|
||||
|
||||
impl InGameScreen {
|
||||
/// Construct a new `InGameScreen`
|
||||
pub fn new(player_sprite_sheet: Texture2D) -> Self {
|
||||
pub fn new(player_sprite_sheet: Texture2D, background_texture: Texture2D) -> Self {
|
||||
Self {
|
||||
camera: Camera2D {
|
||||
offset: Vector2::zero(),
|
||||
@ -27,6 +28,7 @@ impl InGameScreen {
|
||||
zoom: 1.0,
|
||||
},
|
||||
player: MainCharacter::new(Vector2::new(0.0, -80.0), player_sprite_sheet),
|
||||
world_background: WorldPaintTexture::new(background_texture)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -15,8 +15,9 @@ impl WorldSpaceRender for InGameScreen {
|
||||
config: &GameConfig,
|
||||
) {
|
||||
puffin::profile_function!();
|
||||
// Render the player
|
||||
render_character_in_camera_space(raylib, &self.player, &config);
|
||||
|
||||
// Render the world background
|
||||
self.world_background.render(raylib, Vector2::new(0.0, -1080.0), &self.camera);
|
||||
|
||||
// Render the floor as a line
|
||||
let screen_world_zero = raylib.get_screen_to_world2D(Vector2::zero(), self.camera);
|
||||
@ -30,5 +31,9 @@ impl WorldSpaceRender for InGameScreen {
|
||||
5,
|
||||
config.colors.white,
|
||||
);
|
||||
|
||||
|
||||
// Render the player
|
||||
render_character_in_camera_space(raylib, &self.player, &config);
|
||||
}
|
||||
}
|
||||
|
@ -46,6 +46,8 @@ pub fn build_screen_state_machine(
|
||||
// Load the various textures needed by the states
|
||||
let player_sprite_sheet =
|
||||
load_texture_from_internal_data(raylib_handle, thread, "character/player_run.png").unwrap();
|
||||
let world_background =
|
||||
load_texture_from_internal_data(raylib_handle, thread, "default-texture.png").unwrap();
|
||||
|
||||
// Set up the state machine
|
||||
let mut machine = StateMachine::new();
|
||||
@ -55,6 +57,6 @@ pub fn build_screen_state_machine(
|
||||
LoadingScreen::new(raylib_handle, thread)?,
|
||||
)?;
|
||||
machine.add_action(Scenes::MainMenuScreen, MainMenuScreen::new())?;
|
||||
machine.add_action(Scenes::InGameScene, InGameScreen::new(player_sprite_sheet))?;
|
||||
machine.add_action(Scenes::InGameScene, InGameScreen::new(player_sprite_sheet, world_background))?;
|
||||
Ok(machine)
|
||||
}
|
||||
|
@ -11,6 +11,7 @@ use raylib::{
|
||||
|
||||
use super::non_ref_raylib::HackedRaylibHandle;
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct WorldPaintTexture {
|
||||
texture: Texture2D,
|
||||
}
|
||||
@ -39,7 +40,7 @@ impl WorldPaintTexture {
|
||||
let left_tile_x =
|
||||
(left_edge_distance / self.texture.width as f32).floor() * self.texture.width as f32;
|
||||
let right_tile_x =
|
||||
(right_edge_distance / self.texture.width as f32).ceil() * self.texture.width as f32;
|
||||
left_tile_x + self.texture.width as f32;
|
||||
|
||||
// Render the tiles
|
||||
raylib.draw_texture_v(
|
||||
|
Reference in New Issue
Block a user