mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Add skill for swimming speed
This commit is contained in:
parent
985c26dd0a
commit
e06870702f
@ -74,4 +74,5 @@
|
||||
Roll(Duration): Some(2),
|
||||
Climb(Cost): Some(2),
|
||||
Climb(Speed): Some(2),
|
||||
Swim(Speed): Some(2),
|
||||
})
|
@ -13,7 +13,8 @@
|
||||
Roll(Strength),
|
||||
Roll(Duration),
|
||||
Climb(Cost),
|
||||
Climb(Speed)
|
||||
Climb(Speed),
|
||||
Swim(Speed),
|
||||
],
|
||||
Weapon(Sword): [
|
||||
Sword(InterruptingAttacks),
|
||||
|
BIN
assets/voxygen/element/icons/skilltree/skill_swim.png
(Stored with Git LFS)
Normal file
BIN
assets/voxygen/element/icons/skilltree/skill_swim.png
(Stored with Git LFS)
Normal file
Binary file not shown.
@ -39,6 +39,10 @@
|
||||
"hud.skill.climbing_cost": "Climbing uses 20% less stamina{SP}",
|
||||
"hud.skill.climbing_speed_title": "Climbing Speed",
|
||||
"hud.skill.climbing_speed": "Climb 20% faster{SP}",
|
||||
"hud.skill.swim_title": "Swimming",
|
||||
"hud.skill.swim": "Moving in wet environment",
|
||||
"hud.skill.swim_speed_title": "Swimming Speed",
|
||||
"hud.skill.swim_speed": "Swim 40% faster{SP}",
|
||||
// Sceptre
|
||||
"hud.skill.sc_lifesteal_title": "Lifesteal Beam",
|
||||
"hud.skill.sc_lifesteal": "Drain the life from your enemies",
|
||||
|
@ -37,8 +37,12 @@
|
||||
"hud.skill.climbing": "Sauter encore plus haut",
|
||||
"hud.skill.climbing_cost_title": "Coût d'endurance de l'Escalade",
|
||||
"hud.skill.climbing_cost": "Escalader coûte 20% moins d'endurance{SP}",
|
||||
"hud.skill.climbing_speed_title": "Climbing Speed",
|
||||
"hud.skill.climbing_speed_title": "Vitesse d'Escalade",
|
||||
"hud.skill.climbing_speed": "Escalader 20% plus vite{SP}",
|
||||
"hud.skill.swim_title": "Nage",
|
||||
"hud.skill.swim": "Déplacement en environnement humide",
|
||||
"hud.skill.swim_speed_title": "Vitesse de nage",
|
||||
"hud.skill.swim_speed": "Nager 40% plus vite{SP}",
|
||||
// Sceptre
|
||||
"hud.skill.sc_lifesteal_title": "Rayon de Vol-Vie",
|
||||
"hud.skill.sc_lifesteal": "Draine la vie de vos ennemis",
|
||||
|
@ -104,6 +104,7 @@ pub enum Skill {
|
||||
UnlockGroup(SkillGroupKind),
|
||||
Roll(RollSkill),
|
||||
Climb(ClimbSkill),
|
||||
Swim(SwimSkill),
|
||||
}
|
||||
|
||||
pub enum SkillError {
|
||||
@ -257,6 +258,11 @@ pub enum ClimbSkill {
|
||||
Speed,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum SwimSkill {
|
||||
Speed,
|
||||
}
|
||||
|
||||
#[derive(Clone, Copy, Debug, Hash, PartialEq, Eq, Serialize, Deserialize)]
|
||||
pub enum SkillGroupKind {
|
||||
General,
|
||||
|
@ -4,7 +4,7 @@ use crate::{
|
||||
inventory::slot::EquipSlot,
|
||||
item::{Hands, ItemKind, Tool, ToolKind},
|
||||
quadruped_low, quadruped_medium, quadruped_small, ship,
|
||||
skills::Skill,
|
||||
skills::{Skill, SwimSkill},
|
||||
theropod, Body, CharacterAbility, CharacterState, InputKind, InventoryAction, StateUpdate,
|
||||
},
|
||||
consts::{FRIC_GROUND, GRAVITY},
|
||||
@ -299,11 +299,22 @@ pub fn handle_orientation(data: &JoinData, update: &mut StateUpdate, rate: f32)
|
||||
|
||||
/// Updates components to move player as if theyre swimming
|
||||
fn swim_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32, depth: f32) {
|
||||
let mut water_accel = BASE_HUMANOID_WATER_ACCEL;
|
||||
let mut water_speed = BASE_HUMANOID_WATER_SPEED;
|
||||
if let Ok(Some(level)) = data
|
||||
.stats
|
||||
.skill_set
|
||||
.skill_level(Skill::Swim(SwimSkill::Speed))
|
||||
{
|
||||
water_speed *= 1.4_f32.powi(level.into());
|
||||
water_accel *= 1.4_f32.powi(level.into());
|
||||
}
|
||||
|
||||
// Update velocity
|
||||
update.vel.0 += Vec2::broadcast(data.dt.0)
|
||||
* data.inputs.move_dir
|
||||
* if update.vel.0.magnitude_squared() < BASE_HUMANOID_WATER_SPEED.powi(2) {
|
||||
BASE_HUMANOID_WATER_ACCEL
|
||||
* if update.vel.0.magnitude_squared() < water_speed.powi(2) {
|
||||
water_accel
|
||||
} else {
|
||||
0.0
|
||||
}
|
||||
@ -324,7 +335,7 @@ fn swim_move(data: &JoinData, update: &mut StateUpdate, efficiency: f32, depth:
|
||||
.inputs
|
||||
.move_z
|
||||
.clamped(-1.0, depth.clamped(0.0, 1.0).powi(3)))
|
||||
.min(BASE_HUMANOID_WATER_SPEED);
|
||||
.min(water_speed);
|
||||
}
|
||||
|
||||
/// Updates components to move entity as if it's flying
|
||||
|
@ -41,7 +41,7 @@ pub fn skill_to_db_string(skill: comp::skills::Skill) -> String {
|
||||
item::tool::ToolKind,
|
||||
skills::{
|
||||
AxeSkill, BowSkill, ClimbSkill, GeneralSkill, HammerSkill, RollSkill, SceptreSkill,
|
||||
Skill::*, SkillGroupKind, StaffSkill, SwordSkill,
|
||||
Skill::*, SkillGroupKind, StaffSkill, SwimSkill, SwordSkill,
|
||||
},
|
||||
};
|
||||
let skill_string = match skill {
|
||||
@ -136,6 +136,7 @@ pub fn skill_to_db_string(skill: comp::skills::Skill) -> String {
|
||||
Roll(RollSkill::Duration) => "Roll Duration",
|
||||
Climb(ClimbSkill::Cost) => "Climb Cost",
|
||||
Climb(ClimbSkill::Speed) => "Climb Speed",
|
||||
Swim(SwimSkill::Speed) => "Swim Speed",
|
||||
UnlockGroup(SkillGroupKind::Weapon(ToolKind::Sword)) => "Unlock Weapon Sword",
|
||||
UnlockGroup(SkillGroupKind::Weapon(ToolKind::Axe)) => "Unlock Weapon Axe",
|
||||
UnlockGroup(SkillGroupKind::Weapon(ToolKind::Hammer)) => "Unlock Weapon Hammer",
|
||||
@ -166,7 +167,7 @@ pub fn db_string_to_skill(skill_string: &str) -> comp::skills::Skill {
|
||||
item::tool::ToolKind,
|
||||
skills::{
|
||||
AxeSkill, BowSkill, ClimbSkill, GeneralSkill, HammerSkill, RollSkill, SceptreSkill,
|
||||
Skill::*, SkillGroupKind, StaffSkill, SwordSkill,
|
||||
Skill::*, SkillGroupKind, StaffSkill, SwimSkill, SwordSkill,
|
||||
},
|
||||
};
|
||||
match skill_string {
|
||||
@ -261,6 +262,7 @@ pub fn db_string_to_skill(skill_string: &str) -> comp::skills::Skill {
|
||||
"Roll Duration" => Roll(RollSkill::Duration),
|
||||
"Climb Cost" => Climb(ClimbSkill::Cost),
|
||||
"Climb Speed" => Climb(ClimbSkill::Speed),
|
||||
"Swim Speed" => Swim(SwimSkill::Speed),
|
||||
"Unlock Weapon Sword" => UnlockGroup(SkillGroupKind::Weapon(ToolKind::Sword)),
|
||||
"Unlock Weapon Axe" => UnlockGroup(SkillGroupKind::Weapon(ToolKind::Axe)),
|
||||
"Unlock Weapon Hammer" => UnlockGroup(SkillGroupKind::Weapon(ToolKind::Hammer)),
|
||||
|
@ -166,6 +166,8 @@ widget_ids! {
|
||||
skill_general_climb_0,
|
||||
skill_general_climb_1,
|
||||
skill_general_climb_2,
|
||||
skill_general_swim_0,
|
||||
skill_general_swim_1,
|
||||
}
|
||||
}
|
||||
|
||||
@ -575,7 +577,7 @@ impl<'a> Widget for Diary<'a> {
|
||||
_ => 0,
|
||||
};
|
||||
let skills_bot_r = match sel_tab {
|
||||
SelectedSkillTree::General => 3,
|
||||
SelectedSkillTree::General => 5,
|
||||
SelectedSkillTree::Weapon(ToolKind::Sword) => 1,
|
||||
SelectedSkillTree::Weapon(ToolKind::Bow) => 1,
|
||||
_ => 0,
|
||||
@ -706,10 +708,11 @@ impl<'a> Widget for Diary<'a> {
|
||||
match sel_tab {
|
||||
SelectedSkillTree::General => {
|
||||
use skills::{
|
||||
ClimbSkill::{self},
|
||||
ClimbSkill,
|
||||
GeneralSkill::*,
|
||||
RollSkill::{self, *},
|
||||
SkillGroupKind::*,
|
||||
SwimSkill,
|
||||
};
|
||||
use ToolKind::*;
|
||||
// General Combat
|
||||
@ -1115,6 +1118,44 @@ impl<'a> Widget for Diary<'a> {
|
||||
{
|
||||
events.push(Event::UnlockSkill(skill));
|
||||
};
|
||||
|
||||
Button::image(self.imgs.skill_swim_skill)
|
||||
.w_h(74.0, 74.0)
|
||||
.mid_top_with_margin_on(state.skills_bot_r[3], 3.0)
|
||||
.with_tooltip(
|
||||
self.tooltip_manager,
|
||||
&self.localized_strings.get("hud.skill.swim_title"),
|
||||
&self.localized_strings.get("hud.skill.swim"),
|
||||
&diary_tooltip,
|
||||
TEXT_COLOR,
|
||||
)
|
||||
.set(state.skill_general_swim_0, ui);
|
||||
let skill = Skill::Swim(SwimSkill::Speed);
|
||||
if create_skill_button(
|
||||
self.imgs.utility_speed_skill,
|
||||
state.skills_bot_r[4],
|
||||
&self.stats.skill_set,
|
||||
skill,
|
||||
self.fonts,
|
||||
&get_skill_label(skill, &self.stats.skill_set),
|
||||
)
|
||||
.with_tooltip(
|
||||
self.tooltip_manager,
|
||||
&self.localized_strings.get("hud.skill.swim_speed_title"),
|
||||
&add_sp_cost_tooltip(
|
||||
&self.localized_strings.get("hud.skill.swim_speed"),
|
||||
skill,
|
||||
&self.stats.skill_set,
|
||||
&self.localized_strings,
|
||||
),
|
||||
&diary_tooltip,
|
||||
TEXT_COLOR,
|
||||
)
|
||||
.set(state.skill_general_swim_1, ui)
|
||||
.was_clicked()
|
||||
{
|
||||
events.push(Event::UnlockSkill(skill));
|
||||
};
|
||||
},
|
||||
SelectedSkillTree::Weapon(ToolKind::Sword) => {
|
||||
use skills::SwordSkill::*;
|
||||
|
@ -182,6 +182,7 @@ image_ids! {
|
||||
unlock_sword_skill: "voxygen.element.icons.skilltree.unlock_sword",
|
||||
skill_dodge_skill: "voxygen.element.icons.skilltree.skill_dodge",
|
||||
skill_climbing_skill: "voxygen.element.icons.skilltree.skill_climbing",
|
||||
skill_swim_skill: "voxygen.element.icons.skilltree.skill_swim",
|
||||
|
||||
buff_amount_skill: "voxygen.element.icons.skilltree.buff_amount",
|
||||
buff_combo_skill: "voxygen.element.icons.skilltree.buff_combo",
|
||||
|
Loading…
Reference in New Issue
Block a user