mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'humanoid_ai_glide_when_falling' into 'master'
FIX #956: Humanoid ai glide when falling See merge request veloren/veloren!1772
This commit is contained in:
commit
e2290783fc
@ -48,6 +48,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
- Changed crafting recipes involving shiny gems to use diamonds instead.
|
- Changed crafting recipes involving shiny gems to use diamonds instead.
|
||||||
- Cave scatter now includes all 6 gems.
|
- Cave scatter now includes all 6 gems.
|
||||||
- Adjusted Stonework Defender loot table to remove mindflayer drops (bag, staff, glider).
|
- Adjusted Stonework Defender loot table to remove mindflayer drops (bag, staff, glider).
|
||||||
|
- Made humanoid NPCs use gliders (if equipped) when falling
|
||||||
- Changed default controller key bindings
|
- Changed default controller key bindings
|
||||||
- Improved network efficiency by ≈ factor 10 by using tokio.
|
- Improved network efficiency by ≈ factor 10 by using tokio.
|
||||||
- Added item tooltips to trade window.
|
- Added item tooltips to trade window.
|
||||||
|
@ -316,6 +316,9 @@ impl LoadoutBuilder {
|
|||||||
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
|
.glider(Some(Item::new_from_asset_expect(
|
||||||
|
"common.items.glider.glider_starter",
|
||||||
|
)))
|
||||||
.build(),
|
.build(),
|
||||||
Bandit => LoadoutBuilder::new()
|
Bandit => LoadoutBuilder::new()
|
||||||
.active_item(active_item)
|
.active_item(active_item)
|
||||||
@ -341,6 +344,9 @@ impl LoadoutBuilder {
|
|||||||
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
|
.glider(Some(Item::new_from_asset_expect(
|
||||||
|
"common.items.glider.glider_starter",
|
||||||
|
)))
|
||||||
.build(),
|
.build(),
|
||||||
CultistNovice => LoadoutBuilder::new()
|
CultistNovice => LoadoutBuilder::new()
|
||||||
.active_item(active_item)
|
.active_item(active_item)
|
||||||
@ -369,6 +375,9 @@ impl LoadoutBuilder {
|
|||||||
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
|
.glider(Some(Item::new_from_asset_expect(
|
||||||
|
"common.items.glider.glider_blue",
|
||||||
|
)))
|
||||||
.build(),
|
.build(),
|
||||||
CultistAcolyte => LoadoutBuilder::new()
|
CultistAcolyte => LoadoutBuilder::new()
|
||||||
.active_item(active_item)
|
.active_item(active_item)
|
||||||
@ -397,6 +406,9 @@ impl LoadoutBuilder {
|
|||||||
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
|
.glider(Some(Item::new_from_asset_expect(
|
||||||
|
"common.items.glider.glider_blue",
|
||||||
|
)))
|
||||||
.build(),
|
.build(),
|
||||||
Warlord => LoadoutBuilder::new()
|
Warlord => LoadoutBuilder::new()
|
||||||
.active_item(active_item)
|
.active_item(active_item)
|
||||||
@ -425,6 +437,9 @@ impl LoadoutBuilder {
|
|||||||
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
|
.glider(Some(Item::new_from_asset_expect(
|
||||||
|
"common.items.glider.glider_cultist",
|
||||||
|
)))
|
||||||
.build(),
|
.build(),
|
||||||
Warlock => LoadoutBuilder::new()
|
Warlock => LoadoutBuilder::new()
|
||||||
.active_item(active_item)
|
.active_item(active_item)
|
||||||
@ -453,6 +468,9 @@ impl LoadoutBuilder {
|
|||||||
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
0 => Some(Item::new_from_asset_expect("common.items.lantern.black_0")),
|
||||||
_ => None,
|
_ => None,
|
||||||
})
|
})
|
||||||
|
.glider(Some(Item::new_from_asset_expect(
|
||||||
|
"common.items.glider.glider_cultist",
|
||||||
|
)))
|
||||||
.build(),
|
.build(),
|
||||||
Villager => LoadoutBuilder::new()
|
Villager => LoadoutBuilder::new()
|
||||||
.active_item(active_item)
|
.active_item(active_item)
|
||||||
|
@ -166,6 +166,12 @@ impl<'a> System<'a> for Sys {
|
|||||||
alignment.copied()
|
alignment.copied()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
let glider_equipped = inventory.equipped(EquipSlot::Glider).as_ref().map_or(false, |item| {
|
||||||
|
matches!(item.kind(), comp::item::ItemKind::Glider(_))
|
||||||
|
});
|
||||||
|
|
||||||
|
let is_gliding = matches!(char_states.get(entity), Some(CharacterState::GlideWield) | Some(CharacterState::Glide)) && !physics_state.on_ground;
|
||||||
|
|
||||||
controller.reset();
|
controller.reset();
|
||||||
let mut event_emitter = event_bus.emitter();
|
let mut event_emitter = event_bus.emitter();
|
||||||
// Light lanterns at night
|
// Light lanterns at night
|
||||||
@ -374,7 +380,7 @@ impl<'a> System<'a> for Sys {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Put away weapon
|
// Put away weapon
|
||||||
if thread_rng().gen::<f32>() < 0.005 {
|
if thread_rng().gen::<f32>() < 0.005 && matches!(char_states.get(entity), Some(CharacterState::Wielding)) {
|
||||||
controller.actions.push(ControlAction::Unwield);
|
controller.actions.push(ControlAction::Unwield);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -384,7 +390,9 @@ impl<'a> System<'a> for Sys {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
controller.actions.push(ControlAction::Unwield);
|
if physics_state.on_ground {
|
||||||
|
controller.actions.push(ControlAction::Unwield);
|
||||||
|
}
|
||||||
|
|
||||||
// Sometimes try searching for new targets
|
// Sometimes try searching for new targets
|
||||||
if thread_rng().gen::<f32>() < 0.1 {
|
if thread_rng().gen::<f32>() < 0.1 {
|
||||||
@ -439,7 +447,7 @@ impl<'a> System<'a> for Sys {
|
|||||||
timer,
|
timer,
|
||||||
} => {
|
} => {
|
||||||
if let Some(body) = body {
|
if let Some(body) = body {
|
||||||
if body.can_strafe() {
|
if body.can_strafe() && !is_gliding { // Keep glider open if already gliding
|
||||||
controller.actions.push(ControlAction::Unwield);
|
controller.actions.push(ControlAction::Unwield);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1437,6 +1445,15 @@ impl<'a> System<'a> for Sys {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if glider_equipped && !physics_state.on_ground {
|
||||||
|
if let Some(velocity) = velocities.get(entity) {
|
||||||
|
// toggle glider when vertical velocity is above some threshold (here ~ glider fall vertical speed)
|
||||||
|
if velocity.0.z < -26.0 {
|
||||||
|
controller.actions.push(ControlAction::GlideWield);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if do_idle {
|
if do_idle {
|
||||||
agent.activity = Activity::Idle {
|
agent.activity = Activity::Idle {
|
||||||
bearing: Vec2::zero(),
|
bearing: Vec2::zero(),
|
||||||
|
Loading…
Reference in New Issue
Block a user