mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
made first person camera follow race heights, minor zoom chances
This commit is contained in:
parent
a6ef802f9c
commit
7c17c45f47
@ -63,6 +63,26 @@ pub struct SkeletonAttr {
|
||||
weapon_y: f32,
|
||||
}
|
||||
|
||||
impl SkeletonAttr {
|
||||
pub fn calculate_scale(body: &comp::humanoid::Body) -> f32 {
|
||||
use comp::humanoid::{BodyType::*, Race::*};
|
||||
match (body.race, body.body_type) {
|
||||
(Orc, Male) => 0.95,
|
||||
(Orc, Female) => 0.8,
|
||||
(Human, Male) => 0.8,
|
||||
(Human, Female) => 0.75,
|
||||
(Elf, Male) => 0.85,
|
||||
(Elf, Female) => 0.8,
|
||||
(Dwarf, Male) => 0.7,
|
||||
(Dwarf, Female) => 0.65,
|
||||
(Undead, Male) => 0.8,
|
||||
(Undead, Female) => 0.75,
|
||||
(Danari, Male) => 0.58,
|
||||
(Danari, Female) => 0.58,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Default for SkeletonAttr {
|
||||
fn default() -> Self {
|
||||
Self {
|
||||
@ -81,20 +101,7 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr {
|
||||
fn from(body: &'a comp::humanoid::Body) -> Self {
|
||||
use comp::humanoid::{BodyType::*, Race::*};
|
||||
Self {
|
||||
scaler: match (body.race, body.body_type) {
|
||||
(Orc, Male) => 0.95,
|
||||
(Orc, Female) => 0.8,
|
||||
(Human, Male) => 0.8,
|
||||
(Human, Female) => 0.75,
|
||||
(Elf, Male) => 0.85,
|
||||
(Elf, Female) => 0.8,
|
||||
(Dwarf, Male) => 0.7,
|
||||
(Dwarf, Female) => 0.65,
|
||||
(Undead, Male) => 0.8,
|
||||
(Undead, Female) => 0.75,
|
||||
(Danari, Male) => 0.58,
|
||||
(Danari, Female) => 0.58,
|
||||
},
|
||||
scaler: SkeletonAttr::calculate_scale(body),
|
||||
head_scale: match (body.race, body.body_type) {
|
||||
(Orc, Male) => 0.9,
|
||||
(Orc, Female) => 1.0,
|
||||
|
@ -934,7 +934,7 @@ impl<'a> Widget for SettingsWindow<'a> {
|
||||
if let Some(new_val) = ImageSlider::discrete(
|
||||
display_zoom,
|
||||
1,
|
||||
200,
|
||||
800,
|
||||
self.imgs.slider_indicator,
|
||||
self.imgs.slider,
|
||||
)
|
||||
|
@ -154,6 +154,7 @@ impl Camera {
|
||||
}
|
||||
CameraMode::FirstPerson => {
|
||||
self.set_mode(CameraMode::ThirdPerson);
|
||||
self.tgt_dist = 1_f32;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -8,6 +8,7 @@ use self::{
|
||||
terrain::Terrain,
|
||||
};
|
||||
use crate::{
|
||||
anim::SkeletonAttr,
|
||||
audio::{sfx::SfxMgr, AudioFrontend},
|
||||
render::{
|
||||
create_pp_mesh, create_skybox_mesh, Consts, Globals, Light, Model, PostProcessLocals,
|
||||
@ -161,6 +162,16 @@ impl Scene {
|
||||
.get(client.entity())
|
||||
.map_or(false, |cs| cs.movement.is_roll());
|
||||
|
||||
let player_scale = match client
|
||||
.state()
|
||||
.ecs()
|
||||
.read_storage::<comp::Body>()
|
||||
.get(client.entity())
|
||||
{
|
||||
Some(comp::Body::Humanoid(body)) => SkeletonAttr::calculate_scale(body),
|
||||
_ => 1_f32,
|
||||
};
|
||||
|
||||
// Alter camera position to match player.
|
||||
let tilt = self.camera.get_orientation().y;
|
||||
let dist = self.camera.get_distance();
|
||||
@ -168,9 +179,9 @@ impl Scene {
|
||||
let up = match self.camera.get_mode() {
|
||||
CameraMode::FirstPerson => {
|
||||
if player_rolling {
|
||||
0.75
|
||||
player_scale * 0.8_f32
|
||||
} else {
|
||||
1.5
|
||||
player_scale * 1.6_f32
|
||||
}
|
||||
}
|
||||
CameraMode::ThirdPerson => 1.2,
|
||||
|
Loading…
Reference in New Issue
Block a user