mirror of
https://gitlab.com/veloren/veloren.git
synced 2024-08-30 18:12:32 +00:00
Merge branch 'phoenix_tweaks' into 'master'
phoenix_tweaks See merge request veloren/veloren!4331
This commit is contained in:
commit
9031ac922a
@ -9,7 +9,7 @@ RapidMelee(
|
||||
knockback: 50,
|
||||
energy_regen: 0,
|
||||
),
|
||||
range: 3.5,
|
||||
range: 2.0,
|
||||
angle: 360,
|
||||
multi_target: Some(Normal),
|
||||
damage_effect: Some(Buff((
|
||||
|
@ -147,7 +147,14 @@ impl CharacterBehavior for Data {
|
||||
let length = rand::thread_rng().gen_range(
|
||||
self.static_data.summon_distance.0..=self.static_data.summon_distance.1,
|
||||
);
|
||||
|
||||
let extra_height =
|
||||
if self.static_data.summon_info.body == Object(FieryTornado) {
|
||||
15.0
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
let position =
|
||||
Vec3::new(data.pos.0.x, data.pos.0.y, data.pos.0.z + extra_height);
|
||||
// Summon in a clockwise fashion
|
||||
let ray_vector = Vec3::new(
|
||||
(summon_frac * 2.0 * PI).sin() * length,
|
||||
@ -158,16 +165,16 @@ impl CharacterBehavior for Data {
|
||||
// Check for collision on the xy plane, subtract 1 to get point before block
|
||||
let obstacle_xy = data
|
||||
.terrain
|
||||
.ray(data.pos.0, data.pos.0 + length * ray_vector)
|
||||
.ray(position, position + length * ray_vector)
|
||||
.until(Block::is_solid)
|
||||
.cast()
|
||||
.0
|
||||
.sub(1.0);
|
||||
|
||||
let collision_vector = Vec3::new(
|
||||
data.pos.0.x + (summon_frac * 2.0 * PI).sin() * obstacle_xy,
|
||||
data.pos.0.y + (summon_frac * 2.0 * PI).cos() * obstacle_xy,
|
||||
data.pos.0.z + data.body.eye_height(data.scale.map_or(1.0, |s| s.0)),
|
||||
position.x + (summon_frac * 2.0 * PI).sin() * obstacle_xy,
|
||||
position.y + (summon_frac * 2.0 * PI).cos() * obstacle_xy,
|
||||
position.z + data.body.eye_height(data.scale.map_or(1.0, |s| s.0)),
|
||||
);
|
||||
|
||||
// Check for collision in z up to 50 blocks
|
||||
@ -188,19 +195,11 @@ impl CharacterBehavior for Data {
|
||||
is_sticky: false,
|
||||
is_point: false,
|
||||
});
|
||||
let extra_height =
|
||||
if self.static_data.summon_info.body == Object(FieryTornado) {
|
||||
5.0
|
||||
} else {
|
||||
0.0
|
||||
};
|
||||
|
||||
let mut rng = rand::thread_rng();
|
||||
// Send server event to create npc
|
||||
output_events.emit_server(CreateNpcEvent {
|
||||
pos: comp::Pos(
|
||||
collision_vector - Vec3::unit_z() * obstacle_z + extra_height,
|
||||
),
|
||||
pos: comp::Pos(collision_vector - Vec3::unit_z() * obstacle_z),
|
||||
ori: comp::Ori::from(Dir::random_2d(&mut rng)),
|
||||
npc: NpcBuilder::new(stats, body, comp::Alignment::Owned(*data.uid))
|
||||
.with_skill_set(skill_set)
|
||||
|
@ -3000,6 +3000,7 @@ impl<'a> AgentData<'a> {
|
||||
enum ActionStateTimers {
|
||||
AttackTimer1,
|
||||
AttackTimer2,
|
||||
WaterTimer,
|
||||
}
|
||||
|
||||
let attack_timer_1 =
|
||||
@ -3053,7 +3054,20 @@ impl<'a> AgentData<'a> {
|
||||
// Flee from the ground! The internet told me it was lava!
|
||||
// If on the ground, jump with every last ounce of energy, holding onto
|
||||
// all that is dear in life and straining for the wide open skies.
|
||||
if self.physics_state.on_ground.is_some() {
|
||||
|
||||
// Don't stay in water
|
||||
if matches!(self.physics_state.in_fluid, Some(Fluid::Liquid { .. })) {
|
||||
agent.combat_state.timers[ActionStateTimers::WaterTimer as usize] = 2.0;
|
||||
};
|
||||
if agent.combat_state.timers[ActionStateTimers::WaterTimer as usize] > 0.0 {
|
||||
agent.combat_state.timers[ActionStateTimers::WaterTimer as usize] -= read_data.dt.0;
|
||||
if agent.combat_state.timers[ActionStateTimers::WaterTimer as usize] > 1.0 {
|
||||
controller.inputs.move_z = 1.0
|
||||
} else {
|
||||
// heat laser
|
||||
controller.push_basic_input(InputKind::Ability(3))
|
||||
}
|
||||
} else if self.physics_state.on_ground.is_some() {
|
||||
controller.push_basic_input(InputKind::Jump);
|
||||
} else {
|
||||
// Use a proportional controller with a coefficient of 1.0 to
|
||||
|
Loading…
Reference in New Issue
Block a user