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,
|
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 {
|
impl Default for SkeletonAttr {
|
||||||
fn default() -> Self {
|
fn default() -> Self {
|
||||||
Self {
|
Self {
|
||||||
@ -81,20 +101,7 @@ impl<'a> From<&'a comp::humanoid::Body> for SkeletonAttr {
|
|||||||
fn from(body: &'a comp::humanoid::Body) -> Self {
|
fn from(body: &'a comp::humanoid::Body) -> Self {
|
||||||
use comp::humanoid::{BodyType::*, Race::*};
|
use comp::humanoid::{BodyType::*, Race::*};
|
||||||
Self {
|
Self {
|
||||||
scaler: match (body.race, body.body_type) {
|
scaler: SkeletonAttr::calculate_scale(body),
|
||||||
(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,
|
|
||||||
},
|
|
||||||
head_scale: match (body.race, body.body_type) {
|
head_scale: match (body.race, body.body_type) {
|
||||||
(Orc, Male) => 0.9,
|
(Orc, Male) => 0.9,
|
||||||
(Orc, Female) => 1.0,
|
(Orc, Female) => 1.0,
|
||||||
|
@ -934,7 +934,7 @@ impl<'a> Widget for SettingsWindow<'a> {
|
|||||||
if let Some(new_val) = ImageSlider::discrete(
|
if let Some(new_val) = ImageSlider::discrete(
|
||||||
display_zoom,
|
display_zoom,
|
||||||
1,
|
1,
|
||||||
200,
|
800,
|
||||||
self.imgs.slider_indicator,
|
self.imgs.slider_indicator,
|
||||||
self.imgs.slider,
|
self.imgs.slider,
|
||||||
)
|
)
|
||||||
|
@ -154,6 +154,7 @@ impl Camera {
|
|||||||
}
|
}
|
||||||
CameraMode::FirstPerson => {
|
CameraMode::FirstPerson => {
|
||||||
self.set_mode(CameraMode::ThirdPerson);
|
self.set_mode(CameraMode::ThirdPerson);
|
||||||
|
self.tgt_dist = 1_f32;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,7 @@ use self::{
|
|||||||
terrain::Terrain,
|
terrain::Terrain,
|
||||||
};
|
};
|
||||||
use crate::{
|
use crate::{
|
||||||
|
anim::SkeletonAttr,
|
||||||
audio::{sfx::SfxMgr, AudioFrontend},
|
audio::{sfx::SfxMgr, AudioFrontend},
|
||||||
render::{
|
render::{
|
||||||
create_pp_mesh, create_skybox_mesh, Consts, Globals, Light, Model, PostProcessLocals,
|
create_pp_mesh, create_skybox_mesh, Consts, Globals, Light, Model, PostProcessLocals,
|
||||||
@ -161,6 +162,16 @@ impl Scene {
|
|||||||
.get(client.entity())
|
.get(client.entity())
|
||||||
.map_or(false, |cs| cs.movement.is_roll());
|
.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.
|
// Alter camera position to match player.
|
||||||
let tilt = self.camera.get_orientation().y;
|
let tilt = self.camera.get_orientation().y;
|
||||||
let dist = self.camera.get_distance();
|
let dist = self.camera.get_distance();
|
||||||
@ -168,9 +179,9 @@ impl Scene {
|
|||||||
let up = match self.camera.get_mode() {
|
let up = match self.camera.get_mode() {
|
||||||
CameraMode::FirstPerson => {
|
CameraMode::FirstPerson => {
|
||||||
if player_rolling {
|
if player_rolling {
|
||||||
0.75
|
player_scale * 0.8_f32
|
||||||
} else {
|
} else {
|
||||||
1.5
|
player_scale * 1.6_f32
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
CameraMode::ThirdPerson => 1.2,
|
CameraMode::ThirdPerson => 1.2,
|
||||||
|
Loading…
Reference in New Issue
Block a user