made first person camera follow race heights, minor zoom chances

This commit is contained in:
Treeco 2019-12-01 19:05:28 +00:00
parent a6ef802f9c
commit 7c17c45f47
4 changed files with 36 additions and 17 deletions

View File

@ -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,

View File

@ -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,
) )

View File

@ -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;
} }
} }
} }

View File

@ -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,