mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
keyframed axe spin
Fixed error in converting FK to entity_id from character_id. Giant match statements in persistence. Tweaked roll. Changed how skills and skill groups were assigned in the skillset builder so it's format more closely followed loadout builder.
This commit is contained in:
parent
5362000de4
commit
5d1993009f
@ -1,7 +1,7 @@
|
||||
SpinMelee(
|
||||
buildup_duration: 100,
|
||||
swing_duration: 300,
|
||||
recover_duration: 100,
|
||||
buildup_duration: 200,
|
||||
swing_duration: 400,
|
||||
recover_duration: 200,
|
||||
base_damage: 60,
|
||||
knockback: 0.0,
|
||||
range: 3.5,
|
||||
|
@ -10,10 +10,10 @@
|
||||
Sword(DSpeed): {Sword(DDamage): Some(1)},
|
||||
Sword(DInfinite): {Sword(DDamage): Some(1)},
|
||||
Sword(DScaling): {Sword(DDamage): Some(1)},
|
||||
Sword(SDamage): {Sword(SUnlockSpin): None},
|
||||
Sword(SSpeed): {Sword(SUnlockSpin): None},
|
||||
Sword(SCost): {Sword(SUnlockSpin): None},
|
||||
Sword(SSpins): {Sword(SUnlockSpin): None},
|
||||
Sword(SDamage): {Sword(UnlockSpin): None},
|
||||
Sword(SSpeed): {Sword(UnlockSpin): None},
|
||||
Sword(SCost): {Sword(UnlockSpin): None},
|
||||
Sword(SSpins): {Sword(UnlockSpin): None},
|
||||
Axe(DsDamage): {Axe(DsCombo): None},
|
||||
Axe(DsSpeed): {Axe(DsCombo): None},
|
||||
Axe(DsRegen): {Axe(DsCombo): None},
|
||||
@ -21,21 +21,21 @@
|
||||
Axe(SDamage): {Axe(SInfinite): None},
|
||||
Axe(SSpeed): {Axe(SInfinite): None},
|
||||
Axe(SCost): {Axe(SInfinite): None},
|
||||
Axe(LDamage): {Axe(LUnlockLeap): None},
|
||||
Axe(LKnockback): {Axe(LUnlockLeap): None},
|
||||
Axe(LCost): {Axe(LUnlockLeap): None},
|
||||
Axe(LDistance): {Axe(LUnlockLeap): None},
|
||||
Axe(LDamage): {Axe(UnlockLeap): None},
|
||||
Axe(LKnockback): {Axe(UnlockLeap): None},
|
||||
Axe(LCost): {Axe(UnlockLeap): None},
|
||||
Axe(LDistance): {Axe(UnlockLeap): None},
|
||||
Hammer(SsDamage): {Hammer(SsKnockback): Some(1)},
|
||||
Hammer(SsRegen): {Hammer(SsKnockback): Some(1)},
|
||||
Hammer(SsSpeed): {Hammer(SsKnockback): Some(1)},
|
||||
Hammer(CDamage): {Hammer(CKnockback): Some(1)},
|
||||
Hammer(CDrain): {Hammer(CKnockback): Some(1)},
|
||||
Hammer(CSpeed): {Hammer(CKnockback): Some(1)},
|
||||
Hammer(LDamage): {Hammer(LUnlockLeap): None},
|
||||
Hammer(LCost): {Hammer(LUnlockLeap): None},
|
||||
Hammer(LDistance): {Hammer(LUnlockLeap): None},
|
||||
Hammer(LKnockback): {Hammer(LUnlockLeap): None},
|
||||
Hammer(LRange): {Hammer(LUnlockLeap): None},
|
||||
Hammer(LDamage): {Hammer(UnlockLeap): None},
|
||||
Hammer(LCost): {Hammer(UnlockLeap): None},
|
||||
Hammer(LDistance): {Hammer(UnlockLeap): None},
|
||||
Hammer(LKnockback): {Hammer(UnlockLeap): None},
|
||||
Hammer(LRange): {Hammer(UnlockLeap): None},
|
||||
Bow(BRegen): {Bow(BDamage): Some(1)},
|
||||
Bow(CKnockback): {Bow(CDamage): Some(1)},
|
||||
Bow(CProjSpeed): {Bow(CDamage): Some(1)},
|
||||
|
@ -25,7 +25,7 @@
|
||||
Sword(DScaling),
|
||||
Sword(DSpeed),
|
||||
Sword(DInfinite),
|
||||
Sword(SUnlockSpin),
|
||||
Sword(UnlockSpin),
|
||||
Sword(SDamage),
|
||||
Sword(SSpeed),
|
||||
Sword(SCost),
|
||||
@ -41,7 +41,7 @@
|
||||
Axe(SDamage),
|
||||
Axe(SSpeed),
|
||||
Axe(SCost),
|
||||
Axe(LUnlockLeap),
|
||||
Axe(UnlockLeap),
|
||||
Axe(LDamage),
|
||||
Axe(LKnockback),
|
||||
Axe(LCost),
|
||||
@ -56,7 +56,7 @@
|
||||
Hammer(CKnockback),
|
||||
Hammer(CDrain),
|
||||
Hammer(CSpeed),
|
||||
Hammer(LUnlockLeap),
|
||||
Hammer(UnlockLeap),
|
||||
Hammer(LDamage),
|
||||
Hammer(LCost),
|
||||
Hammer(LDistance),
|
||||
|
@ -307,9 +307,9 @@ impl CharacterAbility {
|
||||
CharacterAbility::Roll {
|
||||
energy_cost: 150,
|
||||
buildup_duration: 100,
|
||||
movement_duration: 250,
|
||||
movement_duration: 180,
|
||||
recover_duration: 150,
|
||||
roll_strength: 2.5,
|
||||
roll_strength: 1.8,
|
||||
immune_melee: false,
|
||||
}
|
||||
}
|
||||
@ -1035,7 +1035,7 @@ impl CharacterAbility {
|
||||
*energy_cost = (*energy_cost as f32 * 0.8_f32.powi(level.into())) as u32;
|
||||
}
|
||||
if let Some(level) = skills.get(&Skill::Roll(Strength)).copied().flatten() {
|
||||
*roll_strength *= 1.3_f32.powi(level.into());
|
||||
*roll_strength *= 1.2_f32.powi(level.into());
|
||||
}
|
||||
if let Some(level) = skills.get(&Skill::Roll(Duration)).copied().flatten() {
|
||||
*movement_duration =
|
||||
|
@ -92,7 +92,7 @@ pub enum SwordSkill {
|
||||
DSpeed,
|
||||
DInfinite,
|
||||
// Spin upgrades
|
||||
SUnlockSpin,
|
||||
UnlockSpin,
|
||||
SDamage,
|
||||
SSpeed,
|
||||
SCost,
|
||||
@ -113,7 +113,7 @@ pub enum AxeSkill {
|
||||
SSpeed,
|
||||
SCost,
|
||||
// Leap upgrades
|
||||
LUnlockLeap,
|
||||
UnlockLeap,
|
||||
LDamage,
|
||||
LKnockback,
|
||||
LCost,
|
||||
@ -133,7 +133,7 @@ pub enum HammerSkill {
|
||||
CDrain,
|
||||
CSpeed,
|
||||
// Leap upgrades
|
||||
LUnlockLeap,
|
||||
UnlockLeap,
|
||||
LDamage,
|
||||
LCost,
|
||||
LDistance,
|
||||
@ -635,24 +635,21 @@ mod tests {
|
||||
let mut skillset = SkillSet::default();
|
||||
skillset.unlock_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset.add_skill_points(SkillGroupType::Weapon(ToolKind::Axe), 1);
|
||||
skillset.unlock_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.unlock_skill(Skill::Axe(AxeSkill::UnlockLeap));
|
||||
|
||||
assert_eq!(skillset.skill_groups[1].available_sp, 0);
|
||||
assert_eq!(skillset.skills.len(), 1);
|
||||
assert_eq!(
|
||||
skillset
|
||||
.skills
|
||||
.contains_key(&Skill::Axe(AxeSkill::LUnlockLeap)),
|
||||
.contains_key(&Skill::Axe(AxeSkill::UnlockLeap)),
|
||||
true
|
||||
);
|
||||
|
||||
skillset.refund_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.refund_skill(Skill::Axe(AxeSkill::UnlockLeap));
|
||||
|
||||
assert_eq!(skillset.skill_groups[1].available_sp, 1);
|
||||
assert_eq!(
|
||||
skillset.skills.get(&Skill::Axe(AxeSkill::LUnlockLeap)),
|
||||
None
|
||||
);
|
||||
assert_eq!(skillset.skills.get(&Skill::Axe(AxeSkill::UnlockLeap)), None);
|
||||
}
|
||||
|
||||
#[test]
|
||||
@ -678,14 +675,14 @@ mod tests {
|
||||
assert_eq!(skillset.skills.len(), 0);
|
||||
|
||||
// Try unlocking a skill with enough skill points
|
||||
skillset.unlock_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset.unlock_skill(Skill::Axe(AxeSkill::UnlockLeap));
|
||||
|
||||
assert_eq!(skillset.skill_groups[1].available_sp, 0);
|
||||
assert_eq!(skillset.skills.len(), 1);
|
||||
assert_eq!(
|
||||
skillset
|
||||
.skills
|
||||
.contains_key(&Skill::Axe(AxeSkill::LUnlockLeap)),
|
||||
.contains_key(&Skill::Axe(AxeSkill::UnlockLeap)),
|
||||
true
|
||||
);
|
||||
|
||||
|
@ -27,7 +27,6 @@ impl Default for SkillSetBuilder {
|
||||
|
||||
impl SkillSetBuilder {
|
||||
pub fn build_skillset(main_tool: &Option<Item>, config: Option<SkillSetConfig>) -> Self {
|
||||
let mut skillset = Self::default();
|
||||
let active_item = main_tool.as_ref().and_then(|ic| {
|
||||
if let ItemKind::Tool(tool) = &ic.kind() {
|
||||
Some(tool.kind)
|
||||
@ -41,543 +40,558 @@ impl SkillSetBuilder {
|
||||
Some(Guard) => {
|
||||
if let Some(ToolKind::Sword) = active_item {
|
||||
// Sword
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DInfinite));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsRegen))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DCost))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDrain))
|
||||
.with_skill(Skill::Sword(SwordSkill::DScaling))
|
||||
.with_skill(Skill::Sword(SwordSkill::DSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::DInfinite))
|
||||
.with_skill(Skill::Sword(SwordSkill::UnlockSpin))
|
||||
.with_skill(Skill::Sword(SwordSkill::SDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SCost))
|
||||
} else {
|
||||
Self::default()
|
||||
}
|
||||
},
|
||||
Some(Outcast) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DCost))
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsCombo))
|
||||
.with_skill(Skill::Axe(AxeSkill::SInfinite))
|
||||
.with_skill(Skill::Axe(AxeSkill::SSpeed))
|
||||
.with_skill(Skill::Axe(AxeSkill::SCost))
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsSpeed))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CSpeed))
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow))
|
||||
.with_skill(Skill::Bow(BowSkill::BDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::ProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CKnockback))
|
||||
.with_skill(Skill::Bow(BowSkill::CProjSpeed))
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDrain))
|
||||
.with_skill(Skill::Staff(StaffSkill::FVelocity))
|
||||
},
|
||||
_ => {},
|
||||
_ => Self::default(),
|
||||
}
|
||||
},
|
||||
Some(Highwayman) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::UnlockSpin))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SCost))
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsCombo))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::SInfinite))
|
||||
.with_skill(Skill::Axe(AxeSkill::SDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::SSpeed))
|
||||
.with_skill(Skill::Axe(AxeSkill::SCost))
|
||||
.with_skill(Skill::Axe(AxeSkill::UnlockLeap))
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsSpeed))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::UnlockLeap))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LRange))
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow))
|
||||
.with_skill(Skill::Bow(BowSkill::BDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CKnockback))
|
||||
.with_skill(Skill::Bow(BowSkill::CSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CMove))
|
||||
.with_skill(Skill::Bow(BowSkill::UnlockRepeater))
|
||||
.with_skill(Skill::Bow(BowSkill::RArrows))
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff))
|
||||
.with_skill(Skill::Staff(StaffSkill::BExplosion))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRegen))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRadius))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::FRange))
|
||||
.with_skill(Skill::Staff(StaffSkill::FVelocity))
|
||||
.with_skill(Skill::Staff(StaffSkill::UnlockShockwave))
|
||||
},
|
||||
_ => {},
|
||||
_ => Self::default(),
|
||||
}
|
||||
},
|
||||
Some(Bandit) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DCost))
|
||||
.with_skill(Skill::Sword(SwordSkill::UnlockSpin))
|
||||
.with_skill(Skill::Sword(SwordSkill::SDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SCost))
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsCombo))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsSpeed))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsRegen))
|
||||
.with_skill(Skill::Axe(AxeSkill::SInfinite))
|
||||
.with_skill(Skill::Axe(AxeSkill::SDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::UnlockLeap))
|
||||
.with_skill(Skill::Axe(AxeSkill::LKnockback))
|
||||
.with_skill(Skill::Axe(AxeSkill::LCost))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDistance))
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsRegen))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::UnlockLeap))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LCost))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDistance))
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow))
|
||||
.with_skill(Skill::Bow(BowSkill::BDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::ProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::BRegen))
|
||||
.with_skill(Skill::Bow(BowSkill::CDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CDrain))
|
||||
.with_skill(Skill::Bow(BowSkill::CSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::UnlockRepeater))
|
||||
.with_skill(Skill::Bow(BowSkill::RGlide))
|
||||
.with_skill(Skill::Bow(BowSkill::RCost))
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff))
|
||||
.with_skill(Skill::Staff(StaffSkill::BExplosion))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::FRange))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDrain))
|
||||
.with_skill(Skill::Staff(StaffSkill::UnlockShockwave))
|
||||
.with_skill(Skill::Staff(StaffSkill::SDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::SRange))
|
||||
},
|
||||
_ => {},
|
||||
_ => Self::default(),
|
||||
}
|
||||
},
|
||||
Some(CultistNovice) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsRegen))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DCost))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDrain))
|
||||
.with_skill(Skill::Sword(SwordSkill::DScaling))
|
||||
.with_skill(Skill::Sword(SwordSkill::UnlockSpin))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SCost))
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsCombo))
|
||||
.with_skill(Skill::Axe(AxeSkill::SInfinite))
|
||||
.with_skill(Skill::Axe(AxeSkill::SHelicopter))
|
||||
.with_skill(Skill::Axe(AxeSkill::SDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::UnlockLeap))
|
||||
.with_skill(Skill::Axe(AxeSkill::LKnockback))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDistance))
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsSpeed))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsRegen))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDrain))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CSpeed))
|
||||
.with_skill(Skill::Hammer(HammerSkill::UnlockLeap))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LKnockback))
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow))
|
||||
.with_skill(Skill::Bow(BowSkill::BDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::ProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CKnockback))
|
||||
.with_skill(Skill::Bow(BowSkill::CProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CDrain))
|
||||
.with_skill(Skill::Bow(BowSkill::UnlockRepeater))
|
||||
.with_skill(Skill::Bow(BowSkill::RDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::RGlide))
|
||||
.with_skill(Skill::Bow(BowSkill::RArrows))
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff))
|
||||
.with_skill(Skill::Staff(StaffSkill::BExplosion))
|
||||
.with_skill(Skill::Staff(StaffSkill::BDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRadius))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::FRange))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDrain))
|
||||
.with_skill(Skill::Staff(StaffSkill::FVelocity))
|
||||
.with_skill(Skill::Staff(StaffSkill::UnlockShockwave))
|
||||
.with_skill(Skill::Staff(StaffSkill::SDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::SRange))
|
||||
},
|
||||
_ => {},
|
||||
_ => Self::default(),
|
||||
}
|
||||
},
|
||||
Some(CultistAcolyte) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DScaling))
|
||||
.with_skill(Skill::Sword(SwordSkill::UnlockSpin))
|
||||
.with_skill(Skill::Sword(SwordSkill::SDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsCombo))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::SInfinite))
|
||||
.with_skill(Skill::Axe(AxeSkill::SDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::SCost))
|
||||
.with_skill(Skill::Axe(AxeSkill::UnlockLeap))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::LKnockback))
|
||||
.with_skill(Skill::Axe(AxeSkill::LCost))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDistance))
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsRegen))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDrain))
|
||||
.with_skill(Skill::Hammer(HammerSkill::UnlockLeap))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LRange))
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow))
|
||||
.with_skill(Skill::Bow(BowSkill::BDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CKnockback))
|
||||
.with_skill(Skill::Bow(BowSkill::CProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CDrain))
|
||||
.with_skill(Skill::Bow(BowSkill::UnlockRepeater))
|
||||
.with_skill(Skill::Bow(BowSkill::RDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::RGlide))
|
||||
.with_skill(Skill::Bow(BowSkill::RArrows))
|
||||
.with_skill(Skill::Bow(BowSkill::RCost))
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff))
|
||||
.with_skill(Skill::Staff(StaffSkill::BExplosion))
|
||||
.with_skill(Skill::Staff(StaffSkill::BDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRadius))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::FRange))
|
||||
.with_skill(Skill::Staff(StaffSkill::FVelocity))
|
||||
.with_skill(Skill::Staff(StaffSkill::UnlockShockwave))
|
||||
.with_skill(Skill::Staff(StaffSkill::SDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::SKnockback))
|
||||
.with_skill(Skill::Staff(StaffSkill::SRange))
|
||||
},
|
||||
_ => {},
|
||||
_ => Self::default(),
|
||||
}
|
||||
},
|
||||
Some(Warlord) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsRegen))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DCost))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDrain))
|
||||
.with_skill(Skill::Sword(SwordSkill::UnlockSpin))
|
||||
.with_skill(Skill::Sword(SwordSkill::SDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SCost))
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsCombo))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsSpeed))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsRegen))
|
||||
.with_skill(Skill::Axe(AxeSkill::SInfinite))
|
||||
.with_skill(Skill::Axe(AxeSkill::SHelicopter))
|
||||
.with_skill(Skill::Axe(AxeSkill::SDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::SSpeed))
|
||||
.with_skill(Skill::Axe(AxeSkill::UnlockLeap))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::LKnockback))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDistance))
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsSpeed))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsRegen))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDrain))
|
||||
.with_skill(Skill::Hammer(HammerSkill::UnlockLeap))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDistance))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LRange))
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow))
|
||||
.with_skill(Skill::Bow(BowSkill::BDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::BRegen))
|
||||
.with_skill(Skill::Bow(BowSkill::CDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CKnockback))
|
||||
.with_skill(Skill::Bow(BowSkill::CProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CMove))
|
||||
.with_skill(Skill::Bow(BowSkill::UnlockRepeater))
|
||||
.with_skill(Skill::Bow(BowSkill::RDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::RGlide))
|
||||
.with_skill(Skill::Bow(BowSkill::RArrows))
|
||||
.with_skill(Skill::Bow(BowSkill::RCost))
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff))
|
||||
.with_skill(Skill::Staff(StaffSkill::BExplosion))
|
||||
.with_skill(Skill::Staff(StaffSkill::BDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRegen))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRadius))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDrain))
|
||||
.with_skill(Skill::Staff(StaffSkill::FVelocity))
|
||||
.with_skill(Skill::Staff(StaffSkill::UnlockShockwave))
|
||||
.with_skill(Skill::Staff(StaffSkill::SDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::SKnockback))
|
||||
.with_skill(Skill::Staff(StaffSkill::SCost))
|
||||
},
|
||||
_ => {},
|
||||
_ => Self::default(),
|
||||
}
|
||||
},
|
||||
Some(Warlock) => {
|
||||
match active_item {
|
||||
Some(ToolKind::Sword) => {
|
||||
// Sword
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsCombo));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsRegen));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::TsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DCost));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DDrain));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::DScaling));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SUnlockSpin));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SSpins));
|
||||
skillset = skillset.with_skill(Skill::Sword(SwordSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Sword))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsCombo))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsRegen))
|
||||
.with_skill(Skill::Sword(SwordSkill::TsSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::DCost))
|
||||
.with_skill(Skill::Sword(SwordSkill::DDrain))
|
||||
.with_skill(Skill::Sword(SwordSkill::DScaling))
|
||||
.with_skill(Skill::Sword(SwordSkill::UnlockSpin))
|
||||
.with_skill(Skill::Sword(SwordSkill::SDamage))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpeed))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SSpins))
|
||||
.with_skill(Skill::Sword(SwordSkill::SCost))
|
||||
},
|
||||
Some(ToolKind::Axe) => {
|
||||
// Axe
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsCombo));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::DsRegen));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SInfinite));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SHelicopter));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SSpeed));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::SCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Axe(AxeSkill::LDistance));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Axe))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsCombo))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsSpeed))
|
||||
.with_skill(Skill::Axe(AxeSkill::DsRegen))
|
||||
.with_skill(Skill::Axe(AxeSkill::SInfinite))
|
||||
.with_skill(Skill::Axe(AxeSkill::SHelicopter))
|
||||
.with_skill(Skill::Axe(AxeSkill::SDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::SSpeed))
|
||||
.with_skill(Skill::Axe(AxeSkill::SCost))
|
||||
.with_skill(Skill::Axe(AxeSkill::UnlockLeap))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDamage))
|
||||
.with_skill(Skill::Axe(AxeSkill::LKnockback))
|
||||
.with_skill(Skill::Axe(AxeSkill::LCost))
|
||||
.with_skill(Skill::Axe(AxeSkill::LDistance))
|
||||
},
|
||||
Some(ToolKind::Hammer) => {
|
||||
// Hammer
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::SsRegen));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LUnlockLeap));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDamage));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LCost));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LDistance));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LKnockback));
|
||||
skillset = skillset.with_skill(Skill::Hammer(HammerSkill::LRange));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Hammer))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsSpeed))
|
||||
.with_skill(Skill::Hammer(HammerSkill::SsRegen))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CDrain))
|
||||
.with_skill(Skill::Hammer(HammerSkill::CSpeed))
|
||||
.with_skill(Skill::Hammer(HammerSkill::UnlockLeap))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDamage))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LCost))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LDistance))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LKnockback))
|
||||
.with_skill(Skill::Hammer(HammerSkill::LRange))
|
||||
},
|
||||
Some(ToolKind::Bow) => {
|
||||
// Bow
|
||||
skillset = skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::ProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CKnockback));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CProjSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CDrain));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CSpeed));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::CMove));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::UnlockRepeater));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RDamage));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RGlide));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RArrows));
|
||||
skillset = skillset.with_skill(Skill::Bow(BowSkill::RCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Bow))
|
||||
.with_skill(Skill::Bow(BowSkill::BDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::ProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::BRegen))
|
||||
.with_skill(Skill::Bow(BowSkill::CDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::CKnockback))
|
||||
.with_skill(Skill::Bow(BowSkill::CProjSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CDrain))
|
||||
.with_skill(Skill::Bow(BowSkill::CSpeed))
|
||||
.with_skill(Skill::Bow(BowSkill::CMove))
|
||||
.with_skill(Skill::Bow(BowSkill::UnlockRepeater))
|
||||
.with_skill(Skill::Bow(BowSkill::RDamage))
|
||||
.with_skill(Skill::Bow(BowSkill::RGlide))
|
||||
.with_skill(Skill::Bow(BowSkill::RArrows))
|
||||
.with_skill(Skill::Bow(BowSkill::RCost))
|
||||
},
|
||||
Some(ToolKind::Staff) => {
|
||||
// Staff
|
||||
skillset =
|
||||
skillset.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BExplosion));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRegen));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::BRadius));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FDrain));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::FVelocity));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::UnlockShockwave));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SDamage));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SKnockback));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SRange));
|
||||
skillset = skillset.with_skill(Skill::Staff(StaffSkill::SCost));
|
||||
Self::default()
|
||||
.with_skill_group(SkillGroupType::Weapon(ToolKind::Staff))
|
||||
.with_skill(Skill::Staff(StaffSkill::BExplosion))
|
||||
.with_skill(Skill::Staff(StaffSkill::BDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRegen))
|
||||
.with_skill(Skill::Staff(StaffSkill::BRadius))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::FRange))
|
||||
.with_skill(Skill::Staff(StaffSkill::FDrain))
|
||||
.with_skill(Skill::Staff(StaffSkill::FVelocity))
|
||||
.with_skill(Skill::Staff(StaffSkill::UnlockShockwave))
|
||||
.with_skill(Skill::Staff(StaffSkill::SDamage))
|
||||
.with_skill(Skill::Staff(StaffSkill::SKnockback))
|
||||
.with_skill(Skill::Staff(StaffSkill::SRange))
|
||||
.with_skill(Skill::Staff(StaffSkill::SCost))
|
||||
},
|
||||
_ => {},
|
||||
_ => Self::default(),
|
||||
}
|
||||
},
|
||||
Some(Villager) | None => {},
|
||||
Some(Villager) | None => Self::default(),
|
||||
}
|
||||
|
||||
skillset
|
||||
}
|
||||
|
||||
pub fn with_skill(mut self, skill: Skill) -> Self {
|
||||
|
@ -491,7 +491,7 @@ pub fn handle_ability3_input(data: &JoinData, update: &mut StateUpdate) {
|
||||
.stats
|
||||
.skill_set
|
||||
.skills
|
||||
.contains_key(&Skill::Sword(SwordSkill::SUnlockSpin)) =>
|
||||
.contains_key(&Skill::Sword(SwordSkill::UnlockSpin)) =>
|
||||
{
|
||||
None
|
||||
},
|
||||
@ -500,7 +500,7 @@ pub fn handle_ability3_input(data: &JoinData, update: &mut StateUpdate) {
|
||||
.stats
|
||||
.skill_set
|
||||
.skills
|
||||
.contains_key(&Skill::Axe(AxeSkill::LUnlockLeap)) =>
|
||||
.contains_key(&Skill::Axe(AxeSkill::UnlockLeap)) =>
|
||||
{
|
||||
None
|
||||
},
|
||||
@ -509,7 +509,7 @@ pub fn handle_ability3_input(data: &JoinData, update: &mut StateUpdate) {
|
||||
.stats
|
||||
.skill_set
|
||||
.skills
|
||||
.contains_key(&Skill::Hammer(HammerSkill::LUnlockLeap)) =>
|
||||
.contains_key(&Skill::Hammer(HammerSkill::UnlockLeap)) =>
|
||||
{
|
||||
None
|
||||
},
|
||||
|
@ -583,7 +583,7 @@ impl<'a> System<'a> for Sys {
|
||||
} else if *powerup > 4.0 && energy.current() > 10 {
|
||||
inputs.secondary.set_state(true);
|
||||
*powerup += dt.0;
|
||||
} else if stats.skill_set.skills.contains_key(&Skill::Axe(AxeSkill::LUnlockLeap)) && energy.current() > 800 && thread_rng().gen_bool(0.5) {
|
||||
} else if stats.skill_set.skills.contains_key(&Skill::Axe(AxeSkill::UnlockLeap)) && energy.current() > 800 && thread_rng().gen_bool(0.5) {
|
||||
inputs.ability3.set_state(true);
|
||||
*powerup += dt.0;
|
||||
} else {
|
||||
@ -632,7 +632,7 @@ impl<'a> System<'a> for Sys {
|
||||
} else if *powerup > 2.0 {
|
||||
inputs.secondary.set_state(true);
|
||||
*powerup += dt.0;
|
||||
} else if stats.skill_set.skills.contains_key(&Skill::Hammer(HammerSkill::LUnlockLeap)) && energy.current() > 700
|
||||
} else if stats.skill_set.skills.contains_key(&Skill::Hammer(HammerSkill::UnlockLeap)) && energy.current() > 700
|
||||
&& thread_rng().gen_bool(0.9) {
|
||||
inputs.ability3.set_state(true);
|
||||
*powerup += dt.0;
|
||||
@ -662,7 +662,7 @@ impl<'a> System<'a> for Sys {
|
||||
.try_normalized()
|
||||
.unwrap_or(Vec2::zero())
|
||||
* speed;
|
||||
if stats.skill_set.skills.contains_key(&Skill::Hammer(HammerSkill::LUnlockLeap)) && *powerup > 5.0 {
|
||||
if stats.skill_set.skills.contains_key(&Skill::Hammer(HammerSkill::UnlockLeap)) && *powerup > 5.0 {
|
||||
inputs.ability3.set_state(true);
|
||||
*powerup = 0.0;
|
||||
} else {
|
||||
@ -690,7 +690,7 @@ impl<'a> System<'a> for Sys {
|
||||
Tactic::Sword => {
|
||||
if dist_sqrd < (MIN_ATTACK_DIST * scale).powi(2) {
|
||||
inputs.move_dir = Vec2::zero();
|
||||
if stats.skill_set.skills.contains_key(&Skill::Sword(SwordSkill::SUnlockSpin)) && *powerup < 2.0 && energy.current() > 600 {
|
||||
if stats.skill_set.skills.contains_key(&Skill::Sword(SwordSkill::UnlockSpin)) && *powerup < 2.0 && energy.current() > 600 {
|
||||
inputs.ability3.set_state(true);
|
||||
*powerup += dt.0;
|
||||
} else if *powerup > 2.0 {
|
||||
|
@ -53,5 +53,5 @@ CREATE TABLE skill (
|
||||
|
||||
-- Inserts starting skill group for everyone
|
||||
INSERT INTO skill_group
|
||||
SELECT c.character_id, '"General"', 0, 0, 0
|
||||
SELECT c.character_id, 'General', 0, 0, 0
|
||||
FROM character c
|
@ -99,11 +99,11 @@ pub fn load_character_data(
|
||||
});
|
||||
|
||||
let skill_data = schema::skill::dsl::skill
|
||||
.filter(schema::skill::dsl::character_id.eq(char_id))
|
||||
.filter(schema::skill::dsl::entity_id.eq(char_id))
|
||||
.load::<Skill>(&*connection)?;
|
||||
|
||||
let skill_group_data = skill_group
|
||||
.filter(schema::skill_group::dsl::character_id.eq(char_id))
|
||||
.filter(schema::skill_group::dsl::entity_id.eq(char_id))
|
||||
.load::<SkillGroup>(&*connection)?;
|
||||
|
||||
Ok((
|
||||
@ -324,10 +324,10 @@ pub fn delete_character(
|
||||
.first::<Character>(&*connection)?;
|
||||
|
||||
// Delete skills
|
||||
diesel::delete(skill_group.filter(schema::skill_group::dsl::character_id.eq(char_id)))
|
||||
diesel::delete(skill_group.filter(schema::skill_group::dsl::entity_id.eq(char_id)))
|
||||
.execute(&*connection)?;
|
||||
|
||||
diesel::delete(skill.filter(schema::skill::dsl::character_id.eq(char_id)))
|
||||
diesel::delete(skill.filter(schema::skill::dsl::entity_id.eq(char_id)))
|
||||
.execute(&*connection)?;
|
||||
|
||||
// Delete character
|
||||
@ -606,7 +606,7 @@ pub fn update(
|
||||
|
||||
let delete_count = diesel::delete(
|
||||
schema::skill::dsl::skill.filter(
|
||||
schema::skill::dsl::character_id.eq(char_id).and(
|
||||
schema::skill::dsl::entity_id.eq(char_id).and(
|
||||
schema::skill::dsl::skill_type.ne_all(
|
||||
db_skills
|
||||
.iter()
|
||||
|
@ -5,7 +5,7 @@ use crate::persistence::{
|
||||
|
||||
use crate::persistence::{
|
||||
error::Error,
|
||||
json_models::{CharacterPosition, HumanoidBody},
|
||||
json_models::{self, CharacterPosition, HumanoidBody},
|
||||
};
|
||||
use common::{
|
||||
character::CharacterId,
|
||||
@ -367,15 +367,7 @@ fn get_item_from_asset(item_definition_id: &str) -> Result<common::comp::Item, E
|
||||
fn convert_skill_groups_from_database(skill_groups: &[SkillGroup]) -> Vec<skills::SkillGroup> {
|
||||
let mut new_skill_groups = Vec::new();
|
||||
for skill_group in skill_groups.iter() {
|
||||
let skill_group_type =
|
||||
serde_json::de::from_str::<skills::SkillGroupType>(&skill_group.skill_group_type)
|
||||
.map_err(|err| {
|
||||
Error::ConversionError(format!(
|
||||
"Error de-serializing skill group: {} err: {}",
|
||||
skill_group.skill_group_type, err
|
||||
))
|
||||
})
|
||||
.unwrap();
|
||||
let skill_group_type = json_models::db_string_to_skill_group(&skill_group.skill_group_type);
|
||||
let new_skill_group = skills::SkillGroup {
|
||||
skill_group_type,
|
||||
exp: skill_group.exp as u16,
|
||||
@ -390,28 +382,21 @@ fn convert_skill_groups_from_database(skill_groups: &[SkillGroup]) -> Vec<skills
|
||||
fn convert_skills_from_database(skills: &[Skill]) -> HashMap<skills::Skill, skills::Level> {
|
||||
let mut new_skills = HashMap::new();
|
||||
for skill in skills.iter() {
|
||||
let new_skill = serde_json::de::from_str::<skills::Skill>(&skill.skill_type)
|
||||
.map_err(|err| {
|
||||
Error::ConversionError(format!(
|
||||
"Error de-serializing skill: {} err: {}",
|
||||
skill.skill_type, err
|
||||
))
|
||||
})
|
||||
.unwrap();
|
||||
let new_skill = json_models::db_string_to_skill(&skill.skill_type);
|
||||
new_skills.insert(new_skill, skill.level.map(|l| l as u16));
|
||||
}
|
||||
new_skills
|
||||
}
|
||||
|
||||
pub fn convert_skill_groups_to_database(
|
||||
character_id: CharacterId,
|
||||
entity_id: CharacterId,
|
||||
skill_groups: Vec<skills::SkillGroup>,
|
||||
) -> Vec<SkillGroup> {
|
||||
let db_skill_groups: Vec<_> = skill_groups
|
||||
.into_iter()
|
||||
.map(|sg| SkillGroup {
|
||||
character_id,
|
||||
skill_group_type: serde_json::to_string(&sg.skill_group_type).unwrap(),
|
||||
entity_id,
|
||||
skill_group_type: json_models::skill_group_to_db_string(sg.skill_group_type),
|
||||
exp: sg.exp as i32,
|
||||
available_sp: sg.available_sp as i32,
|
||||
earned_sp: sg.earned_sp as i32,
|
||||
@ -421,14 +406,14 @@ pub fn convert_skill_groups_to_database(
|
||||
}
|
||||
|
||||
pub fn convert_skills_to_database(
|
||||
character_id: CharacterId,
|
||||
entity_id: CharacterId,
|
||||
skills: HashMap<skills::Skill, skills::Level>,
|
||||
) -> Vec<Skill> {
|
||||
let db_skills: Vec<_> = skills
|
||||
.iter()
|
||||
.map(|(s, l)| Skill {
|
||||
character_id,
|
||||
skill_type: serde_json::to_string(&s).unwrap(),
|
||||
entity_id,
|
||||
skill_type: json_models::skill_to_db_string(*s),
|
||||
level: l.map(|l| l as i32),
|
||||
})
|
||||
.collect();
|
||||
|
@ -35,3 +35,271 @@ impl From<&comp::humanoid::Body> for HumanoidBody {
|
||||
pub struct CharacterPosition {
|
||||
pub waypoint: Vec3<f32>,
|
||||
}
|
||||
|
||||
pub fn skill_to_db_string(skill: comp::skills::Skill) -> String {
|
||||
use comp::{
|
||||
item::tool::ToolKind,
|
||||
skills::{
|
||||
AxeSkill, BowSkill, GeneralSkill, HammerSkill, RollSkill, SceptreSkill, Skill::*,
|
||||
SkillGroupType, StaffSkill, SwordSkill,
|
||||
},
|
||||
};
|
||||
let skill_string = match skill {
|
||||
General(GeneralSkill::HealthIncrease) => "General HealthIncrease",
|
||||
General(GeneralSkill::EnergyIncrease) => "General EnergyIncrease",
|
||||
Sword(SwordSkill::InterruptingAttacks) => "Sword InterruptingAttacks",
|
||||
Sword(SwordSkill::TsCombo) => "Sword TsCombo",
|
||||
Sword(SwordSkill::TsDamage) => "Sword TsDamage",
|
||||
Sword(SwordSkill::TsRegen) => "Sword TsRegen",
|
||||
Sword(SwordSkill::TsSpeed) => "Sword TsSpeed",
|
||||
Sword(SwordSkill::DCost) => "Sword DCost",
|
||||
Sword(SwordSkill::DDrain) => "Sword DDrain",
|
||||
Sword(SwordSkill::DDamage) => "Sword DDamage",
|
||||
Sword(SwordSkill::DScaling) => "Sword DScaling",
|
||||
Sword(SwordSkill::DSpeed) => "Sword DSpeed",
|
||||
Sword(SwordSkill::DInfinite) => "Sword DInfinite",
|
||||
Sword(SwordSkill::UnlockSpin) => "Sword UnlockSpin",
|
||||
Sword(SwordSkill::SDamage) => "Sword SDamage",
|
||||
Sword(SwordSkill::SSpeed) => "Sword SSpeed",
|
||||
Sword(SwordSkill::SCost) => "Sword SCost",
|
||||
Sword(SwordSkill::SSpins) => "Sword SSpins",
|
||||
Axe(AxeSkill::DsCombo) => "Axe DsCombo",
|
||||
Axe(AxeSkill::DsDamage) => "Axe DsDamage",
|
||||
Axe(AxeSkill::DsSpeed) => "Axe DsSpeed",
|
||||
Axe(AxeSkill::DsRegen) => "Axe DsRegen",
|
||||
Axe(AxeSkill::SInfinite) => "Axe SInfinite",
|
||||
Axe(AxeSkill::SHelicopter) => "Axe SHelicopter",
|
||||
Axe(AxeSkill::SDamage) => "Axe SDamage",
|
||||
Axe(AxeSkill::SSpeed) => "Axe SSpeed",
|
||||
Axe(AxeSkill::SCost) => "Axe SCost",
|
||||
Axe(AxeSkill::UnlockLeap) => "Axe UnlockLeap",
|
||||
Axe(AxeSkill::LDamage) => "Axe LDamage",
|
||||
Axe(AxeSkill::LKnockback) => "Axe LKnockback",
|
||||
Axe(AxeSkill::LCost) => "Axe LCost",
|
||||
Axe(AxeSkill::LDistance) => "Axe LDistance",
|
||||
Hammer(HammerSkill::SsKnockback) => "Hammer SsKnockback",
|
||||
Hammer(HammerSkill::SsDamage) => "Hammer SsDamage",
|
||||
Hammer(HammerSkill::SsSpeed) => "Hammer SsSpeed",
|
||||
Hammer(HammerSkill::SsRegen) => "Hammer SsRegen",
|
||||
Hammer(HammerSkill::CDamage) => "Hammer CDamage",
|
||||
Hammer(HammerSkill::CKnockback) => "Hammer CKnockback",
|
||||
Hammer(HammerSkill::CDrain) => "Hammer CDrain",
|
||||
Hammer(HammerSkill::CSpeed) => "Hammer CSpeed",
|
||||
Hammer(HammerSkill::UnlockLeap) => "Hammer UnlockLeap",
|
||||
Hammer(HammerSkill::LDamage) => "Hammer LDamage",
|
||||
Hammer(HammerSkill::LCost) => "Hammer LCost",
|
||||
Hammer(HammerSkill::LDistance) => "Hammer LDistance",
|
||||
Hammer(HammerSkill::LKnockback) => "Hammer LKnockback",
|
||||
Hammer(HammerSkill::LRange) => "Hammer LRange",
|
||||
Bow(BowSkill::ProjSpeed) => "Bow ProjSpeed",
|
||||
Bow(BowSkill::BDamage) => "Bow BDamage",
|
||||
Bow(BowSkill::BRegen) => "Bow BRegen",
|
||||
Bow(BowSkill::CDamage) => "Bow CDamage",
|
||||
Bow(BowSkill::CKnockback) => "Bow CKnockback",
|
||||
Bow(BowSkill::CProjSpeed) => "Bow CProjSpeed",
|
||||
Bow(BowSkill::CDrain) => "Bow CDrain",
|
||||
Bow(BowSkill::CSpeed) => "Bow CSpeed",
|
||||
Bow(BowSkill::CMove) => "Bow CMove",
|
||||
Bow(BowSkill::UnlockRepeater) => "Bow UnlockRepeater",
|
||||
Bow(BowSkill::RDamage) => "Bow RDamage",
|
||||
Bow(BowSkill::RGlide) => "Bow RGlide",
|
||||
Bow(BowSkill::RArrows) => "Bow RArrows",
|
||||
Bow(BowSkill::RCost) => "Bow RCost",
|
||||
Staff(StaffSkill::BExplosion) => "Staff BExplosion",
|
||||
Staff(StaffSkill::BDamage) => "Staff BDamage",
|
||||
Staff(StaffSkill::BRegen) => "Staff BRegen",
|
||||
Staff(StaffSkill::BRadius) => "Staff BRadius",
|
||||
Staff(StaffSkill::FDamage) => "Staff FDamage",
|
||||
Staff(StaffSkill::FRange) => "Staff FRange",
|
||||
Staff(StaffSkill::FDrain) => "Staff FDrain",
|
||||
Staff(StaffSkill::FVelocity) => "Staff FVelocity",
|
||||
Staff(StaffSkill::UnlockShockwave) => "Staff UnlockShockwave",
|
||||
Staff(StaffSkill::SDamage) => "Staff SDamage",
|
||||
Staff(StaffSkill::SKnockback) => "Staff SKnockback",
|
||||
Staff(StaffSkill::SRange) => "Staff SRange",
|
||||
Staff(StaffSkill::SCost) => "Staff SCost",
|
||||
Sceptre(SceptreSkill::BHeal) => "Sceptre BHeal",
|
||||
Sceptre(SceptreSkill::BDamage) => "Sceptre BDamage",
|
||||
Sceptre(SceptreSkill::BRange) => "Sceptre BRange",
|
||||
Sceptre(SceptreSkill::BLifesteal) => "Sceptre BLifesteal",
|
||||
Sceptre(SceptreSkill::BRegen) => "Sceptre BRegen",
|
||||
Sceptre(SceptreSkill::BCost) => "Sceptre BCost",
|
||||
Sceptre(SceptreSkill::PHeal) => "Sceptre PHeal",
|
||||
Sceptre(SceptreSkill::PDamage) => "Sceptre PDamage",
|
||||
Sceptre(SceptreSkill::PRadius) => "Sceptre PRadius",
|
||||
Sceptre(SceptreSkill::PCost) => "Sceptre PCost",
|
||||
Sceptre(SceptreSkill::PProjSpeed) => "Sceptre PProjSpeed",
|
||||
Roll(RollSkill::ImmuneMelee) => "Roll ImmuneMelee",
|
||||
Roll(RollSkill::Cost) => "Roll Cost",
|
||||
Roll(RollSkill::Strength) => "Roll Strength",
|
||||
Roll(RollSkill::Duration) => "Roll Duration",
|
||||
UnlockGroup(SkillGroupType::Weapon(ToolKind::Sword)) => "Unlock Weapon Sword",
|
||||
UnlockGroup(SkillGroupType::Weapon(ToolKind::Axe)) => "Unlock Weapon Axe",
|
||||
UnlockGroup(SkillGroupType::Weapon(ToolKind::Hammer)) => "Unlock Weapon Hammer",
|
||||
UnlockGroup(SkillGroupType::Weapon(ToolKind::Bow)) => "Unlock Weapon Bow",
|
||||
UnlockGroup(SkillGroupType::Weapon(ToolKind::Staff)) => "Unlock Weapon Staff",
|
||||
UnlockGroup(SkillGroupType::Weapon(ToolKind::Sceptre)) => "Unlock Weapon Sceptre",
|
||||
UnlockGroup(SkillGroupType::Weapon(ToolKind::Dagger))
|
||||
| UnlockGroup(SkillGroupType::Weapon(ToolKind::Shield))
|
||||
| UnlockGroup(SkillGroupType::Weapon(ToolKind::Debug))
|
||||
| UnlockGroup(SkillGroupType::Weapon(ToolKind::Farming))
|
||||
| UnlockGroup(SkillGroupType::Weapon(ToolKind::Empty))
|
||||
| UnlockGroup(SkillGroupType::Weapon(ToolKind::Unique(_)))
|
||||
| UnlockGroup(SkillGroupType::General) => {
|
||||
panic!("Tried to add unsupported skill to database: {:?}", skill)
|
||||
},
|
||||
};
|
||||
skill_string.to_string()
|
||||
}
|
||||
|
||||
pub fn db_string_to_skill(skill_string: &str) -> comp::skills::Skill {
|
||||
use comp::{
|
||||
item::tool::ToolKind,
|
||||
skills::{
|
||||
AxeSkill, BowSkill, GeneralSkill, HammerSkill, RollSkill, SceptreSkill, Skill::*,
|
||||
SkillGroupType, StaffSkill, SwordSkill,
|
||||
},
|
||||
};
|
||||
match skill_string {
|
||||
"General HealthIncrease" => General(GeneralSkill::HealthIncrease),
|
||||
"General EnergyIncrease" => General(GeneralSkill::EnergyIncrease),
|
||||
"Sword InterruptingAttacks" => Sword(SwordSkill::InterruptingAttacks),
|
||||
"Sword TsCombo" => Sword(SwordSkill::TsCombo),
|
||||
"Sword TsDamage" => Sword(SwordSkill::TsDamage),
|
||||
"Sword TsRegen" => Sword(SwordSkill::TsRegen),
|
||||
"Sword TsSpeed" => Sword(SwordSkill::TsSpeed),
|
||||
"Sword DCost" => Sword(SwordSkill::DCost),
|
||||
"Sword DDrain" => Sword(SwordSkill::DDrain),
|
||||
"Sword DDamage" => Sword(SwordSkill::DDamage),
|
||||
"Sword DScaling" => Sword(SwordSkill::DScaling),
|
||||
"Sword DSpeed" => Sword(SwordSkill::DSpeed),
|
||||
"Sword DInfinite" => Sword(SwordSkill::DInfinite),
|
||||
"Sword UnlockSpin" => Sword(SwordSkill::UnlockSpin),
|
||||
"Sword SDamage" => Sword(SwordSkill::SDamage),
|
||||
"Sword SSpeed" => Sword(SwordSkill::SSpeed),
|
||||
"Sword SCost" => Sword(SwordSkill::SCost),
|
||||
"Sword SSpins" => Sword(SwordSkill::SSpins),
|
||||
"Axe DsCombo" => Axe(AxeSkill::DsCombo),
|
||||
"Axe DsDamage" => Axe(AxeSkill::DsDamage),
|
||||
"Axe DsSpeed" => Axe(AxeSkill::DsSpeed),
|
||||
"Axe DsRegen" => Axe(AxeSkill::DsRegen),
|
||||
"Axe SInfinite" => Axe(AxeSkill::SInfinite),
|
||||
"Axe SHelicopter" => Axe(AxeSkill::SHelicopter),
|
||||
"Axe SDamage" => Axe(AxeSkill::SDamage),
|
||||
"Axe SSpeed" => Axe(AxeSkill::SSpeed),
|
||||
"Axe SCost" => Axe(AxeSkill::SCost),
|
||||
"Axe UnlockLeap" => Axe(AxeSkill::UnlockLeap),
|
||||
"Axe LDamage" => Axe(AxeSkill::LDamage),
|
||||
"Axe LKnockback" => Axe(AxeSkill::LKnockback),
|
||||
"Axe LCost" => Axe(AxeSkill::LCost),
|
||||
"Axe LDistance" => Axe(AxeSkill::LDistance),
|
||||
"Hammer SsKnockback" => Hammer(HammerSkill::SsKnockback),
|
||||
"Hammer SsDamage" => Hammer(HammerSkill::SsDamage),
|
||||
"Hammer SsSpeed" => Hammer(HammerSkill::SsSpeed),
|
||||
"Hammer SsRegen" => Hammer(HammerSkill::SsRegen),
|
||||
"Hammer CDamage" => Hammer(HammerSkill::CDamage),
|
||||
"Hammer CKnockback" => Hammer(HammerSkill::CKnockback),
|
||||
"Hammer CDrain" => Hammer(HammerSkill::CDrain),
|
||||
"Hammer CSpeed" => Hammer(HammerSkill::CSpeed),
|
||||
"Hammer UnlockLeap" => Hammer(HammerSkill::UnlockLeap),
|
||||
"Hammer LDamage" => Hammer(HammerSkill::LDamage),
|
||||
"Hammer LCost" => Hammer(HammerSkill::LCost),
|
||||
"Hammer LDistance" => Hammer(HammerSkill::LDistance),
|
||||
"Hammer LKnockback" => Hammer(HammerSkill::LKnockback),
|
||||
"Hammer LRange" => Hammer(HammerSkill::LRange),
|
||||
"Bow ProjSpeed" => Bow(BowSkill::ProjSpeed),
|
||||
"Bow BDamage" => Bow(BowSkill::BDamage),
|
||||
"Bow BRegen" => Bow(BowSkill::BRegen),
|
||||
"Bow CDamage" => Bow(BowSkill::CDamage),
|
||||
"Bow CKnockback" => Bow(BowSkill::CKnockback),
|
||||
"Bow CProjSpeed" => Bow(BowSkill::CProjSpeed),
|
||||
"Bow CDrain" => Bow(BowSkill::CDrain),
|
||||
"Bow CSpeed" => Bow(BowSkill::CSpeed),
|
||||
"Bow CMove" => Bow(BowSkill::CMove),
|
||||
"Bow UnlockRepeater" => Bow(BowSkill::UnlockRepeater),
|
||||
"Bow RDamage" => Bow(BowSkill::RDamage),
|
||||
"Bow RGlide" => Bow(BowSkill::RGlide),
|
||||
"Bow RArrows" => Bow(BowSkill::RArrows),
|
||||
"Bow RCost" => Bow(BowSkill::RCost),
|
||||
"Staff BExplosion" => Staff(StaffSkill::BExplosion),
|
||||
"Staff BDamage" => Staff(StaffSkill::BDamage),
|
||||
"Staff BRegen" => Staff(StaffSkill::BRegen),
|
||||
"Staff BRadius" => Staff(StaffSkill::BRadius),
|
||||
"Staff FDamage" => Staff(StaffSkill::FDamage),
|
||||
"Staff FRange" => Staff(StaffSkill::FRange),
|
||||
"Staff FDrain" => Staff(StaffSkill::FDrain),
|
||||
"Staff FVelocity" => Staff(StaffSkill::FVelocity),
|
||||
"Staff UnlockShockwave" => Staff(StaffSkill::UnlockShockwave),
|
||||
"Staff SDamage" => Staff(StaffSkill::SDamage),
|
||||
"Staff SKnockback" => Staff(StaffSkill::SKnockback),
|
||||
"Staff SRange" => Staff(StaffSkill::SRange),
|
||||
"Staff SCost" => Staff(StaffSkill::SCost),
|
||||
"Sceptre BHeal" => Sceptre(SceptreSkill::BHeal),
|
||||
"Sceptre BDamage" => Sceptre(SceptreSkill::BDamage),
|
||||
"Sceptre BRange" => Sceptre(SceptreSkill::BRange),
|
||||
"Sceptre BLifesteal" => Sceptre(SceptreSkill::BLifesteal),
|
||||
"Sceptre BRegen" => Sceptre(SceptreSkill::BRegen),
|
||||
"Sceptre BCost" => Sceptre(SceptreSkill::BCost),
|
||||
"Sceptre PHeal" => Sceptre(SceptreSkill::PHeal),
|
||||
"Sceptre PDamage" => Sceptre(SceptreSkill::PDamage),
|
||||
"Sceptre PRadius" => Sceptre(SceptreSkill::PRadius),
|
||||
"Sceptre PCost" => Sceptre(SceptreSkill::PCost),
|
||||
"Sceptre PProjSpeed" => Sceptre(SceptreSkill::PProjSpeed),
|
||||
"Roll ImmuneMelee" => Roll(RollSkill::ImmuneMelee),
|
||||
"Roll Cost" => Roll(RollSkill::Cost),
|
||||
"Roll Strength" => Roll(RollSkill::Strength),
|
||||
"Roll Duration" => Roll(RollSkill::Duration),
|
||||
"Unlock Weapon Sword" => UnlockGroup(SkillGroupType::Weapon(ToolKind::Sword)),
|
||||
"Unlock Weapon Axe" => UnlockGroup(SkillGroupType::Weapon(ToolKind::Axe)),
|
||||
"Unlock Weapon Hammer" => UnlockGroup(SkillGroupType::Weapon(ToolKind::Hammer)),
|
||||
"Unlock Weapon Bow" => UnlockGroup(SkillGroupType::Weapon(ToolKind::Bow)),
|
||||
"Unlock Weapon Staff" => UnlockGroup(SkillGroupType::Weapon(ToolKind::Staff)),
|
||||
"Unlock Weapon Sceptre" => UnlockGroup(SkillGroupType::Weapon(ToolKind::Sceptre)),
|
||||
_ => {
|
||||
panic!(
|
||||
"Tried to convert an unsupported string from the database: {}",
|
||||
skill_string
|
||||
)
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
pub fn skill_group_to_db_string(skill_group: comp::skills::SkillGroupType) -> String {
|
||||
use comp::{item::tool::ToolKind, skills::SkillGroupType::*};
|
||||
let skill_group_string = match skill_group {
|
||||
General => "General",
|
||||
Weapon(ToolKind::Sword) => "Weapon Sword",
|
||||
Weapon(ToolKind::Axe) => "Weapon Axe",
|
||||
Weapon(ToolKind::Hammer) => "Weapon Hammer",
|
||||
Weapon(ToolKind::Bow) => "Weapon Bow",
|
||||
Weapon(ToolKind::Staff) => "Weapon Staff",
|
||||
Weapon(ToolKind::Sceptre) => "Weapon Sceptre",
|
||||
Weapon(ToolKind::Dagger)
|
||||
| Weapon(ToolKind::Shield)
|
||||
| Weapon(ToolKind::Debug)
|
||||
| Weapon(ToolKind::Farming)
|
||||
| Weapon(ToolKind::Empty)
|
||||
| Weapon(ToolKind::Unique(_)) => panic!(
|
||||
"Tried to add unsupported skill group to database: {:?}",
|
||||
skill_group
|
||||
),
|
||||
};
|
||||
skill_group_string.to_string()
|
||||
}
|
||||
|
||||
pub fn db_string_to_skill_group(skill_group_string: &str) -> comp::skills::SkillGroupType {
|
||||
use comp::{item::tool::ToolKind, skills::SkillGroupType::*};
|
||||
match skill_group_string {
|
||||
"General" => General,
|
||||
"Weapon Sword" => Weapon(ToolKind::Sword),
|
||||
"Weapon Axe" => Weapon(ToolKind::Axe),
|
||||
"Weapon Hammer" => Weapon(ToolKind::Hammer),
|
||||
"Weapon Bow" => Weapon(ToolKind::Bow),
|
||||
"Weapon Staff" => Weapon(ToolKind::Staff),
|
||||
"Weapon Sceptre" => Weapon(ToolKind::Sceptre),
|
||||
_ => panic!(
|
||||
"Tried to convert an unsupported string from the database: {}",
|
||||
skill_group_string
|
||||
),
|
||||
}
|
||||
}
|
||||
|
@ -48,19 +48,19 @@ pub struct Body {
|
||||
}
|
||||
|
||||
#[derive(Associations, Identifiable, Insertable, Queryable, Debug)]
|
||||
#[primary_key(character_id, skill_type)]
|
||||
#[primary_key(entity_id, skill_type)]
|
||||
#[table_name = "skill"]
|
||||
pub struct Skill {
|
||||
pub character_id: i64,
|
||||
pub entity_id: i64,
|
||||
pub skill_type: String,
|
||||
pub level: Option<i32>,
|
||||
}
|
||||
|
||||
#[derive(Associations, Identifiable, Insertable, Queryable, Debug)]
|
||||
#[primary_key(character_id, skill_group_type)]
|
||||
#[primary_key(entity_id, skill_group_type)]
|
||||
#[table_name = "skill_group"]
|
||||
pub struct SkillGroup {
|
||||
pub character_id: i64,
|
||||
pub entity_id: i64,
|
||||
pub skill_group_type: String,
|
||||
pub exp: i32,
|
||||
pub available_sp: i32,
|
||||
|
@ -32,8 +32,8 @@ table! {
|
||||
}
|
||||
|
||||
table! {
|
||||
skill (character_id, skill_type) {
|
||||
character_id -> BigInt,
|
||||
skill (entity_id, skill_type) {
|
||||
entity_id -> BigInt,
|
||||
#[sql_name = "skill"]
|
||||
skill_type -> Text,
|
||||
level -> Nullable<Integer>,
|
||||
@ -41,8 +41,8 @@ table! {
|
||||
}
|
||||
|
||||
table! {
|
||||
skill_group (character_id, skill_group_type) {
|
||||
character_id -> BigInt,
|
||||
skill_group (entity_id, skill_group_type) {
|
||||
entity_id -> BigInt,
|
||||
skill_group_type -> Text,
|
||||
exp -> Integer,
|
||||
available_sp -> Integer,
|
||||
|
@ -24,42 +24,19 @@ impl Animation for SpinMeleeAnimation {
|
||||
#[allow(clippy::approx_constant)] // TODO: Pending review in #587
|
||||
fn update_skeleton_inner(
|
||||
skeleton: &Self::Skeleton,
|
||||
(active_tool_kind, _second_tool_kind, velocity, _global_time, stage_section): Self::Dependency,
|
||||
(active_tool_kind, _second_tool_kind, _velocity, _global_time, stage_section): Self::Dependency,
|
||||
anim_time: f64,
|
||||
rate: &mut f32,
|
||||
s_a: &SkeletonAttr,
|
||||
) -> Self::Skeleton {
|
||||
*rate = 1.0;
|
||||
let lab = 1.0;
|
||||
let (movement1, movement2, movement3) = match stage_section {
|
||||
Some(StageSection::Buildup) => (anim_time as f32, 0.0, 0.0),
|
||||
Some(StageSection::Buildup) => ((anim_time as f32).powf(0.25), 0.0, 0.0),
|
||||
Some(StageSection::Swing) => (1.0, anim_time as f32, 0.0),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, anim_time as f32),
|
||||
Some(StageSection::Recover) => (1.0, 1.0, (anim_time as f32).powf(4.0)),
|
||||
_ => (0.0, 0.0, 0.0),
|
||||
};
|
||||
let speed = Vec2::<f32>::from(velocity).magnitude();
|
||||
let mut next = (*skeleton).clone();
|
||||
//torso movement
|
||||
let xshift = if velocity.z.abs() < 0.1 {
|
||||
((anim_time as f32 - 1.1) * lab as f32 * 3.0).sin()
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
let yshift = if velocity.z.abs() < 0.1 {
|
||||
((anim_time as f32 - 1.1) * lab as f32 * 3.0 + PI / 2.0).sin()
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
|
||||
let spin = if anim_time < 1.1 && velocity.z.abs() < 0.1 {
|
||||
0.5 * ((anim_time as f32).powi(2))
|
||||
} else {
|
||||
lab as f32 * anim_time as f32 * 0.9
|
||||
};
|
||||
|
||||
//feet
|
||||
let slowersmooth = (anim_time as f32 * lab as f32 * 4.0).sin();
|
||||
let quick = (anim_time as f32 * lab as f32 * 8.0).sin();
|
||||
|
||||
match active_tool_kind {
|
||||
Some(ToolKind::Sword) => {
|
||||
@ -81,7 +58,11 @@ impl Animation for SpinMeleeAnimation {
|
||||
);
|
||||
next.torso.orientation = Quaternion::rotation_z(movement2 * PI * 2.0);
|
||||
|
||||
next.chest.position = Vec3::new(0.0, s_a.chest.0, s_a.chest.1 + movement1 * -2.0);
|
||||
next.chest.position = Vec3::new(
|
||||
0.0,
|
||||
s_a.chest.0 + movement1 * -2.0,
|
||||
s_a.chest.1 + movement1 * -3.0,
|
||||
);
|
||||
next.chest.orientation = Quaternion::rotation_x(movement1 * -0.3)
|
||||
* Quaternion::rotation_y(movement1 * 0.15 + movement3 * -0.15);
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0, s_a.head.1);
|
||||
@ -90,66 +71,76 @@ impl Animation for SpinMeleeAnimation {
|
||||
next.belt.orientation = Quaternion::rotation_x(0.1);
|
||||
next.shorts.orientation = Quaternion::rotation_x(0.2);
|
||||
},
|
||||
|
||||
Some(ToolKind::Axe) => {
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0 + 1.0, s_a.head.1 + 1.0);
|
||||
|
||||
next.hand_l.position = Vec3::new(-0.5, 0.0, 4.0);
|
||||
next.hand_l.orientation =
|
||||
Quaternion::rotation_x(PI / 2.0) * Quaternion::rotation_y(PI);
|
||||
next.hand_r.position = Vec3::new(0.5, 0.0, -2.5);
|
||||
next.hand_r.orientation = Quaternion::rotation_x(PI / 2.0);
|
||||
next.main.position = Vec3::new(-0.0, -2.0, -1.0);
|
||||
next.main.position = Vec3::new(0.0, 0.0, 0.0);
|
||||
next.main.orientation = Quaternion::rotation_x(0.0);
|
||||
next.hand_l.position = Vec3::new(s_a.ahl.0, s_a.ahl.1, s_a.ahl.2);
|
||||
next.hand_l.orientation =
|
||||
Quaternion::rotation_x(s_a.ahl.3) * Quaternion::rotation_y(s_a.ahl.4);
|
||||
next.hand_r.position = Vec3::new(s_a.ahr.0, s_a.ahr.1, s_a.ahr.2);
|
||||
next.hand_r.orientation =
|
||||
Quaternion::rotation_x(s_a.ahr.3) * Quaternion::rotation_z(s_a.ahr.5);
|
||||
|
||||
next.control.position = Vec3::new(0.0, 16.0, 3.0);
|
||||
next.control.position = Vec3::new(
|
||||
s_a.ac.0 + movement1 * 8.0,
|
||||
s_a.ac.1,
|
||||
s_a.ac.2 + movement1 * -4.0,
|
||||
);
|
||||
next.control.orientation =
|
||||
Quaternion::rotation_x(-1.4) * Quaternion::rotation_z(1.4);
|
||||
Quaternion::rotation_x(s_a.ac.3 + movement1 * -0.8 * (1.0 - movement3))
|
||||
* Quaternion::rotation_y(s_a.ac.4 + movement1 * -PI * (1.0 - movement3))
|
||||
* Quaternion::rotation_z(s_a.ac.5 + movement1 * 1.2 * (1.0 - movement3));
|
||||
|
||||
next.head.orientation =
|
||||
Quaternion::rotation_x(-0.15) * Quaternion::rotation_y(0.08);
|
||||
next.chest.position = Vec3::new(0.0, s_a.chest.0 - 3.0, s_a.chest.1 - 2.0);
|
||||
next.chest.orientation = Quaternion::rotation_z(0.0)
|
||||
* Quaternion::rotation_x(-0.1)
|
||||
* Quaternion::rotation_y(0.3);
|
||||
Quaternion::rotation_x(movement1 * -0.2 * (1.0 - movement3))
|
||||
* Quaternion::rotation_z(movement1 * 0.4 * (1.0 - movement3));
|
||||
next.head.position = Vec3::new(0.0, s_a.head.0 + movement1 * 2.0, s_a.head.1);
|
||||
|
||||
next.belt.position = Vec3::new(0.0, 1.0, -1.0);
|
||||
next.belt.orientation = Quaternion::rotation_z(0.0)
|
||||
* Quaternion::rotation_x(0.4)
|
||||
* Quaternion::rotation_y(0.0);
|
||||
next.shorts.position = Vec3::new(0.0, 3.0, -2.5);
|
||||
next.shorts.orientation = Quaternion::rotation_z(0.0)
|
||||
* Quaternion::rotation_x(0.7)
|
||||
* Quaternion::rotation_y(0.0);
|
||||
next.torso.position = Vec3::new(
|
||||
-xshift * (anim_time as f32).min(0.6),
|
||||
-yshift * (anim_time as f32).min(0.6),
|
||||
next.chest.position = Vec3::new(
|
||||
0.0,
|
||||
) * s_a.scaler;
|
||||
next.torso.orientation = Quaternion::rotation_z(spin * -16.0)
|
||||
* Quaternion::rotation_x(0.0)
|
||||
* Quaternion::rotation_y(0.0);
|
||||
if velocity.z.abs() > 0.1 {
|
||||
next.foot_l.position = Vec3::new(-s_a.foot.0, 8.0, s_a.foot.2 + 2.0);
|
||||
next.foot_l.orientation =
|
||||
Quaternion::rotation_x(1.0) * Quaternion::rotation_z(0.0);
|
||||
s_a.chest.0,
|
||||
s_a.chest.1 + movement1 * -1.0 * (1.0 - movement3),
|
||||
);
|
||||
next.chest.orientation =
|
||||
Quaternion::rotation_x(movement1 * 0.3 * (1.0 - movement3))
|
||||
* Quaternion::rotation_y(movement1 * 0.3 * (1.0 - movement3));
|
||||
|
||||
next.foot_r.position = Vec3::new(s_a.foot.0, 8.0, s_a.foot.2 + 2.0);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(1.0);
|
||||
} else if speed < 0.5 {
|
||||
next.foot_l.position = Vec3::new(-s_a.foot.0, 2.0 + quick * -6.0, s_a.foot.2);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(0.5 + slowersmooth * 0.2);
|
||||
next.belt.position = Vec3::new(
|
||||
0.0,
|
||||
1.0 + s_a.belt.0,
|
||||
s_a.belt.1 + movement1 * 0.5 * (1.0 - movement3),
|
||||
);
|
||||
next.belt.orientation = Quaternion::rotation_x(0.15);
|
||||
next.shorts.position = Vec3::new(
|
||||
0.0,
|
||||
1.0 + s_a.shorts.0 + movement1 * 1.0 * (1.0 - movement3),
|
||||
s_a.shorts.1 + movement1 * 1.0 * (1.0 - movement3),
|
||||
);
|
||||
next.shorts.orientation =
|
||||
Quaternion::rotation_x(0.15 + 0.15 * movement1 * (1.0 - movement3));
|
||||
|
||||
next.foot_r.position = Vec3::new(s_a.foot.0, 4.0, s_a.foot.2);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(0.5 - slowersmooth * 0.2)
|
||||
* Quaternion::rotation_y(-0.4);
|
||||
} else {
|
||||
next.foot_l.position = Vec3::new(-s_a.foot.0, 2.0 + quick * -6.0, s_a.foot.2);
|
||||
next.foot_l.orientation = Quaternion::rotation_x(0.5 + slowersmooth * 0.2);
|
||||
next.torso.orientation = Quaternion::rotation_z(
|
||||
movement1 * 1.0 * (1.0 - movement3) + movement2 * -2.0 * PI,
|
||||
);
|
||||
|
||||
next.foot_r.position = Vec3::new(s_a.foot.0, 2.0 + quick * 6.0, s_a.foot.2);
|
||||
next.foot_r.orientation = Quaternion::rotation_x(0.5 - slowersmooth * 0.2);
|
||||
};
|
||||
next.foot_l.position = Vec3::new(
|
||||
-s_a.foot.0,
|
||||
s_a.foot.1 + movement1 * 7.0 * (1.0 - movement3),
|
||||
s_a.foot.2,
|
||||
);
|
||||
next.foot_l.orientation =
|
||||
Quaternion::rotation_x(movement1 * 0.8 * (1.0 - movement3));
|
||||
|
||||
next.foot_r.position = Vec3::new(
|
||||
s_a.foot.0,
|
||||
s_a.foot.1 + movement1 * -3.0 * (1.0 - movement3),
|
||||
s_a.foot.2,
|
||||
);
|
||||
next.foot_r.orientation =
|
||||
Quaternion::rotation_x(movement1 * -0.5 * (1.0 - movement3));
|
||||
},
|
||||
|
||||
_ => {},
|
||||
}
|
||||
|
||||
|
@ -1,4 +1,3 @@
|
||||
use hashbrown::HashSet;
|
||||
use lazy_static::lazy_static;
|
||||
use libloading::Library;
|
||||
use notify::{immediate_watcher, EventKind, RecursiveMode, Watcher};
|
||||
@ -148,7 +147,7 @@ pub fn init() {
|
||||
// "Debounces" events since I can't find the option to do this in the latest
|
||||
// `notify`
|
||||
thread::spawn(move || {
|
||||
let mut modified_paths = HashSet::new();
|
||||
let mut modified_paths = std::collections::HashSet::new();
|
||||
|
||||
while let Ok(path) = reload_recv.recv() {
|
||||
modified_paths.insert(path);
|
||||
|
@ -1275,7 +1275,7 @@ impl<'a> Widget for Diary<'a> {
|
||||
events.push(Event::UnlockSkill(skill));
|
||||
};
|
||||
// Bottom left skills
|
||||
let skill = Skill::Sword(SUnlockSpin);
|
||||
let skill = Skill::Sword(UnlockSpin);
|
||||
if create_skill_button(
|
||||
self.imgs.sword_whirlwind,
|
||||
state.skills_bot_l[0],
|
||||
@ -1708,7 +1708,7 @@ impl<'a> Widget for Diary<'a> {
|
||||
events.push(Event::UnlockSkill(skill));
|
||||
};
|
||||
// Bottom left skills
|
||||
let skill = Skill::Axe(LUnlockLeap);
|
||||
let skill = Skill::Axe(UnlockLeap);
|
||||
if create_skill_button(
|
||||
self.imgs.axespin,
|
||||
state.skills_bot_l[0],
|
||||
@ -2102,7 +2102,7 @@ impl<'a> Widget for Diary<'a> {
|
||||
events.push(Event::UnlockSkill(skill));
|
||||
};
|
||||
// Bottom left skills
|
||||
let skill = Skill::Hammer(LUnlockLeap);
|
||||
let skill = Skill::Hammer(UnlockLeap);
|
||||
if create_skill_button(
|
||||
self.imgs.hammergolf,
|
||||
state.skills_bot_l[0],
|
||||
|
@ -90,15 +90,15 @@ impl State {
|
||||
ToolKind::Sword => stat
|
||||
.skill_set
|
||||
.skills
|
||||
.contains_key(&Skill::Sword(skills::SwordSkill::SUnlockSpin)),
|
||||
.contains_key(&Skill::Sword(skills::SwordSkill::UnlockSpin)),
|
||||
ToolKind::Axe => stat
|
||||
.skill_set
|
||||
.skills
|
||||
.contains_key(&Skill::Axe(skills::AxeSkill::LUnlockLeap)),
|
||||
.contains_key(&Skill::Axe(skills::AxeSkill::UnlockLeap)),
|
||||
ToolKind::Hammer => stat
|
||||
.skill_set
|
||||
.skills
|
||||
.contains_key(&Skill::Hammer(skills::HammerSkill::LUnlockLeap)),
|
||||
.contains_key(&Skill::Hammer(skills::HammerSkill::UnlockLeap)),
|
||||
ToolKind::Bow => stat
|
||||
.skill_set
|
||||
.skills
|
||||
|
@ -1152,7 +1152,7 @@ impl Hud {
|
||||
300.0 - (display.timer as f64 - tweak!(2.0)) * tweak!(-300.0)
|
||||
} else {
|
||||
300.0
|
||||
};
|
||||
};
|
||||
Image::new(self.imgs.level_up)
|
||||
.w_h(328.0, 126.0)
|
||||
.mid_top_with_margin_on(ui_widgets.window, offset)
|
||||
|
@ -1073,7 +1073,7 @@ impl FigureMgr {
|
||||
},
|
||||
CharacterState::SpinMelee(s) => {
|
||||
let stage_progress = match active_tool_kind {
|
||||
Some(ToolKind::Sword) => {
|
||||
Some(ToolKind::Axe | ToolKind::Sword) => {
|
||||
let stage_time = s.timer.as_secs_f64();
|
||||
match s.stage_section {
|
||||
StageSection::Buildup => {
|
||||
|
Loading…
Reference in New Issue
Block a user