sound
This commit is contained in:
parent
82831eaa20
commit
cbc11a3997
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
data/scene.rgs
BIN
data/scene.rgs
Binary file not shown.
|
|
@ -1607,68 +1607,68 @@ function __wbg_get_imports() {
|
||||||
const ret = wasm.memory;
|
const ret = wasm.memory;
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper5083 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper5127 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 5140, __wbg_adapter_32);
|
const ret = makeMutClosure(arg0, arg1, 5178, __wbg_adapter_32);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper5084 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper5128 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 5140, __wbg_adapter_32);
|
const ret = makeMutClosure(arg0, arg1, 5178, __wbg_adapter_32);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper5085 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper5129 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 5140, __wbg_adapter_32);
|
const ret = makeMutClosure(arg0, arg1, 5178, __wbg_adapter_32);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper5086 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper5130 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 5140, __wbg_adapter_32);
|
const ret = makeMutClosure(arg0, arg1, 5178, __wbg_adapter_32);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper5087 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper5131 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 5140, __wbg_adapter_41);
|
const ret = makeMutClosure(arg0, arg1, 5178, __wbg_adapter_41);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper5088 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper5132 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 5140, __wbg_adapter_44);
|
const ret = makeMutClosure(arg0, arg1, 5178, __wbg_adapter_44);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper5089 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper5133 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 5140, __wbg_adapter_32);
|
const ret = makeMutClosure(arg0, arg1, 5178, __wbg_adapter_32);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper41469 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper41513 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36204, __wbg_adapter_49);
|
const ret = makeMutClosure(arg0, arg1, 36242, __wbg_adapter_49);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper42724 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper42768 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36823, __wbg_adapter_52);
|
const ret = makeMutClosure(arg0, arg1, 36861, __wbg_adapter_52);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper42725 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper42769 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36823, __wbg_adapter_55);
|
const ret = makeMutClosure(arg0, arg1, 36861, __wbg_adapter_55);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper42726 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper42770 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36823, __wbg_adapter_55);
|
const ret = makeMutClosure(arg0, arg1, 36861, __wbg_adapter_55);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper42727 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper42771 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36823, __wbg_adapter_55);
|
const ret = makeMutClosure(arg0, arg1, 36861, __wbg_adapter_55);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper42728 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper42772 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36823, __wbg_adapter_55);
|
const ret = makeMutClosure(arg0, arg1, 36861, __wbg_adapter_55);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper42729 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper42773 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36823, __wbg_adapter_55);
|
const ret = makeMutClosure(arg0, arg1, 36861, __wbg_adapter_55);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper42730 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper42774 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 36823, __wbg_adapter_55);
|
const ret = makeMutClosure(arg0, arg1, 36861, __wbg_adapter_55);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
imports.wbg.__wbindgen_closure_wrapper45025 = function(arg0, arg1, arg2) {
|
imports.wbg.__wbindgen_closure_wrapper45069 = function(arg0, arg1, arg2) {
|
||||||
const ret = makeMutClosure(arg0, arg1, 37316, __wbg_adapter_68);
|
const ret = makeMutClosure(arg0, arg1, 37354, __wbg_adapter_68);
|
||||||
return addHeapObject(ret);
|
return addHeapObject(ret);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Binary file not shown.
|
|
@ -1,3 +1,5 @@
|
||||||
|
use crate::msg::SoundMessage;
|
||||||
|
use crate::Game;
|
||||||
use crate::Player;
|
use crate::Player;
|
||||||
use fyrox::graph::SceneGraph;
|
use fyrox::graph::SceneGraph;
|
||||||
use fyrox::{
|
use fyrox::{
|
||||||
|
|
@ -22,7 +24,6 @@ use fyrox::{
|
||||||
},
|
},
|
||||||
script::{ScriptContext, ScriptTrait},
|
script::{ScriptContext, ScriptTrait},
|
||||||
};
|
};
|
||||||
use crate::Game;
|
|
||||||
|
|
||||||
impl_component_provider!(Swordman,);
|
impl_component_provider!(Swordman,);
|
||||||
uuid_provider!(Swordman = "a5671d19-9f1a-4286-8486-add4ebaadaec");
|
uuid_provider!(Swordman = "a5671d19-9f1a-4286-8486-add4ebaadaec");
|
||||||
|
|
@ -283,12 +284,12 @@ impl Swordman {
|
||||||
if dif_x < 0.0 {
|
if dif_x < 0.0 {
|
||||||
dif_x *= -1.0;
|
dif_x *= -1.0;
|
||||||
}
|
}
|
||||||
if player_position.y > enemy_rigid_body.global_position().y && dif_x < 1.0 {
|
if player_position.y > enemy_rigid_body.global_position().y && dif_x < 1.0 {
|
||||||
if player_position.x > enemy_rigid_body.global_position().x {
|
if player_position.x > enemy_rigid_body.global_position().x {
|
||||||
return SPEED * -1.0;
|
return SPEED * -1.0;
|
||||||
}
|
}
|
||||||
if player_position.x < enemy_rigid_body.global_position().x {
|
if player_position.x < enemy_rigid_body.global_position().x {
|
||||||
return SPEED;
|
return SPEED;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if enemy_rigid_body.global_position().x < END_MAP_LEFT + 3.0 {
|
if enemy_rigid_body.global_position().x < END_MAP_LEFT + 3.0 {
|
||||||
|
|
@ -346,6 +347,9 @@ impl Swordman {
|
||||||
if let Some(enemy_rigid_data) = enemy_rigid_body {
|
if let Some(enemy_rigid_data) = enemy_rigid_body {
|
||||||
enemy_rigid_data.set_lin_vel(Vector2::new(x_speed, -1.0));
|
enemy_rigid_data.set_lin_vel(Vector2::new(x_speed, -1.0));
|
||||||
}
|
}
|
||||||
|
if x_speed != 0.0 {
|
||||||
|
context.message_sender.send_global(SoundMessage::EnemyWalk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn animate_choose(&mut self, context: &mut ScriptContext) {
|
fn animate_choose(&mut self, context: &mut ScriptContext) {
|
||||||
|
|
|
||||||
|
|
@ -18,19 +18,24 @@ use fyrox::{
|
||||||
},
|
},
|
||||||
keyboard::{KeyCode, PhysicalKey},
|
keyboard::{KeyCode, PhysicalKey},
|
||||||
plugin::{Plugin, PluginConstructor, PluginContext, PluginRegistrationContext},
|
plugin::{Plugin, PluginConstructor, PluginContext, PluginRegistrationContext},
|
||||||
scene::{graph::Graph, Scene},
|
scene::{
|
||||||
|
graph::Graph,
|
||||||
|
Scene,
|
||||||
|
},
|
||||||
};
|
};
|
||||||
use std::path::Path;
|
use std::path::Path;
|
||||||
mod enemies;
|
mod enemies;
|
||||||
mod map;
|
mod map;
|
||||||
mod msg;
|
mod msg;
|
||||||
mod player;
|
mod player;
|
||||||
|
mod sound;
|
||||||
|
|
||||||
use enemies::archer::{enemy::Archer, spawn::ArcherSpawn};
|
use enemies::archer::{enemy::Archer, spawn::ArcherSpawn};
|
||||||
use enemies::swordsman::{enemy::Swordman, spawn::SwordmanSpawn};
|
use enemies::swordsman::{enemy::Swordman, spawn::SwordmanSpawn};
|
||||||
use map::build_map;
|
use map::build_map;
|
||||||
use msg::Message;
|
use msg::ScreenSizeMessage;
|
||||||
use player::Player;
|
use player::Player;
|
||||||
|
use sound::Sound;
|
||||||
|
|
||||||
const START_LEVEL: u32 = 1;
|
const START_LEVEL: u32 = 1;
|
||||||
pub struct GameConstructor;
|
pub struct GameConstructor;
|
||||||
|
|
@ -41,6 +46,7 @@ impl PluginConstructor for GameConstructor {
|
||||||
let script_constructors = &context.serialization_context.script_constructors;
|
let script_constructors = &context.serialization_context.script_constructors;
|
||||||
script_constructors.add::<Swordman>("Enemy");
|
script_constructors.add::<Swordman>("Enemy");
|
||||||
script_constructors.add::<Player>("Player");
|
script_constructors.add::<Player>("Player");
|
||||||
|
script_constructors.add::<Sound>("Sound");
|
||||||
}
|
}
|
||||||
|
|
||||||
fn create_instance(&self, scene_path: Option<&str>, context: PluginContext) -> Box<dyn Plugin> {
|
fn create_instance(&self, scene_path: Option<&str>, context: PluginContext) -> Box<dyn Plugin> {
|
||||||
|
|
@ -77,6 +83,7 @@ impl Game {
|
||||||
// *ui = result.unwrap();
|
// *ui = result.unwrap();
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
Self {
|
Self {
|
||||||
level_node: Handle::NONE,
|
level_node: Handle::NONE,
|
||||||
scene: Handle::NONE,
|
scene: Handle::NONE,
|
||||||
|
|
@ -144,7 +151,7 @@ impl Plugin for Game {
|
||||||
if let GraphicsContext::Initialized(ref graphics_context) = context.graphics_context {
|
if let GraphicsContext::Initialized(ref graphics_context) = context.graphics_context {
|
||||||
let window_size = graphics_context.window.inner_size();
|
let window_size = graphics_context.window.inner_size();
|
||||||
for script_scene in &context.script_processor.scripted_scenes {
|
for script_scene in &context.script_processor.scripted_scenes {
|
||||||
script_scene.message_sender.send_global(Message::Resize {
|
script_scene.message_sender.send_global(ScreenSizeMessage::Resize {
|
||||||
width: window_size.width,
|
width: window_size.width,
|
||||||
height: window_size.height,
|
height: window_size.height,
|
||||||
});
|
});
|
||||||
|
|
@ -154,7 +161,7 @@ impl Plugin for Game {
|
||||||
if let Event::WindowEvent { event, .. } = event {
|
if let Event::WindowEvent { event, .. } = event {
|
||||||
if let WindowEvent::Resized(size) = event {
|
if let WindowEvent::Resized(size) = event {
|
||||||
for script_scene in &context.script_processor.scripted_scenes {
|
for script_scene in &context.script_processor.scripted_scenes {
|
||||||
script_scene.message_sender.send_global(Message::Resize {
|
script_scene.message_sender.send_global(ScreenSizeMessage::Resize {
|
||||||
width: size.width,
|
width: size.width,
|
||||||
height: size.height,
|
height: size.height,
|
||||||
});
|
});
|
||||||
|
|
@ -185,13 +192,11 @@ impl Plugin for Game {
|
||||||
if self.scene.is_some() {
|
if self.scene.is_some() {
|
||||||
ctx.scenes.remove(self.scene);
|
ctx.scenes.remove(self.scene);
|
||||||
}
|
}
|
||||||
ctx
|
ctx.user_interface.send_message(WidgetMessage::visibility(
|
||||||
.user_interface
|
self.level_node,
|
||||||
.send_message(WidgetMessage::visibility(
|
MessageDirection::ToWidget,
|
||||||
self.level_node,
|
false,
|
||||||
MessageDirection::ToWidget,
|
));
|
||||||
false,
|
|
||||||
));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_scene_loaded(
|
fn on_scene_loaded(
|
||||||
|
|
@ -214,7 +219,9 @@ impl Plugin for Game {
|
||||||
|
|
||||||
let graph: &mut Graph = &mut context.scenes[self.scene].graph;
|
let graph: &mut Graph = &mut context.scenes[self.scene].graph;
|
||||||
let resource_manager: &ResourceManager = &context.resource_manager;
|
let resource_manager: &ResourceManager = &context.resource_manager;
|
||||||
|
|
||||||
build_map(graph, resource_manager, self.level);
|
build_map(graph, resource_manager, self.level);
|
||||||
|
Sound::new(graph);
|
||||||
if self.level == 1 {
|
if self.level == 1 {
|
||||||
SwordmanSpawn::new().spawn_enemy(graph, resource_manager, -5.0);
|
SwordmanSpawn::new().spawn_enemy(graph, resource_manager, -5.0);
|
||||||
}
|
}
|
||||||
|
|
@ -223,7 +230,7 @@ impl Plugin for Game {
|
||||||
}
|
}
|
||||||
let ui_ctx = &mut context.user_interface.build_ctx();
|
let ui_ctx = &mut context.user_interface.build_ctx();
|
||||||
|
|
||||||
self.level_node = GridBuilder::new(
|
self.level_node = GridBuilder::new(
|
||||||
WidgetBuilder::new().with_child(
|
WidgetBuilder::new().with_child(
|
||||||
TextBuilder::new(WidgetBuilder::new().with_foreground(Brush::Solid(Color::BLACK)))
|
TextBuilder::new(WidgetBuilder::new().with_foreground(Brush::Solid(Color::BLACK)))
|
||||||
.with_text(format!("Level: {}", self.level))
|
.with_text(format!("Level: {}", self.level))
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,14 @@
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
pub enum Message {
|
pub enum ScreenSizeMessage {
|
||||||
Resize {
|
Resize {
|
||||||
width: u32,
|
width: u32,
|
||||||
height: u32,
|
height: u32,
|
||||||
},
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone)]
|
||||||
|
pub enum SoundMessage {
|
||||||
|
PlayerWalk,
|
||||||
|
EnemyWalk,
|
||||||
|
PlayerAttack,
|
||||||
}
|
}
|
||||||
|
|
@ -1,6 +1,10 @@
|
||||||
use std::collections::VecDeque;
|
use std::collections::VecDeque;
|
||||||
|
|
||||||
use crate::msg::Message;
|
use crate::msg::ScreenSizeMessage;
|
||||||
|
use crate::msg::SoundMessage;
|
||||||
|
use crate::Archer;
|
||||||
|
use crate::Game;
|
||||||
|
use crate::Swordman;
|
||||||
use fyrox::graph::BaseSceneGraph;
|
use fyrox::graph::BaseSceneGraph;
|
||||||
use fyrox::{
|
use fyrox::{
|
||||||
core::{
|
core::{
|
||||||
|
|
@ -29,14 +33,11 @@ use fyrox::{
|
||||||
},
|
},
|
||||||
script::{ScriptContext, ScriptMessageContext, ScriptMessagePayload, ScriptTrait},
|
script::{ScriptContext, ScriptMessageContext, ScriptMessagePayload, ScriptTrait},
|
||||||
};
|
};
|
||||||
use crate::Game;
|
|
||||||
use crate::Swordman;
|
|
||||||
use crate::Archer;
|
|
||||||
|
|
||||||
const JUMP_HEIGHT: f32 = 6.0;
|
const JUMP_HEIGHT: f32 = 6.0;
|
||||||
const SPEED: f32 = 2.9;
|
const SPEED: f32 = 2.9;
|
||||||
|
|
||||||
#[derive(Visit, Reflect, Debug, Clone, Default)]
|
#[derive(Visit, Reflect, Debug, Default, Clone)]
|
||||||
pub struct Player {
|
pub struct Player {
|
||||||
sprite: Handle<Node>,
|
sprite: Handle<Node>,
|
||||||
move_left: bool,
|
move_left: bool,
|
||||||
|
|
@ -227,6 +228,9 @@ impl Player {
|
||||||
Some(rigid_data) => {
|
Some(rigid_data) => {
|
||||||
let x_speed = self.get_speed();
|
let x_speed = self.get_speed();
|
||||||
rigid_data.set_lin_vel(Vector2::new(x_speed, rigid_data.lin_vel().y));
|
rigid_data.set_lin_vel(Vector2::new(x_speed, rigid_data.lin_vel().y));
|
||||||
|
if x_speed != 0.0 && !self.is_in_fly(rigid_data) {
|
||||||
|
context.message_sender.send_global(SoundMessage::PlayerWalk);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
None => {}
|
None => {}
|
||||||
}
|
}
|
||||||
|
|
@ -332,6 +336,7 @@ impl Player {
|
||||||
Some(node) => node,
|
Some(node) => node,
|
||||||
None => return,
|
None => return,
|
||||||
};
|
};
|
||||||
|
context.message_sender.send_global(SoundMessage::PlayerAttack);
|
||||||
let self_position = self_node.global_position();
|
let self_position = self_node.global_position();
|
||||||
// Cast a ray from *this* node in the direction of the player node
|
// Cast a ray from *this* node in the direction of the player node
|
||||||
let mut buffer = Vec::<Intersection>::new();
|
let mut buffer = Vec::<Intersection>::new();
|
||||||
|
|
@ -364,17 +369,11 @@ impl Player {
|
||||||
parent = Some(d.parent());
|
parent = Some(d.parent());
|
||||||
}
|
}
|
||||||
if let Some(d) = parent {
|
if let Some(d) = parent {
|
||||||
let enemy_script = context
|
let enemy_script = context.scene.graph.try_get_script_of_mut::<Swordman>(d);
|
||||||
.scene
|
|
||||||
.graph
|
|
||||||
.try_get_script_of_mut::<Swordman>(d);
|
|
||||||
if let Some(enemy) = enemy_script {
|
if let Some(enemy) = enemy_script {
|
||||||
enemy.take_damage(&self.damage);
|
enemy.take_damage(&self.damage);
|
||||||
}
|
}
|
||||||
let enemy_script = context
|
let enemy_script = context.scene.graph.try_get_script_of_mut::<Archer>(d);
|
||||||
.scene
|
|
||||||
.graph
|
|
||||||
.try_get_script_of_mut::<Archer>(d);
|
|
||||||
if let Some(enemy) = enemy_script {
|
if let Some(enemy) = enemy_script {
|
||||||
enemy.take_damage(&self.damage);
|
enemy.take_damage(&self.damage);
|
||||||
}
|
}
|
||||||
|
|
@ -431,7 +430,7 @@ impl Player {
|
||||||
// If the new scale is different from the current scale, update the scale
|
// If the new scale is different from the current scale, update the scale
|
||||||
if health_bar_scale.x != new_health {
|
if health_bar_scale.x != new_health {
|
||||||
health_bar_transform.set_scale(Vector3::new(
|
health_bar_transform.set_scale(Vector3::new(
|
||||||
new_health ,
|
new_health,
|
||||||
// Don't change the y or z scale
|
// Don't change the y or z scale
|
||||||
health_bar_scale.y,
|
health_bar_scale.y,
|
||||||
health_bar_scale.z,
|
health_bar_scale.z,
|
||||||
|
|
@ -440,16 +439,16 @@ impl Player {
|
||||||
let mut nex_x = 0.03;
|
let mut nex_x = 0.03;
|
||||||
if new_health < 0.7 {
|
if new_health < 0.7 {
|
||||||
nex_x = 0.05
|
nex_x = 0.05
|
||||||
}
|
}
|
||||||
if new_health < 0.5 {
|
if new_health < 0.5 {
|
||||||
nex_x = 0.07
|
nex_x = 0.07
|
||||||
}
|
}
|
||||||
if new_health < 0.3 {
|
if new_health < 0.3 {
|
||||||
nex_x = 0.08
|
nex_x = 0.08
|
||||||
}
|
}
|
||||||
if new_health < 0.2 {
|
if new_health < 0.2 {
|
||||||
nex_x = 0.1
|
nex_x = 0.1
|
||||||
}
|
}
|
||||||
health_bar_transform.set_position(Vector3::new(nex_x, d.y, d.z));
|
health_bar_transform.set_position(Vector3::new(nex_x, d.y, d.z));
|
||||||
}
|
}
|
||||||
if self.health <= 0.0 {
|
if self.health <= 0.0 {
|
||||||
|
|
@ -512,7 +511,7 @@ impl ScriptTrait for Player {
|
||||||
fn on_start(&mut self, context: &mut ScriptContext) {
|
fn on_start(&mut self, context: &mut ScriptContext) {
|
||||||
context
|
context
|
||||||
.message_dispatcher
|
.message_dispatcher
|
||||||
.subscribe_to::<Message>(context.handle);
|
.subscribe_to::<ScreenSizeMessage>(context.handle);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn on_message(
|
fn on_message(
|
||||||
|
|
@ -521,7 +520,7 @@ impl ScriptTrait for Player {
|
||||||
_ctx: &mut ScriptMessageContext,
|
_ctx: &mut ScriptMessageContext,
|
||||||
) {
|
) {
|
||||||
// React to message.
|
// React to message.
|
||||||
if let Some(Message::Resize { width, height }) = message.downcast_ref::<Message>() {
|
if let Some(ScreenSizeMessage::Resize { width, height }) = message.downcast_ref::<ScreenSizeMessage>() {
|
||||||
self.window_height = height.clone();
|
self.window_height = height.clone();
|
||||||
self.window_width = width.clone();
|
self.window_width = width.clone();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,102 @@
|
||||||
|
use crate::msg::SoundMessage;
|
||||||
|
use fyrox::{
|
||||||
|
core::{
|
||||||
|
impl_component_provider, pool::Handle, reflect::prelude::*, uuid_provider,
|
||||||
|
visitor::prelude::*,
|
||||||
|
},
|
||||||
|
event::Event,
|
||||||
|
scene::{
|
||||||
|
base::BaseBuilder,
|
||||||
|
dim2::rigidbody::RigidBodyBuilder,
|
||||||
|
graph::Graph,
|
||||||
|
node::Node,
|
||||||
|
sound::{SoundBuffer, SoundBuilder, Status},
|
||||||
|
},
|
||||||
|
script::{ScriptContext, ScriptMessageContext, ScriptMessagePayload, ScriptTrait},
|
||||||
|
};
|
||||||
|
|
||||||
|
#[derive(Visit, Reflect, Debug, Default, Clone)]
|
||||||
|
pub struct Sound {
|
||||||
|
player_walk: Handle<Node>,
|
||||||
|
skeleton_walk: Handle<Node>,
|
||||||
|
player_attack: Handle<Node>,
|
||||||
|
}
|
||||||
|
|
||||||
|
uuid_provider!(Sound = "cc671d19-9f1a-4286-8486-add4ebaadaec");
|
||||||
|
|
||||||
|
impl Sound {
|
||||||
|
pub fn new(graph: &mut Graph) {
|
||||||
|
let sound = Sound::default();
|
||||||
|
RigidBodyBuilder::new(BaseBuilder::new().with_script(sound)).build(graph);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn new_sound(&self, ctx: &mut ScriptMessageContext, name: &str) -> Handle<Node> {
|
||||||
|
let mut path = "/mnt/23154027-2dd3-43ea-93f1-02a8df7a3c5a/projects/fyrox/platformer/assets/data/sounds/".to_owned();
|
||||||
|
path.push_str(name);
|
||||||
|
let walk_sound = ctx.resource_manager.request::<SoundBuffer>(path);
|
||||||
|
return SoundBuilder::new(BaseBuilder::new())
|
||||||
|
.with_buffer(Some(walk_sound))
|
||||||
|
.with_status(Status::Playing)
|
||||||
|
.with_play_once(true)
|
||||||
|
.with_gain(0.1)
|
||||||
|
.with_pitch(2.0)
|
||||||
|
.build(&mut ctx.scene.graph);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn play_sound(&self, ctx: &mut ScriptMessageContext, name: &str, handle: Handle<Node>) -> Option<Handle<Node>> {
|
||||||
|
let sound_body = ctx.scene.graph.try_get_mut(handle);
|
||||||
|
if let Some(sound) = sound_body {
|
||||||
|
if sound.as_sound().status() == Status::Stopped {
|
||||||
|
sound.as_sound_mut().set_status(Status::Playing);
|
||||||
|
}
|
||||||
|
return None;
|
||||||
|
}
|
||||||
|
return Some(self.new_sound(ctx, name));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl_component_provider!(Sound,);
|
||||||
|
|
||||||
|
impl ScriptTrait for Sound {
|
||||||
|
// Called once at initialization.
|
||||||
|
fn on_init(&mut self, _context: &mut ScriptContext) {
|
||||||
|
// context
|
||||||
|
// .resource_manager
|
||||||
|
// .request::<SoundBuffer>("/mnt/23154027-2dd3-43ea-93f1-02a8df7a3c5a/projects/fyrox/platformer/assets/data/sounds/player_walk.ogg");
|
||||||
|
}
|
||||||
|
|
||||||
|
// Put start logic - it is called when every other script is already initialized.
|
||||||
|
fn on_start(&mut self, context: &mut ScriptContext) {
|
||||||
|
context
|
||||||
|
.message_dispatcher
|
||||||
|
.subscribe_to::<SoundMessage>(context.handle);
|
||||||
|
}
|
||||||
|
|
||||||
|
fn on_message(
|
||||||
|
&mut self,
|
||||||
|
message: &mut dyn ScriptMessagePayload,
|
||||||
|
ctx: &mut ScriptMessageContext,
|
||||||
|
) {
|
||||||
|
if let Some(SoundMessage::PlayerWalk) = message.downcast_ref::<SoundMessage>() {
|
||||||
|
if let Some(sound) = self.play_sound(ctx, "player_walk.ogg", self.player_walk) {
|
||||||
|
self.player_walk = sound;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(SoundMessage::EnemyWalk) = message.downcast_ref::<SoundMessage>() {
|
||||||
|
if let Some(sound) = self.play_sound(ctx, "skeleton_walk.ogg", self.skeleton_walk) {
|
||||||
|
self.skeleton_walk = sound;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if let Some(SoundMessage::PlayerAttack) = message.downcast_ref::<SoundMessage>() {
|
||||||
|
if let Some(sound) = self.play_sound(ctx, "player_sword.ogg", self.player_attack) {
|
||||||
|
self.player_attack = sound;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Called whenever there is an event from OS (mouse click, keypress, etc.)
|
||||||
|
fn on_os_event(&mut self, _event: &Event<()>, _context: &mut ScriptContext) {}
|
||||||
|
|
||||||
|
// Called every frame at fixed rate of 60 FPS.
|
||||||
|
fn on_update(&mut self, _context: &mut ScriptContext) {}
|
||||||
|
}
|
||||||
926
settings.ron
926
settings.ron
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue