mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Moved client to session type
This commit is contained in:
parent
0a122431db
commit
c5a506dad2
@ -17,7 +17,7 @@ uniform u_globals {
|
|||||||
vec4 focus_pos;
|
vec4 focus_pos;
|
||||||
vec4 view_distance;
|
vec4 view_distance;
|
||||||
vec4 time_of_day;
|
vec4 time_of_day;
|
||||||
vec4 time;
|
vec4 tick;
|
||||||
};
|
};
|
||||||
|
|
||||||
out vec4 tgt_color;
|
out vec4 tgt_color;
|
||||||
|
@ -18,7 +18,7 @@ uniform u_globals {
|
|||||||
vec4 focus_pos;
|
vec4 focus_pos;
|
||||||
vec4 view_distance;
|
vec4 view_distance;
|
||||||
vec4 time_of_day;
|
vec4 time_of_day;
|
||||||
vec4 time;
|
vec4 tick;
|
||||||
};
|
};
|
||||||
|
|
||||||
struct BoneData {
|
struct BoneData {
|
||||||
|
@ -15,7 +15,7 @@ uniform u_globals {
|
|||||||
vec4 focus_pos;
|
vec4 focus_pos;
|
||||||
vec4 view_distance;
|
vec4 view_distance;
|
||||||
vec4 time_of_day;
|
vec4 time_of_day;
|
||||||
vec4 time;
|
vec4 tick;
|
||||||
};
|
};
|
||||||
|
|
||||||
out vec4 tgt_color;
|
out vec4 tgt_color;
|
||||||
|
@ -15,7 +15,7 @@ uniform u_globals {
|
|||||||
vec4 focus_pos;
|
vec4 focus_pos;
|
||||||
vec4 view_distance;
|
vec4 view_distance;
|
||||||
vec4 time_of_day;
|
vec4 time_of_day;
|
||||||
vec4 time;
|
vec4 tick;
|
||||||
};
|
};
|
||||||
|
|
||||||
out vec3 f_pos;
|
out vec3 f_pos;
|
||||||
|
@ -17,8 +17,8 @@ impl Animation for RunAnimation {
|
|||||||
skeleton: &mut Self::Skeleton,
|
skeleton: &mut Self::Skeleton,
|
||||||
time: f64,
|
time: f64,
|
||||||
) {
|
) {
|
||||||
let wave = (time as f32 * 10.0).sin();
|
let wave = (time as f32 * 8.0).sin();
|
||||||
let wave_fast = (time as f32 * 5.0).sin();
|
let wave_fast = (time as f32 * 4.0).sin();
|
||||||
|
|
||||||
skeleton.head.offset = Vec3::unit_z() * 13.0;
|
skeleton.head.offset = Vec3::unit_z() * 13.0;
|
||||||
skeleton.head.ori = Quaternion::rotation_z(wave * 0.3);
|
skeleton.head.ori = Quaternion::rotation_z(wave * 0.3);
|
||||||
@ -32,11 +32,11 @@ impl Animation for RunAnimation {
|
|||||||
skeleton.leggings.offset = Vec3::unit_z() * 4.0;
|
skeleton.leggings.offset = Vec3::unit_z() * 4.0;
|
||||||
skeleton.leggings.ori = Quaternion::rotation_z(wave * 0.3);
|
skeleton.leggings.ori = Quaternion::rotation_z(wave * 0.3);
|
||||||
|
|
||||||
skeleton.l_hand.offset = Vec3::new(-8.0, wave * 4.0, 9.0);
|
skeleton.l_hand.offset = Vec3::new(-8.0, wave * 5.0, 9.0);
|
||||||
skeleton.r_hand.offset = Vec3::new(8.0, -wave * 4.0, 9.0);
|
skeleton.r_hand.offset = Vec3::new(8.0, -wave * 5.0, 9.0);
|
||||||
|
|
||||||
skeleton.l_foot.offset = Vec3::new(-3.5, -wave * 4.0, -(wave_fast.abs() - 0.5) * 3.0);
|
skeleton.l_foot.offset = Vec3::new(-3.5, -wave * 4.0, -(wave_fast.abs() - 0.5).abs() * 4.0);
|
||||||
skeleton.r_foot.offset = Vec3::new(3.5, wave * 4.0, (wave_fast.abs() - 0.5) * 3.0);
|
skeleton.r_foot.offset = Vec3::new(3.5, wave * 4.0, -(wave_fast.abs() - 0.5).abs() * 4.0);
|
||||||
|
|
||||||
skeleton.back.offset = Vec3::new(-8.0, 5.0, 16.0);
|
skeleton.back.offset = Vec3::new(-8.0, 5.0, 16.0);
|
||||||
skeleton.back.ori = Quaternion::rotation_y(2.5);
|
skeleton.back.ori = Quaternion::rotation_y(2.5);
|
||||||
|
@ -8,7 +8,6 @@ use crate::render::FigureBoneData;
|
|||||||
|
|
||||||
#[derive(Copy, Clone)]
|
#[derive(Copy, Clone)]
|
||||||
pub struct Bone {
|
pub struct Bone {
|
||||||
parent_idx: Option<u8>, // MUST be less than the current bone index
|
|
||||||
pub offset: Vec3<f32>,
|
pub offset: Vec3<f32>,
|
||||||
pub ori: Quaternion<f32>,
|
pub ori: Quaternion<f32>,
|
||||||
}
|
}
|
||||||
@ -16,18 +15,11 @@ pub struct Bone {
|
|||||||
impl Bone {
|
impl Bone {
|
||||||
pub fn default() -> Self {
|
pub fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
parent_idx: None,
|
|
||||||
offset: Vec3::zero(),
|
offset: Vec3::zero(),
|
||||||
ori: Quaternion::identity(),
|
ori: Quaternion::identity(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn get_parent_idx(&self) -> Option<u8> { self.parent_idx }
|
|
||||||
|
|
||||||
pub fn set_parent_idx(&mut self, parent_idx: u8) {
|
|
||||||
self.parent_idx = Some(parent_idx);
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn compute_base_matrix(&self) -> Mat4<f32> {
|
pub fn compute_base_matrix(&self) -> Mat4<f32> {
|
||||||
Mat4::<f32>::translation_3d(self.offset) * Mat4::from(self.ori)
|
Mat4::<f32>::translation_3d(self.offset) * Mat4::from(self.ori)
|
||||||
}
|
}
|
||||||
|
@ -31,7 +31,7 @@ impl PlayState for TitleState {
|
|||||||
Event::Close => return PlayStateResult::Shutdown,
|
Event::Close => return PlayStateResult::Shutdown,
|
||||||
// When space is pressed, start a session
|
// When space is pressed, start a session
|
||||||
Event::Char(' ') => return PlayStateResult::Push(
|
Event::Char(' ') => return PlayStateResult::Push(
|
||||||
Box::new(SessionState::from_renderer(global_state.window.renderer_mut())),
|
Box::new(SessionState::new(global_state.window.renderer_mut())),
|
||||||
),
|
),
|
||||||
// Ignore all other events
|
// Ignore all other events
|
||||||
_ => {},
|
_ => {},
|
||||||
|
@ -23,7 +23,7 @@ gfx_defines! {
|
|||||||
// TODO: Fix whatever alignment issue requires these uniforms to be aligned
|
// TODO: Fix whatever alignment issue requires these uniforms to be aligned
|
||||||
view_distance: [f32; 4] = "view_distance",
|
view_distance: [f32; 4] = "view_distance",
|
||||||
time_of_day: [f32; 4] = "time_of_day", // TODO: Make this f64
|
time_of_day: [f32; 4] = "time_of_day", // TODO: Make this f64
|
||||||
time: [f32; 4] = "time",
|
tick: [f32; 4] = "tick",
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ impl Globals {
|
|||||||
focus_pos: [0.0; 4],
|
focus_pos: [0.0; 4],
|
||||||
view_distance: [0.0; 4],
|
view_distance: [0.0; 4],
|
||||||
time_of_day: [0.0; 4],
|
time_of_day: [0.0; 4],
|
||||||
time: [0.0; 4],
|
tick: [0.0; 4],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -49,7 +49,7 @@ impl Globals {
|
|||||||
focus_pos: Vec3<f32>,
|
focus_pos: Vec3<f32>,
|
||||||
view_distance: f32,
|
view_distance: f32,
|
||||||
time_of_day: f64,
|
time_of_day: f64,
|
||||||
time: f32,
|
tick: f64,
|
||||||
) -> Self {
|
) -> Self {
|
||||||
Self {
|
Self {
|
||||||
view_mat: arr_to_mat(view_mat.into_col_array()),
|
view_mat: arr_to_mat(view_mat.into_col_array()),
|
||||||
@ -58,7 +58,7 @@ impl Globals {
|
|||||||
focus_pos: Vec4::from(focus_pos).into_array(),
|
focus_pos: Vec4::from(focus_pos).into_array(),
|
||||||
view_distance: [view_distance; 4],
|
view_distance: [view_distance; 4],
|
||||||
time_of_day: [time_of_day as f32; 4],
|
time_of_day: [time_of_day as f32; 4],
|
||||||
time: [time; 4],
|
tick: [tick as f32; 4],
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,23 +1,16 @@
|
|||||||
pub mod camera;
|
pub mod camera;
|
||||||
pub mod figure;
|
pub mod figure;
|
||||||
|
|
||||||
// Standard
|
|
||||||
use std::time::Duration;
|
|
||||||
|
|
||||||
// Library
|
// Library
|
||||||
use vek::*;
|
use vek::*;
|
||||||
use dot_vox;
|
use dot_vox;
|
||||||
|
|
||||||
// Project
|
// Project
|
||||||
use client::{
|
|
||||||
self,
|
|
||||||
Client,
|
|
||||||
};
|
|
||||||
use common::figure::Segment;
|
use common::figure::Segment;
|
||||||
|
use client::Client;
|
||||||
|
|
||||||
// Crate
|
// Crate
|
||||||
use crate::{
|
use crate::{
|
||||||
Error,
|
|
||||||
render::{
|
render::{
|
||||||
Consts,
|
Consts,
|
||||||
Globals,
|
Globals,
|
||||||
@ -56,8 +49,6 @@ pub struct Scene {
|
|||||||
skybox: Skybox,
|
skybox: Skybox,
|
||||||
|
|
||||||
test_figure: Figure<CharacterSkeleton>,
|
test_figure: Figure<CharacterSkeleton>,
|
||||||
|
|
||||||
client: Client,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: Make a proper asset loading system
|
// TODO: Make a proper asset loading system
|
||||||
@ -105,17 +96,9 @@ impl Scene {
|
|||||||
CharacterSkeleton::new(),
|
CharacterSkeleton::new(),
|
||||||
)
|
)
|
||||||
.unwrap(),
|
.unwrap(),
|
||||||
|
|
||||||
client: Client::new(),
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Tick the scene (and the client attached to it)
|
|
||||||
pub fn tick(&mut self, dt: Duration) -> Result<(), Error> {
|
|
||||||
self.client.tick(client::Input {}, dt)?;
|
|
||||||
Ok(())
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Handle an incoming user input event (i.e: cursor moved, key pressed, window closed, etc.).
|
/// Handle an incoming user input event (i.e: cursor moved, key pressed, window closed, etc.).
|
||||||
pub fn handle_input_event(&mut self, event: Event) -> bool {
|
pub fn handle_input_event(&mut self, event: Event) -> bool {
|
||||||
match event {
|
match event {
|
||||||
@ -130,7 +113,7 @@ impl Scene {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// Maintain and update GPU data such as constant buffers, models, etc.
|
/// Maintain and update GPU data such as constant buffers, models, etc.
|
||||||
pub fn maintain_gpu_data(&mut self, renderer: &mut Renderer) {
|
pub fn maintain_gpu_data(&mut self, renderer: &mut Renderer, client: &Client) {
|
||||||
// Compute camera matrices
|
// Compute camera matrices
|
||||||
let (view_mat, proj_mat, cam_pos) = self.camera.compute_dependents();
|
let (view_mat, proj_mat, cam_pos) = self.camera.compute_dependents();
|
||||||
|
|
||||||
@ -141,15 +124,15 @@ impl Scene {
|
|||||||
cam_pos,
|
cam_pos,
|
||||||
self.camera.get_focus_pos(),
|
self.camera.get_focus_pos(),
|
||||||
10.0,
|
10.0,
|
||||||
self.client.state().get_time_of_day(),
|
client.state().get_time_of_day(),
|
||||||
0.0,
|
client.state().get_tick(),
|
||||||
)])
|
)])
|
||||||
.expect("Failed to update global constants");
|
.expect("Failed to update global constants");
|
||||||
|
|
||||||
// TODO: Don't do this here
|
// TODO: Don't do this here
|
||||||
RunAnimation::update_skeleton(
|
RunAnimation::update_skeleton(
|
||||||
&mut self.test_figure.skeleton,
|
&mut self.test_figure.skeleton,
|
||||||
self.client.state().get_tick(),
|
client.state().get_tick(),
|
||||||
);
|
);
|
||||||
self.test_figure.update_locals(renderer, FigureLocals::default()).unwrap();
|
self.test_figure.update_locals(renderer, FigureLocals::default()).unwrap();
|
||||||
self.test_figure.update_skeleton(renderer).unwrap();
|
self.test_figure.update_skeleton(renderer).unwrap();
|
||||||
|
@ -6,9 +6,14 @@ use vek::*;
|
|||||||
|
|
||||||
// Project
|
// Project
|
||||||
use common::clock::Clock;
|
use common::clock::Clock;
|
||||||
|
use client::{
|
||||||
|
self,
|
||||||
|
Client,
|
||||||
|
};
|
||||||
|
|
||||||
// Crate
|
// Crate
|
||||||
use crate::{
|
use crate::{
|
||||||
|
Error,
|
||||||
PlayState,
|
PlayState,
|
||||||
PlayStateResult,
|
PlayStateResult,
|
||||||
GlobalState,
|
GlobalState,
|
||||||
@ -21,15 +26,17 @@ const FPS: u64 = 60;
|
|||||||
|
|
||||||
pub struct SessionState {
|
pub struct SessionState {
|
||||||
scene: Scene,
|
scene: Scene,
|
||||||
|
client: Client,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Represents an active game session (i.e: one that is being played)
|
/// Represents an active game session (i.e: one that is being played)
|
||||||
impl SessionState {
|
impl SessionState {
|
||||||
/// Create a new `SessionState`
|
/// Create a new `SessionState`
|
||||||
pub fn from_renderer(renderer: &mut Renderer) -> Self {
|
pub fn new(renderer: &mut Renderer) -> Self {
|
||||||
Self {
|
Self {
|
||||||
// Create a scene for this session. The scene handles visible elements of the game world
|
// Create a scene for this session. The scene handles visible elements of the game world
|
||||||
scene: Scene::new(renderer),
|
scene: Scene::new(renderer),
|
||||||
|
client: Client::new(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -38,12 +45,18 @@ impl SessionState {
|
|||||||
const BG_COLOR: Rgba<f32> = Rgba { r: 0.0, g: 0.3, b: 1.0, a: 1.0 };
|
const BG_COLOR: Rgba<f32> = Rgba { r: 0.0, g: 0.3, b: 1.0, a: 1.0 };
|
||||||
|
|
||||||
impl SessionState {
|
impl SessionState {
|
||||||
|
/// Tick the session (and the client attached to it)
|
||||||
|
pub fn tick(&mut self, dt: Duration) -> Result<(), Error> {
|
||||||
|
self.client.tick(client::Input {}, dt)?;
|
||||||
|
Ok(())
|
||||||
|
}
|
||||||
|
|
||||||
/// Render the session to the screen.
|
/// Render the session to the screen.
|
||||||
///
|
///
|
||||||
/// This method should be called once per frame.
|
/// This method should be called once per frame.
|
||||||
pub fn render(&mut self, renderer: &mut Renderer) {
|
pub fn render(&mut self, renderer: &mut Renderer) {
|
||||||
// Maintain scene GPU data
|
// Maintain scene GPU data
|
||||||
self.scene.maintain_gpu_data(renderer);
|
self.scene.maintain_gpu_data(renderer, &self.client);
|
||||||
|
|
||||||
// Clear the screen
|
// Clear the screen
|
||||||
renderer.clear(BG_COLOR);
|
renderer.clear(BG_COLOR);
|
||||||
@ -79,7 +92,7 @@ impl PlayState for SessionState {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Perform an in-game tick
|
// Perform an in-game tick
|
||||||
self.scene.tick(clock.get_last_delta())
|
self.tick(clock.get_last_delta())
|
||||||
.expect("Failed to tick the scene");
|
.expect("Failed to tick the scene");
|
||||||
|
|
||||||
// Render the session
|
// Render the session
|
||||||
|
Loading…
Reference in New Issue
Block a user